【问题标题】:Php form validate and post are working but not together?PHP 表单验证和发布工作但不能一起工作?
【发布时间】:2014-02-01 12:19:47
【问题描述】:

为了正常工作,我的表单需要设置为首先检查验证,然后在验证通过时发布数据。这很好,但我不确定如何将验证代码与表单操作中的邮政编码结合起来。例如,如果操作是:action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 表单验证正确但没有发送到任何地方!如果我将表单操作更改为action="contact-engine.php">,则表单已发布但未经验证!考虑到这一点,我需要将验证和(一旦通过验证)contact-engine.php 问题结合到操作中,我根本不知道该怎么做?我真的是 php 的学习者,这对我来说很复杂!非常感谢任何帮助,我从现在开始已经为此工作了几天! (N.B. 两个页面都是.php) 完整代码如下:

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Help!</title>

    <style type="text/css">
        .error {color: #FF0000;}
    </style>
</head>

<body>

<?php
    // define variables and set to empty values
    $nameErr = $emailErr = "";
    $name = $email = "";

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

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

//Email
   if (empty($_POST["email"]))
   {$emailErr = "Email is required";}
   else
   {
   $email = test_input($_POST["email"]);
   if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
   {
   $emailErr = "Invalid email format";
   }}
}
function test_input($data)
{
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}
?>

<form method="post" id="form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <p><span class="error">* required field.</span></p><br />

    <div class="contact-font" style=" margin-top: 20px;">
        <span class="asterix">* </span>Name:<br />
        <input type="text" name="name" class="border" size="25" value="<?php if(isset($_POST['name'])) {echo $_POST['name']; } ?>">
        <span class="error"><?php echo $nameErr;?></span>
    </div>

    <div class="contact-font" style=" margin-top: 20px;">
        <span class="asterix">* </span>Email: (please double check enty)<br />
        <input type="text" name="email" class="border" size="25" value="<?php if(isset($_POST['email'])) {echo $_POST['email']; } ?>"><span class="error">
        <?php echo $emailErr;?></span>
    </div>

    <div>
        <input type="submit" value="Send" id="submit">
    </div>
</form>

</body>
</html>


And below is the contact-engine code:
<html>
<head>
    <title>Contact Engine</title>
</head>

<body>

    <br />Name:<?php echo htmlspecialchars($_POST['name']); ?><br />
    <br />Email:<?php echo htmlspecialchars($_POST['email']); ?><br />

</body>
</html>

【问题讨论】:

  • 您不需要输入action="&lt;?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?&gt;"&gt; 这会将表单提交到同一页面。完成的方法是将表单数据发送到您的contact-engine.php 文件并在那里执行验证。
  • 你好 Butterfruit,但是如果在 contact-engine.php 页面上完成验证,如果有错误,它们如何显示在初始页面上?是否无法通过添加 if 语句来编辑操作,说明验证是否良好,然后将表单发送到 contact-engine.php?谢谢你的帮助:)
  • 您必须在发送表单之前使用javascript进行验证
  • 你好 Andrei,我想这没关系,因为这里没有数据库连接,所以 JavaScript 验证会更好更快,因为它不必去服务器。我会看看这种方式,希望它更容易。我从 w3schools 那里得到了很多上面的代码,他们只带我去验证!太好了,我现在有一个我无法做任何事情的表格!感谢您的帮助。
  • @Margate 检查答案。

标签: php forms validation post


【解决方案1】:

你可以试试这个。下面是一个简单的代码,您可以通过它来实现:

//sample index.php file
<?php
  include 'submitted.php';
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
      <input type="text" name="foo" />
      <input type="submit" value="submit">
</form>
</body>
</html>

在这里,我使用 post 方法将表单提交到同一页面。但是,我包含了另一个文件 include 'submitted.php'

这是submitted.php里面的测试脚本

//sample submitted.php
<?php
  if(isset($_POST['foo']))
 {
    if(strlen($_POST['foo']) < 5){
  echo "String length too small";
  }
  else
  {
   echo $_POST['foo'];
  }
 }
?>

对于测试,它只是检查长度是否超过 5。如果不是,则错误消息将显示在您的页面所在的同一页面上。

自己也测试一下。

【讨论】:

  • 好的,我已将 foo 更改为我的电子邮件地址并将其发送给我 :) 我确信我现在正处于能够解决我的问题的正确轨道上。我将在这里使用您的代码并将其添加到我的表单中。经过 3 天的尝试并尝试使用 jQuery 来做这件事,我正要放弃。由于您的帮助,我相信我现在可以解决这个问题 :) 非常感谢您的时间和帮助。当我擅长 php 时,我会帮助别人。
  • 是的,你总是可以让它变得越来越好。一切顺利:)
猜你喜欢
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
相关资源
最近更新 更多