Onderstaande code heb ik op internet gevonden en werkt voor mij doeltreffend om meerdere records te wijzigen of in te voeren met 1 submit. De submit knop heet knpInsert_ en elk veldnaam eindigt op _$Id. $Id is het sleutelveld uit de tabel en maakt elk veld op het formulier uniek.
Nu wil ik onderstaande code aanpassen om weer een doel te bewerkstelligen. Door fouten die ontstaan wil ik snappen wat de code doet. Per regel heb ik beschreven wat de regel doet.
Op 3 plaatsen kom ik er niet uit kan iemand mij uitleggen wat de code doet of waarom het stukje code daar noodzakelijk is.
Het gaat om :
1. de variabele $vreemd :
Vreemd is dat de naam van de variabele nergens meer wordt toegepast. Waar heeft de variabele $vreemd betrekking op ? Het kan nl. niet worden verwijderd.
2. Wat betekent = $fldvalue achter de variabele $multip_array[ ? Is dat de waarde die aan de twee indexen hangt ?
3. Met de eerste foreach($id as $key => $value) wordt een array doorlopen waarin resp. de veldnaam en waarde wordt teruggegeven.
Waarom moet een voorwaarde volgen met verwijzing naar een willekeurig veldnaam van het formulier incl. de foreach loop die hierna volgt ?
Heeft dat te maken met het feit dat knpInsert_ niet in de loop van records zit en alle andere velden op het formulier wel ?
Ik hoop dat de code jullie voldoende zegt het wordt nl. geïnclude in diverse formulieren waarbij wijzigingen over meerdere records in 1 keer wordt opgeslagen. (geupdate of hier geïnsert). Opbouw van het formulier (html) komt dus niet voor in dit script
<code>
<?php
function getNaamFromKey($string) { // functie om de naam te scheiden uit een string ($string)
$breek_naam = explode('_', $string); // variabele met daarin stukken string die zijn gescheiden per karakter '_'. De stukken string worden in een array geplaatst.
return $breek_naam[0]; // Geeft de eerste string uit de array terug
}
function getIdFromKey($string) { // functie om het Id te scheiden uit een string ($string)
$breek_Id = explode('_', $string); // variabele met daarin stukken string die zijn gescheiden per karakter '_'. De stukken string worden in een array geplaatst.
return $breek_Id[1]; // Geeft de tweede string uit de array terug
}
$vreemd = array(); // Variabele die een array aanlegd. Vreemd is dat de naam van de variabele nergens meer wordt toegepast. Waar dit direct op betrekking heeft weet ik niet, het kan i.i.g. niet worden verwijderd !
foreach($_POST as $fldname => $fldvalue) { // Voor elke post die wordt doorlopen wordt de veldnaam en de waarde teruggeven als een array
echo $fldname.'='.$fldvalue.' '."<br/>";
$multip_array[getIdFromKey($fldname)][getNaamFromKey($fldname)] = $fldvalue; // Opbouwen van een Multidimensional array met 2 indexen. [Id] [naamveld] en een waarde nl. de veldwaarde.
}
echo "<br/>";
foreach($multip_array as $id) { // Doorloopt de Multidimensional array en geeft de inhoud (een array) terug. De eerste van de twee indexen wordt doorlopen nl. het Id van een record. Het resultaat kan niet worden geëchod hooguit print_r. Hiermee zie je hoe de array is opgebouwd. print_r($id)."<br/>"."<br/>";
echo "<br/>";
foreach($id as $key => $value) { //Doorlopen van de array met de tweede index nl. de veldnaam en geeft de naam (als index) en waarde van het veld terug
echo $key.'='.$value.' '."<br/>"; // Per id krijg je nu alle veldennamen met hun waarde terug.
if ($key == 'txtId' ) { ?> Vraag uit beschrijving : Waarom deze voorwaarde met verwijzing naar een willekeurig veldnaam van het formulier incl. de foreach loop die hierna volgt ?
<?php
foreach($id as $key => $value) {
echo 'als ...'.$key."<br/>";
if ($key == 'txtId' ) { $updId = $value; }
if ($key == 'txtgebdm' ) { $dag = date_create($value); $flddag = date_format($dag, 'Y-m-d');
}
if ($key == 'txtlevgeb' && !empty($value)) { $fldlevnr = $value; }
else if ($key == 'txtlevgeb' && empty($value)) { $fldlevnr = 'NULL' ; }
if ($key == 'kzlras' && !empty($value)) { $fldras = $value; }
else if ($key == 'kzlras' && empty($value)) { $fldras = 'NULL' ; }
}
// Insert tbl
$insert_tbl = "INSERT INTO tbl ..... " ;
mysqli_query($db,$insert_tbl) or die (mysqli_error($db));
// Einde Insert tbl
}
}
}
?>
</code>
2.333 views