2016-11-09 106 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

相关问题