php停止发布表单

php停止发布表单,php,javascript,html,Php,Javascript,Html,基本上,我有一个输入学生id的表单,然后我想检查数据库中输入的学生id的id,如果是将表单发布到下一页。如果没有,则在输入studentID的页面上显示错误 我真的不知道从哪里开始 干杯你可以用两种不同的方式来做 AJAX-对服务器进行AJAX调用,检查ID是否存在,显示错误,否则转到下一页 PHP-在表单中放置一个隐藏的输入,并将表单的操作放到同一页面上,检查所有内容,并保留输入字段的值为$_POST['field_name'] 您可以将操作放入另一个页面并返回变量,或者创建一个会话来保存错误

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

我真的不知道从哪里开始
干杯你可以用两种不同的方式来做

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

    这是您想要的吗

    <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。您可以在“wherever”页面上检查该id是否实际有效。如果不是,您只需将用户发送回表单并告诉php输出错误消息(可能通过get)。这种可能性并不常见,我不确定它是否有任何好处

    如果您不想从用户那里得到任何数据,mysql\u num\u rows提示也很好。我以为您想对数据做点什么,因为SELECT*

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

    使用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>
    
    
    函数checkStudentId(inputElement){
    var id=inputElement.value();
    $.ajax({
    url:“test.html”,
    上下文:{id:id}
    }).done(函数(){
    //检查返回结果
    });
    }
    
    这里是对jQueryAjax的参考

    实际上,您必须以某种方式连接到服务器,以确定学生是否存在。在这种情况下,您通常会将表单提交到服务器,并在服务器端进行验证。如果该学生存在,则返回“下一页”。如果该学生不存在,则再次返回(或重定向到使用位置标题)相同的表单并显示错误消息


    另一种流行的方法是使用AJAX请求进行异步检查(我看到许多其他人都推荐这种方法)我只建议在您确实正确进行验证时使用这种方法,因为他们已经完成了学生id的输入,并且实时有效地显示了错误消息。这样,<强> AJAX是一个很好的必须提供快速用户反馈,但不是一个真正的解决方案。< /强>记住,不管怎样,当表单提交时,你需要检查和处理这个问题,或者至少考虑当表单提交了一个无效的ID时会发生什么。
    • 人们可以绕过此检查(来自客户端的每个请求都被认为是恶意的,您不能隐式信任任何东西)
    • 另一个用户可能在完成检查和提交表单之间删除了学生ID
    • 代码中可能存在错误,导致验证错误通过或无法识别否定响应
    在Submit上执行AJAX毫无意义,因为通过让服务器连续处理两个单独的请求,您的工作量实际上增加了一倍。这只是对这个问题的错误回答


    这种实现的最大问题是PHP代码可能很快变得非常复杂,很难理解,因为您将所有内容混合在一起

    在这里,您可能会开始像使用模板语言一样使用PHP(混合PHP代码和html标记),并开始使用一个框架,在这个框架中,您的视图(html)与PHP代码是解耦的(如果您使用的是非常填充的,则此代码称为控制器——正是因为它控制服务器的响应方式). 这是任何专业开发人员的工作方式。Kohana、CakePHP和Zend都是相当流行的MVC框架的例子,它们都是专业使用的

    试试这个:

        <?
            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。。。。
    
    您对SQL注入非常开放,如果您还没有进行过SQL注入,您将被黑客攻击。学习使用PDO进行准备好的查询以完全避免这个问题。您听说过mysql_num_行吗?您可以使用它来查看查询是否返回结果并相应地执行操作,如果为0则显示错误,如果不是,则允许用户继续。回答得好,但不要试图光顾问题作者,使用Ajax可能比他们目前的水平高一点。一个不错的UX增强,但实际上并不能解决验证问题,正如我在回答中指出的——有几种方法可能会失败。不要试图解决所有问题。作者在编程方面看起来很生疏,我真的不想把事情复杂化。让他理解XSS或SQLInjection可能是他试图做的事情中的一点。就像这句话所说的,直到大便击中风扇,他们不会明白你想告诉他什么,但当它这样做,他会学习,不会忘记。