id's halen uit input name attribuut met str_split

Status
Niet open voor verdere reacties.

darkmouse

Gebruiker
Lid geworden
12 apr 2009
Berichten
15
Hallo,

Met behulp van een switch statement genereer ik input velden binnen een formulier "productForm".

Code:
switch ($row['Par_Type']){
case text:

while ( $opt = mysql_fetch_array($resultHaalOptions, MYSQL_BOTH)){
print "<input type=\"".$row['Par_Type']."\" name=\"".$row['Par_Name'].":".$row['Par_ID'].":".$opt['Opt_ID']."\" value=\"" .$row['Opt_Value']. "\" onChange='document.getElementById(\"productForm\").submit();'>";
}
break;


Dit komt er dan bijvoorbeeld uit:


Code:
<input type="text" name="OnvKosten:10:32" value="" onChange='document.getElementById("productForm").submit();'>


De volgende stap is het opslaan van de gegevens. Deze gegevens bestaan uit een aantal onderdelen.
1. de value (geen probleem).
2. een parent en een option ID (wel een probleem).

Deze Par_ID en Opt_ID stuur ik nl mee met het name attribuut van het input veld.

Als ik op de normale (bij mij bekende manier) een formulier verwerk, kom ik er niet uit.

Voorbeeld:

Code:
if($_SERVER['REQUEST_METHOD'] == 'POST' &&isset($_POST['Product:1:1']))
{
$OnvKosten = $_POST['OnvKosten:10:32'];

}

Nu wil ik graag het stukje 'OnvKosten:10:32' splitten en de onderdelen in afzonderlijke variabelen kunnen stoppen. Ik vermoed iets met een str_split of explode, maar ik kom er niet uit.

Iemand een idee?
 
PHP:
$naam = 'OnvKosten:10:32';
$parts = explode ( ':', $naam );
var_dump ( $parts );

Dan krijg je in $parts:
PHP:
array ( 0 => 'OnvKosten', 1 => '10', 2 => '32' );

Heb je daar wat aan?
 
Zeker, maar hoe krijg ik de naam van de post (dus het stuk tusen de rechte haken) in een variable $naam

dus van:

$OnvKosten = $_POST['OnvKosten:10:32'];

naar:

$naam = 'OnvKosten:10:32';

het gaat hier dus naast de waarde die de post meegeeft ook om het name attribuut omdat ik meerdere waarde uit de post wil trekken. Ik kan ze niet met het value attribuut van het input veld meesturen omdat ik die overschijf als ik iets invul via het formulier.
 
Ik snap sowieso niet echt waarom je een variabel name-attribuut hebt. Je maakt het jezelf erg moeilijk.

Waarom stop je die waarde (de name) niet gewoon in een hidden-input, en dan kun je het invuldveld gewoon een vaste naam geven.
 
Je maakt het jezelf idd wel lastig :) Wat je dus wil is de key van de array pakken en die in een var stoppen... de enige handige optie is om via foreach eroverheen te lopen.

PHP:
foreach ( $_POST as $key => $value ) {
  // $key is nu 'OnvKosten:10:32' en $value is de waarde die de gebruiker meestuurt.
}
 
Ja, dan moet je nog in de loop voor elke key middels een regex of string functies gaan kijken of je de juiste key te pakken hebt etc.

Misschien kan de TS ons even vertellen wat de bedoeling hiervan eigenlijk precies is, misschien is er wel een eenvoudiger oplossing.
 
Yep,

het is idd een lastige klus!

Ik schrijf de informatie weg in verschillende tabellen die later als filter voor het tonen van opties gaan werken. De opties zijn dus variabel en ik weet niet altijd van te voren welke inputs in m'n formulier zitten. Dit zal ik dus moeten controleren en vervolgens de waarden moeten wegschrijven met een sql statement. Ook variabel? ja!, want ik wil nietr elke optie wegschrijven, alleen een optie met een ingevoerde waarde!

Ik moet i.i.g. uit een input veld naast de value (en dat kan een reeds gedefinieerde waarde zijn, maar ook iets wat je invult) ook de Par_ID en de Opt_ID wegschrijven samen met een Product_ID (ik ben namenlijk aan een Product opties aan het toevoegen).
Het wegschrijven gebeurd in een drietal tabellen te weten:
- Product
- HuidigeOpties
- HuidigeAttributen

In elke tabel schrijf het Product_ID en vervolgens de optie-parent, de optie, het optie-attribuut en de meegegeven optiewaarde.

bijv:

tbl_HuidigeAttributen

HuidAtt_ID | Prod_ID | Opt_Par_ID | Att_ID | Att_Value

hierin schrijf ik dan b.v. weg:

(autonr) | 53 | 3 | 7 | achterdeur
 
Okay,

Ik heb het voorlopig zo opgelost:

Code:
case select:
			
			print "<input type=\"hidden\" name=\"".$row['Par_Name']."_ParIDs\" value=\"".$row['Par_ID']."\">\n";
			print "<SELECT name=\"".$row['Par_Name']."\" id=\"keuzelijst\">\n";
				
			while ( $opt = mysql_fetch_array($resultHaalOptions, MYSQL_BOTH))
			{
				print "	<option	name=\"".$row['Par_Name']."_OptIDs\" value=\"".$opt['Opt_ID']."\">".$opt['Opt_Value']."</option>\n";
			}
			
			print "</select>";
			 
		break;

Met hidden fields dus en de Opt_ID en Par_ID uit elkaar gehaald.

Dit kan ik ook goed opvangen en wegschrijven.

E.e.a. betekent wel dat ik heel veel variabelen moet opvangen...

wordt vervolgd!
 
Okay, was ik weer!

De hidden field oplossing werkt uiteindelijk niet voor mij, omdat de velden kunnen verschillen per situatie.

De oplossing van Frats werkt fantastisch! (THANX!):

Code:
foreach ( $_POST as $key => $value ) {

  $parts = explode ( ':', $key );
										
  $ParID = $parts[0];
  $OptID = $parts[1];
  $OptVal = $value;

 
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan