2010-10-13 5 views
0

J'ai un formulaire de sortie dynamique où les champs de saisie de texte ont le même nom. Je dois parcourir les entrées de texte et insérer plusieurs lignes dans la base de données pour chaque entrée de champ de texte.Boucle traversant le tableau d'entrée de formulaire

$sql="INSERT INTO orderitems (orderNum,productNum,quant) 
     VALUES 
    ('$num1','$_POST[pNum]','$_POST[quant]')"; 


<input type="text" name="pNum" value="<?php echo $t1; ?>"> //may have several with same name 
+0

Vous doit donner un nom aux champs comme 'pNUm []', sinon PHP ne peut pas gérer plusieurs champs avec le même nom. Jetez un oeil ici: http://php.net/manual/fr/language.variables.external.php –

Répondre

1

Soooo .... faites-les défiler et insérez plusieurs lignes?

for ($i = 0; $i < count($_POST['pNum']); $i++) { 
    $sql = 'INSERT INTO orderitems (orderNum, productNum, quant) VALUES (' 
     . "'" . mysql_real_escape_string($num1) . "', " 
     . "'" . mysql_real_escape_string($_POST['pNum'][$i]) . "', " 
     . "'" . mysql_real_escape_string($_POST['quant'][$i]) . "'" 
     . ')'; 
} 

Notez l'utilisation de mysql_real_escape_string. Jamais, JAMAIS, NE JAMAIS injecter des valeurs de $_POST ou $_GET ou $_COOKIE ou toute autre valeur que votre utilisateur a fourni directement dans une instruction SQL. Outre le potentiel de rupture si la valeur contient un ', cela peut également être utilisé avec malveillance pour injecter SQL qui modifie (ou efface) votre base de données.

+0

La demande dans une boucle est mauvaise, vous pouvez insérer plusieurs lignes avec une seule requête INSERT. – MatTheCat

+0

Ce n'est pas si grave. Pour les petits ensembles de données, la complexité supplémentaire d'essayer de générer un seul 'INSERT' n'en vaut pas la peine. – VoteyDisciple

+0

Merci pour votre réponse, pour une raison quelconque, cela ne fait que sélectionner le dernier champ de saisie et l'insérer deux fois. Des idées? – cam

1

Si vous voulez soumettre votre formulaire avec plusieurs entrées avec le même nom, vous devez ajouter [] au nom . Ensuite, vous pouvez l'utiliser sur PHP côté comme chaque tableau (c.-à-boucle avec foreach)

<input type="text" name="pNum[]" value="<?php echo addslashes($t1); ?>"> (en passant, rappelez-vous toujours de citer)

et sur le côté PHP:

foreach($_POST['pNum'] as $value) 
{ 
    // remember about quoting here, too 
}