2013-09-16 88 views
0

我正在通過簡單的步驟從本書PHP & MYSQL開始練習。它涉及一個HTML表單來更新數據庫中的一行,然後使用各種PHP腳本來檢查HTML代碼的輸入數據並將其轉換爲安全格式。但是,這些代碼不符合本書的說法。我去了發佈商的網站,下載了代碼示例,但沒有喜悅。PHP和安全表單

取而代之的是下面一行的名字,而是我得到了表單,然後在下面的「沒有提交有效的新名字」。然後在下面的表中我想改變的行的當前名稱。當我嘗試輸入數據並將其提交到表單時,它沒有任何區別。它顯示完全相同的頁面。代碼如下。

<!DOCTYPE HTML> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Ensuring security 
    </title> 
</head> 
<body> 

<form action="secure.php" method="POST"> 
    <p>New Name : <input type="text" name="name"> 
     <input type="submit"></p></form> 



<?php 

require('../connect_db.php'); 


if (!empty($POST['name']) && !is_numeric($_POST['name'])) { 
    $name = $POST['name']; 

    $name = mysqli_real_escape_string($dbc, $name); 
    $name = strip_tags($name); 

    $q = 'UPDATE towels SET name "' . $name . '" WHERE id= 1'; 
    mysqli_query($dbc, $q); 
} else { 
    echo 'No valid new name submitted'; 
} 

$q = 'SELECT * FROM towels WHERE id = 1 '; 
$r = mysqli_query($dbc, $q); 
while ($row = mysqli_fetch_array($r, MYSQLI_NUM)) { 
    echo "<p>Name : $row[1] </p>"; 
} 
mysqli_close($dbc); 

我很感激這方面的任何想法。我花了大約3個小時在出版商的網站上,但我仍然在廣場上。

+3

獲取不同的書。一個教導[準備好的陳述](http://php.net/manual/en/pdo.prepared-statements.php)。 (更不用說HTML和PHP的混合了,這會讓東西變得難以理解和難以維護。) –

+1

你正在使用'mysqli'錯誤。您應該準備一個語句,然後使用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)添加'$ name'值。使用字符串連接是非常危險的,因爲一個簡單的錯誤可能是毀滅性的。如果你從書中學習這種技巧,那麼你的書就被打破了。我在這裏和巴特在一起,拿到一本新書。 – tadman

+0

對於初學者,將所有'$ POST'更改爲'$ _POST' –

回答

5

沒有超全球陣列$POST因此您必須將$POST['name']更改爲$_POST['name']

PHP無法看到該陣列,因此它將!empty($POST['name'])評估爲false,並且從不執​​行帶有update查詢的代碼。

而且像@BartFriederichs說的那樣,購買更好的書。我不認爲你會從當前的東西中學到一些有價值的東西。

+0

謝謝。我已經在上面評論過了。我糾正了錯誤,但它仍然不處理名稱更改。我不確定下一本書會去哪。 –