【问题标题】:Why isn't my php script working?为什么我的 php 脚本不起作用?
【发布时间】:2012-10-07 17:32:54
【问题描述】:

编辑:显然我必须付费才能在他们的网站上注册另一个域才能拥有电子邮件功能。抱歉浪费了时间,感谢代码修复。

我对php没有任何经验。我才刚刚开始弄清楚。我正在尝试让我的表格将输入的信息发送到我的电子邮件。我设置了一个 else 标签,但这就是发生的一切。如果您发现任何错误,请告诉我。我真的希望这个工作。自己看:Website 代码是:

HTML:

<form action="post_comment.php" method="post" id="commentform">

<label for="comment_author" class="required">Your Name</label>
<input name="name" id="name" tabindex="1" required="required"><br/><br/>

<label for="email" class="required">Your Email</label>
<input type="email" id="email" name="email" id="email" value="" tabindex="2"   required="required"><br/><br/>

<label for="comment" id="comment" class="required">Your Message</label><br/>

<textarea name="comment" rows="10" tabindex="4"  required="required"></textarea><br/>
<input id="submit" name="submit" type="submit" value="Submit Comment" />
<input id="send" name="send" type="hidden" value="1" />

</form>

PHP:

    <?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['comment'];
    $from = 'From: '. $email; 
    $to = 'powersjesse@yahoo.com'; 
    $subject = 'WEBSITE';

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

    if ($_POST['send'] == "1") { 
        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>'; 
    }}
?>

我在尝试提交表单时收到Something went wrong, go back and try again!更新代码。

【问题讨论】:

  • 好吧,因为我有 else 标签,它只是默认设置并显示“出了点问题......”
  • 我编辑了您的问题并在访问您的网站并尝试提交表单后添加了输出。
  • 谢谢大声笑。我没想到。
  • 编辑了我的答案;您的 mail() 调用的参数错误,特别是 $body。

标签: php forms html web


【解决方案1】:

根据你的代码:

   if ($_REQUEST['submit']) {               
        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>'; 
        }
   }

获取以下输出:

出了点问题,回去再试一次!

表示 mail() 函数出了问题,它返回了 false ,否则我们会看到 Your message has been sent! 消息。

mail() 函数的问题在于它不显示任何错误或警告,它只是返回 false

如何定位问题?

试着写这样的东西:

    if(mail("your.working.email@gmail.com" , "A subject for example" , "the content of this email","From: no-reply@yourdomain.com"))
     echo "We are good";
    else
     echo "Something not workin";

如果有效,请在声明后立即检查您发布的任何变量的值。

   echo $name;
   echo $email;
   echo $message;

确保这些变量不为空,并且$email 变量包含合法且经过验证的电子邮件地址。

如果基本的 mail 使用不起作用 - 这与您的 php settings (php.ini) 或您的服务器的限制有关(联系您的托管公司)。

EDIT1:关于你的html表单,input fieldstype属性应该是text而不是nameemail

而不是&lt;input type="email"...&lt;input type="text"...

【讨论】:

  • 那么我该如何测试呢?新的临时 php 并将其链接到我的提交按钮?
  • 只有mail 函数的新php文件(如我所写),然后按照说明与我们分享结果。
  • 我制作了 php 文件,但我该怎么处理它?将其链接到我页面上的提交按钮?
  • 不,只需上传并运行它。例如,bla.php - 访问yourdomain.com/path/to/bla.php。在这里写下这个 url 的输出是什么。
  • 好的。将我发送到没有电子邮件的空白页面。所以...服务器限制? -_-
【解决方案2】:
<form action="post_comment.php" method="post" id="commentform">

而不是method="request"

编辑添加 http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1

已编辑(响应已编辑的问题代码...)添加http://php.net/manual/en/function.mail.php

您的 mail() 参数顺序错误;应该是 $to, $subject, $message [, $additional_headers, etc.]

