【问题标题】:Contact Form without ajax just php and html page没有ajax的联系表格只是php和html页面
【发布时间】:2020-02-13 09:47:10
【问题描述】:

我有一个简单的联系表 它的工作原理非常烦人,但我希望在一个小盒子里的同一页面上显示结果 就在表格下面 失败消息和成功的地方

<form method="post" action="contact.php" name="contactform" id="contactform">
    <div class="one_half">
        <input name="name" type="text" id="name" size="30" onfocus="if(this.value == 'Name') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Name'; }" value="Name">
        <input name="alter" type="text" id="alter" size="3" onfocus="if(this.value == 'Alter') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Alter'; }" value="Alter">
        <input name="email" type="text" id="email" size="30" onfocus="if(this.value == 'E-Mail') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'E-Mail'; }" value="E-Mail">
        <input name="phone" type="text" id="phone" size="30" onfocus="if(this.value == 'Handynummer') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Handynummer'; }" value="Handynummer">
        <input name="facebook" type="text" id="facebook" size="200" onfocus="if(this.value == 'Facebook') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Facebook'; }" value="Facebook">
        <input name="instagram" type="text" id="instagram" size="200" onfocus="if(this.value == 'Instagram') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Instagram'; }" value="Instagram">
    </div>
    <div class="one_half last">
        <textarea name="comments" cols="40" rows="3" id="comments" onfocus="if(this.value == 'Nachricht') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'Nachricht'; }">Nachricht</textarea>
    </div>
    <input type="submit" class="send_message" id="submit" value="Senden"/>
</form>

这里是 PHP 文件

<?php
    if (!$_POST) exit;

    if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $comments = $_POST['comments'];
    $alter = $_POST['alter'];
    $facebook = $_POST['facebook'];
    $instagram = $_POST['instagram'];

    if (get_magic_quotes_gpc()) {
        $comments = stripslashes($comments);
    }

    $address = "xxx@xxx.de";
    $e_subject = 'Contact from ' . $name;
    $e_body = "von: $name" . PHP_EOL . PHP_EOL;
    $e_reply = "Alter: $alter\r\nE-mail: $email\r\nHandynummer: $phone";
    $e_content = "Nachricht:\r\n$comments" . PHP_EOL . PHP_EOL;
    $e_links = "Facebook:\r\n$facebook\r\nInstagram:\r\n$instagram" . PHP_EOL . PHP_EOL;

    $msg = wordwrap($e_body . $e_links . $e_content . $e_reply, 70);

    $headers = "From: $email" . PHP_EOL;
    $headers .= "Reply-To: $email" . PHP_EOL;
    $headers .= "MIME-Version: 1.0" . PHP_EOL;
    $headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
    $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

    if (mail($address, $e_subject, $msg, $headers)) {

        // Email has sent successfully, echo a success page.

        echo "<fieldset>";
        echo "<div id='success_page'>";
        echo "<h1>Bewerbung erfolgreich</h1>";
        echo "<p>Danke <strong>$name</strong>, deine Bewerbung wurde erfolgreich an uns gesendet</p>";
        echo "</div>";
        echo "</fieldset>";

    } else {
        echo 'FEHLER!';
    }

效果很好

但它总是在新网站上,无论是错误还是成功。

我想在显示所有结果的表单下添加一个小块

我希望你能帮助我。

我不想要 ajax 或其他东西。我只是希望它按原样添加。

【问题讨论】:

  • Ajax 是要走的路,但如果您不想使用它,请尝试使用框架。
  • ajax其实是最简单的实现方式
  • ajax 更容易吗?我不是一个好的 php 编码器。谢谢
  • 您的页面需要回发给自己,然后在回发后重新回显表单以及消息。但正如其他人所说,AJAX 可能实际上更容易。您反对使用 AJAX 的原因是什么?
  • 我不擅长阅读或编写那些繁重的代码 :) 如果 ajax 很简单,我也可以添加我的检查例程,那么它也可以

标签: php forms submit


【解决方案1】:

您的问题的解决方案可能是在同一个 PHP 文件中包含表单呈现的逻辑。这样做,表单操作将是同一个 PHP 文件,因此它将在呈现表单视图之前加载 PHP 代码。这样,您就可以根据发送电子邮件的输出呈现任何您想要的表单。

例如,仔细查看$mailResult 变量:

<?php

