PHP从MySQL表中选择并保存在另一个表中
问题描述:
我已经写了一个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>
答
这两个下拉框在单独的HTML表单中,并带有单独的提交按钮。我的猜测是你选择了客户,按提交按钮,然后选择一个产品,然后按另一个提交按钮。这些是2个独立的提交,因此将执行2个单独的插入。
更不用说您在插入之前不检查用户输入,因此即使在加载页面时插入也会执行,并且您的代码也完全容易受到SQL注入攻击的攻击。
解决方案:
- 放置在一个单一的HTML形式的2个下拉菜单与单个提交按钮。
- 在插入之前,检查是否有使用
isset()
函数的表单提交。 - 在插入或使用准备好的语句之前验证用户输入。
+0
感谢您的提示。它现在运作良好。 –
+0
如果上述回复帮助您解决问题,请将其标记为答案。 – Shadow
您从不指定数据应插入的列。 INSERT INTO表(可乐,colb等)VALUES('val1','val2'等)' – Xorifelse
@Xorifelse如果值列表包含所有列的名义顺序值,则不需要指定列。 – Shadow
@Shadow很正确,但如果情况并非如此,会发生什么? – Xorifelse