如果在php查询中未选择任何复选框,请选中所有复选框

如果在php查询中未选择任何复选框,请选中所有复选框,php,checkbox,Php,Checkbox,我有一个脚本,当用户可以从数据库中查找练习时,我有一个复选框供用户查找特定练习。当从每个复选框组中至少选中一个复选框时,脚本工作正常。但是,我希望如果没有选中复选框,则它将显示所有复选框的结果 我的复选框表单如下所示 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="criteria"> <p><strong>MUSCLE GROUP<

我有一个脚本,当用户可以从数据库中查找练习时,我有一个复选框供用户查找特定练习。当从每个复选框组中至少选中一个复选框时,脚本工作正常。但是,我希望如果没有选中复选框,则它将显示所有复选框的结果

我的复选框表单如下所示

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="criteria">
    <p><strong>MUSCLE GROUP</strong></p>
    <input type="checkbox" name="muscle[]" id="abdominals" value="abdominals"/>Abdominals<br />
    <input type="checkbox" name="muscle[]" id="biceps" value="biceps" />Biceps<br />
    <input type="checkbox" name="muscle[]" id="calves" value="calves" />Calves<br />
     ect...
    <br /><p><strong>EQUIPMENT (please select a least one)</strong></p>
    <input type="checkbox" name="equipment[]" id="equipment" value="bands"/>Bands<br />
    <input type="checkbox" name="equipment[]" id="equipment" value="barbell" />Barbell<br />
    <input type="checkbox" name="equipment[]" id="equipment" value="dumbbell" />Dumbbell<br />
     ect....
    <input type="submit" name="sub" value="Generate Query" />
    </form>

好的-我想我已经把一切都弄明白了。你是对的-主要问题在于
isset
isempty
调用。我在你的文件上创建了一些变体,这显示了发生了什么。注意-由于我没有你的一些“其他”函数,我只展示了你函数的外部部分出了什么问题

第1部分:验证功能 在下面的代码中,我向输入表单添加了两个JavaScript函数;这些都是松散地基于您在谷歌搜索“JavaScript验证复选框”时可以找到的脚本。
oneBoxSet(groupName)
函数将查看所有文档元素;查找类型为
的复选框
,查看是否选中其中一个,如果选中,则确认它属于
组名
。现在,它返回“true”或“false”。调用函数
validateMe(formName)
运行验证。它被称为添加

onclick="validateMe('criteria'); return false;"
转到
提交
按钮的代码。这基本上是说“使用此参数调用此函数以验证表单”。在这种情况下,函数“修复”数据并提交;但是您可以想象它返回“false”,在这种情况下,提交操作将被取消

validateMe
功能中,我们检查每组是否至少选中一个框;如果不是,则相应地设置“all[]”组中的隐藏框

<?php

    echo 'file was called successfully<br><br>';
    if(isset($_POST['muscle'])) {
       echo "_POST[muscle] is set<br>";
       print_r($_POST[muscle]);
       echo "<br>";

       if (!empty($_POST['muscle'])) {
         echo "_POST[muscle] is not empty!<br>";
         }
         else {
         echo "_POST[muscle] is empty!<br>";
         }
         }
    else {
      echo "_POST[muscle] is not set: it is empty!<br>";
    }
    if(isset($_POST['equipment'])) {
       echo "_POST[equipment] is set<br>";
       print_r($_POST['equipment']);
       echo "<br>";

       if (!empty($_POST['equipment'])) {
         echo "_POST[equipment] is not empty!<br>";
         }
         else {
         echo "_POST[equipment] is empty!<br>";
         }
         }
    else {
      echo "_POST[equipment] is not set: it is empty!<br>";
    }

    if(isset($_POST['all'])) {
      echo "this is what you have to do:<br>";
      print_r($_POST['all']);
      echo "<br>";
      }


//    if(isset($_POST['muscle']) && !empty($_POST['muscle'])){
//        if(isset($_POST['equipment']) && !empty($_POST['equipment'])){
我对代码做了一点修改-它调用了一个不同的脚本(
muscle.php
),而不是您使用的
)。。。显然,原理是一样的

在这段初始代码之后,我们将看看我在
muscle.php
中添加的一些东西,以确认您最初的问题是什么

<html>
<head>
<script type="text/javascript">

// go through all checkboxes; see if at least one with name 'groupName' is set
// if so, return true; otherwise return false
function oneBoxSet(groupName)
{
    var c=document.getElementsByTagName('input');
    for (var i = 0; i<c.length; i++){
        if (c[i].type=='checkbox')
        {
           if (c[i].checked) {
             if (c[i].name == groupName) {
               return true; // at least one box in this group is checked
               }
           }
        }
    }
    return false; // never found a good checkbox
}

function setAllBoxes(groupName, TF)
{
    // set the 'checked' property of all inputs in this group to 'TF' (true or false)
    var c=document.getElementsByTagName('input');
    // alert("setting all boxes for " + groupName + " to " + TF);
    for (var i = 0; i<c.length; i++){
        if (c[i].type=='checkbox')
        {
            if (c[i].name == groupName) {
            c[i].checked = TF;
            }
        }
    }
    return 0;
}

