【问题标题】:PHP headers only work if html form is completely filledPHP 标头仅在 html 表单完全填满时才有效
【发布时间】:2018-12-09 22:08:40
【问题描述】:

我尝试制作一个页面供用户输入一些信息(名字、姓氏);但是,用户也可以选择不在 HTML 表单中输入任何信息,并且可以单击提交按钮将其留空。如果用户将 HTML 表单留空并将其输入到 MySQL 表中,该页面将获取用户给定的数据或创建默认数据。

处理完 MySQL 数据后,它使用 PHP 标头重定向到另一个页面。另一个页面具有相同的目标,但数据不同(职位、雇主名称)。第二页的不同之处在于它有两个提交按钮——一个允许用户添加另一组数据(职位、雇主名称),另一个将其重定向到下一页。

我已经成功收集了第一页的用户创建数据,如果留空,它会处理默认的 MySQL 数据。然后它成功地重定向到下一页。在第 2 页上,它只能处理 HTML 表单中已完成的用户数据,但如果有任何内容留空(或者如果表单完全为空白),它将不会处理默认数据,并且只会重定向回自身而不处理 MySQL。

不知道为什么第2页不会处理默认数据,然后重定向到第3页。

每个页面开头的require(pdo.php)只是简单地创建pdo对象和连接。

我在这里简化了代码:

第 1 页:

<?php
     session_start();
     require_once "pdo.php";
         if (isset($_POST['first_name']) &&
             isset($_POST['last_name']))
            {
              $sql1 = "INSERT INTO Users (first_name,             
                       last_name)
                       VALUES(:first_name,             
                              :last_name)";

              $stmt1 = $pdo->prepare($sql1);
              $stmt1->execute(array(
                         ':first_name' =>    
                         (empty($_POST['first_name']))  
                          ? 'NoFirstNameGiven' : 
                          $_POST['first_name'],
                         ':last_name' => 
                          (empty($_POST['last_name']))  
                          ? 'NoLastNameGiven' : 
                          $_POST['last_name']));

              header("Location: page2.php");
              exit;
            }
  ?>

第 2 页:

<?php
session_start();
require_once "pdo.php";

     if (isset($_POST['job_title']) &&
        isset($_POST['employer_name'])) 
              {

                   $sql = "INSERT INTO Employment   
                   (job_title, employer_name)
                   VALUES(:job_title, :employer_name)";

                   $stmt = $pdo->prepare($sql);
                   $stmt->execute(array(
                        ':job_title' =>    
                        (empty($_POST['job_title']))  
                        ? 'NoJobTitleGiven' : 
                        $_POST['job_title'],

                       ':employer_name' =>   
                       (empty($_POST['employer_name'])) 
                       ? 'NoEmployerGiven' :  
                       $_POST['employer_name']));

                  if(isset($_POST['nextButton'])){
                       header("Location: page2.php");
                       exit;
                     }
                  if(isset($_POST['add_job'])){
                       header("Location: page3.php");
                       exit;
                    }
              }
  ?>

【问题讨论】:

    标签: php mysql redirect post header


    【解决方案1】:

    if (isset($_POST['job_title']) 上的 page2 上存在语法错误,它可能像 page1 一样缺少 &amp;&amp;。

    【讨论】:

    • 我在顶部编辑了代码 - 原始代码中不存在语法错误。谢谢你指出这一点。第一页仍然只处理空白数据。
    • 那么它应该可以工作。你确定job_title 和employer_name 都设置了吗?它们是否显示在var_dump($_POST); 中?
    猜你喜欢
    • 2021-08-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多