我已经构建了一个在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执行此操作的任何可能方法。
由于
答案 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}}块