我一直在为 future 的雇主做一些示例练习,最近我的任务是我第一次编写 php。作业的一部分涉及将服务器端代码与 UI 代码分开,我完全理解它的值(value)并且我同意它。
任务的要点是创建一个简单的表单,将其发布到服务器,进行验证,然后发布到数据库,还涉及很多其他任务和事情,但这几乎就是它的真正含义。
所以我无法完全确定将表单验证错误呈现给用户的最佳方式。我最终进行了一次 session ,并将用户重定向回表单,这似乎是大多数人建议的。然后我打印回$_SESSION
提交的数据给value
内的用户表单的属性input
元素以及创建一些附加元素(如果存在错误)。
我被告知这不是他想要的,他简短地提到使用 PHP 和 MySQL 创建一个 API,通过 Ajax 调用返回 JSON 数据。我理解这是为了从数据库获取数据并返回 JSON。
在这种情况下,当作业实际上不需要获取数据库中存储的数据,而只是插入新数据时,您是否会以 JSON 形式发回错误和表单字段的内容,而不是使用 $_SESSION
?
最佳答案
使用 Ajax 并不意味着使用数据库。任何错误验证都可以使用 ajax 请求在服务器端完成。
例如,如果您有一个表单提交一个只能包含字母的值,例如,假设您有以下表单:
<span id="error" style="display:none;color:red;"></span>
<form id="myform" action="submit.php" method="POST">
<input name="mystring" type="text" placeholder="your text here"><br>
<button id="submit">Submit</button>
</form>
你的validate.php看起来像这样:
<?php>
echo json_encode(array(
"success"=>(ereg("^[a-zA-Z]+$", $_POST['mystring']),
"error"=>"This field must contain only letters"
));
?>
那么你的ajax请求应该看起来像这样(使用jQuery):
$("#submit").click(function() {
$.ajax({
type: "POST",
url: "validate.php",
success: function(response, status) {
if(response.success) {
$("#myform").submit();
}
else {
$("#error").html(response.error).show();
}
}
});
});
这是如何工作的?
当您单击提交按钮时,onclick 事件会触发这部分代码:
$("#submit").click(function() {
向validate.php发出一个ajax请求,该请求接受字段值并使用正则表达式检查它是否仅包含字母。 ereg("^[a-zA-Z]+$", $_POST['mystring'])
的结果为 true 或 false。如果这是真的,那么我们假设该字符串仅包含字母。 json_encode()将数组转换为 JSON 字符串,因此您必须将正则表达式结果放入数组中。然后你必须回显它来创建一个空白页面并
将其返回到浏览器。 jQuery 捕获响应并假设响应是有效的 JSON 字符串,尝试解析它并创建一个 javascript 对象。然后这个对象被传递给成功回调函数。在我们的例子中,这称为响应。
接下来,检查 response 对象的 success 属性的值。如果为真,我们将提交表单,如果不是,我们将显示一条错误消息。
关于php - 在不嵌入 php 的情况下呈现表单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23449349/