php
2014-04-26 49 views 0 likes 
0

我一直在努力要求一個文本表單域。所以當有人不填他的名字時,他會收到一個錯誤,如「沒有標題填滿!」一個文本表單域需要被要求

我現在得到了這個,但它不起作用,因爲當我提交它插入數據庫。

if(isset($_POST['submit'])) { 
    $update = "UPDATE post SET `title`='$_POST[title]', `pic`='$_POST[pic]', `youtube`='$_POST[youtube]' WHERE id = $_POST[id]"; 
    $db->query($update) or die($db->error); 

     if($_POST['title'] == "") { 
      $error = "Title is required!"; 
     } 
     if ($_POST['pic'] == "") { 
      $error = "Picture is required!"; 
     } 
     if(isset($error)){ 
      echo $error; 
     } else { 
     echo '<p>Your post has been updated!</p>'; 
     } 

} 
+0

在運行查詢之前是否確定沒有錯誤?聽起來不像。 –

+0

顯示你的其他代碼,你如何處理錯誤? – jeroen

+0

是否將空白計爲空?只是'trim()'那個特定的帖子,然後將它與'empty()' – user1978142

回答

4

如果發現錯誤,則需要停止執行代碼,而不僅僅是回顯錯誤。只有在沒有錯誤的情況下,所有其他將數據提交給數據庫的代碼才能執行。嘗試是這樣的:

編輯:見狀,更新你的代碼,這是你需要做的:

if(isset($_POST['submit'])) { 
    if(!isset($_POST['title']) || trim($_POST['title']) == "") { 
     $error = "Title is required!"; 
    } 
    if (!isset($_POST['pic']) || trim($_POST['pic']) == "") { 
     $error = "Picture is required!"; 
    } 
    if(isset($error)){ 
     echo $error; 
    } else { 
     $update = "UPDATE post SET `title`='" . mysql_real_escape_string($_POST['title']) . "', `pic`='" . mysql_real_escape_string($_POST['pic']) ."', `youtube`='" . mysql_real_escape_string($_POST['youtube']) ."' WHERE id = " . mysql_real_escape_string($_POST['id']); 
     $db->query($update) or die($db->error); 
     echo '<p>Your post has been updated!</p>'; 
    } 
} 

問題是,你的數據被提交到數據庫,不管發生了什麼在驗證之後 - 到檢查錯誤時爲時已晚,因爲SQL已經被執行。 如果按照上述方式進行操作,則只有在未設置$error變量時纔會提交,這是您想要的。

+1

-1用於SQL注入漏洞。在計算器上,我們應該始終告知初學者他們犯的錯誤,並嘗試糾正錯誤。 –

+1

在更新表之前,將表單值傳遞給'mysql_real_escape_string()'函數以防止SQL注入。 –

+0

@Mike Grabowski我只是想回答手頭的問題 - 我可以提出很多建議來改善他如何驗證數據。但我同意,SQL注入是人們應該知道的事情,我想你現在已經明白了你的觀點,儘管我不確定它是否會使我的答案對手頭的問題沒有用處...... – SharkofMirkwood

0

我不會僅僅依靠

if($_POST['title'] == "") 

,因爲如果有人進入空間的文本字段,它不會工作。首先,一個標題不應該太長?那麼你可以爲它設置一個最大長度?

也可能多跑幾個檢查,如:

我不會僅僅依靠

if(!isset($_POST['title'] || $_POST['title'] == "" || $_POST['title'] == " ") 
{ 
    // Error 
} 
else 
{ 
    // Database query 
} 

你想要的東西,否則會一直執行數據庫查詢,無論他們是否沒有正確填寫表格。

+0

非常感謝, – Benny

+2

那麼6空格呢? :) @Benny,你應該刪除所有空格/白色字符,然後檢查長度。 –

+0

我應該可能提到了trim()函數!不能相信我忘了它。我有一個函數test_input($ STR),然後將其修剪它,的stripslashes,mysqli_real_escape()等,然後返回值所有使用後。 – Colum

相關問題