PHP表单无法更新数据库

PHP表单无法更新数据库,php,Php,大家好,我的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

大家好,我的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的过程中。非常感谢任何形式的帮助

删除@

$db = new mysqli('localhost','XXXX','XXXX','XXXX');
并更新查询

$sql = "UPDATE bookprice ".
       "SET price = ".$price ;
删除@

$db = new mysqli('localhost','XXXX','XXXX','XXXX');
并更新查询

$sql = "UPDATE bookprice ".
       "SET price = ".$price ;

您没有使用
$price
变量将
price
列设置为

使用
“设置价格=$price”

或内部引号
“设置价格='$price'”

现在要做的是“将价格列设置为等于价格列”,而不是从POST变量
$price
中获取的预期值。关于这一点,请参见我的答案末尾的脚注

还有一件事:

$retval = mysqli_query( $sql, $db );
您需要反转查询和数据库连接:

$retval = mysqli_query( $db, $sql );
mysqli\uu
中,首先是连接,然后是查询变量

另外,使用:

$db = new mysqli('localhost','XXXX','XXXX','books');
您在DB连接中使用了所有四个参数,因此您可以删除:

因为您没有对它做任何操作,只需添加
books
作为DB的参数

将第四个参数与DB的名称一起使用,与将
mysqli\u select\u DB
与DB的名称和连接变量一起使用是相同的,这是您没有使用的

  • 阅读手册

在中还缺少一个右大括号

else
{
?>
如果在此之后您没有任何东西,请执行以下操作:

else
{ 
  echo "Fail";
}

?>

脚注:

如果您的价格包含一个美元符号、一个点或它们的组合,或者SQL不同意的其他东西(我认为它可能会同意),您需要将其用引号括起来:

$sql = "UPDATE bookprice SET price = '$price' " ;

如果列是
int
类型,则可以使用

$sql = "UPDATE bookprice " . "SET price = ".$price;


您没有使用
$price
变量将
price
列设置为

使用
“设置价格=$price”

或内部引号
“设置价格='$price'”

现在要做的是“将价格列设置为等于价格列”,而不是从POST变量
$price
中获取的预期值。关于这一点,请参见我的答案末尾的脚注

还有一件事:

$retval = mysqli_query( $sql, $db );
您需要反转查询和数据库连接:

$retval = mysqli_query( $db, $sql );
mysqli\uu
中,首先是连接,然后是查询变量

另外,使用:

$db = new mysqli('localhost','XXXX','XXXX','books');
您在DB连接中使用了所有四个参数,因此您可以删除:

因为您没有对它做任何操作,只需添加
books
作为DB的参数

将第四个参数与DB的名称一起使用,与将
mysqli\u select\u DB
与DB的名称和连接变量一起使用是相同的,这是您没有使用的

  • 阅读手册

在中还缺少一个右大括号

else
{
?>
如果在此之后您没有任何东西,请执行以下操作:

else
{ 
  echo "Fail";
}

?>

脚注:

如果您的价格包含一个美元符号、一个点或它们的组合,或者SQL不同意的其他东西(我认为它可能会同意),您需要将其用引号括起来:

$sql = "UPDATE bookprice SET price = '$price' " ;

如果列是
int
类型,则可以使用

$sql = "UPDATE bookprice " . "SET price = ".$price;
试试看:

<?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';
}
?>
尝试一下:

<?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';
}
?>

事实上,如果您直接使用$parameter处理查询,它会带来安全风险 $price=$\u获取[“price”](从URL) $price=$\u POST[“price”](来自表单POST)

更新
bookprice
SET
price
=“$price”

您应该尝试使用准备好的语句,如

更新bookrprice set price=:价格 或 更新bookrprice set price=

然后创建一个与安全性关联的键值对,并将其传递到查询中。这就是为什么不建议使用mysql_查询,而是使用mysqli或PDO方法的原因

然后,您可以将上述语句配对为

执行(数组(“:price”=>$price))


执行(数组($price))

事实上,如果直接使用$parameter处理查询,就会带来安全风险 $price=$\u获取[“price”](从URL) $price=$\u POST[“price”](来自表单POST)

更新
bookprice
SET
price
=“$price”

您应该尝试使用准备好的语句,如

更新bookrprice set price=:价格 或 更新bookrprice set price=

然后创建一个与安全性关联的键值对,并将其传递到查询中。这就是为什么不建议使用mysql_查询,而是使用mysqli或PDO方法的原因

然后,您可以将上述语句配对为

执行(数组(“:price”=>$price))


执行(数组($price))

在SQL查询中使用外部输入之前,对其进行转义如何?听说过SQL注入吗?请编辑您的帖子,解释一下您的代码在做什么,以及为什么它能解决OP的问题。在SQL查询中使用外部输入之前,先对其进行转义如何?听说过SQL注入吗?请编辑你的帖子,解释你的代码在做什么,以及为什么它会解决OP的问题。有没有任何答案有用?有没有任何答案有用?