2016-11-09 1 views
-1

Ich habe ein PHP-Programm geschrieben, das eine MySQL-Datenbank abfragen soll, um Dropdown-Listen zu füllen, und Auswahlmöglichkeiten zum Einfügen von Werten in eine dritte Tabelle bietet. Es funktioniert fast, aber anstatt die Werte in einen Datensatz einzufügen, fügt es sie separat ein, obwohl es eine Abfrage ist. Wie behebe ich das?PHP aus MySQL-Tabellen auswählen und in einer anderen Tabelle speichern

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 
<body> 
<?php // add-order.php 
date_default_timezone_set("Australia/Adelaide"); 
$datetry= date("Y/m/d"); 
echo "today's date is ".$datetry."<br>"; 
require_once 'login.php'; 
$conn = new mysqli($hn, $un, $pw, $db); 
if ($conn->connect_error) die($conn->connect_error); 
$query="SELECT * FROM customers"; 
$result=$conn->query($query); 
if (!$result) die($conn->error); 
$rows = $result->num_rows; 
for ($j = 0 ; $j < $rows ; ++$j) 
{ 
$result->data_seek($j); 
$row = $result->fetch_array(MYSQLI_NUM); 
$Customers[$j][0] = $row[0]; 
$Customers[$j][1]= $row[1]; 
$Customers[$j][2]= $row[2]; 
} 
?> 
<form action="add-order.php" method ="post"> 
<select name="choice"> 
<option selected="selected">Choose a customer</option> 
<?php 
for ($j = 0 ; $j < $rows ; ++$j){ 
?> 
<option value="<?php echo $Customers[$j][0]; ?>"><?php echo $Customers[$j][1]; ?></option> 
<?php 
} 
?> 
</select> 
<input type="submit" value="submit"> 
</form> 
<?php 
$result->close(); 
//products array 
$queryp="SELECT * FROM products"; 
$resultp=$conn->query($queryp); 
if (!$resultp) die($conn->error); 
$rows = $resultp->num_rows; 
for ($j = 0 ; $j < $rows ; ++$j) 
{ 
$resultp->data_seek($j); 
$row = $resultp->fetch_array(MYSQLI_NUM); 
$Products[$j][0] = $row[0]; 
$Products[$j][1]= $row[1]; 
} 
?> 
<form action="add-order.php" method ="post"> 
<select name="choice1"> 
<option selected="selected1">Choose a product</option> 
<?php 
for ($j = 0 ; $j < $rows ; ++$j){ 
?> 
<option value="<?php echo $Products[$j][0]; ?>"><?php echo $Products[$j][1]; 
?></option> 
<?php 
} 
?> 
</select> 
<input type="submit" value="submit"> 
</form> 
<?php 
$resultp->close(); 
$PresentCustomer = $_POST['choice']; 
echo $PresentCustomer; 
$PresentProduct = $_POST['choice1']; 
echo $PresentProduct; 
$queryO = "INSERT INTO orders VALUES('','$PresentCustomer', '$PresentProduct','$datetry')"; 
$resultO = $conn->query($queryO); 
if (!$resultO) echo "INSERT failed: $query<br>" . 
$conn->error . "<br><br>"; 
$resultO->close(); 
$conn->close(); 
?>  
</body> 
</html> 
+0

Sie geben niemals die Spalten an, in die die Daten eingefügt werden sollen. 'INSERT INTO Tabelle (Cola, Colb usw.) VALUES ('val1', 'val2' usw.)' – Xorifelse

+0

@Xorifelse Sie müssen die Spalten nicht angeben, wenn die Werteliste Werte für alle Spalten in ihrer nominalen Reihenfolge enthält. – Shadow

+0

@Shadow Ganz richtig, aber was passiert, wenn das nicht der Fall ist? – Xorifelse

Antwort

0

Die zwei Dropdown-Boxen sind in separaten HTML-Formularen mit separaten Senden-Schaltflächen. Meine Vermutung ist, dass Sie den Kunden auswählen, drücken Sie die Senden-Schaltfläche, wählen Sie ein Produkt und drücken Sie die andere Senden-Schaltfläche. Dies sind 2 separate Submits, daher werden 2 separate Inserts ausgeführt.

Ganz zu schweigen davon, dass Sie Benutzereingaben vor dem Einfügen nicht überprüfen, so dass die Einfügung ausgeführt wird, auch wenn Sie die Seite laden, und Ihr Code ist auch vollständig anfällig für SQL-Injection-Angriffe.

Lösung:

  1. Legen Sie das 2 Dropdown-Menü in einem einzigen HTML-Formular mit einer Schaltfläche einzigen einreichen.
  2. Überprüfen Sie, ob überhaupt eine Formularübergabe unter Verwendung der Funktion isset() durchgeführt wurde, bevor Sie die Einfügung vornehmen.
  3. Überprüfen Sie die Benutzereingaben vor dem Einfügen oder verwenden Sie die vorbereitete Anweisung.
+0

Danke für die Tipps. Es funktioniert jetzt gut. –

+0

Wenn die obige Antwort Ihnen bei der Lösung der Frage geholfen hat, dann markieren Sie sie bitte als Antwort. – Shadow

Verwandte Themen