AJAX форма не будет отправлять - PullRequest
0 голосов
/ 14 декабря 2011

Привет всем, я пытаюсь отправить форму без перезагрузки страницы, казалось бы, простая вещь с AJAX, но я не могу внести какие-либо изменения в свою базу данных. В моем javascript настроено оповещение, которое запускается, если AJAX был успешным, и кажется, что он срабатывает каждый раз, поэтому я думаю, что переменные действительно отправляются из AJAX, но когда я попадаю в join.php, я не думаю, что он помнит, и, следовательно, не обрабатывает правильно.

Прежде всего, вот соответствующий script.js:

$(document).ready(function () {
    //----SUBMIT---//
    $(".submit").click(function () {
        // validate and process form here  

        $('.error').hide();
        var studentEmail = $("input#studentEmail").val();
        if (studentEmail == "") {

            $("label#studentEmail_error").show();
            $("input#studentEmail").focus();
            return false;
        }

        var studentPassword = $("#studentPassword").val();
        var parentEmail = $("#parentEmail").val();
        var parentPassword = $("#parentPassword").val();
        var studentFirstName = $("#studentFirstName").val();
        var studentLastName = $("#studentLastName").val();
        var studentPhone = $("#studentPhone").val();
        var parentFirstName = $("#parentFirstName").val();
        var parentLastName = $("#parentLastName").val();
        var parentPhone = $("#parentPhone").val();


        var dataString = 'studentEmail=' + studentEmail 
                         + '&studentPassword=' + studentPassword 
                         + '&parentEmail=' + parentEmail 
                         + '&parentPassword=' + parentPassword 
                         + '&studentFirstName=' + studentFirstName 
                         + '&studentLastName=' + studentLastName 
                         + '&studentPhone=' + studentPhone 
                         + '&parentFirstName=' + parentFirstName 
                         + '&parentLastName=' + parentLastName 
                         + '&parentPhone=' + parentPhone;

        alert(dataString);

        $.ajax({
            type: "POST",
            url: "join.php",
            data: dataString,
            success: function () {
                alert("success");
            }
        });
        return false;
    });
});

Тогда join.php

if($_POST) {
    $studentEmail=$_POST['studentEmail'];
    $studentPassword=$_POST['studentPassword'];
    $parentEmail=$_POST['parentEmail'];
    $parentPassword=$_POST['parentPassword'];
    $studentFirstName=$_POST['studentFirstName'];
    $studentLastName=$_POST['studentLastName'];
    $studentPhone=$_POST['studentPhone'];
    $parentFirstName=$_POST['parentFirstName'];
    $parentLastName=$_POST['parentLastName'];
    $parentPhone=$_POST['parentPhone'];

    //create database connection
    $connection = mysql_connect("localhost","XXXX","XXXX"); 
        //in case database connection fails
        if(!$connection) {
            die("Database connection failed: ".mysql_error());
        }

        else{

        //select database to use
        $db_select = mysql_select_db("XXXX",$connection); 
            //in case database selection fails
            if (!$db_select) { 
                die("Database selection failed: " . mysql_error()); 
            } 

            else {

            //make sql query
              $sql = "INSERT INTO clients (`studentEmail`, 
                                                   `studentPassword`, 
                                                   `parentEmail`, 
                                                   `parentPassword`,
                                                   `studentFirstName`, 
                                                   `studentLastName`, 
                                                   `studentPhone`, 
                                                   `parentFirstName`, 
                                                   `parentLastName`, 
                                                   `parentPhone`)
                    VALUES ('".$studentEmail."', 
                            '".$studentPassword"', 
                            '".$parentEmail."', 
                            '".$parentPassword."', 
                            '".$studentFirstName."', 
                            '".$studentLastName."', 
                            '".$studentPhone."', 
                            '".$parentFirstName."', 
                            '".$parentLastName."', 
                            '".$parentPhone."')";

                //set results to variables
                $result = mysql_query($sql);

                //in case query fails
                if (!$result) { 
                    die("Database query failed: " . mysql_error()); 
                } 
            }
        }

}

else {
    echo "FAIL";
}

Ответы [ 4 ]

0 голосов
/ 14 декабря 2011

Ваше оповещение должно срабатывать независимо от того, выполняется ли фактический код PHP, пока он получает ответ.

Я бы попытался поместить оператор 'echo "TEST" перед вашим оператором if ($ _ POST) для отладки.Продолжайте возиться с этим методом, пока не выясните, где именно происходит сбой вашего кода.Если он все еще не выполняет POST, проверьте путь к файлу для join.php и убедитесь, что он находится в том же каталоге.

Кроме того, вы пытаетесь сделать это локально или он размещен на веб-сервере?

Еще одно замечание: вы должны использовать encodeURI (..) при вводе данных пользователем перед публикацией.практика.

Вот рефакторинг того, как вы генерируете строку данных, подумайте:

//create an object
var dataObj = {};

//get inputs from form with id = formID
//for each input, add a property matching the input id to the dataObj and store the value of the field as the value for that property.
$("#formID :input").each( function (this) {

    var id = this.attr(id); //might be a bit off
    var val = this.val();   //same here

    dataObj[id] = encodeURI(val);

});

