【问题标题】:Script not posting input to PHP server script.脚本未将输入发布到 PHP 服务器脚本。
【发布时间】:2013-09-04 19:38:44
【问题描述】:

我们正在我们的网站上实施一个表单,让人们订阅他们的设备。我们使用 jquery.easing.js 仅在其他字段正确时显示某些字段。 javascript 也在验证输入。

现在谈到 sumbit,我们想向我们的 PHP 脚本发送两个字段,以便它可以向我们发送带有订阅的电子邮件。

表单正在运行,只是我们没有收到电子邮件。我们已经调查过了,但找不到解决方案。有人可以帮助我们吗?

Javascript(提交部分):

$('#submit').click(function(e)
{
e.preventDefault();
var mac=$("#mac").val();
var store=$("#store").val();
//alert(mac);
//alert(store);
//
var dataString = 'mac=' + mac + 'store=' +store;
$.ajax({
type: 'POST',
url: 'ajax/subscribe.php',
data: dataString,
success: function(data) {
  $("#optoutform").show().html("<h3>You have successfully opted-out.</h3>");
},
error: function(data) {
  $("#optoutform").show().html("<h3>There was an error processing your request.</h3>");
}
});
return valid;
});

订阅.php

$to = "request@domain.com"; 
$subject = "Request"; 
$mac = $_REQUEST['#mac'] ;
$store = $_REQUEST['#store'] ; 
$headers = "From: request@domain.com"; 
$sent = mail($to, $subject, $mac, $store, $headers) ; 

更新:

好的,我已将 subscribe.php 编辑为:

$to = "request@domain.com";
$subject = "Request";
$message = "<h1>Request</h1>";
$message .= "<strong>MAC</strong>: POST_$mac";
$message .= "<strong>Store</strong>: POST_$store";
$headers  = "From:youremail@domain.com";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html\r\n";
$sent = mail($to, $subject, $mail_body, $headers);

并根据 POST 将 dataString 更改为正确的,但仍然没有电子邮件发送到我们的收件箱...

我们还能做错什么?

【问题讨论】:

  • 您的数据正在传递字段名称为 macstore 的字符串,但您正在访问 $_REQUEST['#mac']$_REQUEST['#store']。这可能不是您问题的根源,但想指出这一点。
  • 你的mail()有错误的参数,即$store,因为它在string $additional_headers的位置,你的$headers = "From: request@domain.com";现在在string $additional_parameters - bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
  • P.S.您可能希望绑定到表单 id submit $('#formId').submit(function...,而不是点击事件,这样在表单字段中按回车键的人就不会绕过点击。
  • 谢谢@Ross 我已经改变了你提到的内容。

标签: php javascript ajax forms post


【解决方案1】:

您的 dataString 不正确,您忘记了 vars 之间的“&”:

var dataString = 'mac=' + mac + '&store=' + store;

另外不需要字符串,只需传递一个对象,jQuery 将完成剩下的工作:

$.ajax({
    type: 'POST',
    url: 'ajax/subscribe.php',
    data : {mac: mac, store: store},
    etc...

【讨论】:

    【解决方案2】:

    正如罗斯所说,如果您使用 POST 方法传递变量,请使用 $_POST 来访问它们。不要使用 $_REQUEST。此外,您的 dataString 变量不正确,您忘记了 &,它应该是:

    var dataString = 'mac=' + mac + '&store=' +store;
    

    【讨论】:

    • 好的,我明白了,但连电子邮件都没有发送给我们。所以这是一个更重要的问题。你有解决方案吗?
    • 如果你自己点击了 subscribe.php 页面,它会发送电子邮件吗?另外,试试这个来帮助确定是邮件功能还是其他问题: if( $sent = mail($to, $subject, $mail_body, $headers) ){ echo "SENT"; } else { echo "有问题"; }
    • 我使用了' if($sent '并且脚本正在通过浏览器向我返回 SENT,所以我猜脚本运行正常。可能是服务器端问题吗?我在共享托管..
    • 确保电子邮件地址正确,听起来很傻,我知道确保它不会以垃圾邮件结尾
    【解决方案3】:

    用于 POST 方法

    var dataString = {'mac':mac,'store':store};
    

    供GET方法使用

    var dataString = 'mac=' + mac + '&store=' + store;
    

    【讨论】:

    • 好的@Salim我在javascript中使用POST方法,以及subscribe.php
    • 好的,谢谢,试试吧,var dataString = {'mac':mac,'store':store};
    【解决方案4】:

    您的 PHP 请求中不需要标签。改变

    $mac = $_REQUEST['#mac'] ;
    $store = $_REQUEST['#store'] ; 
    

    $mac = $_REQUEST['mac'] ;
    $store = $_REQUEST['store'] ; 
    

    在设置另一个变量之前你还需要 & 符号,所以改变

    var dataString = 'mac=' + mac + 'store=' +store;
    

    var dataString = 'mac=' + mac + '&store=' +store;
    

    【讨论】:

    • 感谢大家的回复,我已经更改了 dataString 和现在的 subscribe.php:$to = "request@domain.com"; $subject = "Request"; $message = "&lt;h1&gt;Request&lt;/h1&gt;"; $message .= "&lt;strong&gt;MAC&lt;/strong&gt;: REQUEST_$mac"; $message .= "&lt;strong&gt;Store&lt;/strong&gt;: REQUEST_$store"; $headers = "From:request@domain.com"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/html\r\n"; mail($to, $subject, $mail_body, $headers); 但它仍然没有向我们的邮箱发送任何电子邮件。这里还有什么问题?
    【解决方案5】:

    它似乎正在发送邮件,但没有让服务器通过。

    如果我使用 PHPMailer icm SMTP。我正在使用 gmail smtp 设置并在激活 subscribe.php 时收到此消息:

    无法发送消息。 错误:SMTP Connect() 失败。

    `$mac = trim($_POST['mac']); $store = trim($_POST['store']);

    $body = '<p>'.$mac.'<br />';
    $body .= $store.'</p>';
    
    require($_SERVER['DOCUMENT_ROOT']."/include/class.phpmailer.php");
    $mail = new PHPMailer();
    $mail->IsSMTP(); // vertel de class om SMTP te gebruiken
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = "ssl";    
    $mail->Host = 'smtp.gmail.com'; // SMTP server
    $mail->Port = 465; // SMTP poort
    $mail->Username = 'username@gmail.com';  // eigen gmail-adres
    $mail->Password = 'password';  // gmail wachtwoord
    

    这里出了什么问题(我在共享主机上)

    【讨论】:

      猜你喜欢
      • 2011-01-09
      • 2012-08-28
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2014-11-14
      相关资源
      最近更新 更多