PHP中的自动后退命令

Automatic Back Command in PHP

本文关键字:命令 PHP      更新时间:2023-09-26

我的网站上有一个表单,里面有一系列的框。当点击提交按钮时,它会进行检查,以确保所有部分都使用PHP相关。(IE,如果电子邮件是电子邮件,如果名称没有无效字符等(

在PHP脚本中,如果发生这种情况,它当前会:

function died($error) {
    // your error code can go here
    header( "refresh:0;url=construction.html" );
    echo $error;
    die();

现在它会刷新页面。因此,如果你做错了一件事,它会清除表单。在PHP中有没有一种方法可以让它返回(从而保留已填写的表单(。

它目前所在的网站就在这里。我相信它可能是JavaScript的某种实现,但这是什么以及如何格式化它,让我难以捉摸

谢谢你的帮助!

  1. 您所称的"确保相关事件"被称为验证,是提交表单时的正常和必要步骤

  2. 您总是需要服务器端验证(在您的例子中是PHP(,这意味着为了可用性和速度,您可以添加客户端验证(Javascript(,但由于安全原因,您永远不能省略服务器端验证

  3. 将有效数据反馈到表单也是一种常见的做法,因为不这样做对用户不友好

  4. 您的函数dead($error(看起来有些奇怪和不必要的东西,验证失败并不是死亡的原因。


母猪,你该怎么办?

Javascript(客户端(

使用Javascript,您可以预先验证表单,以避免不必要的服务器往返,并立即向用户提供反馈。有很多使用jQuery、dojo、MooTools等进行表单验证的实现。但别忘了,Javascript可以关闭,所以你也必须验证服务器端的一切

PHP(服务器端(

一个好的方法是使用现有的验证类,如Zend_Validate,甚至Zend_Form。Zend_Form可以很容易地将经过验证的帖子数据反馈回表单,例如$form->populate($data)

任何其他支持表单的框架或库也会有所帮助。当然,你不需要一个库,所以你需要了解如何用原始有效的帖子数据填充表单。如果执行此操作,请确保可以将$_POST数组的副本发送回客户端,在客户端中存储原始值(如果它们有效(和无效字段的标志/消息。将其集成到标记中的基本方法如下所示:

<input type="text" value="<?php echo ($validatedPost['email']['isValid']) ? $validatedPost['email']['value']: '' ?>" name="email" />
<?php if ($isPostBack && !$validatedPost['email']['isValid']) : ?>
    <p class="invalid"><?php echo $validatedPost['email']['message']; ?></p>
<?php endif; ?>

PHP的方法如下(使用会话(:

<?php
    session_start();
    function died($error) {
        //Store the input
        $_SESSION['temp_form'] = array(
            'name' => $_POST['name'],
            'email' => $_POST['email']
        );
        // your error code can go here
        header( "refresh:0;url=construction.html" );
        echo $error;
        die();
    }
?>

construction.html上(如果可以的话,您可能希望使其成为.php,或者使.html绑定到php:

<input type="text" name="name" value="<?php if( isset($_SESSION['temp_form']['name']) ) echo $_SESSION['temp_form']['name']; ?>" />
<input type="text" name="email" value="<?php if( isset($_SESSION['temp_form']['email']) ) echo $_SESSION['temp_form']['email']; ?>" />

希望这能让你更容易理解你的处境!

Edit:不要忘记在construction.php的顶部添加session_start();

我强烈建议您通过JavaScript在客户端进行表单验证,此外还通过php在服务器端进行表单验证
试试jQuery表单验证插件
为此,您需要对jQuery 有一个基本的了解

您应该将所有信息保存在一个会话中(或者可能提交到同一页面并省略refresh?(,然后在生成表单时,检查表单以根据您的数据填写表单。

您不能像单独使用PHP所描述的那样做到这一点。您可以"强制"浏览器返回一页,但不能保证浏览器会记住并保留表单字段值。

解决方案是,如果验证失败,则使用用户提交的值填充字段。例如:

$email = '';
if( !empty( $_POST[ 'email' ] ) ) {
    $email = $_POST[ 'email' ];
}
?>
    <input type="text" value="<?php echo $email; ?>" name="email" />
<?php
if( /* email didn't validate */ ) {
    echo 'Please give a valid email address';
}