讓我們先從第一件事:
if($_POST[ind_reset]) {
應該
if($_POST['ind_reset']) {
它沒有引號,因爲PHP默默地糾正了你的錯誤。如果您將錯誤報告轉換爲E_ALL,您將看到錯誤消息。
你需要考慮的一件事是你永遠不能相信POST數據是你認爲它應該是。也許你會輸入一個錯字。也許黑客向你發送虛假的POST數據。無論它是什麼,如果錯誤的東西被放入數據庫更新中,它會弄亂你的代碼。出於這個原因,不應該簡單地將POST值插入到數據庫中,而應該有一個檢查器來確保該值是有效的值。當我這樣做時,我會創建一組可能的值,並在更新或插入數據庫時僅使用這些值。例如:
$pages = array('value_on_page'=>'value_put_in_database',
'xyz'=>'thing_in_database_2');
//the valid things to post are either 'value_on_page' or 'xyz',
//but what goes into the database are the values those keys point to
//e.g. if $_POST['ind_reset'] == 'xyz', $ind_reset will be 'thing_in_database_2'
$key = $_POST['ind_reset'];
if(!isset($pages[$key])) {
//if that posted value isn't a key in the array, it's bad
error_log('Invalid posted page'.$key);
} else {
//this is a valid posted page
$ind_reset = $pages[$key];
//** do the database stuff right here in this spot **//
}
現在,您發佈的代碼不工作的原因,你缺少做一個數據庫查詢的最後,關鍵的部分:在您實際運行查詢的一部分。
$conn = mysql_connect("server", "username", "password") or error_log(mysql_error());
mysql_select_db("database") or error_log(mysql_error());
$sql = 'UPDATE counters SET Hits =\'0\' WHERE Page = \'$ind_reset\';';
mysql_query($sql, $conn) or error_log(mysql_error());
我希望你已經注意到我用「error_log」替換了「死」。如果你做error_log(mysql_error(),1,'[email protected]'),它會通過電子郵件發送給你。否則,就像在我的例子中那樣,它會被放到你係統的錯誤日誌文件所在的位置。然後,您可以對數據庫錯誤有一個很好的記錄,這樣,當您不可避免地返回到StackOverflow並提出更多問題時,您可以準確告訴我們發生了什麼。如果您使用的是文件,請確保將錯誤日誌文件的名稱(我根據當天的日期命名)或定期清除它,否則它會變得非常長。
使用您在評論中發佈的mysqli代碼是比mysql_ *函數更好的主意,但是您並不完全正確。 「bind_param」部分將變量粘貼到問號所在的位置。如果你的變量是一個字符串,那麼你先輸入「s」,或者如果它是一個整數,那麼你先輸入「i」等。並且確保在完成之後關閉它們。
$db = new mysqli("server", "username", "password", "database");
if(!$db->connect_errno) {
$stmt = $db->prepare("UPDATE counters SET Hits = '0' where Page = ?");
$stmt->bind_param('s',$ind_reset); //assuming $ind_reset is a string
if(!$stmt->execute()) {
error_log($stmt->error);
}
$stmt->close();
} else {
error_log($db->connect_error);
}
$db->close();
請在創建[SQL注入漏洞](http://bobby-tables.com/)之前閱讀[正確的SQL轉義](http://bobby-tables.com/php)巨大的它毀了你的一天。您必須轉義任何和用戶提供的所有輸入查詢的值,否則您將遇到麻煩。 – tadman
..第一眼看到這個代碼產生像$ _POST [ind_reset]這樣的問題。也許是「ind_reset」? – 2013-04-02 18:56:21
感謝您的快速響應! –