PHP表单无法更新数据库

时间:2014-10-04 17:50:21

标签: 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 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的过程中。非常感谢任何形式的帮助!

4 个答案:

答案 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; $价))

或 执行(阵列($价))