【问题标题】:how to display multiple rows from sql database into a checkbox based off same foreign key如何将sql数据库中的多行显示到基于相同外键的复选框中
【发布时间】:2019-07-04 16:43:55
【问题描述】:

我有一份调查问卷,其中包含一个年龄复选框列表,这些复选框保存到数据库中的每个不同行但相同的外部 id (请参见 select 语句下方的图像以及我得到的结果)。现在我想把这 4 个结果放回一个复选框列表中,如果有一个值,复选框被选中,我让它在实际问卷中工作的方式(如果说验证失败是通过查询字符串,所以代码看起来像下面的代码槽 1)

但现在我使用的是 CMS,所以它直接从数据库中获取结果,所以我不太确定如何将 4 个值放入一个数组中,我可以使用它来检查 in_array 中显示的代码槽。

问卷中的 PHP 代码。

<?php
  if (isset($_GET['kage']) && $_GET['kage'] !== null) {
  $agegroups = explode("_", $_GET['kage']);

  $checked = in_array('kids', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="kids" id="kid"><input type="checkbox" name="age[]" class="ages" value="kids" id="kids" ' . $checked . '>Ages 0 - 10</label>';
  $checked = in_array('teens', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="teens" id="teen"><input type="checkbox" name="age[]" class="ages" id="teens" value="teens" ' . $checked . '> Ages 11-19 </label>';
  $checked = in_array('twenties', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="twentys" id="twenty"><input type="checkbox" name="age[]" class="ages" id="twentys" value="twenties" ' . $checked . '> Ages 20-29</label>';
  $checked = in_array('thirties', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="thirtys" id="thirty"><input type="checkbox" name="age[]" class="ages" id="thirtys" value="thirties" ' . $checked . '> Ages 30-39 </label>';
  $checked = in_array('forties', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="fourtys" id="fourty"><input type="checkbox" name="age[]" class="ages" id="fourtys" value="forties" ' . $checked . '> Ages 40-49</label>';
  $checked = in_array('fifties', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="fiftys" id="fifty"><input type="checkbox" name="age[]" class="ages" id="fiftys" value="fifties" ' . $checked . '> Ages 50-59 </label>';
  $checked = in_array('sixtyup', $agegroups) ? 'checked="checked"' : '';
     echo '<label for="sixtyplus" id="sixty"><input type="checkbox" name="age[]" class="ages" id="sixtyplus" value="sixtyup" ' . $checked . '> Ages 60+</label>';
  echo '<br>';
} else {
 echo '<label for="kids" id="kid"><input type="checkbox" name="age[]" class="ages" id="kids" value="kids">Ages 0 - 10</label>  
       <label for="teens" id="teen"><input type="checkbox" name="age[]" class="ages" id="teens" value="teens"> Ages 11-19 </label>
       <label for="twentys" id="twenty"><input type="checkbox" name="age[]" class="ages" id="twentys" value="twenties"> Ages 20-29</label>
       <label for="thirtys" id="thirty"><input type="checkbox" name="age[]" class="ages" id="thirtys" value="thirties"> Ages 30-39 </label>
       <label for="fourtys" id="fourty"><input type="checkbox" name="age[]" class="ages" id="fourtys" value="forties"> Ages 40-49</label>
       <label for="fiftys" id="fifty"><input type="checkbox" name="age[]" class="ages" id="fiftys" value="fifties"> Ages 50-59 </label>
       <label for="sixtyplus" id="sixty"><input type="checkbox" name="age[]" class="ages" id="sixtyplus" value="sixtyup"> Ages 60+</label>';
}
?>

当我尝试使用时

//where $vId = 2;
$sql_elite_ages = "select * from inf_ages_interacted where inf_id = $vId";
$rs_elite_ages = mysqli_query($vconncvnl, $sql_elite_ages);
$rs_elite_ages_all = mysqli_fetch_assoc($rs_elite_ages);
$rs_elite_ages_array = mysqli_fetch_array($rs_elite_ages); 

结合

$agegroups = $rs_elite_ages_array;
$array= ' ';

foreach ($agegroups as $row){
echo $addary .= $row .' ';
}

我的结果是“2 2 2 2 2 2 2 2 2 2 2 2 2 2 teens 2 2 2 2 teens teens”

我要显示的是

因此年龄组值与相关值的复选框匹配,如果存在该值,则选中该框,否则不选中该框

所以当我这样做时@Lelio Faieta

$sql="SELECT `agegroup` FROM `inf_ages_interacted` WHERE inf_id = $vId";
$rs = mysqli_query($vconncvnl,$sql);

while($row = mysqli_fetch_assoc($rs)){

print_r($row); echo '<br>';

} the results i get is 

【问题讨论】:

  • 请解释你想要什么输出
  • 了解how to prevent SQL injection in PHP 很重要。 “想要”不是词。
  • @MD.JubairMizan 我想要的输出是与 inf_id 显示的项目相同,因此在这种情况下 inf_id = 2 并且“年龄组”中的结果是 'kids,teens,twenties ,30' 所以当我希望它们显示为已选中时(请参阅上面的已编辑图像以显示)但未选中任何内容
  • @danblack appologies 是俚语,现在要改了。 “想要的意思是想要;或者想要一个”在这种情况下“我想要接受那些”的意思是“我想要接受那些”,是的,我知道 SQL 注入,我刚刚从代码中获取了相关的片段
  • @MD.JubairMizan 我添加了一张额外的图片并解释如果您需要其他任何东西,请提前询问并感谢您

标签: php mysql arrays loops checkbox


【解决方案1】:

而不是使用foreach() 使用while()

这是mysql_fetch_array() 的预期功能。如果您不想拥有“重复项”而只拥有关联数组,请改用mysql_fetch_assoc()

例子:

while ($row = mysql_fetch_assoc($data)) { ... }

【讨论】:

  • 嘿,所以我尝试了while($row = mysqli_fetch_assoc($rs_elite_ages)){echo $row['agegroup'] .' '; $count++;,这给了我结果“孩子们 20 多岁 30 岁”有没有办法在循环之外抓住 $row['agegroup']?因为我有以下$checked = (strpos($row['agegroup'], 'kids') !== false) ? 'checked="checked"' : ''; echo '&lt;label for="kids" id="kid"&gt;&lt;input type="checkbox" name="age[]" class="ages" value="kids" id="kids" ' . $checked . '&gt;Ages 0 - 10&lt;/label&gt;';,但如果我把它放在while循环中,它只会为每个项目@MD创建4个输入。朱拜尔
  • 如果你需要一些循环之外的数据,你必须为此创建另一个新数组
  • 我添加了一些额外的内容(“@Lelio Faieta”的部分,所以你们俩都可以看到我使用print_r($row)后得到的代码和结果@
  • @Meitie 所以在你的while循环中创建一个像$data[]=$row['agegroup']这样的数组并检查你是否在循环之外得到这个数组然后你可以很容易地使用in_array()array_search()来找到你想要的到检查
  • 它工作了:我添加了$data[ ] =$row['agegroup'],然后在我的$checked = in_array('kids', $data) ? 'checked="checked"' : ''; 代码中使用了$data,它使用了in_array,现在一切正常:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2016-09-24
相关资源
最近更新 更多