Cześć wszystkim Próbuję złożyć formularz bez ponownego ładowania strony, pozornie prosta rzecz z AJAX, ale nie mogę uzyskać żadnych zmian w mojej bazie danych. Mam alert ustalony w moim javascript, aby uruchomić, jeśli AJAX odniosła sukces, i wydaje się wywołuje za każdym razem, więc myślę, że zmienne są rzeczywiście wysyłane z ajax, ale kiedy dostanę się dołączyć. Nie myśl, że to pamięta, a zatem nie przetwarza poprawnie.

Przede wszystkim jest odpowiedni 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;
    });
});

Następnie dołącz do.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";
}
0
radleybobins 14 grudzień 2011, 06:23

4 odpowiedzi

Najlepsza odpowiedź

Spróbuj zmienić wezwanie $.post()

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

I na początku kodu PHP, umieść to:

var_dump($_POST);

W ten sposób komunikat Alertowy wyświetli dane otrzymane z PHP.

AKTUALIZACJA:

Odkąd widzę, że nikt nie widzi tu niebezpiecznego ryzyka bezpieczeństwa z tym kodem, dodam go tutaj:

Bądź pewien, że przekazujesz każdy ciąg z poczta przez {x0}} przed dodaniem go wewnątrz zapytania!

Co jeśli ktoś publikuje to jako swój adres e-mail?:

'); DROP TABLE clients; -- 

AKTUALIZACJA:

Dwukrotnie sprawdzam dokumentację jQuery.ajax() i jQuery.post(). Podczas .post() jest tylko skrótem dla .ajax(), ich składnia jest inna:

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

(Zaktualizowany kod powyżej).

AKTUALIZACJA:

Wypróbuj ten kod, który powinien działać "z pudełka":

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

Kod 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
redShadow 14 grudzień 2011, 03:43

Masz błąd MySQL, nie masz cytatów:

Poprawione :

$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."')";
0
waza123 14 grudzień 2011, 02:32

Czy spróbowałeś skryptu z wartościami manekin, aby upewnić się, że działa poprawnie.

Możesz usunąć cytaty ("") z SQL i zastąpić z "$ zmienną", która konwertuje całe zapytanie do łańcucha.

Czy Colle.php w tym samym katalogu?

Czy rzucasz błąd krzyża w narzędziach deweloperskich? Jeśli tak, możesz użyć obejścia jQuery.

0
Christopher 14 grudzień 2011, 02:35

Twój alert powinien wystrzelić, czy rzeczywisty kod PHP jest wykonywany - tak długo, jak otrzymuje odpowiedź.

Postarałbym się umieścić oświadczenie "Echo" "przed konstrukcją IF ($ _ Post) w celu debugowania. Kontynuuj bałagan z tą metodą, aż dowiesz się, gdzie dokładnie twój kod. Jeśli nadal nie jest wykonywanie postu, sprawdź ścieżkę plików dla Colle.php i upewnij się, że jest w tym samym katalogu.

Czy próbujesz to zrobić lokalnie lub jest hostowany na serwerze WWW?

Kolejna uwaga, powinieneś użyć enkodeuri (..) na wejściu użytkownika przed wysłaniem, jako dobre praktyki.

Oto refaktora dla sposobu generowania ciągów danych, rozważ:

//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);

});

Składnia może być nieco wyłączona, nie zrobiłem tego na chwilę.

0
bm1362 14 grudzień 2011, 02:36