2014-03-31 109 views
0

所以,我有以下代碼:(不要擔心SQL注入/ MySQL的折舊現在)插入驗證foreach循環麻煩

$required = array('uexam_id', 'usubject', 'uexam_date'); 

$error = false; 
//VALIDATION: first check all required fields are not empty. if post has values 
if(!empty($_POST)) 
foreach($required as $field) 
    if (empty($_POST[$field])) 
     $error = true; 
//a field was empty, show error 
if ($error) { 
die ("All fields required!!! <a href='examisud.php'> Back to PHP Form </a>"); 
} 
//no error - try the query 
elseif($error === false && !empty($_POST)) 

{ 
$InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES ('$_POST[uexam_id]','$_POST[usubject]','$_POST[uexam_date]')"; 
$result = mysql_query($InsertQuery, $con) or die('query Failure:'. mysql_error()); 
} 

所以,當我瀏覽到這個PHP形式(examisud.php) ,我首先迎接「所需的所有領域」。那麼我可以返回到形式,如果不填寫了所有字段在它工作正常插入數據並顯示錯誤信息。 * 我怎樣才能獲得「所需的所有字段」不要在表單頁面加載,只有當顯示我需要它(當一個字段留空時)。 當我也更新或刪除字段時,我也會得到「所需的所有字段」錯誤顯示。然而,除了彈出錯誤外,所有更新/刪除都是正常的。

所以基本上我只需要它來顯示當一個字段被留在插入查詢空白! 在此先感謝您的幫助!

*編輯我的形式:

{ 
echo "<form action=examisud.php method=post>"; //HTML FORM ECHOED OUT BY PHP 
echo "<tr>"; 
echo "<td>" . "<input type=text name=exam_id value=" . $record['exam_id'] . " </td>"; 
echo "<td>" . "<input type=text name=subject value=" . $record['subject'] . " </td>"; 
echo "<td>" . "<input type=text name=exam_date value=" . $record['exam_date'] . " </td>"; 
echo "<td>" . "<input type=hidden name=hidden value=" . $record['exam_id'] . " </td>"; 
echo "<td>" . "<input type=image name=update value=update id=submit src=images/update.png" . " </td>"; 
echo "<td>" . "<input type=image name=delete value=delete id=submit src=images/delete.png" . " </td>"; 
echo "</tr>"; 
echo "</form>"; 
} 
echo "<form action=examisud.php method=post>"; 
echo "<tr>"; 
echo "<td><input type=text name=uexam_id></td>"; 
echo "<td><input type=text name=usubject></td>"; 
echo "<td><input type=text name=uexam_date></td>"; 
echo "<td>" . "<input type=image name=insert value=insert id=submit src=images/insert.png" . " </td>"; 
echo "</form>"; 
echo "</table>"; 
+0

只需在表單上放置任何隱藏字段,並檢查隱藏變量是否存在於您的代碼中 - 如果存在,表單已提交,否則爲「首次訪問」 –

+2

'不要擔心SQL注入/對now' MySQL的折舊:您的輸入/ 謝謝您的好意:它不是我們誰擔心,'你確實:) –

回答

0

你必須檢查是否提交表單或不

例如,如果您有表單提交這樣

<input type="submit" name="submit"> 

then in your php check it like this 

if(!empty($_POST['submit']))//means the form is submitted 
{ 
//your code 
} 
else 
{ 
//no form is submitted here display your form normally 
?> 

<form action="" method="POST"> 
...... 
...... 
<input type="submit" name="submit"> 

</form> 

<?php 
} 

希望它有助於你,一路走好

+0

不,我有我的形式呼應了由PHP,它不會以這種格式工作! – user3473793

+0

是的,你也可以在呼應其他部分 –

0

此代碼應該這樣做,解釋相關的下面。

if ($_SERVER['REQUEST_METHOD'] == 'POST') { // check if the user submits data (POST) or just loads the page (GET) 
    $error = false; 
    $required = array('uexam_id', 'usubject', 'uexam_date'); 


    foreach($required as $field) { 
     if (!isset($_POST[$field]) || empty($_POST[$field])) { 
      $error = true; 
      break; 
     } 
    } 

    if ($error) { 
     die("All fields required!!! <a href='examisud.php'> Back to PHP Form </a>"); 
    } else { 
     $InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES ('".mysql_real_escape_string($_POST["uexam_id"], $con)."','".mysql_real_escape_string($_POST["usubject"], $con)."','".mysql_real_escape_string($_POST["uexam_date"], $con)."')"; 
     $result = mysql_query($InsertQuery, $con) or die('query Failure:'. mysql_error()); 
    } 
} 

首先,你的代碼有一些嚴重的安全問題,應該永遠不會在生產中使用。

mysql_*功能deprecated - 使用mysqli(這是非常類似於mysql)或PDO_MYSQL

您的代碼容易受到SQL injection attacks,請閱讀this question關於如何防止它們(正確轉義值或使用預準備語句)。

目前我使用mysql_real_escape_string逃跑的變量,因此,這段代碼應該是安全的。最後,我的代碼仍然應該修復你的第一個問題,因爲它在運行驗證之前檢查用戶是否實際提交表單(通過檢查請求方法是否爲POST),而你的第一個代碼正在運行驗證(和失敗),即使沒有提交數據。

+0

表單你可以有*** *** ATLEAST使用'mysql_real_escape_string' –

+0

@Hanky웃Panky是啊,你說得對,更新我的答案。起初我沒有修復它,並希望自己切換到mysqli或PDO時自己做。 –

+0

@andre,我不知道該怎麼告訴你,我仍然得到完全一樣的東西:/ – user3473793