// this function is run when submit is pressed:
function validateMe(formName) {
  if (oneBoxSet('muscle[]')) {
    document.getElementById("allMuscles").value = "selectedMuscles";
    //alert("muscle OK!");
    } 
  else { 
    document.getElementById("allMuscles").value = "allMuscles";
    // and/or insert code that sets all boxes in this group:
    setAllBoxes('muscle[]', true);
    alert("No muscle group was selected - has been set to ALL");
    }
  if (oneBoxSet('equipment[]')) {
    document.getElementById("allEquipment").value = "selectedEquipment";
    //alert("equipment OK!");
    }
  else  {
    document.getElementById("allEquipment").value = "allEquipment";
    // instead, you could insert code here that sets all boxes in this category to true
    setAllBoxes('equipment[]', true);
    alert("No equipment was selected - has been set to ALL");
    }
  // submit the form - function never returns
  document.forms[formName].submit();  
}

</script>
</head>

<body>
    <form action="muscle.php" method="post" name="criteria">
        <p><strong>MUSCLE GROUP</strong></p>
        <input type="checkbox" name="muscle[]" id="abdominals" value="abdominals"/>Abdominals<br />
        <input type="checkbox" name="muscle[]" id="biceps" value="biceps" />Biceps<br />
        <input type="checkbox" name="muscle[]" id="calves" value="calves" />Calves<br />
        <input type="hidden"   name="all[]" id="allMuscles" value="selectedMuscles" />
        etc...<br>
        <br /><p><strong>EQUIPMENT (please select a least one)</strong></p>
        <input type="checkbox" name="equipment[]" id="equipment" value="bands"/>Bands<br />
        <input type="checkbox" name="equipment[]" id="equipment" value="barbell" />Barbell<br />
        <input type="checkbox" name="equipment[]" id="equipment" value="dumbbell" />Dumbbell<br />
        <input type="hidden"   name="all[]" id="allEquipment" value="selectedEquipment" />
        <br>
        <input type="submit" name="sub" value="Generate Query" onclick="validateMe('criteria'); return false;" />
    </form>
</body>
</html>
如果在未选中任何复选框的情况下调用此选项,则会出现两个对话框(“not OK!”),然后显示以下输出:

file was called successfully

_POST[muscle] is not set: it is empty!
_POST[equipment] is not set: it is empty!  
this is what you have to do:  
Array ( [0] => allMuscles [1] => allEquipment )
如果在第一个组中选择了两个框,而在第二个组中没有选择:

file was called successfully

_POST[muscle] is set
Array ( [0] => abdominals [1] => calves )
_POST[muscle] is not empty!
_POST[equipment] is not set: it is empty!
this is what you have to do:
Array ( [0] => selectedMuscles [1] => allEquipment ) 

我并不声称自己写了漂亮的代码;但我希望这是功能性的,能让你摆脱之前的困境。祝你好运

因此,如果选择为空,是否要选中所有复选框?或者您只想选择每个组中的第一个?您可以在提交表单之前调用验证函数。它将在复选框中循环,选择它们的逻辑OR。如果设置了一个,这将是错误的;您可以将新变量“ALL”传递给数据库脚本,或者在调用之前设置所有变量。如果未选中muscle[]组中的复选框,则我希望它选中muscle[]组的所有复选框,或者显示所有结果(如果设备[]中未选中任何复选框)然后将所有该组复选框分组selected@Floris我如何调用验证函数?如果可能,请给我一个示例代码。谢天谢地,您的代码应该几乎按原样工作。看看您处理无复选框情况的方式,似乎您应该有一个空数组
$options[]
,它应该会触发
if($fullsearch')
条件为false,因此查询中不应该添加
WHERE
,您应该返回所有内容。由于情况并非如此,我将添加一些调试语句。如果在mysql_查询之前添加一行
echo$语句
,当您没有选择任何框时,它会给出什么输出?当你这么做的时候?非常感谢你的帮助,我认为你是对的,如果没有人被选中,我最好把这个节目全部从一个小组中删除。您的脚本将工作得更好,用户友好。非常感谢你的帮助。谢谢事实上你现在可以表演了。脚本捕获空复选框(对话框正好显示可以执行的操作),并设置隐藏变量——因此,当您创建查询时,可以查看变量,查看它是什么,并相应地构建查询。您最初的问题是“没有选择任何框时,我的脚本不会运行”-我在第2部分中指出,这是由于您选择了
isset
(没有选择框时,
isset()
为false…)。现在由您决定如何使用构建块。你知道如何“接受”答案吗?我已经编辑了我的验证解决方案,其中包含了一个函数,如果没有选中任何复选框,该函数将设置组中的所有框-这意味着你的原始php代码应该能够在不修改的情况下运行…谢谢@Floris,但出于某种原因,javascript正在被我的原始php代码忽略。我看不出有什么原因。你知道是什么原因导致它被忽略了吗?您是否在JavaScript上运行firebug以查找错误?我必须手动输入我的代码编辑-可能会出现错误。今天晚些时候我会看一看。
file was called successfully

_POST[muscle] is set
Array ( [0] => abdominals [1] => calves )
_POST[muscle] is not empty!
_POST[equipment] is not set: it is empty!
this is what you have to do:
Array ( [0] => selectedMuscles [1] => allEquipment )