【问题标题】:HTML form showing code instead of PHP output显示代码而不是 PHP 输出的 HTML 表单
【发布时间】:2016-03-27 11:39:52
【问题描述】:

我一直在尝试将此表单实现到我的 HTML(Bootstrap 4 alpha)网站中,但无法使其正常工作。

让我们从目标开始:

  1. 在发送电子邮件之前检查是否为所有字段提供了有效输入的工作表单。
  2. 如果用户没有为一个或多个字段输入有效的输入,则页面本身会显示错误消息(因此不会重定向到错误页面)。
  3. 最好,当用户在输入字段之一出现错误并显示错误时,之前输入的数据应保留在字段中。

我在 Internet 的某个地方找到了一些有用的帮助,我可以使用其中的 PHP 和 HTML 来使用我需要的东西。但是,即使我在不​​更改任何内容的情况下上传原始代码,此表单也不起作用。

我认为我上传到的服务器可能不支持 PHP,但它确实支持,而且我什至得到了一个可以正常工作的表单,它只接受输入并将其发送给接收者,而无需询问任何问题。

我没有开始工作的是在我的 HTML 中回显我的 PHP 文件的输出。我做错了什么?

HTML:

<form action="php/mail.php" role="form" method="post" class="">
    <div class="form-group">
        <label for="name" class="col-sm-2 control-label sr-only">Naam</label>
        <input type="text" class="form-control form-control-sm form" id="name" name="name" placeholder="Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">
        <?php echo "<p class='text-danger'>$errName</p>";?>
    </div>
    <div class="form-group">
        <label for="email" class="col-sm-2 control-label sr-only">Email</label>
        <input type="email" class="form-control form-control-sm form" id="email" name="email" placeholder="your.name@example.com" value="<?php echo htmlspecialchars($_POST['email']); ?>">
        <?php echo "<p class='text-danger'>$errEmail</p>";?>
    </div>
    <div class="form-group">
        <label for="message" class="col-sm-2 control-label sr-only">Message</label>
        <textarea class="form-control form-control-sm form" rows="4" name="message" placeholder="My Message..."><?php echo htmlspecialchars($_POST['message']);?></textarea>
        <?php echo "<p class='text-danger'>$errMessage</p>";?>
    </div>
    <div class="form-group">
        <label for="human" class="col-sm-2 control-label sr-only">2 + 3 = ?</label>
        <input type="text" class="form-control form-control-sm form" id="human" name="human" placeholder="2 + 3 = ?">
        <?php echo "<p class='text-danger'>$errHuman</p>";?>
    </div>
    <div class="form-group">
        <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary btn-sm">
        <input type="reset" value="Clear" class="btn btn-primary btn-sm">
    </div>
    <div class="form-group">
        <?php echo $result; ?>
    </div>
</form> 

PHP:

<?php
    if (isset($_POST["submit"])) {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $human = intval($_POST['human']);
        $from = 'Demo Contact Form'; 
        $to = 'test@testmail.com'; 
        $subject = 'Message from Contact Demo ';

        $body = "From: $name\n E-Mail: $email\n Message:\n $message";

        // Check if name has been entered
        if (!$_POST['name']) {
            $errName = 'Please enter your name';
        }

        // Check if email has been entered and is valid
        if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errEmail = 'Please enter a valid email address';
        }

        //Check if message has been entered
        if (!$_POST['message']) {
            $errMessage = 'Please enter your message';
        }
        //Check if simple anti-bot test is correct
        if ($human !== 5) {
            $errHuman = 'Your anti-spam is incorrect';
        }

// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
    if (mail ($to, $subject, $body, $from)) {
        $result='<div class="alert alert-success">Thank You! I will be in touch</div>';
    } else {
        $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
    }
}
    }
?>

我从中得到的结果是这样的:

在我看来,HTML 文件不执行 PHP 代码,而只是显示原始代码。我尝试将 HTML 保存为 .html 和 .php,两者都给出了不同但错误的结果。

【问题讨论】:

  • 在您的屏幕截图上看到这些通知了吗?修复它们或压制它们,您的问题就会消失。但是我强烈建议不要抑制它们,而是在使用它们之前声明你的变量。这样你就不太可能再犯错误了。
  • 您正在尝试回显 POST 变量。在提交表单之前不会设置 POST 变量。

标签: php html forms twitter-bootstrap


【解决方案1】:

只是:

<?php if (isset($errName)) { echo "<p class='text-danger'>$errName</p>"; } ?>

适用于所有领域。

您的评论:

 // Create this variable for your error detection
 $hasError = FALSE;

 // Check if name has been entered
 if (!$_POST['name']) {
      $errName = 'Please enter your name';
      $hasError = TRUE;
 }

 // Check if email has been entered and is valid
