-4

这是html

它称为contact.html php 是外部文件。

这是 php

 <form action="mailer.php"  method="post">

          <label>Name</label>
        <input name="name" placeholder="Type Here">

        <label>Email</label>
        <input name="email" type="email" placeholder="Type Here">

        <label>Contact Number</label>
        <input name="number" type="text" placeholder="Type Here">

        <label>Message</label>
        <textarea name="message" placeholder="Type Here"></textarea>
        <br/>

        <input id="submit" name="submit" type="submit" value="Submit">

    </form>

下面是 php,该文件名为 mailer.php。我需要知道这种形式是否有效,如果无效,可能出现什么问题。或者,如果您有其他建议。感谢帮助。

 <?php
        $name = $_POST['name'];
        $email = $_POST['email'];
        $number = $_POST['number'];
        $message = $_POST['message'];
        $from = 'From:me'; 
        $to = 'me@hotmail.com'; 
        $subject = 'Hello';

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




 if ($_POST['submit']) {
        if ($name != '' && $email != '') {
            if ($human == '4') {                 
                if (mail ($to, $subject, $body, $from)) { 
                echo '<p>Your message has been sent!</p>';
            } else { 
                echo '<p>Something went wrong, go back and try again!</p>'; 
            } 
        } else if ($_POST['submit'] && $human != '4') {
            echo '<p>You answered the anti-spam question incorrectly!</p>';
        }
        } else {
            echo '<p>You need to fill in all required fields!!</p>';
        }
    }
    ?>
4

2 回答 2

0

我唯一看到错误的是$human任何参考。你还没有在任何地方宣布这一点。我认为这是某种捕获。可能是带有“whats 2+2”标签的输入字段。如果在输入字段中写入 4,那么它是人类,如果不是,那么它是一个机器人。这是低级别的机器人测试,但可能足以满足您的需求。应该保持空白的隐藏字段也是测试机器人的好方法。机器人会筛选阅读并填写隐藏字段,从而使表单无效。

<form action="mailer.php"  method="post">

          <label>Name</label>
        <input name="name" placeholder="Type Here">

        <label>Email</label>
        <input name="email" type="email" placeholder="Type Here">

        <label>Contact Number</label>
        <input name="number" type="text" placeholder="Type Here">

        <label>Message</label>
        <textarea name="message" placeholder="Type Here"></textarea>
        <br/>

        <label>What's 2+2</label>
         <input name="human" type="number" placeholder="Type Here">
        <br/>

        <input id="submit" name="submit" type="submit" value="Submit">

    </form>

php

$name = $_POST['name'];
$email = $_POST['email'];
$number = $_POST['number'];
$message = $_POST['message'];
$from = 'From:me'; 
$to = 'me@hotmail.com'; 
$subject = 'Hello';
$human = $_POST['human'];

// rest of code

在你的 php 文件的末尾放这个,它会将他们带到你可以创建的感谢页面

header("Location: thanks.html");

或者你可以把这个

header("Location: contact.php?thanks");

请注意,您需要将联系页面上的文件扩展名从.html更改为.php. 就是这样,然后我们php在您的页面上运行并检查页面是否从 php 文件加载,如果是,我们可以显示感谢消息而不是表单。

将您的表单更改为如下所示。它将检查页面是否已从 php 文件加载。

<?php
if($_REQUEST["thanks"]) {
    ?>
    <p>Thanks for your form submition</p>
    <?php
} else {
?>
  <form action="mailer.php"  method="post">

          <label>Name</label>
        <input name="name" placeholder="Type Here">

        <label>Email</label>
        <input name="email" type="email" placeholder="Type Here">

        <label>Contact Number</label>
        <input name="number" type="text" placeholder="Type Here">

        <label>Message</label>
        <textarea name="message" placeholder="Type Here"></textarea>
        <br/>

        <label>What's 2+2</label>
         <input name="human" type="number" placeholder="Type Here">
        <br/>

        <input id="submit" name="submit" type="submit" value="Submit">

    </form>
<?php
}
?>
于 2013-08-17T17:14:39.833 回答
0

至少,您的 mailer.php 文件将失败,因为 $human 没有被设置,而是被检查/需要发送电子邮件。

下面我添加了一行(上面有评论),它将允许邮件发送。

警告:进行此更改将打开此表单以供机器人使用/垃圾邮件!

$name = $_POST['name'];
$email = $_POST['email'];
$number = $_POST['number'];
$message = $_POST['message'];
$from = 'From:me'; 
$to = 'me@hotmail.com'; 
$subject = 'Hello';
// To at least get it to run, add the below (this will allow spamming, but get the form to work)
$human = 4;

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




if ($_POST['submit']) {  
    if ($name != '' && $email != '') {
        // $human variable is not being set above, so this will never pass
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
                echo '<p>Your message has been sent!</p>';
            } else { 
                echo '<p>Something went wrong, go back and try again!</p>'; 
            } 
        } else if ($_POST['submit'] && $human != '4') {
            echo '<p>You answered the anti-spam question incorrectly!</p>';
        }
    } else {
        echo '<p>You need to fill in all required fields!!</p>';
    }
}
?>
于 2013-08-17T17:16:32.037 回答