2014-10-04 110 views
0

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

+0

有任何答案有帮助? – SuperDJ 2014-10-05 07:05:09

回答

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; 

0

删除@

$db = new mysqli('localhost','XXXX','XXXX','XXXX'); 

和更新查询

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

在SQL查询中使用它之前如何转义外部输入?曾听说过SQL注入? – lxg 2014-10-04 18:24:03

+0

请编辑您的帖子,以提供您的代码正在执行的解释以及为什么它可以解决OP的问题。 – 2014-10-04 18:37:18

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']); 
0

其实如果你conca吨,直接$参数的查询,它开辟了一个安全隐患 $价格= $ _GET [“价格”(从URL) $价格= $ _ POST [“价格”(从表单POST)

UPDATE bookprice SET price = '$价格'

你应该尝试使用预处理语句像

更新bookrprice设定价格=:价格 或 更新bookrprice设定价格=?

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

那么你会被

配对上面的语句执行(阵列( “:价格”=> $价格))

或 执行(阵列($价格))