【问题标题】:Why my contact form in html,php is not working?为什么我的 html、php 中的联系表格不起作用?
【发布时间】:2014-12-03 22:58:07
【问题描述】:

您好,我的联系表格有问题,我没有收到任何邮件,我不知道为什么..

这是我的php代码有什么问题

 <?php
$name=$_POST ['name'];
$mobileno=$_POST ['mobileno'];
$email=$_POST ['email'];
$message=$_POST ['message'];

$to = 'any mail.com';
$subject = ' Message from your Webite';
$msg = " Your name : $name\n"; 
$msg .= " Your Mobile No. : $mobileno\n"; 
$msg .= " Your email: $email\n" ;
$msg .= " Your Message: $message";

mail ($to, $subject, $msg, 'From:' . $email);

echo ' Thank You <br/>';
echo ' Your name ' . $name . '<br>';
echo ' Your email ' . $email . '<br>';
echo ' Your Mobile No. ' . $mobileno . '<br>';
echo ' Your Message ' . $message . '<br>';

?>

<br /><br />
 Here is the result from $msg: <br /><br />
 <?php 

 echo $msg;

 ?>

我的 HTML 代码我已经多次编辑了代码,但没有任何反应

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

</head>

<body>

<form name="form1" method="post" action="justsend.php">

  <p>

    <label for="mobileno">your mobile</label>

    <input type="text" name="mobileno" id="mobileno">

    <label for="name"><br>
      your name</label>
    <input type="text" name="name" id="name">
  </p>
  <p>
    <label for="email">your email</label>
    <input type="text" name="email" id="email">
  </p>
  <p>
    <label for="message">your message</label>
    <textarea name="message" id="message" cols="45" rows="5"></textarea>
  </p>
  <p>
    <label for="send">send msg</label>
    <input type="submit" name="send" id="send" value="Submit">
  </p>
</form>
</body>
</html>

【问题讨论】:

  • 您的全局$_POST 需要删除空格。 $name=$_POST ['name']; 应该是 $name=$_POST['name'];
  • 更新您的新代码。
  • 在您打开&lt;?php标签error_reporting(E_ALL); ini_set('display_errors', 1);后立即将错误报告添加到文件顶部,看看它是否产生任何东西。
  • 你试过if(mail(TO, SUBJECT, MSG, ....etc...)) {echo SUCCESS} ELSE { echo FAIL } 吗?你实际上最好使用 PHPMailer 之类的东西

标签: php send


【解决方案1】:

$_POST ['name']; 应该是 $_POST['name']; 删除帖子值中的所有空格。

所以:

$name=$_POST ['name'];
$mobileno=$_POST ['mobileno'];
$email=$_POST ['email'];
$message=$_POST ['message'];

变成:

$name=$_POST['name'];
$mobileno=$_POST['mobileno'];
$email=$_POST['email'];
$message=$_POST['message'];

就像 EternalHour 所说,验证表单是否以某种方式填写可能是个好主意;在你声明 $name$mobileno 等之后试试这个;

if(!empty($name) && !empty($mobileno) && !empty($email) && !empty($message)){
 // do stuff
}

您使用!empty() 而不是isset() 的原因是,如果提交表单,isset 仍会返回 true,因为值已设置......它们只是空的。

编辑: 进一步在您的 HTML 中将 action="get" 更改为 action="post" 以使其正常工作。

【讨论】:

  • 我这样做了,没有错误,但我没有收到邮件,你认为 Html 代码有问题吗?
  • 你可以在@IbnZiad 的问题中发布 html 吗?
  • 在您的 html 中将表单设置为 method="get" 将其更改为 method="post"
  • 它是“发布”,但我改变了它,仍然没有。
  • @IbnZiad - 无论您尝试什么,如果您的方法是 get,那么 php 需要 $_GET,如果 post 则 php 是 $_POST,为了对两者都安全,将 $_POST 更改为 $_REQUEST , $_REQUEST 可以从 post 或 get 中接收
【解决方案2】:

您需要修复您的 $_POST 变量,但我建议您这样做,以便您知道您的 POST 是否成功。

<?php

if (isset($_POST)) {
$name=$_POST['name'];
$mobileno=$_POST['mobileno'];
$email=$_POST['email'];
$message=$_POST['message'];

$to = 'any mail.com';
$subject = ' Message from your Webite';
$msg = " Your name : $name\n"; 
$msg .= " Your Mobile No. : $mobileno\n"; 
$msg .= " Your email: $email\n" ;
$msg .= " Your Message: $message";

mail ($to, $subject, $msg, 'From:' . $email);

echo ' Thank You <br/>';
echo ' Your name ' . $name . '<br>';
echo ' Your email ' . $email . '<br>';
echo ' Your Mobile No. ' . $mobileno . '<br>';
echo ' Your Message ' . $message . '<br>';

?>

<br /><br />
 Here is the result from $msg: <br /><br />
 <?php 

 echo $msg;
} else {
echo "submit failed!";
exit;
}
?>

