【问题标题】:PHP file not successfully receiving AJAX variablePHP 文件未成功接收 AJAX 变量
【发布时间】:2010-02-22 07:28:36
【问题描述】:

这是我在 AJAX 中所做的:

$('#submit-button').click(function(){
    var twit = $('input#twittername').val();
    var email = $('input#email').val();
    if((email == "" || email == "you@address.com") && (twit == "" || twit == "@twittername")){
        $('p#empty-error').fadeIn();

    return false;
    }

    var datastring = 'email=' + email + '&twit=' + twit;

    if(email != "you@address.com"){
        $.ajax({
            type: 'POST',
            url: '/path/to/script1.php',
            data: datastring,
            success: function(){
                $('#signup').fadeOut('slow',function(){
                    $('#email-response').fadeIn('slow');
                });
            }
        });

        return false;
    }

    if(twit != "@twittername"){     
        $.ajax({
            type: 'POST',
            url: '/path/to/script2.php',
            data: datastring,
            success: function(){
                $('#signup').fadeOut('slow', function(){
                    $('#email-response').fadeIn('slow');
                });
            }       
        });
    }

    return false;       
});

AJAX 正在返回成功函数。我可以直接导航到 /path/to/script2.php,它会在我的数据库中添加一条空记录。但由于某种原因,PHP 并没有真正接收和插入 AJAX 变量。

这以前可以正常工作,但我不确定它是在什么时候停止的。有点奇怪的是,两个脚本都在工作,而现在都没有。

脚本一是我写的,如果我直接导​​航到它,它会插入一条空白记录:

<?php

$dbhost = 'host';
$dbuser = 'user';
$dbpass = 'pw';

$con = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

$dbname = 'databasename';
mysql_select_db($dbname, $con);

$sql = "INSERT IGNORE INTO databasename (column) VALUES ('$_POST['twit']')";

if (!mysql_query($sql)){
    die('Error: ' . mysql_error());
}

echo 'record added successfully';

mysql_close($con);

脚本二是从 MailChimp 修改的,如果我直接导​​航到它,这将不起作用,这是预期的:

function storeAddress(){

    // Validation
    if(!$_POST['email']){ return "No email address provided"; } 

    if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_POST['email'])) {
        return "Email address is invalid"; 
    }

    require_once('MCAPI.class.php');
    // grab an API Key from http://admin.mailchimp.com/account/api/
    $api = new MCAPI('66a7f17d87e96e439f7a2837e2963180-us1');

    // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
    // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
    $list_id = "b1ebe7c0ba";

    if($api->listSubscribe($list_id, $_POST['email'], '') === true) {
        // It worked!   
        return 'Success! Check your email to confirm sign up.';
    }else{
        // An error ocurred, return error message   
        return 'Error: ' . $api->errorMessage;
    }

}

// If being called via ajax, autorun the function
if($_POST['email']){ echo storeAddress(); }
?>

任何想法我哪里出错了?

另外:如果有帮助的话,我可以成功提醒数据字符串。

【问题讨论】:

    标签: php mysql ajax


    【解决方案1】:

    不确定这是否只是一个错字,但这行不起作用:

    $sql = "INSERT IGNORE INTO databasename (column) VALUES ('$_POST['twit']')";

    应该是(查看 POST 变量中的引号):

    $sql = "INSERT IGNORE INTO databasename (column) VALUES ('".$_POST['twit']."')";

    除此之外,出于安全原因,您不应该将 POST 变量直接放入 SQL 语句中(查看 SQL 注入)。

    【讨论】:

    • Doh,这对我有好处吗:$message = mysql_real_escape_string($_POST['twit']); $sql = "INSERT IGNORE INTO twitter (user) VALUES ($message)";
    • 呃,这仍然不适合我。我觉得 $_POST['twit'] 中一定有什么问题
    • 也尝试在 $message 周围加上引号,因为我认为您正在传递带有该变量的字符串。如果这不起作用, Post 变量中的值是什么?只需打印出来,看看它是否甚至传递给 php。
    • 是的,发现了那个错误并改变了它。鉴于我使用 AJAX 提交,我将如何打印出 PHP 变量?
    • 我不知道您用于 Ajax 调用的框架,所以我无法确定那里是否一切正常。尝试使用 firebug 并查看响应,如果您只是执行打印/回显,则它的变量 out 它也应该显示在那里。或者将 POST 写入文件并查看里面的内容: $fp = fopen('/path/to/file/log.txt', 'w'); fwrite($fp, $_POST['twit']); fclose($fp);如果您使用的是 JQuery,请看这里:api.jquery.com/jQuery.ajax 然后您需要将“数据”作为 JSON 字符串传递,而不是像您那样。那我觉得应该是:
    【解决方案2】:

    需要删除最上面的“return false”。度过 4 小时的有趣方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      相关资源
      最近更新 更多