if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $errEmail = 'Please enter a valid email address';
    $hasError = TRUE;
}

//Check if message has been entered
if (!$_POST['message']) {
    $errMessage = 'Please enter your message';
    $hasError = TRUE;
}

//Check if simple anti-bot test is correct
if ($human !== 5) {
   $errHuman = 'Your anti-spam is incorrect';
   $hasError = TRUE;
}

// If there are no errors, send the email
if ($hasError == FALSE) {
   ....

【讨论】:

  • 好的,谢谢,这使错误消息消失了。但是,这些字段仍然充满了代码,并且代码似乎无法正常工作:当我发送它时,它给了我: 注意:未定义的变量:/public/sites/www.thefavorites.nl/new- 中的 errName site/php/contactform.php 第 33 行
【解决方案2】:

正如文森特刚刚提到的,这应该是解决您问题的方法,但它也可以有一点解释。

PHP只能回显已经存在的变量,所以要回显它们必须存在,否则会报错。

所以基本上isset() 函数会检查变量是否存在。 isset() 返回一个 bool(true of false),如 PHP docs 中所述。

您可以查看此示例以了解更多详细信息:W3School

【讨论】:

    【解决方案3】:

    看起来全部是因为您在使用它之前还没有使用 isset() 验证所有变量

    if(isset($varialbe))
    {
       // ... use $varialbe here ...
    }
    

    你可以在三元运算符(条件)的帮助下使用它?真部分:假部分;喜欢

    $othervariable = (isset($varialbe))?$varialbe:'';
    

    echo ((isset($varialbe))?$varialbe:'');
    

    【讨论】:

      【解决方案4】:

      首先,将 error_reporting 放在顶部,将其关闭。

      error_reporting(0);
      

      然后再次提交表单。确保表单文件必须以 .php 格式保存。

      我可以看到你的文件代码应该是这样的:

      <?php
          error_reporting(0);
          if (isset($_POST["submit"])) {
              $name = $_POST['name'];
              $email = $_POST['email'];
              $message = $_POST['message'];
              $human = intval($_POST['human']);
              $from = 'Demo Contact Form'; 
              $to = 'test@testmail.com'; 
              $subject = 'Message from Contact Demo ';
      
              $body = "From: $name\n E-Mail: $email\n Message:\n $message";
      
              // Check if name has been entered
              if (!$_POST['name']) {
                  $errName = 'Please enter your name';
              }
      
              // Check if email has been entered and is valid
              if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
                  $errEmail = 'Please enter a valid email address';
              }
      
              //Check if message has been entered
              if (!$_POST['message']) {
                  $errMessage = 'Please enter your message';
              }
              //Check if simple anti-bot test is correct
              if ($human !== 5) {
                  $errHuman = 'Your anti-spam is incorrect';
              }
      
      // If there are no errors, send the email
      if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
          if (mail ($to, $subject, $body, $from)) {
              $result='<div class="alert alert-success">Thank You! I will be in touch</div>';
          } else {
              $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
          }
      }
          }
      ?>
      <form action="yourfilename.php" role="form" method="post" class="">
          <div class="form-group">
              <label for="name" class="col-sm-2 control-label sr-only">Naam</label>
              <input type="text" class="form-control form-control-sm form" id="name" name="name" placeholder="Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">
              <?php echo "<p class='text-danger'>$errName</p>";?>
          </div>
          <div class="form-group">
              <label for="email" class="col-sm-2 control-label sr-only">Email</label>
              <input type="email" class="form-control form-control-sm form" id="email" name="email" placeholder="your.name@example.com" value="<?php echo htmlspecialchars($_POST['email']); ?>">
              <?php echo "<p class='text-danger'>$errEmail</p>";?>
          </div>
          <div class="form-group">
              <label for="message" class="col-sm-2 control-label sr-only">Message</label>
              <textarea class="form-control form-control-sm form" rows="4" name="message" placeholder="My Message..."><?php echo htmlspecialchars($_POST['message']);?></textarea>
              <?php echo "<p class='text-danger'>$errMessage</p>";?>
          </div>
          <div class="form-group">
              <label for="human" class="col-sm-2 control-label sr-only">2 + 3 = ?</label>
              <input type="text" class="form-control form-control-sm form" id="human" name="human" placeholder="2 + 3 = ?">
              <?php echo "<p class='text-danger'>$errHuman</p>";?>
          </div>
          <div class="form-group">
              <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary btn-sm">
              <input type="reset" value="Clear" class="btn btn-primary btn-sm">
          </div>
          <div class="form-group">
              <?php echo $result; ?>
          </div>
      </form> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-01
        • 2021-12-19
        • 2014-06-12
        • 2020-09-20
        • 1970-01-01
        • 2020-01-09
        • 2018-03-11
        • 2020-02-25
        相关资源
        最近更新 更多