2016-04-30 5 views
0

Ich habe ein Formular, das einige grundlegende Fragen zu einem Job stellt, und fragt dann die Person, die alle Kollegen auflistet, die zu der Zeit bei ihnen waren . Ich möchte, dass alle Kollegen eine Zeile in die Datenbank eingeben - also bleiben alle anderen Details gleich, mit Ausnahme ihrer Arbeits-ID (die die Kennung der Person darstellt). Mein Code unten scheint mit dem workID Feld 1 Reihe zum db einreichen leerSo geben Sie mehrere Zeilen in mySQL aus Formulardaten ein, wo sich ein Feld ändert

<?php 
require_once('includes/dbconnect.php'); 

$varWorkID = $_POST['workid']; 
$varDate = $_POST['date']; 
$varType = $_POST['type']; 
$varSuper = $_POST['supervisor']; 
$varReference = $_POST['reference']; 

//Remove last part of array as extra 1 sent through by form 
$workID = array_pop($varWorkID); 

for ($i=0; $i < count($workID); $i++) 
{ 
    mysqli_query($conn,"INSERT INTO searches (workid,date,type,super,reference) VALUES('".$workID."','".$varDate."','".$varType."','".$varSuper."','".$varReference."')"); 
} 
echo "Completed"; 

Ich glaube, ich bin ziemlich nahe, aber ich brauche nur workid zu bekommen für jede der mit jedem der Arbeits IDs gefüllt werden Mitarbeiter anwesend.

Jede Hilfe sehr geschätzt

+0

Dieser Code ist extrem anfällig für SQL Injection. Erwägen Sie die Verwendung vorbereiteter Anweisungen –

+1

Do 'var_dump ($ varWorkID);' und sehen, was Sie bekommen. –

+0

'array (3) {[0] => string (5)" AB123 "[1] => string (5)" CD456 "[2] => string (0)" "}' – JJMillwall

Antwort

1

das Problem hier ist, dass Sie $workID = array_pop($varWorkID); sind anruft, bevor Sie in die Schleife gehen for ($i=0; $i < count($workID); $i++), so der PHP-Interpreter denkt, dass Sie wollen einfach nur über die Länge des einen Elements iterieren. was Sie eigentlich tun wollten, war ein Element aus dem Array innerhalb der Schleife Pop.

<?php 
require_once('includes/dbconnect.php'); 

$varWorkID = $_POST['workid']; 
$varDate = $_POST['date']; 
$varType = $_POST['type']; 
$varSuper = $_POST['supervisor']; 
$varReference = $_POST['reference']; 


// iterate over the count of the whole array $varWorkID = $_POST['workid'] 
for ($i=0; $i < count($varWorkID); $i++) 
{ 
    // now pop off the array inside the loop 
    //Remove last part of array as extra 1 sent through by form 
    $workID = array_pop($varWorkID); 
    mysqli_query($conn,"INSERT INTO searches (workid,date,type,super,reference) VALUES('".$workID."','".$varDate."','".$varType."','".$varSuper."','".$varReference."')"); 
} 
echo "Completed"; 

jetzt denke ich @Dima Fitiskin's comment einen besseren Ansatz schlägt vor, weil Sie nicht wirklich $workID die Kosten der Aufruf einer anderen Funktion array_pop oder werfen eine andere Variable auf dem Stapel benötigen, wenn Sie bereits einen iterativen Bezug auf den Index erhielt $i innerhalb der Schleife.

<?php 
require_once('includes/dbconnect.php'); 

$varWorkID = $_POST['workid']; 
$varDate = $_POST['date']; 
$varType = $_POST['type']; 
$varSuper = $_POST['supervisor']; 
$varReference = $_POST['reference']; 


// iterate over the count of the whole array $varWorkID = $_POST['workid'] 
for ($i=0; $i < count($varWorkID); $i++) 
{ 
    mysqli_query($conn,"INSERT INTO searches (workid,date,type,super,reference) VALUES('".$varWorkID[$i]."','".$varDate."','".$varType."','".$varSuper."','".$varReference."')"); 
} 
echo "Completed"; 
+0

Danke Jeff! Das hat den Trick gemacht – JJMillwall

Verwandte Themen