Php 如何将mysql记录显示为预选复选框?

Php 如何将mysql记录显示为预选复选框?,php,mysql,Php,Mysql,我在一个名为posts的表中有一个名为post_tags的表列,其中指定的标记以@符号分隔存储。我还有一个名为tags的表,其中存储了所有标记名。我想以一种更规范化的方式设计我的数据库,但为了达到这个目的,我正在尝试实现这是最简单的选择 无论如何,我想在屏幕上显示tags表中的所有条目作为复选框,因此: $query = mysql_query("SELECT * FROM tags ORDER BY name"); while ($row = mysql_fetch_asso

我在一个名为posts的表中有一个名为post_tags的表列,其中指定的标记以@符号分隔存储。我还有一个名为tags的表,其中存储了所有标记名。我想以一种更规范化的方式设计我的数据库,但为了达到这个目的,我正在尝试实现这是最简单的选择

无论如何,我想在屏幕上显示tags表中的所有条目作为复选框,因此:

    $query = mysql_query("SELECT * FROM tags ORDER BY name");

    while ($row = mysql_fetch_assoc($query)) {

        $tag = $row['name'];

        echo "<input type='checkbox' name='tags[]' value='$tag' />\n";

    }
$query=mysql\u query(“按名称从标签中选择*);
while($row=mysql\u fetch\u assoc($query)){
$tag=$row['name'];
回音“\n”;
}
接下来,我想预先选择分配给特定帖子的标签。例如,如果我有一篇文章在它的post_tags列中包含以下内容:

party@beaches@海豚@


我希望“派对”、“海滩”和“海豚”复选框在默认情况下处于选中状态(而其他选项的复选框处于未选中状态)。如何做到这一点?

首先要做的是查看是否存在任何现有数据。因此,运行该查询并将该表单元格的结果放入,比如说
$checkedstring
,如果不是,则放入默认字符串

<?php
$checkedstring = "party@beaches@dolphins@";
//Pull from DB if exsists and set $checkedstring to that value
///
$checkeditems =  explode ( "@" , $checkedstring);
$checked = array();
foreach($checkeditems as $item)
{
  $checked[$item]=true;
}    

$query = mysql_query("SELECT * FROM tags ORDER BY name");

while ($row = mysql_fetch_assoc($query)) 
{
    $tag = $row['name'];
    $checkedstatus = '';
    if($checked[$tag])
    {
      $checkedstatus = "checked='checked'";
    }
    echo "<input type='checkbox' name='tags[]' value='$tag' $checkedstatus />\n";
}


?>

首先要做的是查看是否存在任何现有数据。因此,运行该查询并将该表单元格的结果放入,比如说
$checkedstring
,如果不是,则放入默认字符串

<?php
$checkedstring = "party@beaches@dolphins@";
//Pull from DB if exsists and set $checkedstring to that value
///
$checkeditems =  explode ( "@" , $checkedstring);
$checked = array();
foreach($checkeditems as $item)
{
  $checked[$item]=true;
}    

$query = mysql_query("SELECT * FROM tags ORDER BY name");

while ($row = mysql_fetch_assoc($query)) 
{
    $tag = $row['name'];
    $checkedstatus = '';
    if($checked[$tag])
    {
      $checkedstatus = "checked='checked'";
    }
    echo "<input type='checkbox' name='tags[]' value='$tag' $checkedstatus />\n";
}


?>

尝试这两个结果和
in_array()
函数

<?php
$tags = mysql_query("SELECT * FROM tags ORDER BY name");
$post_tags = "party@beaches@dolphins@";
$arr_tags = explode("@", $post_tags);

while ($row = mysql_fetch_assoc($query)) {
    $check = in_array($arr_tags, $row['name'])? 'checked="checked"' : "";
    echo '<input type="checkbox" name="tags[]" value="'.$row['name'].'" '.$check.' />';
    echo "\n";
}
?>

请尝试这两个结果和
in_array()
函数

<?php
$tags = mysql_query("SELECT * FROM tags ORDER BY name");
$post_tags = "party@beaches@dolphins@";
$arr_tags = explode("@", $post_tags);

while ($row = mysql_fetch_assoc($query)) {
    $check = in_array($arr_tags, $row['name'])? 'checked="checked"' : "";
    echo '<input type="checkbox" name="tags[]" value="'.$row['name'].'" '.$check.' />';
    echo "\n";
}
?>

我不确定您是否希望使用类似post_标记的列,而不是使用交集表。但是如果你真的这样做了,你只需要在提取数据时做更多的处理。我不确定你是否想要像post_标签那样的列,而不是使用交集表。但是如果您真的这样做了,那么在提取数据时只需要进行更多的处理。in_数组函数的开销是多少?它每次都扫描整个阵列吗?我在我的机器上测试了中等大小的查询结果,结果运行了0.25秒。我们的更新看起来很棒,当我进一步研究in#u数组时,它会在循环中每次扫描数组,因此随着标记数量的增加,它会出现问题,但是翻转和isset似乎要好得多。in#u数组函数的开销是多少?它每次都扫描整个数组吗?我在我的机器上测试了中等大小的查询结果,结果运行了25秒。我们的更新看起来很棒,当我更多地查看in#u数组时,它会在循环中每次扫描数组,因此随着标记数量的增加,它会出现问题,但flip和isset似乎要好得多。