Jquery POST不使用输入类型复选框

时间:2013-04-30 15:02:40

标签: php jquery

我已经构建了一个在php中运行良好的订阅表单,我现在已经应用了jquery来避免页面刷新。

HTML表单

<input name="newsletter" type="checkbox" id="checkbox" value="true">
<input name="offer" type="checkbox" id="checkbox" value="true">

PHP

<?php
if(isset($_POST['newsletter']) && isset($_POST['newsletter'])==true){
    $newsletter = true;
} else {
    $newsletter = false;
}

if(isset($_POST['offer']) && isset($_POST['offer'])==true){
    $offer = true;
} else {
    $offer = false;
}

echo 'type1='.$newsletter;    
echo 'type2='.$offer;

$query = "UPDATE $table SET type1='$newsletter', type2='$offer' WHERE id=$id"; 
$result = mysqli_query($connection, $query) or trigger_error(mysqli_error($connection), E_USER_ERROR);

的jQuery

    var newsletter = false;
    var offer = false;
    var newsletterval = $("input[name='newsletter']").is(':checked');
    var offerval = $("input[name='offer']").is(':checked');

    if(newsletterval){
        newsletter=true;
    };

    if(offerval){
        offer=true;
    };

    $.post('../../subscribe.php', {newsletter:newsletter, offer:offer}, function(data){
        alert(data);            
    });

当usig php工作正常时,我可以更改订阅类型,但是jquery在这里没有工作,它会改变任何内容,无论我检查或取消选中哪个复选框,我都会以type1=1type2=1的形式从发布数据中获得提醒。

请参阅并建议使用jquery执行此操作的任何可能方法。

由于

2 个答案:

答案 0 :(得分:1)

我猜你正在尝试这样的事情:

if(newsletterval){
    // use the string representation 'true' rather than a boolean value
    newsletter='true';
};

if(offerval){
    // use the string representation 'true' rather than a boolean value
    offer='true';
};

$.post('../../subscribe.php', {newsletter:newsletter, offer:offer}, function(data){
    alert(data);            
});

php代码:

<?php

if(isset($_POST['newsletter']) 
  // Check the value of `$POST['newsletter']` rather than using isset() twice
  && $_POST['newsletter'] === 'true'){
    $newsletter = true;
}

...

答案 1 :(得分:1)

HTTP将请求转换为字符串因此Javascripts true!= PHP的true您需要在PHP 'true''false'

中使用字符串

由于PHP会将任何值的字符串等同为true,因此当前代码正在查找它将始终找到的布尔值true,因此您将始终执行if块的truthy部分,而不是{{ 1}}块