1

嗨,我正在使用 for each 循环生成复选框列表,我想将value选中的复选框传递到数据库中。

foreach($this->lis as $lst)
 {?>
  <tr>
    <td>
     <input type="checkbox" name="list" value="1" />
         <label for="list_32"><?php echo $list->nList ?></label>
    </td>
  </tr>
 <?php } ?>

当我选中复选框时,我想将标签名称传递到数据库中,有人可以帮忙。

4

4 回答 4

4

检查此代码。您需要将数组作为复选框名称,即列表[]。提交表单后,您可以使用它的值插入数据库。

<? 
    if(isset($_POST['submit'])) // once form is submitted build your logic
    {
        $list = $_POST['list'];
        foreach($list as $value)
        {
            echo "<br />Checked: $value";
            // use $value to insert into database
            $sql = "insert into...";
            mysql_query($sql);
        }
    }
?>
<form name="frm" method="post">
<table>
<? foreach($this->lis as $lst)
 {?>
  <tr>
    <td>
     <input type="checkbox" name="list[]" value="<?php echo $list->nList ?>" />
         <label for="list_32"><?php echo $list->nList ?></label>
    </td>
  </tr>
 <?php } ?>
 <tr>
    <td><input name="submit" value="Submit" type="submit" /></td></tr></table>
</form>
于 2012-06-26T04:36:39.507 回答
2

好吧,你有几个问题在那里..

首先,请避免打开php标签并不断关闭它们。只需回显 HTML。频繁进出php会导致性能问题。

因此,首先,您需要在此处设置一个表单,您的表单需要指向第二个页面(或使用 isset 函数进行自我处理,但为了清楚起见,让我们使用前一个解决方案)。第二页是根据用户勾选的内容为您将内容转储到数据库中的内容。

因此,这是您的表单的 HTML;

<form action="database.php" method="POST">
    <div>
        <label for="checkbox1">This is the first option:</label>
        <input type="checkbox" id="checkbox1" name="checkbox1" />
    </div>
    <div>
        <label for="checkbox2">This is the second option:</label>
        <input type="checkbox" id="checkbox2" name="checkbox2" />
    </div>
    <div>
        <input type="submit" />
    </div>
</form>

同样,我建议在你的 foreach 循环中回显这个 - 一个简短的函数可以为你完成这个。

因此,一旦有人点击“提交”按钮,他们将被带到您的第二页(我们称之为 database.php),他们的选项将存储在 POST 数组中。为获得良好的实践,在处理数据库条目时始终使用 POST 而不是 GET。

所以在这个页面上,我们会检查哪些复选框被选中,然后根据需要更新数据库;

if (isset($_POST['checkbox1']))
{
    // user ticked checkbox1
    $sql = "UPDATE table
            SET 'checkbox1' = 1
            WHERE 'user' = 'username';"
    mysqli_query($sql); 
}

请注意,这只是一个粗略的解决方案-您还没有确切地告诉我您是如何执行此操作的,因此我假设您的数据库与用户的投票等相关。您还可以通过增加值来更新 checkbox1 等等等等。

希望这可以帮助。

  • 伊根
于 2012-06-26T04:37:03.340 回答
0

在名称中您应该使用 [] (因为它是一个数组)。所以在这种情况下,它将是 name="list[]"。然后,当您提交它(发布或获取)时,您只需在 list[] 数组中获取检查的数据。我不确定我是否理解你的问题。如果我没有;请分享更多信息。

于 2012-06-26T04:26:07.827 回答
0

我想这就是你要找的:

foreach($this->lis as $lst)
 {?>
  <tr>
    <td>
     <input type="checkbox" name="list[<?php echo $list->nList ?>]" value="1" />
     <label for="list_32"><?php echo $list->nList ?></label>
    </td>
  </tr>
 <?php } ?>

然后在 PHP 中,你会foreach($_POST['list'] as $listval)再次循环它。如果您在表单中使用,请替换$_POST$_GETGET

编辑:我刚刚注意到你在哪里做echo $list->nList的这个变量要么不会在你的循环中改变,要么是一个错字。假设这是一个错字,它应该是echo $lst->nList。如果它不是错字,那么您只想删除它并name="list[]"在您的 HTML 中添加

于 2012-06-26T04:32:39.440 回答