JQuery опубликовать сериализованную форму, а затем вставить в MySQL через PHP? - PullRequest
1 голос
/ 25 июля 2010

Я пытаюсь опубликовать сериализованную форму в файле sumbit.php, затем вставлю его в базу данных MySQL; тем не менее, последний ввод, который скрыт, не вставляется в базу данных, а остальные.

Вот несколько фрагментов того, что у меня есть, которое не работает:

HTML

            <form method="post" action="" >
                            <label for="name" class="overlay"><span>Name...</span></label>
                            <input class="input-text" type="text" name="name" id="name" />

                            <label for="email" class="overlay"><span>Email...</span></label>
                            <input type="text" class="input-text" name="email" id="email"/>

                            <label for="website" class="overlay"><span>Website...</span></label>
                            <input type="text" class="input-text" name="website" id="website"/>


                            <label id="body-label" for="body" class="overlay"><span>Comment it up...</span></label>
                            <textarea class="input-text" name="body" id="body" cols="20" rows="5"></textarea>

                            <input type="hidden" name="parentid" id="parentid" value="0" />
                            <input type="submit" value="Comment" name="submit" id="comment-submit" />

                </span>
            </form>

Javascript

$('form.').submit(function(event) {  

    $.post('submit.php',$(this).serialize(),function(msg){
        // form inputs consist of 5 values total: name, email, website, text, and a hidden input that has the value of an integer
    }
});

PHP (submit.php)

$arr = array();

    mysql_query("   INSERT INTO comments(name,email,website,body,parentid)
                VALUES (
                    '".$arr['name']."',
                    '".$arr['email']."',
                    '".$arr['website']."',
                    '".$arr['body']."',
                    '".$arr['parentid']."'
                )");

Ответы [ 4 ]

7 голосов
/ 26 июля 2010

Хорошо, вот рабочий код.Было несколько ошибок (например, незакрытые фигурные скобки для записей, незакрытые теги span, отсутствие POST var в вашем PHP и т. Д.)Вы все еще можете использовать форму)

<form method="post" id="test" enctype="multipart/form-data" action="post.php">
    <label for="name" class="overlay"><span>Name...</span></label>
    <input class="input-text" type="text" name="name" id="name" />

    <label for="email" class="overlay"><span>Email...</span></label>
    <input type="text" class="input-text" name="email" id="email"/>

    <label for="website" class="overlay"><span>Website...</span></label>
    <input type="text" class="input-text" name="website" id="website"/>


    <label id="body-label" for="body" class="overlay"><span>Comment it up...</span></label>
    <textarea class="input-text" name="body" id="body" cols="20" rows="5"></textarea>

    <input type="hidden" name="parentid" id="parentid" value="0" />
    <input type="submit" value="Comment" name="submit" id="comment-submit" />
</form>

Javascript

<script>
$(document).ready(function() {
    $('form').submit(function(msg) {  
        alert($(this).serialize()); // check to show that all form data is being submitted
        $.post("post.php",$(this).serialize(),function(data){
            alert(data); //post check to show that the mysql string is the same as submit                        
        });
        return false; // return false to stop the page submitting. You could have the form action set to the same PHP page so if people dont have JS on they can still use the form
    });
});
</script>

PHP

<?php
$arr = $_POST; //you need to grab the data via the POST (or request) global.

//this is just a check to show that the SQL statement is correct. Replace with your mysql connection/query
echo "INSERT INTO comments(name,email,website,body,parentid)
        VALUES (
            '".$arr['name']."',
            '".$arr['email']."',
            '".$arr['website']."',
            '".$arr['body']."',
            '".$arr['parentid']."'
        )";
?>
2 голосов
/ 25 июля 2010

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

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

$('form.').submit(function(event) {  

    $.post('submit.php',$(this).serialize()+'&parentid='+$('#parentid').val(),function(msg){
    }
});
0 голосов
/ 25 июля 2010

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

var_dump($arr); 

. Затем проверьте поле парентид в комментариях к таблице, принимает ли оно 0 или нулевые значения или нет, и проверьте, что ваш внешний ключ определен текущим способом, которого вы заслуживаете.* Спасибо

0 голосов
/ 25 июля 2010

При сериализации формы данные разделяются амперсандами (&)

В вашем PHP-коде вы должны взорваться на амперсандах, а затем снова взорваться для каждого в этом новом массиве со знаком =.

Пример

$thedata = explode("&", $_POST['data']);
foreach($thedata as $new) {
    list($x, $y) = explode("=", $new);
    ${$x} = $y;
}

Тогда у вас будут переменные PHP, такие как $ name, $ email, $ address, и так далее, как бы вы ни называли свои входные данные в форме.

...