【问题标题】:Ajax is not posting one valueAjax 没有发布一个值
【发布时间】:2015-01-30 11:04:36
【问题描述】:

在使用 AJAX 从表单发布数据时遇到问题。并非所有值都被插入(带有“@”符号的电子邮件)。但如果我单独发送它,它会被插入。

这是 jQuery 代码:

$("#my_reservation_form").submit(function () {
    if($("#terms_checkbox").prop("checked")) {
        var data = $("#my_reservation_form").serialize();

        //alert(data); for testing

        $.ajax({
            type: "POST",
            data: data,
            url: "functions/reservation_form.php",
            dataType:"text",
            success: function () {
                console.log("ok");
            },
            error: function() {
                console.log("error");
            }
        });
    } else {
        alert('You have to accept terms');
    }
});

PHP 方面:

$table_id = $_POST['id'];
$date = $_POST['date'];
$time = $_POST['time'];
$people = $_POST['people'];
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$tel = $_POST['tel'];
$email= $_POST['email'];

$query = "INSERT INTO reservation(table_id,fname,lname,tel,email,reservation_date,time,people) values ('$table_id','$fname','$lname','$tel','$email','$date','$time','$people')";
if ($result = $db->query($query)) {
    //echo "Reservation added";

} else {
    echo $db->error;
}
$db->close();

顺便说一句,我使用 jQuery 验证插件来验证输入。

表格:

            <input class="input_text" name="id" type="hidden" value="<?php echo $_POST['table_id'];?>">
            <input class="input_text" name="date" type="hidden"  value="<?php echo $_POST['date'];?>">
            <input class="input_text" name="time" type="hidden" value="<?php echo $_POST['time'];?>">
            <input class="input_text" name="people" type="hidden" value="<?php echo $_POST['people'];?>">
            <input class="input_text" name="fname" type="text" placeholder="Name">
            <input class="input_text" name="lname" type="text" placeholder="Surname">
            <input class="input_text" name="tel" type="text" placeholder="Tel">
            <input class="input_text" name="email" type="text" placeholder="Email">
            <div class="error"></div>

            <div id="terms">
                <input id="terms_checkbox" type="checkbox" name="terms" checked="checked"><label for="terms">Blah blah I agree</a>
            </div>
            <div id="terms_text">
                 <p><?php terms(); ?></p>
            </div>
            <button class="button_ui" id="button_reserve" type="submit" name="submit">Reserve</button>
        </form>

【问题讨论】:

  • 你你做//alert(data); for testing你看到电子邮件了吗?只有当你有 @ 时它才起作用?
  • 是的,我看到了,但是“@”符号变成了“%40”。
  • Go go gadget SQL 注入...
  • 那么有什么问题呢? Serialize 转换值作为 get 传递,某些字符需要修改检查 urldecode php function
  • @BenjaminPoignant 超全局变量 $_GET 和 $_REQUEST 已经解码。对 $_GET 或 $_REQUEST 中的元素使用 urldecode() 可能会产生意想不到的危险结果。

标签: php jquery mysql ajax post


【解决方案1】:

问题解决了。必须将所有内容都放入验证插件 submitHandler 事件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多