Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在表单中使用PHP和While循环的复选框_Php_Sql_Checkbox_While Loop - Fatal编程技术网

在表单中使用PHP和While循环的复选框

在表单中使用PHP和While循环的复选框,php,sql,checkbox,while-loop,Php,Sql,Checkbox,While Loop,我试图复制这个搜索,我用一个选择输入,但每个选择选项都有一个复选框,但它不起作用。它实际上与select一起工作 <select required id="brand" name="brand" class="sm-form-control"> <option disabled value="">-- Brand--</option> <?php while($row= mysql_fetch_array($consult_brands)) { echo

我试图复制这个搜索,我用一个选择输入,但每个选择选项都有一个复选框,但它不起作用。它实际上与select一起工作

<select required id="brand" name="brand" class="sm-form-control">
<option disabled value="">-- Brand--</option>
<?php
while($row= mysql_fetch_array($consult_brands)) {
echo "<option value='".$row["value"]."'>".$row["brand"]."</option>"; }
?>
</select>
你能在复选框中帮助我找到正确的方法吗。其思想是,对于SQL中的每个品牌,它都会创建一个带有值和品牌名称的复选框


谢谢您的帮助。

您可以使用以下解决方案:

    while($row= mysqli_fetch_assoc($result)) {
        echo "<input type='checkbox' name='brands[]' value='".$row["value"]."'>".$row["brand"]."<br>";
    }
目标HTML 这里缺少一个用于提升表单粘性的checked属性点。 只需将处理逻辑添加到表单处理程序中,并跟踪选择的品牌。然后,按如下方式运行循环逻辑

<?php
    function isChecked($name, array $checkableControls)
    {
        if (in_array($name, $checkableControls)) {
            return ' checked="checked" ';
        }

        return '';
    }

    $brands = ['Coke', 'Pepsi', 'Slice', 'Sprite']; // From database

    // $submitted = $_POST['brands'];
    $submitted = ['Coke', 'Slice'];  // From the user during HTTP POST request

    $brandResults = search($submitted);
    $htmlBrandRecords = formatResults($brandResults);

    $checkboxes = [];

    foreach ($brands as $key => $brand) {
        $checkboxes[] = '<label for="' . $brand . '">' . $brand . '</label><input id="' . $brand . '" type="checkbox" name="brands[]" . isChecked($brand, $submitted) . value="' . $brand . '">';
    }

    $checkboxes = implode("\n", $checkboxes);
?>
<section id="search">
    <form action="/search.php" method="post">
        <?= $checkboxes; ?>
        <input type="submit" value="Search">
    </form>
    <div id="records">
        <?= $htmlBrandRecords; ?>
        <!-- Place your results here via PHP. -->
        <!-- Alternatively, send JSON to the user-agent. -->
    </div>
<section>
结论 可以很容易地对其进行编辑以使用关联阵列。 提交数字代码1、2、3、4而不是文本Coke,从长远来看,Slice可能更好、更安全。 检查编码、筛选和验证所有用户输入。正确地转义任何用户输入,因为它改变了上下文PHP->SQL、PHP->HTML等。。。。 切勿直接将用户提交的数据放入表单中。 将代码组织到类中。这会节省你的时间。 使用heredoc可以避免你做昂贵的扭伤。 在通过输出缓冲区发送之前,收集所有标签和输入。 这是一个简单的解决方案,不完全是我应该怎么做的。 您可以跟踪任何禁用的HTML属性(类)的状态,这样的类允许您通过禁用/启用控件来操作表单,或者通过在类属性中添加或删除CSS类来显示或隐藏表单元素。 这可以帮助您制作真正逐步增强的表单,几乎可以与您的JavaScript创作相媲美。 做MVC?您可以创建HTML视图来补充表单的JSON视图。
复选框“”不是由元素生成的。确保正确设置复选框HTML的格式。你所问的是离题的,有几个原因。我认为现在是你浏览帮助区的好时机,如果你还没有浏览过帮助区以及其中的相关链接的话。通读一遍,您将看到这里的堆栈溢出是如何工作的。这将给你一个好主意,如何制定一个好的问题,看看什么可以和不应该被问,以及什么是期望从你。这是为了帮助您在堆栈溢出方面有一个更好、积极的体验,这是每个人都想要和追求的。我很好地理解这个问题。您缺少标签。也不需要关闭选项标签。@Jonathan。。。很好的观察。我错过了。我已经修好了。谢谢。@AnthonyRutledge。。。我们这里不需要标签。品牌名称已被输出。@AnthonyRutledge。。。可以我同意你的看法。“需要”是一个强有力的词。谢谢。不要使用\n,请使用PHP常量PHP\u EOL,以实现跨平台兼容性。此外,对于复选框输入,如果存在选中属性,则将选中该属性,无论为其分配了什么值,例如,checked=false。这是一个非常常见的错误。PHP_EOL也显示为新行。它可能是\n或\r\n,具体取决于操作平台。有关属性问题,请参阅HTML spec/MDN文档。在这种情况下,所有输出的内容都将发送给web浏览器。平台是用户代理,在这种情况下,\n将在相关环境下工作,因为其上下文是浏览器中的视图源。PHP_EOL用于操作系统级别的遵从性,在本例中,这不会影响用户代理的上下文。试试看。你会看到的。虽然HTML不需要换行符,但它只是使查看源代码更容易。我知道W3C的HTML5规范是怎么说的。它没有说一致性意味着什么,但我说它确实意味着什么。@Raptor checked属性的语法是我唯一关心的。我现在关注的是服务器端问题,但返回checked而不是整个语法checked=checked时确实出错。尽管如此,您可以用更少的内存检查可检查控件。如果你对PHP_EOL和查看源代码有兴趣,一定要告诉我。
<?php
    $brands = ['Coke', 'Pepsi', 'Slice', 'Sprite'];
    $checkboxes = [];

    foreach ($brands as $key => $brand) {
        $checkboxes[] = '<label for="' . $brand . '">' . $brand . '</label><input id="' . $brand . '" type="checkbox" name="brands[]" value="' . $brand . '">"';
    }

    $checkboxes = implode("\n", $checkboxes);
?>

<form action="/search.php" method="post">
    <?= $checkboxes; ?>
    <input type="submit" value="Search">
</form>
<?php
    function isChecked($name, array $checkableControls)
    {
        if (in_array($name, $checkableControls)) {
            return ' checked="checked" ';
        }

        return '';
    }

    $brands = ['Coke', 'Pepsi', 'Slice', 'Sprite']; // From database

    // $submitted = $_POST['brands'];
    $submitted = ['Coke', 'Slice'];  // From the user during HTTP POST request

    $brandResults = search($submitted);
    $htmlBrandRecords = formatResults($brandResults);

    $checkboxes = [];

    foreach ($brands as $key => $brand) {
        $checkboxes[] = '<label for="' . $brand . '">' . $brand . '</label><input id="' . $brand . '" type="checkbox" name="brands[]" . isChecked($brand, $submitted) . value="' . $brand . '">';
    }

    $checkboxes = implode("\n", $checkboxes);
?>
<section id="search">
    <form action="/search.php" method="post">
        <?= $checkboxes; ?>
        <input type="submit" value="Search">
    </form>
    <div id="records">
        <?= $htmlBrandRecords; ?>
        <!-- Place your results here via PHP. -->
        <!-- Alternatively, send JSON to the user-agent. -->
    </div>
<section>