这样您就知道您的表单是否正确提交了任何消息。

【讨论】:

  • 被否决了,我被否决了.. 干得好编辑: 另外,使用 !empty() 会不会更好,因为 isset() 总是返回 true 时帖子已提交。
  • 我也不是,但他应得的,你不应该使用 isset() 因为它总是会在表单提交后返回 true。这不是遮阳篷。
  • 哦,哇,首先你发布了一个欺骗性的遮阳篷,然后你给我投了反对票,因为你投了反对票,现在你无法处理真相并开始对我发火。
  • 请再看一遍发帖时间。
【解决方案3】:

首先,如果这是在本地主机上,它不会工作,因为邮件功能在本地被禁用,你必须在线运行它

进一步: 我真的看不出你哪里出错了,但我接管了我自己网站上的邮件功能并将其转换为你的

if(isset($_POST['send'])){  // checks if the data from the submit button with the name send is here
$name=mysqli_real_escape_string($con,$_POST['name']);
$mobileno=mysqli_real_escape_string($con,$_POST['mobileno']);
$email=mysqli_real_escape_string($con,$_POST['email']);
$message=mysqli_real_escape_string($con,$_POST['message']);

// you had spaces between your post variables which wont work. Also if you use mysqli, its better to play safe and make them safe, in case you do also database work. The variable $con is your connection information.

// echo out if your variables working. For example:
// echo $mobileno;
// this way you know for sure if the items are set.    

$message = wordwrap($message, 70); // in case its a long message, this allows 70 characters on one line
$to = 'any mail.com';   // your email
$subject = ' Message from your Webite';
$msg = " Your name : ".$name."\n"; 
$msg .= " Your Mobile No. : ".$mobileno."\n"; 
$msg .= " Your email: ".$email."\n" ;
$msg .= " Your Message:".$message ;

$headers = "MIME-Version: 1.0" . "\r\n"; // this has to do with css and html in your msg
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";  // this has to do with css and html in your msg
$headers .= "From: noreply@yourwebsite.com"; // change this to whatever you want it to come from

if (mail ($to, $subject, $msg, $headers)) {
    echo ' Thank You <br/>';
    echo ' Your name ' . $name . '<br>';
    echo ' Your email ' . $email . '<br>';
    echo ' Your Mobile No. ' . $mobileno . '<br>';
    echo ' Your Message ' . $message . '<br>';

// to make sure if your email is send it will output your message as given above, else an error
}else{
    echo ' Something went wrong ... oopsie daisy'; 
    } // closure of the if mail check
} // closure of the complete if(isset) check

不要忘记包含您的连接信息以及 mysqli 函数以清理您的变量,以防您将其添加到数据库中。无论如何,这样做只是一个好习惯。我将 $con 定义为连接信息,您的可能会有所不同。您必须将其更改为您的连接变量。

如果您使用mysql_ 函数,请使用不带连接信息的mysql_real_escape_string($_POST['YourPostVariable']);。看这里。 http://php.net/manual/en/function.mysql-real-escape-string.php

--编辑--

更新了它,因为你的消息不会输出你的变量,只是 $name 而不是 $name 变量中的名称。

希望这会有所帮助,祝调试好运:)

【讨论】:

  • 谢谢你,但它没有用,当我按下发送时它变成了空白页。
  • 你是在本地服务器上运行它,还是在线运行?
【解决方案4】:

您好,我刚刚稍微修改了您的代码..我已经收到了电子邮件..请检查下面的代码..请在文本框中输入您的电子邮件以接收电子邮件

<?php
if($_POST['email'] != '')
{
    $name=$_POST['name'];
    $mobileno=$_POST['mobileno'];
    $email=$_POST['email'];
    $message=$_POST['message'];
    $to = $email;
    $subject = 'Message from your Webite';
    $msg = " Your name : $name\n"; 
    $msg .= " Your Mobile No. : $mobileno\n"; 
    $msg .= " Your email: $email\n" ;
    $msg .= " Your Message: $message";
    mail ($to, $subject, $msg, 'From:'.$email);
    echo ' Thank You <br/>';
    echo ' Your name ' . $name.'<br>';
    echo ' Your email ' . $email .'<br>';
    echo ' Your Mobile No. ' . $mobileno . '<br>';
    echo ' Your Message ' . $message . '<br>';
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</title>

</head>

<body>

<form name="form1" method="post" action="justsend.php">

  <p>
    <label for="mobileno">your mobile</label>

    <input type="text" name="mobileno" id="mobileno">

    <label for="name"><br>
      your name</label>
    <input type="text" name="name" id="name">
  </p>
  <p>
    <label for="email">your email</label>
    <input type="text" name="email" id="email">
  </p>
  <p>
    <label for="message">your message</label>
    <textarea name="message" id="message" cols="45" rows="5"></textarea>
  </p>
  <p>
    <label for="send">send msg</label>
    <input type="submit" name="send" id="send" value="Submit">
  </p>
</form>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2014-03-31
    相关资源
    最近更新 更多