【问题标题】:PHP form data not posting after submit提交后未发布PHP表单数据
【发布时间】:2014-11-22 01:26:47
【问题描述】:

我刚开始使用 PHP,我一直在尝试验证 HTML 表单,然后将表单的数据发布到另一个页面上,由于某种原因,这似乎不起作用。问题是,当点击提交时,如果没有错误,页面只会刷新。以下是代码的sn-ps:

<?php
$nameErr = $surnameErr =  " ";
$name = $surname =  " ";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $valid = 0;

    if (empty($_POST["name"])) {
    $nameErr = "Name is required";
        $valid++;
    } else {
    $name = test_input($_POST["name"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
    $nameErr = "Only letters and white space allowed"; 

    }
    }

    if (empty($_POST["surname"])) {
    $surnameErr = "Surname is required";
    $valid++;
    } else {
    $surname = test_input($_POST["surname"]);
    // check if name only contains letters and whitespace
    if (!preg_match("/^[a-zA-Z ]*$/",$surname)) {
    $surnameErr = "Only letters and white space allowed"; 

    }
    }

    if($valid == 0){
        header('LOCATION: page2.php');
        exit();
    }

}

function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?>

这里是 HTML

<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 

<div class="label1">
    <label>First Name</label> 
    <input type="text" name="name" id="name" placeholder="John" value="<?php echo $name;?>" onblur="validateName('name')">  

    <label>Surname</label> 
    <input type="text" name="surname" id="surname" placeholder="Smith" value="<?php echo $surname;?>" onblur="validateSurname('surname')"> <br />

    <input type="submit" name="submit" value="Submit"> 
</div>
</form>

page2.php

<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your surname is: <?php echo $_POST["surname"]; ?>

</body>
</html>

【问题讨论】:

  • 您可以做的是将表单操作更改为“page2.php”以供帖子使用。并将您的 php 代码传输到 page2.php
  • @Ralfh 将表单操作更改为“page2.php”会发布数据但不验证表单,并将验证代码传输到“page2.php”会完全杀死代码。
  • 尝试把这个 ($_SERVER["REQUEST_METHOD"] == "POST") 改成这个 (isset($_POST['submit']))
  • 问题还在继续,哥们

标签: php html forms validation post


【解决方案1】:

当您执行header('LOCATION: page2.php'); 时,您将丢失所有发布的数据,这些数据在page2.php 中不可用。

有几种解决方案,例如:

  1. 使用include 而不是header 重定向;
  2. 将发布的数据存储在会话或数据库中,以便在其他页面中可用。

我看不出有什么原因您不能在此处使用 include,您是否有特定的原因要重定向?

【讨论】:

  • 为什么我会丢失数据?将表单的操作更改为 page2.php 将数据发布到下一页没有问题,但它不会在提交之前验证表单。
  • @user3649696 当您使用header 重定向时,您请求一个新脚本,它不会包含您之前设置的任何变量,包括超级全局变量。
  • 您的意思是类似于“您的姓氏是:”,我忘了在原始帖子中包含它。
【解决方案2】:

试试这个

 **main page**

<form method="post" action="page2.php"> 
<div class="label1">
<label>First Name</label> 
<input type="text" name="name" id="name" placeholder="John" onblur="validateName('name')">  

<label>Surname</label> 
<input type="text" name="surname" id="surname" placeholder="Smith" onblur="validateSurname('surname')"> <br />

<input type="submit" name="submit" value="submit"> 
</div>
</form>


**page2.php**
<?php

if (isset($_POST['submit'])) {
$valid = 0;

if (empty($_POST["name"])) {
$name = "Name is required";
    $valid++;
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$name = "Only letters and white space allowed"; 
}
    else{$name=$_POST["name"];}
}

if (empty($_POST["surname"])) {
$surname = "Surname is required";
$valid++;
} else {
$surname = test_input($_POST["surname"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$surname)) {
    $surname = "Only letters and white space allowed"; 

}        else{$surname=$_POST["surname"];}
}

}

function test_input($data) {
 $data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<html>
<body>

Welcome <?=$name?><br>
Your surname is: <?=$surname?>

</body>
</html>

【讨论】:

  • 表单仍然在未经验证的情况下提交,即使在执行了此处显示的操作之后。
  • 输入数字和特殊字符后的输出是什么?
  • 它仍然提交它,所以问题是 php 验证没有运行?数据已发布到第二页,但它无效。
  • 当然会提交,提交后验证。每次输入无效时尝试包含标题
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2017-09-11
  • 2019-01-19
  • 2018-06-08
  • 2011-04-01
相关资源
最近更新 更多