2017-09-06 3 views
0

J'ai un formulaire qui soumet plusieurs entrées, et doit être capable de combiner ces entrées dans une seule instruction SQL. Lorsque le bouton Submit est cliqué, le « prenom », « nom », etc. obtenir mis dans leurs propres tableaux, j'ai donc quelque chose comme ceci:Comment combiner plusieurs tableaux à partir d'une soumission de formulaire (PHP)?

$firstname = array(
'1' => john, 
'2' => mike, 
'3' => pete 
); 

$lastname = array(
'1' => smith, 
'2' => jones, 
'3' => ross 
); 

Je veux combiner ceux-ci d'avoir une sortie de

"John Smith, Mike Jones, Pete Ross" (peut-être un troisième tableau?) pour que je puisse faire une requête SQLSRV comme

"INSERT INTO database_table 
(firstname, lastname) 
Values ($firstnames, $lastnames)" 

Pardonne ma syntaxe, il a été une longue journée et que je suis battre ma tête contre le mur en essayant de comprendre cela (plus je suis un newb).

+0

Pourquoi doivent-ils être dans une requête? Chaque rangée dans la base de données devrait être sa propre requête, peut-être sur une boucle pour être dynamique. Vous pouvez boucler les paramètres de liaison à votre requête afin que tous les inserts soient exécutés en même temps. Vous devriez certainement utiliser des déclarations préparées. – GrumpyCrouton

Répondre

1

Vous devrez déterminer le nombre de paires de valeurs que vous prévoyez d'insérer, puis générer le nombre approprié. Voici un exemple de base (s'il vous plaît ne pas utiliser ce exactement comme cela vous laisse vulnérable à l'injection SQL):

$firstname = array(
    '1' => john, 
    '2' => mike, 
    '3' => pete 
); 

$lastname = array(
    '1' => smith, 
    '2' => jones, 
    '3' => ross 
); 

$query = ' 
    INSERT INTO database_table (firstname, lastname) 
    VALUES 
'; 
$value_array = array(); 

foreach ($firstname as $index => $value) { 
    $value_array[] = sprintf('("%s","%s")', $value, $lastname[$index]); 
} 

$query .= implode(', ', $value_array); 

echo $query; 

Exemple: https://eval.in/856592

Ce que vous devez faire est d'utiliser quelque chose comme ci-dessus pour générer des chaînes pour une utilisation avec des instructions préparées telles que:

foreach ($firstname as $index => $value) { 
    $value_array[] = sprintf('(?, ?)'); 
} 

puis lier les paramètres appropriés après dans une autre boucle. C'est beaucoup plus sécurisé.

En savoir plus sur les instructions préparées: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Ou encore mieux: http://php.net/manual/en/pdo.prepared-statements.php

+0

Je vous remercie beaucoup, étant un newb, je n'ai pas mélangé les tableaux avec précision, et je n'ai pas du tout travaillé avec sprintf(). Je devrais être capable de faire quelque chose avec cette fondation que vous avez exposée, merci! – ddub74012