提交表单后,使复选框数组保持选中状态

时间:2014-03-23 18:35:30

标签: php forms checkbox

我创建了一个大型复选框,从数据库中获取它们的值。问题是,我需要找到一种方法让浏览器记住检查了某些复选框。提交表单后,它会发布值,另一个函数使用其他函数的post值。

这就是我创建复选框表单的方式:

$query .= "SELECT id, ediens FROM menu_edieni_otrie";
    $query1 .= "SELECT id, ediens FROM menu_edieni_zupas";

    echo "<body>\n";
    echo "<form name='otrie_edieni' action='' method='post'>\n";
    echo "<table border='1px'>\n";
    echo "<tr>\n";
    echo "<td>\n";
    /* execute multi query */
    if ($mysqli->multi_query($query)) {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_row()) {
            echo "<input type='checkbox' name='ediens2[]' value='";
            printf ("%s", $row[1]);
            echo "' ";
            echo "/>";
            printf ("%s </br>\n ", $row[1]);
            }
            $result->free();
        }
    }
    echo "</td>\n";
    echo "<td>\n";
    if ($mysqli->multi_query($query1)) {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_row()) {
            echo "<input type='checkbox' name='zupas2[]' value='";
            printf ("%s", $row[1]);
            echo "'/>";
            printf ("%s </br>\n ", $row[1]);
            }
            $result->free();
        }
    }
    echo "</td>\n";
    echo "</tr>\n";
    echo "</table>";
    echo "<input type='submit' name='formSubmit' value='Submit' />";
    echo "</form>\n";
    echo "</body>";

如何在按下提交按钮后检查选中的复选框,然后在刷新后检查它们?

此功能接收_POST:

$ediens2 = $_POST['ediens2'];
$zupas2 = $_POST['zupas2'];
  if(empty($ediens2) && empty($zupas2)) 
  {
    echo("Nav ievadīta neviena vērtība");
  } 
  else
  {
    $N = count($ediens2);
    $M = count($zupas2);
    $mysqli = @new mysqli('*', '*', '*', '*');

        $mysqli->query("SET NAMES 'utf8'", $connection);

        if ($mysqli->connect_errno) {
            die('Connect Error: ' . $mysqli->connect_errno);
        }
    for($i=0; $i < $N; $i++){
        $query3 = "UPDATE tmp_cirks SET name='$ediens2[$i]' WHERE id='$i'";
        $mysqli->multi_query($query3);
    }
    /* close connection */
    $mysqli->close();
    $date = date('d/m/Y', time());
    echo $date;
    echo("<br>");
    echo("<ul>");
    for($i=0; $i < $N; $i++)
    {
        echo("<li>");
        echo("<strong>" . $ediens2[$i] . "</strong>");
        echo("</li>");
    }
    echo("</ul>");
    echo("<ul>");
    for($i=0; $i < $M; $i++)
    {
        echo("<li>");
        echo("<strong>" . $zupas2[$i] . "</strong>");
        echo("</li>");
    }
    echo("</ul>");      
  }

到目前为止我想到的是,我将从_POST收到的值存储到一个单独的数据库表中 - 用这个:

for($i=0; $i < $N; $i++){
        $query3 = "UPDATE tmp_cirks SET name='$ediens2[$i]' WHERE id='$i'";
        $mysqli->multi_query($query3);
    }

我在想,然后我可以比较生成的复选框表单是否存储在此单独表格中的任何值。如果它有 - 那么它使“checked ='checked'”函数。我是在正确的轨道上吗?

数据库表如下所示: id ediens edieni_ru edieni_eng cena cena_puse otr1KotletesКотлетыСutlet2,001,30 otr2GulašsГуляшGoulash2,20 1,40 otr3SlinkietņteņiЛенивыеголубцы切碎的白菜配炒肉末1,70 1,15 otr4PlovsПловPilaff1,70 1,15

生成复选框值我只使用“ ediens ”列。 我创建的新表看起来像这样(保存值的那个)。

id名称 1 Kotletes 2古拉什 3Karbonāde

所以我在想的是,像这样: if(name == ediens)echo'check = checked'; (当然这只是一个不起作用的例子)

有什么建议吗?我不知道我是否走在正确的轨道上。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在post函数中使用setcookie,在刷新后使用$ _COOKIE以确定它是否已被选中。

setcookie("Checkbox1", "checked", time()+3600);
if($_COOKIE["Checkbox1"] == "checked") echo "checkbox1 checked";

编辑:但是,当然,如果你保存它们,你可以从数据库中加载复选框值。

答案 1 :(得分:0)

所有在这里工作......然后请问任何问题。我会解决它们。

此代码显示存储在两个表中的条目的两个菜单。它允许用户选择他们希望的条目并持续“检查”。通过设置&#39;已选中&#39;通过检查$ _POST数组在输出屏幕上输入属性。

调试提供的代码并使其以最小的更改工作。

修正: 1)&quot; multi_query&#39;没有正确处理第二个结果集。

2)单独的SQL查询需要以&#39 ;;&#39;。

终止

这是经过测试的代码(PHP 5.3.18)。

我改变了&#39; fetch&#39;声明,以便我可以通过列名称访问数据。

我已将调试代码留在显示$ _POST数组中,以便您可以看到它正常工作。只需删除标记为/ * debug * /的代码即可停止显示。

<?php
    /* debug */ var_dump($_POST);

    $mysqli = new mysqli('localhost', 'test', 'test', 'testmysql');

    $query  = '';
    $query .= "SELECT id, ediens FROM menu_edieni_otrie order by id;";

    $query .= "SELECT id, ediens FROM menu_edieni_zupas order by id;";

    echo "<body>\n";
    echo "<form name='otrie_edieni' action='' method='post'>\n";
    echo "<table border='1px'>\n";
    echo "<tr>\n";
    echo "<td>\n";
    /* execute multi query */
    if ($mysqli->multi_query($query)) {
        if ($result = $mysqli->store_result()) {

            while ($row = $result->fetch_array()) {
                echo "<input type='checkbox' name='ediens2[]' value='";
                printf ("%s", $row['id']);
                echo "' ";
                echo isset($_POST['ediens2']) && in_array($row['id'], $_POST['ediens2']) ? ' checked="checked"' : '';
                echo "/>";
                printf ("%s </br>\n ", $row[1]);
            }
            $result->free();
        }
    }

    echo "</td>\n";
    echo "<td>\n";
    // try and get the next results (zupas)

    if ($mysqli->more_results()) {          // any results from the zupas menu?
        $mysqli->next_result();             // get them...
        $result = $mysqli->store_result();  // access them...

        while ($row = $result->fetch_array()) { // process them
            echo "<input type='checkbox' name='zupas2[]' value='";
            printf ("%s", $row['id']);
            echo "' ";
            // we need to set the 'checked' attribute if the user ticked the box.
            // we check the $_POST array to see if the current value is in there ans set it checked if it is.
            echo isset($_POST['zupas2']) && in_array($row['id'], $_POST['zupas2']) ? ' checked="checked"' : '';
            echo "'/>";
            printf ("%s </br>\n ", $row[1]);
        }
        $result->free();
    }
    echo "</td>\n";
    echo "</tr>\n";
    echo "</table>";
    echo "<input type='submit' name='formSubmit' value='Submit' />";
    echo "</form>\n";
    echo "</body>";
?>