Php 是否在不重定向到其他页面的情况下回显错误并保留所有表单数据?
例如,如果用户名没有填写,用户会收到一个错误,说明是这样的,但在按submit之后,他们会被抛出到另一个页面并显示错误 我如何将错误保留在与注册表相同的页面上,并在提交后保留用户输入的所有文本 注册PHP:Php 是否在不重定向到其他页面的情况下回显错误并保留所有表单数据?,php,html,Php,Html,例如,如果用户名没有填写,用户会收到一个错误,说明是这样的,但在按submit之后,他们会被抛出到另一个页面并显示错误 我如何将错误保留在与注册表相同的页面上,并在提交后保留用户输入的所有文本 注册PHP: 这取决于您希望在哪个级别执行此操作 在发送表单数据之前,可以通过javascript验证不同的数据是否为空以及是否包含有意义的信息(例如密码至少有7个字符长),这样就可以停止要发送的表单。你可以用它来帮助你做到这一点 但其他验证,如插入失败,只能在服务器端完成,如果在这种情况下也不需要重定
这取决于您希望在哪个级别执行此操作
在发送表单数据之前,可以通过javascript验证不同的数据是否为空以及是否包含有意义的信息(例如密码至少有7个字符长),这样就可以停止要发送的表单。你可以用它来帮助你做到这一点
但其他验证,如插入失败,只能在服务器端完成,如果在这种情况下也不需要重定向,则必须使用加载数据,然后刷新网站信息而不重新加载
我更喜欢只使用javascript进行初始检查,然后将用户发送到结果页面。但我也将验证保留为php中的密码长度之一,因为即使现在这真的很奇怪,用户也可以禁用javascript,而且我在检查数据库值时不会感到意外。但是,另一个例子是,如果您有很多用户,您可以检查该用户是否不存在,以便在发送表单之前的第一刻向用户发出警告,这只能通过执行ajax调用来完成
你应该知道如何做这两件事,并根据你想在你的项目上做什么来决定
在您的例子中,我将保持php验证现在的状态,如果检测到错误,则在调用event.preventDefault()的javascript中检查相同的(非空值)
$('form[name="register"]').submit(function( event ) {
if ($('input[name="username"]').is(":empty")) {
// append a "Username can not be empty message somewhere on your page
event.preventDefault();
}
// I let you finish the jquery code...
});
本例使用jQuery库。但是,如果您愿意,您可以不使用javascript来完成它。如果不使用ajax,您需要使用一些条件逻辑来引导页面。这将查看是否填写了任何字段,并再次填写,同时设置返回给用户的任何错误消息
比如:
<?php
//example fields
$username = '';
$field2 = '';
$field3 = '';
if(isset($errorToShow)){
// echo your error message here
}
if($_POST["submit"]){
foreach($_POST as $k=>$v){
$$k = $v;
}
}
// your form can be here.
您可以使用ajax
或者如果您不知道ajax
您可以将所有代码放在一个页面中,然后调用$\u POST
索引到每个输入的值中
例如
<input type="text" name="username" maxlength="25" value="<?=$_POST['usename'];?>"/>
对于错误也有同样的想法。有几种方法可以做到这一点。第一步是在输入元素中使用必需的属性:
<input type="text" name="username" required>
您还可以将表单处理程序与表单放在同一个文件中,并在出现错误时显示错误/值。例如:
<?php
if(!empty($_POST['submit'])){
$error = false;
if($_POST['username'] === ''){
$usernameEmpty = 'The username was empty. Please enter a username!';
$error = true;
}
if(!$error){
// No errors found so proceed with the registration
}
}
?>
<form id="myForm" method="post" action="" accept-charset="utf-8">
<?php if(!empty($usernameEmpty)){ echo $usernameEmpty . '<br/>'; } ?>
Username: <input type="text" name="username" value="<?php if(!empty($_POST['username'])){ echo $_POST['username']; } ?>"/>
<input type="submit" name="submit" value="Register"/>
</form>
用户名:一个词:Ajax。从技术上讲,Ajax不是一个词;)这不需要ajax。您可以将表单处理程序放在同一个文件中,如果错误/值exist@icecub很抱歉我不知道,但是我该怎么做呢?您需要检查value属性中是否确实存在$\u POST['usename']
和$\u SESSION['usename']
。否则,PHP将在第一次加载表单时抛出警告
document.getElementById("your_form_id_here").addEventListener("submit", function(e){
// Your Javascript validation code here, for example:
var x = document.forms["your_form_id_here"]["username"].value;
if (x == "") {
alert("Username must be filled out");
e.preventDefault();
}
});
<?php
if(!empty($_POST['submit'])){
$error = false;
if($_POST['username'] === ''){
$usernameEmpty = 'The username was empty. Please enter a username!';
$error = true;
}
if(!$error){
// No errors found so proceed with the registration
}
}
?>
<form id="myForm" method="post" action="" accept-charset="utf-8">
<?php if(!empty($usernameEmpty)){ echo $usernameEmpty . '<br/>'; } ?>
Username: <input type="text" name="username" value="<?php if(!empty($_POST['username'])){ echo $_POST['username']; } ?>"/>
<input type="submit" name="submit" value="Register"/>
</form>