PHP-файл не получил переменную AJAX - PullRequest
0 голосов
/ 22 февраля 2010

Вот что у меня происходит в моем 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.

Это работало раньше, и я не уверен, в какой момент это остановилось. Немного странно, что оба сценария два работали, а теперь нет.

Скрипт 1 был написан мной, и он вставляет пустую запись, если я перехожу прямо к ней:

<?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(); }
?>

Есть идеи, где я иду не так?

Также: Я могу успешно предупредить строку данных, если это поможет.

Ответы [ 2 ]

1 голос
/ 22 февраля 2010

Требуется удалить верхнюю часть «вернуть ложь». Интересный способ провести 4 часа.

1 голос
/ 22 февраля 2010

Не уверен, что это просто опечатка, но эта строка не будет работать:

$ sql = "INSERT IGNORE INTO имя базы данных (столбец) VALUES ('$ _POST [' twit ']')";

Должно быть (посмотрите на кавычки в переменной POST):

$ sql = "INSERT IGNORE INTO имя базы данных (столбец) VALUES ('". $ _ POST [' twit ']. "')";

Кроме того, вы никогда не должны помещать переменную POST непосредственно в оператор SQL по соображениям безопасности (взгляните на SQL-инъекции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...