2011-01-04 4 views
1

Comment vous comporteriez-vous pour insérer plusieurs lignes dans une base de données si certains champs contenaient des données? Considérez ce qui suit:Insérer plusieurs lignes dans la base de données mysql

register_case = mysql_query ("INSERT INTO cases VALUES 
           ('$case','$p_firstname','$p_lastname','$city'), 
           ('$case','$p2_firstname','$p2_lastname','$city'), 
           ('$case','$p3_firstname','$p3_lastname','$city')" 
          ); 

Cela crée plusieurs lignes avec différents noms et prénoms, mais le cas et la ville restent les mêmes. Cependant, dans le cas où il n'y a qu'une seule entrée, une ligne est toujours créée pour l'autre. Comment est-il possible de créer une rangée seulement s'il y a des données présentes dans un champ donné?

+0

Construire cette requête dynamiquement, en utilisant l'opérateur conditionnel? –

Répondre

0

Vous pouvez essayer un si le cas qui vient faire quelque chose comme:

if (isset($field)) do thisquery 

ou

if ($field != "") do thatquery 
0

Je suppose que ce serait prendre une forme d'information? Si oui, nommez les entrées comme "name =" firstname [] "", ce qui les placera dans un tableau quand soumis, comme $ _POST ["prénom"] [0], donc si vous aviez 3 entrées nommées prénom [] alors vous obtiendriez $ _POST ['prénom'] [0], $ _ POST ['prénom'] [1], et $ _POST ['prénom'] [2].

faire quelque chose comme ceci:

$sql = 'INSERT INTO `cases` VALUES '; 

for($i = 0;$i < count($_POST['firstname']);$i++) 
{ 
    $sql .= "('$case','".$_POST['firstname'][$i]."','".$_POST['lastname'][$i]."','$city')"; 
    if($i != count($_POST['firstname']) - 1) 
    { 
     $sql .= ','; //Will insert a comma after each except the last. Count - 1 since $i will equal count - 1 on the last one, since it starts at 0 and not 1. 
    } 
} 

$register_case = mysql_query($sql); 

Je pense que cela devrait fonctionner. Vous pouvez également faire un foreach et ajouter un ',' sur chacun d'entre eux, puis le couper de l'extrémité droite de la chaîne lorsque vous avez terminé, ou faire un foreach et conserver un compteur externe qui s'incrémente manuellement après la fin. À la réflexion, aucun d'entre eux n'attraperait les noms de famille, sans faire une chose de type $ key => $ value, et en faisant $ _POST ['lastname'] [$ key]. Peut-être aussi besoin de vérifier les chaînes vides avec un if.

Bien sûr, vous ne voulez jamais passer directement les valeurs $ _POST ou $ _GET à SQL, validez d'abord et assurez-vous qu'il n'y a pas d'injection.

+0

OMG injection dans la réponse –

+0

Si vous faisiez attention, vous verriez que j'ai mentionné qu'il ne voudrait pas le faire comme ça, mais c'était plus facile pour moi sans taper une fonction de validation d'entrée, en utilisant array_map ou quoi vous pour le mettre en service, puis en expliquant ce que j'ai fait. – Phoenix

Questions connexes