Переключатель для mysql с проверкой ajax

Прежде всего: я использую почтовый скрипт, созданный Джеффри Уэем в In the Woods.

У меня есть простая форма, например:

<form method="post" action="sendEmail.php" id="form_reserveren">
<div id="container">

    <div id="main" style="width: 100%; height: auto; float: left;">
        <div class="left">
            <h3>Uw gegevens</h3>
            <p style="margin-bottom: 30px; height: 40px; width: 100%;">
                <input type="radio" id="zml_geslacht" name="zml0" value="de Heer"/><span style="float: left; margin-top: -5px; height: 25px;">de Heer</span><br />
                <input type="radio" id="zml_geslacht" name="zml0" value="Mevrouw"/><span style="float: left; margin-top: -5px; height: 25px;">Mevrouw</span>
            </p>
            <p>
                <input type="text" id="zml_voornaam" name="zml1" value="Uw voornaam" onblur="if(this.value=='') this.value='Uw voornaam';" onfocus="if(this.value=='Uw voornaam') this.value='';"/>
                <input type="text" id="zml_achternaam" name="zml2" value="Uw achternaam *" onblur="if(this.value=='') this.value='Uw achternaam *';" onfocus="if(this.value=='Uw achternaam *') this.value='';"/>
            </p>
            <p>
                <input type="text" id="zml_email" name="zml3" value="Uw e-mailadres *" onblur="if(this.value=='') this.value='Uw e-mailadres *';" onfocus="if(this.value=='Uw e-mailadres *') this.value='';"/>
            </p>
        </div>

        <div class="right">
            <h3>Uw reservering</h3>
            <p style="height:68px;">
                <textarea name="zml13" id="zml_opmerkingen" rows="12">Opmerkingen</textarea>
            </p>    


            <p><input type="submit" name="submit" id="submit" value="Email Us!" /></p>
            <ul id="response" />
        </div>
    </div><!--end main -->

</div><!-- end container -->
</form>

Это проходит через ajax, вот так:

var zml0 = $('input#zml_geslacht').html( $(':checked').val());
var zml1 = $('input#zml_voornaam').val();
var zml2 = $('input#zml_achternaam').val();
var zml3 = $('input#zml_email').val();
var zml13 = $('textarea#zml_opmerkingen').val();

$.ajax({
    type: 'post',
    url: 'sendEmail.php',
    data: 'zml0=' + zml0 + '&zml1=' + zml1 + '&zml2=' + zml2 + '&zml3=' + zml3 + '&zml13=' + zml13,

    success: function(results) {
        $('#main img.loaderIcon').fadeOut(1000);
        $('ul#response').html(results);
    }
}); // end ajax

И после этого он переходит к моему sendEmail.php, чтобы отправить форму на адрес электронной почты (и сохранить ее в базе данных). Запрос:

 $zml0 = $_REQUEST['zml0']; // Geslacht

    // database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);


// query
$sql = "INSERT INTO test (zml0,zml1,zml2) VALUES (:zml0,:zml1,:zml2)";
$q = $conn->prepare($sql);
$q->execute(array(':zml0'=>$zml0,
                  ':zml1'=>$zml1,
                  ':zml2'=>$zml2));

Все работает.. У меня также есть имя, адрес электронной почты и т. д., за исключением переключателей «Пол» (Пол на голландском языке — Geslacht, я называю его zml0, чтобы немного больше защититься от спамеров). Идея, конечно, в том, что пользователь должен выбрать Женский или Мужской.

Когда он сохраняется в базе данных, все, что он говорит, это [object Object]. Также, когда я просто повторяю ввод. Как я могу заставить это работать?


person Don Munter    schedule 17.07.2012    source источник
comment
это полный html? я не вижу тег формы   -  person Forte L.    schedule 17.07.2012
comment
Нет.. Это не полная форма. Я могу опубликовать полную html-форму, если хотите, но я не хочу, чтобы сообщение было слишком большим: p   -  person Don Munter    schedule 17.07.2012
comment
Вы отправляете всю форму в ajax или только это одно поле?   -  person Cfreak    schedule 17.07.2012
comment
Как сказал @TimWithers, вам действительно следует использовать .serialize()   -  person Cfreak    schedule 17.07.2012


Ответы (2)


Попробуй это:

var zml0 = $('input[name=zml0]:checked').val();

Еще одна вещь, которую вы могли бы попробовать, которая может немного облегчить вашу жизнь для больших форм:

$.ajax({
    type: 'post',
    url: 'sendEmail.php',
    data: $('#form_reserveren').serialize(),

    success: function(results) {
        $('#main img.loaderIcon').fadeOut(1000);
        $('ul#response').html(results);
    }
}); // end ajax
person Tim Withers    schedule 17.07.2012
comment
Это не сработает, потому что это глобальная переменная. Ему нужно сделать это в вызове ajax. - person Cfreak; 17.07.2012
comment
Зависит от того, где это было. Если это было внутри функции, то оно не было глобальным. - person Tim Withers; 17.07.2012
comment
Спасибо, Тим, var zml0 = $('input[name=zml0]:checked').val(); работал. - person Don Munter; 17.07.2012
comment
@DonMunter Я бы действительно подумал об использовании функции сериализации, когда ваша форма станет больше. - person Tim Withers; 17.07.2012
comment
Хорошо, я воспользуюсь этим. Мне может понадобиться небольшое исследование функции сериализации, поскольку я еще не знаю, что это значит: p Да, форма будет формой бронирования с примерно 12 (не моя идея) полями ввода и т. д. - person Don Munter; 17.07.2012

Эта строка является проблемой:

var zml0 = $('input#zml_geslacht').html( $(':checked').val());

Похоже, что это глобальная переменная, поэтому, если вы отметили другой флажок, это не имеет значения. Вы всегда отправляете начальное значение. Хорошо бы, если бы это было правильно. Вторая проблема заключается в том, что вы просто берете html? от него, а не фактическое значение. По-видимому, это возвращает объект.

Ваш вызов ajax должен захватить ввод формы в то время:

$.ajax({
    type: 'post',
    url: 'sendEmail.php',
    data: 'zml0=' + $('input[name=zml0]:checked').val(),

    success: function(results) {
        $('#main img.loaderIcon').fadeOut(1000);
        $('ul#response').html(results);
    }
});
person Cfreak    schedule 17.07.2012