【讨论】:

  • 然后使用$_POST['comment']等访问表单值!
  • 好地方@nickhar;刚看到表格的错误,没仔细看php...
  • 好的。但它仍然给我同样的信息。
  • 您是否像 nickhar 建议的那样将 $_REQUEST['etc...'] 更改为 $_POST?
  • @PedrodelSol ,就我而言,参数的顺序很好。
【解决方案3】:

-> 使用 POST 而不是 REQUEST

-> comment 改为 message

HTML

<form action="post_comment.php" method="post" id="commentform">
<label for="comment_author" class="required">Your Name</label>
<input name="name" id="name" tabindex="1" required="required"><br/><br/>
<label for="email" class="required">Your Email</label>
<input type="email" id="email" name="email" id="email" value="" tabindex="2"  required="required"><br/><br/>
<label for="comment" id="comment" class="required">Your Message</label><br/>
<textarea name="message" rows="10" tabindex="4"  required="required"></textarea><br/>
<input id="submit" name="submit" type="submit" value="Submit Comment" />
</form>

PHP

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: '. $email; 
    $to = 'powersjesse@yahoo.com'; 
    $subject = 'WEBSITE';

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

    if ($_POST['submit']) {               
        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>'; 
    }}
?>

【讨论】:

    【解决方案4】:

    试试这个

    <form action="post_comment.php" method="post" id="commentform">
    
    <label for="comment_author" class="required">Your Name</label>
    <input name="name" id="name" tabindex="1" required="required"><br/><br/>
    
    <label for="email" class="required">Your Email</label>
    <input type="email" id="email" name="email" id="email" value="" tabindex="2"    required="required"><br/><br/>
    
    <label for="comment" id="comment" class="required">Your Message</label><br/>
    
    <textarea name="comment" rows="10" tabindex="4"  required="required"></textarea><br/>
    <input id="submit" name="submit" type="submit" value="Submit Comment" />
    

    在你的帖子页面中..

    if ($_SERVER['REQUEST_METHOD'] === 'POST')
    {
        $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: '. $email; 
    $to = 'powersjesse@yahoo.com'; 
    $subject = 'WEBSITE';
    
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
    
    $headers = "From: $from \r\n";
    //$headers .= "Reply-To: $visitor_email \r\n";
    
    mail($to, $subject, $body,$headers);
    }
    

    【讨论】:

      【解决方案5】:

      请按如下方式更改表格

      <form action="post_comment.php" method="post" id="commentform">
      

      在表单中你只能使用get/post

      【讨论】:

        【解决方案6】:

        您的“提交”字段是提交表单的 HTML 按钮,不会添加到表单中。添加另一个不可见的输入字段:

        <input id="send" name="send" type="hidden" value="1" />
        

        并通过以下方式访问 PHP 中的字段:

        if ($_REQUEST['send'] == "1") {
        

        希望对你有帮助。

        【讨论】:

        • 好的,我补充了。第二个替换 if ($_REQUEST['submit']) {
        • 当然,不是 $_REQUEST 而是 $_POST 是正确的命令:)
        【解决方案7】:
        <form action="post_comment.php" method="get" id="commentform">
        
        <label for="comment_author" class="required">Your Name</label>
        <input name="name" id="name" tabindex="1" required="required"><br/><br/>
        
        <label for="email" class="required">Your Email</label>
        <input type="email" id="email" name="email" id="email" value="" tabindex="2"   required="required"><br/><br/>
        
        <label for="comment" id="comment" class="required">Your Message</label><br/>
        
        <textarea name="comment" rows="10" tabindex="4"  required="required"></textarea><br/>
        <input id="submit" name="submit" type="submit" value="Submit Comment" />
        
        </form>
        

        方法必须是get/post

        【讨论】:

          【解决方案8】:

          textarea 的namecomment,您在这一行中将其用作message

            $message = $_REQUEST['message'];
          

          需要,

           $message = $_REQUEST['comment'];
          

          另外,表单提交的方法,需要POST这样,

          <form action="post_comment.php" method="post" id="commentform">
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-11-03
            • 2015-01-30
            • 2015-10-14
            • 1970-01-01
            • 1970-01-01
            • 2017-05-30
            • 2014-03-28
            相关资源
            最近更新 更多