Php 为用户存储复选框值和输出结果

Php 为用户存储复选框值和输出结果,php,mysql,checkbox,Php,Mysql,Checkbox,我有一个复选框,我希望它能够控制一个变量构造,0表示无构造,1表示构造。并输出任何当前值,以便用户可以看到是否检查了构造。我意识到复选框不会显示“未选中”的值,我已经尝试了很多方法。我不确定我的逻辑哪里有缺陷 <input name="construction" type="checkbox" id="construction" onChange="this.form.submit();" <?php if ($row_config['construction'] == 1) { e

我有一个复选框,我希望它能够控制一个变量构造,0表示无构造,1表示构造。并输出任何当前值,以便用户可以看到是否检查了构造。我意识到复选框不会显示“未选中”的值,我已经尝试了很多方法。我不确定我的逻辑哪里有缺陷

<input name="construction" type="checkbox" id="construction" onChange="this.form.submit();" <?php if ($row_config['construction'] == 1) { echo ' checked'; } else { echo ' unchecked'; } ?>>

<?php
if ($_POST) {
    // 0 = off
    // 1 = on
    $constr = (isset($_POST['construction']) && $_POST['construction'] == "on") ? 1 : 0; 
    mysql_query("UPDATE config SET construction = '$constr'") or die(mysql_error());
    redirect('index.php');
}
?>

我认为问题出在向用户输出数据方面

修正版,谢谢大家

<?php
require('framework/ui_framework.php');
page_protect();

$config = mysql_query("SELECT construction FROM config") or die(mysql_error());
$row_config = mysql_fetch_assoc($config);

$isChecked = false;
$constr = 0;
if(isset($_POST['construction'])){
    if($_POST['construction']) {
        $isChecked = true;
        $constr = 1;
        mysql_query("UPDATE config SET construction = '".$constr."'") or die(mysql_error());
    }
} else {
    $isChecked = false;
    $constr = 0;
    mysql_query("UPDATE config SET construction = '".$constr."'") or die(mysql_error());
}
?>

<input name="construction" type="checkbox" id="construction" onChange="this.form.submit();" <?php if($isChecked) echo "checked='checked'"; ?> value="on">

您从未设置复选框的值,因此您的逻辑
(设置($\u POST['construction'])和&$\u POST['construction']=“on”)
在选中
$\u POST['construction']=“on”时失败。


如果只是查看复选框是否被选中,只需使用
isset()
,不要担心检查值。

您从未设置复选框的值,因此您的逻辑
(isset($\u POST['construction'])和&$\u POST['construction']=“on”)在选中
$\u POST['construction']=“on”时会失败


如果只是查看复选框是否被选中,只需使用
isset()
,不必担心检查值。

您实际上没有为复选框指定值。从下面的PHP判断,您的复选框属性列表中似乎缺少了
value=“on”
。此外,复选框设置中的
else回显“unchecked”
是不必要的。

您实际上没有为复选框指定值。从下面的PHP判断,您的复选框属性列表中似乎缺少了
value=“on”
。另外,复选框设置中的
else回显“unchecked”
是不必要的。

试试这个

您必须使用isset($varname)检查变量

试试这个

您必须使用isset($varname)检查变量



您的代码块是否显示两个粘在一起的不同页面?或者,在用户提交表单之前,您是否正在检查$_POST['construction']?如果是后者,那就是问题所在。都在同一页对不起,我问错了问题。您是在用户点击表单上的提交按钮之前还是之后检查$u POST['construction']的值?例如,没有提交按钮,该复选框有一个onchange submit,并且在提交后检查该值。当我使用一个按钮而不是jquery或onchange时,脚本会像@pardal所说的那样工作。但很明显,当我在更改中使用时,它不会处理值。很奇怪。我宁愿没有一个提交按钮,但它似乎是唯一的工作方式你的代码块显示两个不同的页面粘在一起?或者,在用户提交表单之前,您是否正在检查$_POST['construction']?如果是后者,那就是问题所在。都在同一页对不起,我问错了问题。您是在用户点击表单上的提交按钮之前还是之后检查$u POST['construction']的值?例如,没有提交按钮,该复选框有一个onchange submit,并且在提交后检查该值。当我使用一个按钮而不是jquery或onchange时,脚本会像@pardal所说的那样工作。但很明显,当我在更改中使用时,它不会处理值。很奇怪。我不希望有一个提交按钮,但这似乎是它工作的唯一方式。正如@paradium提到的,
否则echo“unchecked”是不必要的。
做了您建议的更改。但是,它只有在我手动将db值设置为0时才起作用。然后单击复选框,然后将db值设置为1。但是如果我再次单击复选框,它不会将其设置为0。这也是我的主要问题,正如@palardia提到的,
否则echo'unchecked'
是不必要的。我做了您建议的更改。但是,它只有在我手动将db值设置为0时才起作用。然后单击复选框,然后将db值设置为1。但是如果我再次单击复选框,它不会将其设置为0。这是我的主要问题。我也这么想,但我一直在尝试一切。例如,仅当我手动将db值设置为0时,它才起作用。然后单击复选框,然后将db值设置为1。但是,如果我再次单击复选框,它不会将其设置为0。@Alex如果是在取消选中复选框时复选框未提交的问题,您可以使用
onclick()
而不是
onchange()
。也许那样会更好。这正是问题所在,我已经试过了。即使使用jquery,但它仍然没有取消选中复选框/将复选框恢复为0
@Alex,然后尝试将复选框后面的PHP部分移动到脚本顶部。PHP是按顺序运行的——在复选框设置为checked之后,您正在执行查询。但是它对ui来说并不好。php在我的脚本中位于顶部。我只是把它按不同的顺序贴在这里,我也这么认为,但我一直在尝试一切。例如,仅当我手动将db值设置为0时,它才起作用。然后单击复选框,然后将db值设置为1。但是,如果我再次单击复选框,它不会将其设置为0。@Alex如果是在取消选中复选框时复选框未提交的问题,您可以使用
onclick()
而不是
onchange()
。也许那样会更好。这正是问题所在,我已经试过了。即使使用jquery,但它仍然没有取消选中复选框/将复选框恢复为0
@Alex,然后尝试将复选框后面的PHP部分移动到脚本顶部。PHP是按顺序运行的——在复选框设置为checked之后,您正在执行查询。但是它对ui来说并不好。php在我的脚本中位于顶部。我只是以不同的顺序将其粘贴在这里,您不需要回显已选中或未选中,因为如果已选中,此代码将选中该框。。如果
<?php
  $isChecked = false;
  $constr = 0;
  if(isset($_POST['construction'])){
    if($_POST['construction'] == 'on'){
      $isChecked = true;
      $constr = 1;
    }      
    mysql_query("UPDATE config SET contruction = '$constr'") or die(mysql_error());

  }

?>

<!doctype html>

<html>
  <head>

  </head>

  <body>
    <form action='test3.php' method='POST'>
      <input name="construction" type="checkbox" id="construction" onChange="this.form.submit()" <?php if($isChecked) echo "checked='checked'"; ?> />
      <?php

      ?>
    </form>     
  </body>
</html>