如何使用单独的进程页面在同一页面上处理表单。现在要进行注册,评论提交等,我使用第二页来验证数据,然后提交并将其路由回到home.php。我该如何做到这一点,以便在提交中,页面本身验证而不是使用第二页。

有帮助吗?

解决方案

您可以告诉表格提交PHP的自我,然后检查 $_POST 用于形式处理的变量。此方法非常适合进行错误检查,因为您可以设置错误,然后将表单重新加载带有以前提交的任何信息(即他们不会丢失提交)的任何信息。

单击“提交”按钮时,它将将信息发布到同一页面,并在顶部运行PHP代码。如果发生错误(基于您的检查),则表格将为用户重新加载,并显示出显示错误以及用户在字段中提供的任何信息。如果没有发生错误,您将显示一个确认页面而不是表单。

<?php
//Form submitted
if(isset($_POST['submit'])) {
  //Error checking
  if(!$_POST['yourname']) {
    $error['yourname'] = "<p>Please supply your name.</p>\n";
  }
  if(!$_POST['address']) {
    $error['address'] = "<p>Please supply your address.</p>\n";
  }

  //No errors, process
  if(!is_array($error)) {
    //Process your form

    //Display confirmation page
    echo "<p>Thank you for your submission.</p>\n";

    //Require or include any page footer you might have
    //here as well so the style of your page isn't broken.
    //Then exit the script.
    exit;
  }
}
?>

<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
  <?=$error['yourname']?>
  <p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p>
  <?=$error['address']?>
  <p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p>
  <p><input type="submit" name="submit" value="Submit" /></p>
</form>

其他提示

最简单的结构是检测是否是否 $_POST 阵列不是空的

if(isset($_POST['myVarInTheForm'])) {
  // Process the form
}

// do the regular job

您可以检查页面代码内的发布请求,然后检查数据。如果得到请求 - 只需显示表格即可。

但是请记住,这是一个很好的做法,可以通过Get请求在其他页面上显示成功表格提交结果,即任何成功的表单帖子都应通过重定向到成功页面来回答。

当然,您可以探索查看Ajax请求,在此探讨您对处理程序脚本的异步调用,然后更新带有成功消息的发送页面。这给人以“同一页面处理”的印象,即页面不必刷新。

这实际上取决于您要实现的效果。

@michael Irigoyen:它可以正常工作,但是在第一个RN/LOAD上,它显示了:

“注意:未定义的变量:C中的错误: XAMPP htdocs same_page.php在第28行中”

如何处理此通知?

现在就知道了:“使用isset, @等来supress错误……”“工作就像魅力!!!” “现在我会在我的代码上尝试一下……”

我保存了一条感谢消息,并使用会话变量刷新了。

if(!is_array($error)){
    $_SESSION['message'] = 'Thank You!';
    header('Location: yourpage.php');
    exit();
} 

然后在表单的顶部使用它:

if(isset($_SESSION['message'])){ 
    echo $_SESSION['message'];
    unset($_SESSION['message'];
} 

这应该刷新页面并显示消息,然后如果它们刷新页面,则会变量为空,因此谢谢您不会显示。这称为Flash消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top