Синтаксис может быть немного не так, не делал это некоторое время.

0 голосов
/ 14 декабря 2011

Попробуйте изменить $.post() вызов на это:

$.ajax({
    type: "POST",
    url: "join.php",
    data: dataString,
    success: function(data) {
      alert ("Success: "+ data);
    }
});

И, в начале кода PHP, поместите это:

var_dump($_POST);

Таким образом, предупреждениебудут отображаться данные, полученные из PHP.

ОБНОВЛЕНИЕ:

Поскольку я вижу, что здесь никто не видит огромной угрозы безопасности с этим кодом, я добавляю его здесь:

Будьте оченьубедитесь, что вы передаете каждую строку от post до mysql_real_escape_string(), прежде чем добавлять ее в запрос!

Что если кто-нибудь отправит это как свой адрес электронной почты ??:

'); DROP TABLE clients; -- 

UPDATE:

Я дважды проверил документацию jQuery.ajax() и jQuery.post().В то время как .post() является просто ярлыком для .ajax(), их синтаксис отличается:

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )
jQuery.ajax( settings )

(обновленный код также выше).

ОБНОВЛЕНИЕ:

Попробуйте этокод, который должен работать "из коробки":

JavaScript:

$(document).ready(function(){
    $(".submit").click(function() {  

        $('.error').hide();  
        var studentEmail = $("input#studentEmail").val();  
        if (studentEmail == "") {  
            $("label#studentEmail_error").show();  
            $("input#studentEmail").focus();  
            return false;  
        }

        var dataString = {
            studentEmail : studentEmail,
            studentPassword : $("#studentPassword").val(),
            parentEmail : $("#parentEmail").val(),
            parentPassword : $("#parentPassword").val(),
            studentFirstName : $("#studentFirstName").val(),
            studentLastName : $("#studentLastName").val(),
            studentPhone : $("#studentPhone").val(),
            parentFirstName : $("#parentFirstName").val(),
            parentLastName : $("#parentLastName").val(),
            parentPhone : $("#parentPhone").val(),
        };

        $.ajax({
            type: "POST",
            url: "join.php",
            data: dataString,
            success: function(data) {
                alert ("success: "+ data);
            }
        });

        return false;
    });
});

PHP-код

var_dump($_POST);
echo "\n\n"; // Some white space here

if($_POST) {
    $connection = mysql_connect("localhost","XXXX","XXXX"); 
    if(!$connection) {
        die("Database connection failed: ". mysql_error());
    }
    if (!mysql_select_db("XXXX",$connection)) { 
        die("Database selection failed: " . mysql_error()); 
    }

    // Read data from POST
    $studentEmail       = mysql_real_escape_string($_POST['studentEmail']);
    $studentPassword    = mysql_real_escape_string($_POST['studentPassword']);
    $parentEmail        = mysql_real_escape_string($_POST['parentEmail']);
    $parentPassword     = mysql_real_escape_string($_POST['parentPassword']);
    $studentFirstName   = mysql_real_escape_string($_POST['studentFirstName']);
    $studentLastName    = mysql_real_escape_string($_POST['studentLastName']);
    $studentPhone       = mysql_real_escape_string($_POST['studentPhone']);
    $parentFirstName    = mysql_real_escape_string($_POST['parentFirstName']);
    $parentLastName     = mysql_real_escape_string($_POST['parentLastName']);
    $parentPhone        = mysql_real_escape_string($_POST['parentPhone']);

    $sql = "INSERT INTO clients ".
        "(`studentEmail`, `studentPassword`, `parentEmail`, `parentPassword`, ".
        "`studentFirstName`, `studentLastName`, `studentPhone`, `parentFirstName`, ".
        "`parentLastName`, `parentPhone`) ".
        " VALUES ('$studentEmail', '$studentPassword', '$parentEmail', ".
        "'$parentPassword', '$studentFirstName', '$studentLastName', ".
        "'$studentPhone', '$parentFirstName', '$parentLastName', '$parentPhone')";

    $result = mysql_query($sql);
    if ($result) { 
        echo "Database query successful!";
    }
    else {
        die("Database query failed: " . mysql_error()); 
    } 
}
0 голосов
/ 14 декабря 2011

Вы пробовали скрипт с фиктивными значениями, чтобы убедиться, что он работает правильно.

Вы можете удалить кавычки ("") из sql и заменить на переменную $, которая преобразует весь запрос в строку.

Является ли файл join.php в том же каталоге?

Вы вызываете междоменную ошибку в инструментах разработчика? В этом случае вам, возможно, придется использовать обходной путь jQuery.

0 голосов
/ 14 декабря 2011

У вас ошибка mysql, кавычек нет:

Исправлено:

$sql = "INSERT INTO clients (`studentEmail`, `studentPassword`, `parentEmail`, `parentPassword`, `studentFirstName`, `studentLastName`, `studentPhone`, `parentFirstName`, `parentLastName`, `parentPhone`)
                        VALUES ('".$studentEmail."', '".$studentPassword"', '".$parentEmail."', '".$parentPassword."', '".$studentFirstName."', '".$studentLastName."', '".$studentPhone."', '".$parentFirstName."', '".$parentLastName."', '".$parentPhone."')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...