2016-11-09 150 views
-1

我已經寫了一個PHP程序,用於查詢MySQL數據庫以填充下拉列表,然後提供將值插入第三個表的選項。它幾乎可以工作,但不是將值插入到一條記錄中,而是單獨插入它們,即使它是一個查詢。我該如何補救?PHP從MySQL表中選擇並保存在另一個表中

<!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

您從不指定數據應插入的列。 INSERT INTO表(可樂,colb等)VALUES('val1','val2'等)' – Xorifelse

+0

@Xorifelse如果值列表包含所有列的名義順序值,則不需要指定列。 – Shadow

+0

@Shadow很正確,但如果情況並非如此,會發生什麼? – Xorifelse

回答

0

這兩個下拉框在單獨的HTML表單中,並帶有單獨的提交按鈕。我的猜測是你選擇了客戶,按提交按鈕,然後選擇一個產品,然後按另一個提交按鈕。這些是2個獨立的提交,因此將執行2個單獨的插入。

更不用說您在插入之前不檢查用戶輸入,因此即使在加載頁面時插入也會執行,並且您的代碼也完全容易受到SQL注入攻擊的攻擊。

解決方案:

  1. 放置在一個單一的HTML形式的2個下拉菜單與單個提交按鈕。
  2. 在插入之前,檢查是否有使用isset()函數的表單提交。
  3. 在插入或使用準備好的語句之前驗證用戶輸入。
+0

感謝您的提示。它現在運作良好。 –

+0

如果上述回覆幫助您解決問題,請將其標記爲答案。 – Shadow

相關問題