php停止发布表单
基本上,我有一个输入学生id的表单,然后我想检查数据库中输入的学生id的id,如果是将表单发布到下一页。如果没有,则在输入studentID的页面上显示错误 我真的不知道从哪里开始php停止发布表单,php,javascript,html,Php,Javascript,Html,基本上,我有一个输入学生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
- 代码中可能存在错误,导致验证错误通过或无法识别否定响应
这种实现的最大问题是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可能是他试图做的事情中的一点。就像这句话所说的,直到大便击中风扇,他们不会明白你想告诉他什么,但当它这样做,他会学习,不会忘记。