2014-03-31 78 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