【问题标题】:Html + PHP contact form (Page Not found)Html + PHP 联系表(页面未找到)
【发布时间】:2019-02-03 20:22:02
【问题描述】:

我创建了一个简单的 Html 页面index.html,用户可以在其中提交消息。创建了一个额外的 PHP 文件 email_form.php 来捕获表单提交并将表单内容发送到我的电子邮件地址。

index.html:

<form name="contactform" method="POST" action="email_form.php">
   <div class="form-group">
     <div class="form-row">
       <div class="col" id="prenom">
         <input type="text" class="form-control" placeholder="Prénom" required="True" name="prenom">
       </div>

       <div class="col" id="nom">
         <input type="text" class="form-control" placeholder="Nom" required="True" name="nom">
       </div>
    </div>

    <div class="col" id="age">
      <input type="number" class="form-control" placeholder="Age" required="True" name="age">
    </div>

    <div class="form-row">
      <div class="col" id="tel">
        <input type="tel" class="form-control" placeholder="Téléphone" name="tel">
      </div>

      <div class="col" id="mail">
        <input type="email" class="form-control" placeholder="Email" name="email">
      </div>
   </div>

   <textarea class="form-control" id="exampleFormControlTextarea1" rows="3" placeholder="Your message" name="message"></textarea>
   <div class="row">
     <div class="col-xs-6" id="button">
       <button type="submit" name="submit" class="btn btn-primary">Send</button>
     </div>
  </div>
 </div>
</form>

email_form.php:

<?php

if(isset($_POST['submit'])) {

    $email_to = "info@mysite.com";
    $email_subject = "Email subject";

    $prenom = $_POST['prenom'];
    $nom = $_POST['nom']; 
    $age = $_POST['age']; 
    $tel = $_POST['tel']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }

    $email_message .= "Prénom: ".clean_string($prenom)."\n";
    $email_message .= "Nom: ".clean_string($nom)."\n";
    $email_message .= "Age: ".clean_string($age)."\n";
    $email_message .= "Telephone: ".clean_string($tel)."\n";
    $email_message .= "Message: ".clean_string($message)."\n";

    // create email headers
    $headers = "From: ".$email."\n\n";
    mail($email_to, $email_subject, $email_message, $headers);
    header("Location: index.html");
}   
?>

在网站上,当我尝试提交消息时,它会将我重定向到如下所示的链接:mysite.com/email_form.php,并显示错误消息“找不到页面”。我对 PHP 了解不多,也说不出我做错了什么。

【问题讨论】:

  • email_form.php 是否与您的索引页位于同一目录中?您正在运行什么样的服务器环境?如果不设置一些服务器指令来处理 PHP 文件,PHP 可能无法开箱即用。
  • 向我们展示您的文件/文件夹结构(以树状视图的形式)。
  • email_form.phpindex.html 页面位于同一目录中。但是我不知道服务器环境。即使我没有在我的localhost 上工作,我也需要它吗?
  • @TomsRiver 看来您在服务器上没有那个php 文件,正如您所说Do I need it even though I'm not working on my localhost? 没有该文件在服务器上如何工作?是的,您也需要在服务器上安装它。
  • 当然文件在保存目录和服务器中为index.html。我以为@tshimkus 正在谈论专门针对email_form.php 的附加服务器

标签: php html


【解决方案1】:

首先你应该有一个结束表单标签&lt;/form&gt;

然后:

  1. 将 php 代码粘贴到 HTML 文件的顶部,然后

  2. 将文件的扩展名更改为 .php

  3. 将表单的操作更改为 index.php

您的 index.php 应该如下所示:

<?php

if(isset($_POST['submit'])) {

    $email_to = "info@mysite.com";
    $email_subject = "Email subject";

    $prenom = $_POST['prenom'];
    $nom = $_POST['nom']; 
    $age = $_POST['age']; 
    $tel = $_POST['tel']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }

    $email_message .= "Prénom: ".clean_string($prenom)."\n";
    $email_message .= "Nom: ".clean_string($nom)."\n";
    $email_message .= "Age: ".clean_string($age)."\n";
    $email_message .= "Telephone: ".clean_string($tel)."\n";
    $email_message .= "Message: ".clean_string($message)."\n";

    // create email headers
    $headers = "From: ".$email."\n\n";
    mail($email_to, $email_subject, $email_message, $headers);
    header("Location: index.html");
}   
?>

  <form name="contactform" method="POST" action="index.php">
    <div class="form-group">
      <div class="form-row">
        <div class="col" id="prenom">
          <input type="text" class="form-control" placeholder="Prénom" required="True" name="prenom">
        </div>

        <div class="col" id="nom">
          <input type="text" class="form-control" placeholder="Nom" required="True" name="nom">
        </div>
      </div>

      <div class="col" id="age">
        <input type="number" class="form-control" placeholder="Age" required="True" name="age">
      </div>

      <div class="form-row">
        <div class="col" id="tel">
          <input type="tel" class="form-control" placeholder="Téléphone" name="tel">
        </div>

        <div class="col" id="mail">
          <input type="email" class="form-control" placeholder="Email" name="email">
        </div>
      </div>

      <textarea class="form-control" id="exampleFormControlTextarea1" rows="3" placeholder="Your message" name="message"></textarea>
      <div class="row">
        <div class="col-xs-6" id="button">
          <button type="submit" name="submit" class="btn btn-primary">Send</button>
        </div>
      </div>
    </div>
  </form>

【讨论】:

  • 实际上建议将表单和 PHP 代码分成两个不同的文件。这不仅为您提供更干净的文件,而且重用代码也会更容易。 (顺便说一句,您代码中的重定向转到 index.html,而不是 index.php)
【解决方案2】:

我已通过更改 email_form.php 中的header解决了这个问题。现在看起来像这样:

header("Location: https://example.com");

而且效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多