2013-09-26 87 views
-1

有人可以看看這個,也許看到爲什麼這不是更新我的數據庫?MYSQL post query - not working need advise

它是一種從我的數據庫中提取數據的表單,當我點擊更新按鈕時它應該更新數據庫,但它不是。

有沒有辦法顯示它是否返回錯誤?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Beerlist Admin</title> 
</head> 

<body> 

<?php include '../beerlist/config.php'; ?> 
<table border="0" width="95%" align="center" cellspacing="0" cellpadding="5"> 
    <tr> 

<?php 

#/////////////////////////////////// 
#//////////// ALL BEERS///////////// 
#/////////////////////////////////// 
$sql = "SELECT * FROM bottles ORDER BY name"; 
$mydata = mysql_query($sql,$con); 

if (isset($_POST['update'])){ 
$UpdateQuery = "UPDATE bottles SET new='$_POST[new]', name='$_POST[name], style='$_POST[style], location='$_POST[location], size='$_POST[size], abv='$_POST[abv], number='$_POST[number], price='$_POST[price]' WHERE name='$_POST[hidden]'"; 
mysql_query ($UpdateQuery, $con); 

}; 


while($record = mysql_fetch_array($mydata)){ 

echo "<form action=beerlist_admin.php method=post>"; 

    echo "<td><input size=7 type=text name=new value=\"" . $record['new'] . "\" > "; 
    echo "<input type=text size=50 name=name value=\"" . $record['name'] . "\" >"; 
    echo "<input type=text size=20 name=style value=\"" . $record['style'] . "\" >"; 
    echo "<input type=text size=20 name=location value=\"" . $record['location'] . "\" >"; 
    echo "<input type=text size=7 name=size value=\"" . $record['size'] . "\" >"; 
    echo "<input type=text size=5 name=abv value=\"" . $record['abv'] . "\" >"; 
    echo "<input type=text size=5 name=number value=\"" . $record['number'] . "\" >"; 
    echo "<input type=text size=7 name=price value=\"" .$record['price'] . " \" >"; 
    echo "<input type=hidden name=hidden value=" . $record['number'] . "\"> <input type=submit name=update value=update></td></tr>"; 

echo "</form>"; 
} 

echo "</table>" 
?> 


</body> 

</html> 
+2

您可以查看錯誤消息的'mysql_error'。考慮到這個代碼對於SQL注入攻擊是非常開放的,任何事情都可能發生在你的數據庫上。我強烈推薦一些關於這個主題的輕量級閱讀:http://php.net/manual/en/security.database.sql-injection.php – David

+0

從你的mysql_ *正確處理錯誤開始。 [請參閱此處的連接錯誤處理示例](http://php.net/manual/en/function.mysql-connect.php)和[這裏是例如查詢錯誤處理。](http://www.php .net/manual/en/function.mysql-query.php)對於UPDATE查詢中的幾乎所有記錄,您還缺少單引號'',這會導致複合詞出錯。 – Prix

+1

你應該把變量放在你的查詢中,如'{$ _POST ['....']}'。 – Sablefoste

回答

0

首先,mysql_*已被棄用,你應該考慮遷移到庫MySQLi或PDO,當mysql_*被移除,以便您的網站不停止工作的準備。


你的代碼是敞開的SQL注入你應該使用mysql_real_escape_string($variable)防止。

隨着sprintf組合可以進一步定義你期待什麼樣的變量,例如:

%s - 是指用於字符串數據。
%d - 用於數字,並表示爲(有符號)十進制數。

在下面的示例中,我只使用%s,因爲我不確定要插入的數據和數據庫表字段類型。

UPDATE查詢寫得不好,可能會導致取決於你爲它提供那麼你應該總是在開發過程中至少要使用的mysql_error這樣你就可以調試此類錯誤的,一旦你的數據在不同情況下的問題移動到一個實時站點,讓這些錯誤以靜默方式記錄到文件中。

您不需要始終使用echo來打印每一小段HTML,請參閱我如何更改WHILE代碼。

此外,您在表格中使用表格的方式,它可能不正確的方式。

既然您還沒有發佈config.php的內容,我無法判斷那裏是否有任何問題。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>Beerlist Admin</title> 
</head> 
<body> 
<?php 
$con = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$con) 
{ 
    die('Not connected : ' . mysql_error()); 
} 

$db_selected = mysql_select_db('beerlist', $con); 
if (!$db_selected) 
{ 
    die ('Can\'t use foo : ' . mysql_error()); 
} 
?> 
<table border="0" width="95%" align="center" cellspacing="0" cellpadding="5"> 
<?php 
if (isset($_POST['update'])) 
{ 
    $UpdateQuery = sprintf("UPDATE bottles 
           SET new='%s', 
            name='%s', 
            style='%s', 
            location='%s', 
            size='%s', 
            abv='%s', 
            number='%s', 
            price='%s' 
          WHERE name='%s'", 
          mysql_real_escape_string($_POST['new']), 
          mysql_real_escape_string($_POST['name']), 
          mysql_real_escape_string($_POST['style']), 
          mysql_real_escape_string($_POST['location']), 
          mysql_real_escape_string($_POST['size']), 
          mysql_real_escape_string($_POST['abv']), 
          mysql_real_escape_string($_POST['number']), 
          mysql_real_escape_string($_POST['price']), 
          mysql_real_escape_string($_POST['hidden'])); 
    if (!mysql_query($UpdateQuery)) 
    { 
     die('Invalid query: ' . mysql_error()); 
    } 
} 

$sql = "SELECT * 
      FROM bottles 
     ORDER BY name"; 
$mydata = mysql_query($sql); 
if (!$mydata) 
{ 
    die('Invalid query: ' . mysql_error()); 
} 

while($record = mysql_fetch_array($mydata)) 
{ 
?> 
<form action="beerlist_admin.php" method="post"> 
<tr><td> 
<input size="7" type="text" name="new" value="<?php echo $record['new']; ?>"> 
<input type="text" size="50" name="name" value="<?php echo $record['name']; ?>"> 
<input type="text" size="20" name="style" value="<?php echo $record['style']; ?>"> 
<input type="text" size="20" name="location" value="<?php echo $record['location']; ?>"> 
<input type="text" size="7" name="size" value="<?php echo $record['size']; ?>"> 
<input type="text" size="5" name="abv" value="<?php echo $record['abv']; ?>"> 
<input type="text" size="5" name="number" value="<?php echo $record['number']; ?>"> 
<input type="text" size="7" name="price" value="<?php echo $record['price']; ?>"> 
<input type="hidden" name="hidden" value="<?php echo $record['number']; ?>"> 
<input type="submit" name="update" value="update"> 
</td></tr> 
</form> 
<?php 
} 
?> 
</table> 
</body> 
</html> 
+0

謝謝大家的幫助和建設性的批評。我是這個品牌的新手,並從YouTube視頻中學習。 http://www.youtube.com/watch?v = Zr0ktM3fjaI –

+0

@CoopersSeafood認爲視頻相當老舊,您應該尋找一些使用PDO的較新教程,而不僅僅是PDO在很多方面都更好,但會爲您預備好的語句節省很多麻煩。 [這裏是一個:PHP PDO簡介](http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html) – Prix

+0

Prix,再次感謝您的幫助。我試過你的代碼,我仍然無法實際更新數據庫。我的配置文件如下所示:<?php $ con = mysql_connect(「localhost」,「username」,「password」);如果(!$ con){ die(「Can not connect:」。mysql_error()); } mysql_select_db(「beerlist」,$ con); ?> –