$name = $_POST['name'] ?? null;
$email = $_POST['email'] ?? null;
$phone = $_POST['phone'] ?? null;
$comments = $_POST['comments'] ?? null;
$alter = $_POST['alter'] ?? null;
$facebook = $_POST['facebook'] ?? null;
$instagram = $_POST['instagram'] ?? null;

if (get_magic_quotes_gpc()) {
    $comments = stripslashes($comments);
}

$address = "xxx@xxx.de";
$e_subject = 'Contact from ' . $name;
$e_body = "von: $name" . PHP_EOL . PHP_EOL;
$e_reply = "Alter: $alter\r\nE-mail: $email\r\nHandynummer: $phone";
$e_content = "Nachricht:\r\n$comments" . PHP_EOL . PHP_EOL;
$e_links = "Facebook:\r\n$facebook\r\nInstagram:\r\n$instagram" . PHP_EOL . PHP_EOL;
$msg = wordwrap($e_body . $e_links . $e_content . $e_reply, 70);

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
$mailResult = '';

if (isset($name, $email)) {
    if (mail($address, $e_subject, $msg, $headers)) {
        $mailResult = "<fieldset>";
        $mailResult .= "<div id='success_page'>";
        $mailResult .= "<h1>Bewerbung erfolgreich</h1>";
        $mailResult .= "<p>Danke <strong>$name</strong>, deine Bewerbung wurde erfolgreich an uns gesendet</p>";
        $mailResult .= "</div>";
        $mailResult .= "</fieldset>";
    } else {
        $mailResult .= 'FEHLER!';
    }
}
?>
<html lang="en">
<head>
    <title>Title page!</title>
</head>
<body>
<form method="post" name="contactform" id="contactform">
    <div class="one_half">
        <input name="name" type="text" id="name" size="30"
               onfocus="if(this.value === 'Name') { this.value = ''; }"
               onblur="if(this.value === '') { this.value = 'Name'; }"
               value="Name">
        <input name="alter" type="text" id="alter" size="3"
               onfocus="if(this.value === 'Alter') { this.value = ''; }"
               onblur="if(this.value === '') { this.value = 'Alter'; }"
               value="Alter">
        <input name="email" type="text" id="email" size="30"
               onfocus="if(this.value === 'E-Mail') { this.value = ''; }"
               onblur="if(this.value === '') { this.value = 'E-Mail'; }"
               value="E-Mail">
        <input name="phone" type="text" id="phone" size="30"
               onfocus="if(this.value === 'Handynummer') { this.value = ''; }"
               onblur="if(this.value === '') { this.value = 'Handynummer'; }"
               value="Handynummer">
        <input name="facebook" type="text" id="facebook" size="200"
               onfocus="if(this.value === 'Facebook') { this.value = ''; }"
               onblur="if(this.value === '') { this.value = 'Facebook'; }"
               value="Facebook">
        <input name="instagram" type="text" id="instagram" size="200"
               onfocus="if(this.value === 'Instagram') { this.value = ''; }"
               onblur="if(this.value === '') { this.value = 'Instagram'; }"
               value="Instagram">
    </div>
    <div class="one_half last">
        <textarea name="comments" cols="40" rows="3" id="comments"
                  onfocus="if(this.value === 'Nachricht') { this.value = ''; }"
                  onblur="if(this.value === '') { this.value = 'Nachricht'; }">
            Nachricht
        </textarea>
    </div>
    <input type="submit" class="send_message" id="submit" value="Senden"/>
</form>
<?php echo $mailResult ?>
</body>
</html>

无论如何我都会避免这种解决方案。我会用 AJAX 来解决这个问题。 在这些解决方案中,我们将逻辑与渲染混合在一起。

【讨论】:

  • 我猜这可能行得通,但你真的应该正确解释你的答案,而不仅仅是转储其他人(尤其是提问的人)可能无法立即理解重要部分的代码。
  • 你改变了什么? u 在页面顶部添加代码,在底部添加结果?
  • @ADyson 你是 100% 正确的。我用代码上方的一些解释更新了我的答案。
  • 在 index.html 顶部添加 php 文件有什么负面影响吗?
  • 好吧,这比将所有内容都放在同一个文件中要好...但是,您仍然可以从该 PHP 文件中获得一个变量 $mailResult查看文件”。问题是耦合逻辑视图。在这些场景中,我会选择 MVC 的观点。
猜你喜欢
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多