仅更新数据库中的最后一行


Only updates the last row in database

我正在为管理、学校项目构建后端,以更改产品数据。这是我为表格准备的代码

         dbCon();
$query = "SELECT * FROM product WHERE categoryid = 1;";
$result = mysqli_query($dbc,$query) or die('Error querying database.');
if (mysqli_num_rows($result) == NULL) {
mysqli_close($dbc);header("Location:index.php?l=f");exit();
}
echo "<h1>Middlefartvej:</h1>";
while ($row = mysqli_fetch_assoc($result)){
$name = $row['name'];
$price = $row['price'];
$image = $row['image'];
$productid = $row['productid'];
echo "<li>";
echo "<img src='".$image."' alt='Food_pic' style='height:100px'>";
echo "Change picture: <input name='image' type='text' class='' value='".$image."' onFocus='this.value=' placeholder='".$image."'/>";
echo "<input name='productid' type='text' class='' value='".$productid."' onFocus='this.value=' placeholder='".$productid."'/>";
echo "Change name of food:<input name='name' type='text' class='' value='".$name."' onFocus='this.value=' placeholder='".$name."'/>";
echo "Change price: "." "."<input name='price' type='text' class='' value='".$price."' onFocus='this.value=' placeholder='".$price."'/>";
echo '<input type="submit" name="submit" value="Go" class="loginButton">';
echo "</li>";
}

但现在我只能更改最后一个表单字段,如果我更改其他内容,则不会有任何作用。这是编辑代码

dbCon();
//get the variables

$name = $_POST["name"];
$categoryid = $_POST["categoryid"];
$price = $_POST["price"];
$image = $_POST["image"];
$productid = $_POST["productid"];

//update the database with newdata that user has inserted
$query= "UPDATE product SET  name='".$name."', price='".$price."' , image='".$image."' WHERE productid = '".$productid."';";
$result = mysqli_query($dbc,$query) or die(mysqli_error($dbc));

调试一下怎么样?在执行查询之前,回显$query变量的值。那句话有效吗?它是从sql命令行还是phpmyadmin执行的?

在我的脑海中,这看起来很可疑:

$query= "UPDATE product SET  name='".$name."', price='".$price."' , image='".$image."' WHERE productid = '".$productid."';";

如果productid是一个整数,你不需要也不想在它周围加单引号,因为它不是字符串。此外,使用客户端库的语句中不包含结束分号。PHP插值可以为您处理很多这方面的问题,而不是一直试图连接来绕过转义双引号。

$query= "UPDATE product SET name='$name', price='$price', image='$image' WHERE productid = $productid";

话虽如此,您应该为所有输入使用绑定变量,而不是插入到查询中。

请参阅:http://php.net/manual/en/mysqli-stmt.bind-param.php