Php 是否在不重定向到其他页面的情况下回显错误并保留所有表单数据?

Php 是否在不重定向到其他页面的情况下回显错误并保留所有表单数据?,php,html,Php,Html,例如,如果用户名没有填写,用户会收到一个错误,说明是这样的,但在按submit之后,他们会被抛出到另一个页面并显示错误 我如何将错误保留在与注册表相同的页面上,并在提交后保留用户输入的所有文本 注册PHP: 这取决于您希望在哪个级别执行此操作 在发送表单数据之前,可以通过javascript验证不同的数据是否为空以及是否包含有意义的信息(例如密码至少有7个字符长),这样就可以停止要发送的表单。你可以用它来帮助你做到这一点 但其他验证,如插入失败,只能在服务器端完成,如果在这种情况下也不需要重定

例如,如果用户名没有填写,用户会收到一个错误,说明是这样的,但在按submit之后,他们会被抛出到另一个页面并显示错误

我如何将错误保留在与注册表相同的页面上,并在提交后保留用户输入的所有文本

注册PHP:


这取决于您希望在哪个级别执行此操作

在发送表单数据之前,可以通过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>