【问题标题】:Php contact form errorsPHP 联系表格错误
【发布时间】:2013-05-01 00:59:55
【问题描述】:

我正在构建一个 php 联系表单,用于检查某些字段是否已填写(无 ajax)。 表格不能 100% 工作。我会尽力解释。当我提交表单时,用户导航到http://mydomain.com/send.php 收到我的错误信息(如果有的话)。当我刷新 send.php 页面时,我收到以下错误:Notice: Undefined index: name in /Library/WebServer/Documents/~aledvertising/send.php

这是我的代码

html 表单

<form method="post" action="send.php">
    <div id="form-top">

    </div>
    <div id="form-left">  
<label>Naam:<span class="star">*</span></label>
    <input name="name" placeholder="Uw naam">


    <label>Email:<span class="star">*</span></label>
    <input name="email" type="email" placeholder="Uw email">

    <label>Hoeveel is 2+2? (Anti-spam)<span class="star">*</span></label>
<input name="human" placeholder="Uw antwoord">

    </div>
    <div id="form-right">
    <label>Uw bericht:<span class="star">*</span></label>
    <textarea name="message" placeholder="Uw bericht"></textarea>
    </div>
        <input id="submit" name="submit" type="submit" value="Verzenden">
</form>

SEND.PHP

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: ' . $_POST['email']; 
    $to  = 'myemail@mail.com' . ', '; 
    $to .= $_POST['email'];
    $subject = 'Uw vraag op www.aledvertising.be';
    $human = $_POST['human'];

    $body = "From: $name\n E-Mail: $email\nMessage:\n $message";
 ?>
 <?php
if ($_POST['submit']) {
    if ($name != '' && $email != '' && $message != '') {
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
            echo '<p class="green">Uw bericht is succesvol verzonden.</p>';
        } else { 
            echo '<p>Er iets misgelopen, probeer opnieuw aub.</p>'; 
        } 
    } else if ($_POST['submit'] && $human != '4') {
        echo '<p>2+2 is niet gelijk aan het getal dat u hebt ingevoerd.</p>';
    }
    } else {
        echo '<p>Alle velden met een * zijn verplicht in te vullen.</p>';
    }
}
    ?>

有人可以帮我获得一份完整的工作表格吗?谢谢你

【问题讨论】:

  • 您的表单可以进行邮件标头注入。 永远不要相信那些 $_POST 变量。你今天不应该庆祝女王节吗? ;-)
  • 好像没有设置,只是给你一个通知

标签: php contact-form


【解决方案1】:

你应该看到来自 php 的 isset 方法。

<?php
if(isset($_POST["name"]))
{
//code here

}
?>

问题是当您重新加载页面时,服务器端代码会查找索引name,但它没有找到它,因为name 还没有任何值。提交页面后会收到该值。所以这就是错误存在的原因。

更新

错误在于,当您提交表单时,有些字段可能会发送为空,因此一旦发布值转到 send.php,就会有 $_POST 期望值。如果他们中的一些人没有接受价值,它会告诉你:“嘿,我没有价值,所以我是空的”。这就是为什么您必须检查所有字段是否都已填写或在服务器端进行验证的原因。

<?php
if(isset($_POST["name"],$_POST["last_name"],etc,etc))
{
//if everything ok, ill go on.
}
else{
//if there are empty field, go back
}

?>

更新 2

if (isset($_POST['name'],$_POST['email'],$_POST['message'])){

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: ' . $_POST['email']; 
    $to  = 'myemail@mail.com' . ', '; 
    $to .= $_POST['email'];
    $subject = 'Uw vraag op www.aledvertising.be';
    $human = $_POST['human'];

    $body = "From: $name\n E-Mail: $email\nMessage:\n $message";
    if ($name != '' && $email != '' && $message != '') {
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
            echo '<p class="green">Uw bericht is succesvol verzonden.</p>';
        } else { 
            echo '<p>Er iets misgelopen, probeer opnieuw aub.</p>'; 
        } 
    } else if ($_POST['submit'] && $human != '4') {
        echo '<p>2+2 is niet gelijk aan het getal dat u hebt ingevoerd.</p>';
    }
    } else {
        echo '<p>Alle velden met een * zijn verplicht in te vullen.</p>';
    }
}

【讨论】:

  • 感谢 EinerS,但 html 表单页面上的操作 (send.php) 是否正确?我只需要编辑我的 send.php ?
  • 可能是或不是。为什么?好吧,只要 send.php 在同一目录中,是的。如果没有,不。请参阅 [see here](webdesign.about.com/od/beginningtutorials/a/aa040502a.htm) 了解有关相对和绝对路径的更多信息。
  • EinerS,我了解相对绝对路径。 Send.php 位于同一目录中。只是为了确定我必须做什么:
  • 您的链接已损坏。使用[this form](http://example.com) 创建超链接。
  • 对不起。完毕。您现在可以查看。
【解决方案2】:
<?php
if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: ' . $_POST['email']; 
    $to  = 'myemail@mail.com' . ', '; 
    $to .= $_POST['email'];
    $subject = 'Uw vraag op www.aledvertising.be';
    $human = $_POST['human'];

    $body = "From: $name\n E-Mail: $email\nMessage:\n $message";
    if ($name != '' && $email != '' && $message != '') {
        if ($human == '4') {                 
            if (mail ($to, $subject, $body, $from)) { 
            echo '<p class="green">Uw bericht is succesvol verzonden.</p>';
        } else { 
            echo '<p>Er iets misgelopen, probeer opnieuw aub.</p>'; 
        } 
    } else if ($_POST['submit'] && $human != '4') {
        echo '<p>2+2 is niet gelijk aan het getal dat u hebt ingevoerd.</p>';
    }
    } else {
        echo '<p>Alle velden met een * zijn verplicht in te vullen.</p>';
    }
}
?>

设置 isset() 函数,然后声明变量对我有用,在我的服务器中对其进行了测试,没有给出任何错误并且表单提交成功...

请检查一次...

【讨论】:

  • 这对我有用!感谢数字化!但是有一个问题,这是处理表格的正确方法吗?
  • @NielsJansen:不,你不能假设因为$_POST['submit'] 存在,所有其他的也存在。
  • 实在看不懂了。我没有收到来自数字化仪的代码错误,但我再也没有收到电子邮件。我只是不知道如何更改我的代码。我不知道在 if(isset($_POST["name"],$_POST["last_name"],etc,etc)) 之后要写什么
  • 你说的email,是email表单域的值还是没有发送的实际email?我还看到您使用的电子邮件值是 myemail@mail.com.??
  • 谢谢 EinerS。该表格现在 100% 有效。这也是100%保存。 (阅读有关标头注入的内容)。问题2:我收到的邮件是纯文本,没有任何布局,我可以调整一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
相关资源
最近更新 更多