2014-10-04 129 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方法的原因。

那麼你會被

配對上面的語句執行(陣列( 「:價格」=> $價格))

或 執行(陣列($價格))