我有以下代码,但问题是如果我使用普通的提交按钮一切正常,但如果我想用jquery onchange提交复选框值它不起作用(即没有任何进入数据库)...我甚至尝试使用附加onChange=this.form.submit()
的非jquery路线进行施工。有谁知道发生了什么/如何解决这个问题?对我而言,似乎表单在没有处理数据的情况下提交。
我也在使用https://github.com/ghinda/css-toggle-switch作为复选框
JQUERY:
$('#construction').change(function() {
this.form.submit();
});
PHP:
<?php
$config = mysql_query("SELECT construction FROM config") or die(mysql_error());
$row_config = mysql_fetch_assoc($config);
if ($_POST) {
// 0 = off
// 1 = on
$constr = $_POST['construction'];
if ($constr == 'on') { $c = 0; } else { $c = 1; }
mysql_query("UPDATE config SET construction = '".$c."'") or die(mysql_error());
redirect('index.php');
}
?>
HTML:
<div style="margin-top:30px;">
<form action="index.php" method="post" id="doSite">
<fieldset class="toggle">
<input id="construction" name="construction" type="checkbox"<?php if($row_config['construction'] == '0') { echo ' checked'; } ?>>
<label for="construction">Site construction:</label>
<span class="toggle-button"></span>
</fieldset>
<input name="Submit" type="submit" value="Shutdown site" class="button">
</form>
</div>
答案 0 :(得分:2)
答案 1 :(得分:1)
将您的jquery更改为:
$('#construction').change(function() {
$("#doSite").submit();
});
doSite
是您的表单ID,因此您可以在选中或取消选中复选框时直接使用它来提交表单。
我更新了你的代码:
- 使用isset检查是否设置了变量
- 表单提交时未检查的复选框不包含在$ _POST数据中:这意味着您只需检查是否设置了$ _POST ['construction'](其值无关紧要)
- 因为你在mysql_query中使用双引号,所以不需要连接。并且,如果construction
字段是INT类型,则可以删除$ c周围的单引号
<?php
$config = mysql_query("SELECT construction FROM config") or die(mysql_error());
$row_config = mysql_fetch_assoc($config);
if(isset(($_POST))
{
// 0 = off
// 1 = on
if(isset($_POST['construction']))
$c = 1;
else
$c = 0;
mysql_query("UPDATE config SET construction = '$c'") or die(mysql_error());
redirect('index.php');
}
?>
注意:有一天,所有mysql_ *函数都将被弃用并删除。如果可能,您应该使用MySQLi或PDO代替
更多内容:
http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated
http://php.net/manual/en/mysqlinfo.api.choosing.php
答案 2 :(得分:0)
为什么不使用:
$("#checkid").click(function(){
})