php停止发布表单

时间:2012-03-26 15:52:44

标签: php javascript html

基本上我有一个输入studentID的表单,然后我想检查输入的studentID在数据库中的id,如果它是将表单发布到下一页。如果没有,则在您输入studentID的页面上显示错误

不知道从哪里开始 干杯

5 个答案:

答案 0 :(得分:3)

这就是你想要的吗?

<form id = "form" action = "./?page=markandfeedback" method = "post"> 

    <br>
    Mark for:
<INPUT id="stud" onkeypress="return isNumberKey(event)" type="text" name="stud"  value="Enter Student Number">
<input type="submit" value = 'Continue'>
<?

$studID = $_POST['stud'];
$module2 = $_SESSION['module'];
$ex = $_POST['exer'];
$studerr = array();

$sql = 'SELECT * FROM `student`, `modules` WHERE `studentID` = '.$studID.' AND `moduleCode` = '.$_SESSION['module'];
$result = mysql_query ($sql);
//    echo $_SESSION['module'];

if ($result == NULL) { // nothing found
echo "the student id you entered is not in the database";
}
else {


$_SESSION['student'] = $studID;

Header("Location: http://www.whereever.com/"); // send the browser where you want
exit();
}
?>

编辑: 我回答了其他的答案。我假设您正确检查了mysql注入。我建议在一切正常并且安全的情况下实施AJAX。我的解决方案背后的想法是尽可能简单地解决问题。如果你想用它做出一些奇特的东西,你可以:

  • 通过php生成整个表单,并在输入字段中告诉用户,找不到id
  • 告诉您的Javascript以某种奇特的方式呈现信息
  • 使用AJAX。每个人都喜欢用AJAX表单。
  • 您可以按照建议假设用户输入了有效的ID。您将检查“whereever”页面,其中id实际上是有效的。如果不是,您只需将用户发送回表单并告诉php输出错误消息(可能是通过get)。这种可能性并不常见,我不确定它是否有任何优势。
如果您不想要用户提供任何数据,那么mysql_num_rows提示也很不错。因为SELECT *。我认为你想对数据做些什么。

答案 1 :(得分:1)

创建一个单独的控制器来检查用户名。

使用ajax检查用户输入是否有效。

所以你会有这样的事情:

<input id="stud" onchange="checkStudentId(this)" />

<script>
function checkStudentId(inputElement) {
 var id = inputElement.value();

  $.ajax({
    url: "test.html",
    context: {id:id}
  }).done(function() { 
    // Check the return result
  });
}
</script>

这是对jquery ajax的引用 http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:1)

你实际上必须以某种方式连接到服务器才能弄清楚学生是否存在。在这种情况下,您通常会将表单提交给服务器并进行验证服务器端。如果学生存在,则返回&#34; next&#34;页。如果学生不存在,那么您将再次返回(或重定向到使用位置标题)相同的表单并显示错误消息。


另一种流行的方法是使用AJAX请求异步检查(我看到很多其他人推荐)。 如果您在完成输入学生ID 并且实时有效地显示错误消息后,您实际上正在进行验证,我建议您采用这种方式。通过这种方式, AJAX可以提供快速的用户反馈,但不是真正的解决方案。请记住,无论如何,您需要在表单时检查并处理此问题。无论如何提交,或至少,考虑提交表格时无效ID会发生什么。

  • 人们可以绕过这个检查(客户端的每个请求都被认为是敌对的,你不能暗中信任任何东西)
  • 另一位用户可能在检查完成和提交表单之间删除了学生ID
  • 您的代码中可能存在错误导致验证错误地传递或未识别否定回复

在提交AJAX时没有任何意义,因为通过让服务器连续处理两个单独的请求,您实际上可以将工作量增加一倍。这只是问题的错误答案。


这个实现的最大麻烦是PHP代码很快会变得非常毛茸茸,很难跟上,因为你把所有东西混合在一起。

这里你可能会开始使用PHP作为模板语言(混合php代码和html标记),并开始使用一个框架,你的视图(HTML)与你的PHP代码分离(如果你&# 39;重新使用非常填充的MVC pattern,这段代码被称为你的控制器 - 正是因为它控制着服务器的响应方式。这就是任何专业开发人员的工作方式。 Kohana,CakePHP和Zend都是相当流行的MVC框架的例子,所有这些框架都是专业使用的。

答案 3 :(得分:0)

你可以用两种不同的方式做到这一点

  1. AJAX - 对您的服务器进行ajax调用并检查ID是否存在显示错误,否则转到下一页
  2. PHP - 在表单中放入一个隐藏的输入,并将表单的操作放到同一页面并检查它们的所有内容,并保持输入字段的值为$ _POST ['field_name'];
  3. 您可以将操作转移到另一个页面并返回变量或进行会话以保存错误消息

答案 4 :(得分:0)

试试这个:

    <?
        if(isset($_POST['stud'])){
            $studID = $_POST['stud'];
            $module2 = $_SESSION['module'];
            $ex = $_POST['exer'];
            $studerr = array();
    $host="hostname";//your db host
    $user="user";//your db user
    $pass="pass";//your db pass
    $conn=mysql_connect($host,$user,$pass);

            $sql = 'SELECT * FROM `student`, `modules` WHERE `studentID` = '.$studID.' AND `moduleCode` = '.$_SESSION['module'];
            $result = mysql_query ($sql,$conn);

         if(mysql_num_rows($result)>0){//the id was found in the DB, do whatever here...

        echo $_SESSION['module'];

        $_SESSION['student'] = $studID;

    Header("Location: http://www.whereever.com/");//redirect to wherever
        $error=false;
        }

        else{//id was not found
$error=true;}



        }//end of isset
        ?>



        <? if($error===true){?> <div> The id was not found.... </div> <?}?>
        <form id = "form" action = "<? echo $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?>" method = "post"> 

                <br>
                Mark for:
        <INPUT id="stud" onkeypress="return isNumberKey(event)" type="text" name="stud" value="Enter Student Number">
        <input type="submit" value = 'Continue'>

所以它的作用是:当用户点击提交时,连接到数据库,并检查ID是否存在......如果存在,则将其重定向到wherever.com(参见注释),如果是不要出现错误信息。请务必将db变量值更改为您自己的($host, $user, $pass)。