嗨,大家好我的PHP代码有问题。提交表单时无法更新数据库。我正在尝试更新新价格。
这是我的PHP代码:
<?php
if(isset($_POST['update']))
{
@ $db = new mysqli('localhost','XXXX','XXXX','XXXX');
if(! $db )
{
die('Could not connect: ' . mysqli_error());
}
$price = $_POST['price'];
$sql = "UPDATE bookprice ".
"SET price = price " ;
mysqli_select_db('books');
$retval = mysqli_query( $sql, $db );
if(! $retval )
{
die('Could not update data: ' . mysqli_error());
}
echo "Updated Price successfully\n";
mysqli_close($db);
}
else
{
?>
表格代码:
<form method="post">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<td>
<input name="update" type="submit" id="update" value="Update Price">
<input name="price" type="text" id="price">
</td>
</tr>
</table>
</form>
仍处于掌握PHP的过程中。非常感谢任何形式的帮助!
答案 0 :(得分:4)
您没有使用$price
变量将price
列设置为。
使用"SET price = $price " ;
或引号内"SET price = '$price' " ;
您现在正在做的是 “设置价格列等于价格列” ,而不是从POST变量$price
中获取的预期值。在脚注下的答案结尾处有更多相关内容。
另一件事:
$retval = mysqli_query( $sql, $db );
您需要撤消查询和数据库连接:
$retval = mysqli_query( $db, $sql );
在mysqli_
中,首先是连接,然后是查询的变量。
另外,请使用:
$db = new mysqli('localhost','XXXX','XXXX','books');
您正在使用数据库连接中的所有四个参数 ,因此您可以删除:
mysqli_select_db('books');
因为你没有对它做任何事情,只需添加books
作为数据库的参数。
将第四个参数与数据库名称一起使用,与使用数据库名称和连接变量的mysqli_select_db
相同,这是您未使用的内容。
中你也有一个缺少的右括号
else
{
?>
如果之后没有任何内容,请执行以下操作:
else
{
echo "Fail";
}
?>
<强>脚注:强>
如果您的价格包含一个美元符号,或者一个点或它们的混合,或者SQL不同意的其他内容(,它可能是的印象),您将需要换行它在引号中:
$sql = "UPDATE bookprice SET price = '$price' " ;
或
$sql = "UPDATE bookprice SET price = '".$price."' " ;
如果您的列是int
类型,则可以使用
$sql = "UPDATE bookprice " . "SET price = ".$price;
答案 1 :(得分:0)
删除@
$db = new mysqli('localhost','XXXX','XXXX','XXXX');
并更新查询
$sql = "UPDATE bookprice ".
"SET price = ".$price ;
答案 2 :(得分:0)
尝试一下:
<?php
if($_POST['update']){
$db = new mysqli('localhost','XXXX','XXXX','XXXX'); // remove '@'
if(!$db){
die('Could not connect: ' . mysqli_error($db)); // Needs the database connection
}
$price = $_POST['price'];
$sql = "UPDATE `bookprice` SET `price` = '$price'"; // Use the variable $price
// mysqli_select_db('books'); // This should already be set in the new mysqli();
$retval = mysqli_query($db, $sql); // Turn this around;
if(!$retval) {
die('Could not update data: ' . mysqli_error($db)); // needs the database connection
} else {
echo "Updated Price successfully\r\n"; // \r\n will always work \r or \n alone will not always work
}
mysqli_close($db);
}
else {
echo 'There was no post';
}
?>
HTML:
<form action="" method="post">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>
<td>
<input name="update" type="submit" id="update" value="Update Price">
<input name="price" type="text" id="price">
</td>
</tr>
</table>
</form>
链接:
您还应该考虑使用mysqli_real_escape_string()
所以:
$price = mysqli_real_escape_string($db, $_POST['price']);
答案 3 :(得分:0)
实际上,如果您直接使用$ parameter连接查询,则会带来安全风险 $ price = $ _GET [“price”](来自网址) $ price = $ _POST [“price”](来自FORM Post)
更新bookprice
设置price
='$ price'
您应该尝试使用预备语句,例如
更新bookrprice set price =:price 要么 更新bookrprice设定价格=?
然后创建一个关键值对安全性并将其传递给您的查询。这就是为什么不建议使用mysql_query而不是mysqli或PDO方法。
然后您将通过
配对上述声明执行(阵列( “:价格”=&GT; $价))
或 执行(阵列($价))