【问题标题】:PHP contact form validationPHP 联系表单验证
【发布时间】:2013-04-22 11:07:16
【问题描述】:

我只是想知道如果此 PHP 代码可用于验证 HTML 联系表单输入,是否有人可以提供帮助。我按照教程创建了这个 PHP 验证,但我不确定它是否会起作用。我还没有虚拟主机来测试它,但如果有人有服务器,如果有人能帮我一个忙,如果你可以发送/接收电子邮件,我将不胜感激。谢谢!! 我正在使用 jQuery 验证插件在客户端验证表单,这是教程 http://www.youtube.com/watch?v=rdsz9Ie6h7I
HTML 表单:

<form action="contact.php" method="post">
<label for="yourname">Your Name:</label>
<input type="text" name="YourName"/>

<label for="youremail">Your Email:</label>
<input type="text" name="YourEmail" />

<label for="yourmessage">Your Message:</label>
<textarea  name="YourMessage"></textarea>

<fieldset>
<input type="submit" id="submit" value="Send"/>
<input type="reset" id="reset" value="Reset"/>
</fieldset>

PHP Code:

<?php

/* Subject and Email Variables */

 $emailSubject = 'Email from site visitor';
 $webMaster = 'YourEmail@mail.com';

/* Getting Form Data Variables */

    $nameField = $_POST['YourName'];
    $emailField = $_POST['YourEmail'];
    $messageField = $_POST['YourMessage'];

    $body = <<<EOD
<br><hr><br>
Name: $YourName <br>
Email: $YourEmail <br>
Message: $YourMessage <br>

EOD;

    $headers = "From: $YourEmail\r\n";  
    $headers .= "Content-type: text/html\r\n";

    $success = mail($webMaster, $emailSubject, $body, $headers);

    $theResults = <<<EOD
<html>
<head>
</head>
<body>
<p style="font-size:12px;font-family:Tahoma,Verdana;">Thanks for your Message.</p>
</body>
</html>

EOD;

echo "$theResults";

?>

【问题讨论】:

  • 您不需要异地服务器来测试您的 PHP。只需安装XAMPP
  • 仅供参考,如果您在本地安装了 php 5.4,它会自带用于测试的 Web 服务器 php.net/manual/en/features.commandline.webserver.php
  • 为什么不在网络服务器上运行?
  • 感谢您的评论。是的,我使用过 xampp,但我收到错误通知:未定义变量:C:\xampp\htdocs\site3\contact.php 中的 YourName 第 17 行也用于其他输入。老实说,我对 PHP 服务器端的东西不太熟悉,但我会尝试解决它。​​感谢您提供的链接,我会检查一下。
  • 该通知是因为您使用了错误的变量名...请注意下面我的回答中的 #2。

标签: php html forms validation


【解决方案1】:

如果您现在没有网络服务器,您可以安装一个本地服务器并在那里进行测试。完全免费。

http://www.apachefriends.org/en/xampp-windows.html#641

/* Getting Form Data Variables */

    $nameField = $_POST['YourName'];
    $emailField = $_POST['YourEmail'];
    $messageField = $_POST['YourMessage'];

    $body = <<<EOD
<br><hr><br>
Name: $nameField<br>
Email: $emailField <br>
Message: $messageField <br>

【讨论】:

  • 感谢您的评论,我已经尝试过,但我收到这些错误通知:未定义变量:第 17 行 C:\xampp\htdocs\site3\contact.php 中的 YourName 注意:未定义变量:第 18 行 C:\xampp\htdocs\site3\contact.php 中的 YourEmail 注意:未定义变量:第 19 行 C:\xampp\htdocs\site3\contact.php 中的 YourMessage 注意:未定义变量:C:\xampp 中的 YourEmail第 22 行的 \htdocs\site3\contact.php 感谢您的留言。
  • 正如通知所说,您没有声明这些变量是正确的。我编辑了我的帖子。但是还有很多其他的问题,还有语法一次。
  • 非常感谢迈克尔,不知道,现在可以了。没有得到那些错误
  • 我接受并感谢您的所有回答/帮助,但请让我尝试 Stevens 解决方案。
【解决方案2】:

很多问题

  1. 您根本没有在 PHP 端进行验证。我在下面添加了成功或失败消息的验证和条件渲染
  2. 您没有使用检索到的变量名称(而是使用 $YourEmail) - 帖子名称
  3. 您的表单标签与输入名称不匹配
  4. 您的表单元素未关闭,并且您的字段未全部在字段集中,并且该字段集没有图例。
  5. 在失败的情况下,我在表单中添加了一个值预填充,因此人们不会在提交时返回到空白表单。
  6. 为此,我将表单放在最后,在 PHP 之后

代码:

(注意:这将全部放入文件contact.php

<?php

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

    /* Getting Form Data Variables */

    $nameField = isset($_POST['YourName']) ? $_POST['YourName'] : null;
    $emailField = isset($_POST['YourEmail']) ? $_POST['YourEmail'] : null;
    $messageField = isset($_POST['YourMessage']) ? $_POST['YourMessage'] : null;

    // Validate
    $failures = array();
    if (strlen($nameField)) $failures[] = "Name is required";
    if (strlen($emailField)) $failures[] = "Email is required";
    if (filter_var($email,FILTER_VALIDATE_EMAIL) === false) $failures[] = "Email is invalid";
    if (strlen($messageField)) $failures[] = "Message is required";

    // If validation errors, render them
    if (count($failures)) {
        echo "<p><b>Failed to submit: " . implode(", ", $failures) . "</b></p>";
    } else {
        /* Subject and Email Variables */
        $emailSubject = 'Email from site visitor';
        $webMaster = 'YourEmail@mail.com';

        $body = <<<EOD
            <br><hr><br>
            Name: {$nameField} <br>
            Email: {$emailField} <br>
            Message: {$messageField} <br>
        EOD;


        $headers = "From: {$emailField}\r\n";  
        $headers .= "Content-type: text/html\r\n";
        $success = mail($webMaster, $emailSubject, $body, $headers);

        $theResults = <<<EOD
            <p>Thanks for your Message.</p>
EOD;

        echo "$theResults";
    }
}

?>

<form action="contact.php" method="post">
    <fieldset>
        <legend>Contact Us</legend>
        <label for="YourName">Your Name:</label>
        <input type="text" name="YourName" value="<?=$nameField?>" />

        <label for="YourEmail">Your Email:</label>
        <input type="text" name="YourEmail" value="<?=$emailField?>" />

        <label for="YourMessage">Your Message:</label>
        <textarea  name="YourMessage"><?=$messageField?></textarea>

        <input type="submit" id="submit" value="Send"/>
        <input type="reset" id="reset" value="Reset"/>
    </fieldset>
</form>

【讨论】:

  • 很高兴它对您有用。 :) 请添加赞成票/复选标记,以便我获得该答案的功劳!谢谢!
  • 您好,感谢您指出,我忘了包含结束表单标签。顺便说一句,您提供了 $failures = array();客户端的验证对吗?所以我不必使用 jquery 插件来验证表单?
  • 不,你不再需要 jQuery。
猜你喜欢
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多