MySQL数组提取不起作用

时间:2018-03-24 02:55:14

标签: php loops while-loop

我有一个WHILE循环来创建一组4个选项卡,其中包含我从数据库中获得的选项卡标题。我在DB中也有一个名为tab_id(1,2,3,4)的字段。

当我运行此代码时,tab_id为" 1"所有4行...但标签标题显示正确。我做错了什么?

<?php
  while($rows = mysqli_fetch_array($result)){
       if ($rows['tab_id'] = 1) { ?>
         <li class="active"><a href="#tab<? echo $rows['tab_id']; ?>" 
         role="tab" data-toggle="tab" ><? echo $rows['tab_title']; ?></a>
         </li>
      <?php } else { ?>        
         <li><a href="#tab<? echo $rows['tab_id']; ?>" role="tab" data-
          toggle="tab" ><? echo $rows['tab_title']; ?></a></li>

<?php }} ?>

2 个答案:

答案 0 :(得分:0)

<?php
while($rows = mysqli_fetch_array($result)){
   if ($rows['tab_id'] ==1) { ?>
     <li class="active"><a href="#tab<? echo $rows['tab_id']; ?>" 
     role="tab" data-toggle="tab" ><? echo $rows['tab_title']; ?></a>
     </li>
  <?php } else { ?>        
     <li><a href="#tab<? echo $rows['tab_id']; ?>" role="tab" data-
      toggle="tab" ><? echo $rows['tab_title']; ?></a></li>

答案 1 :(得分:0)

单个=是php中的赋值运算符。所以php认为你说的是​​#34;将$rows['tab_id']声明为11是否松散地评估为true?&#34; ......答案是&#34;是&#34;,所以条件总是返回true。 (这与上一行while循环中出现的逻辑相同。)

要进行宽松的比较(即所需的全部内容),您只需再添加一个=来制作==

进一步的建议是你的代码片段可以写得更多D.R.Y. (不要重复自己)。您只需修改class="active",因此无需重写整个<li>代码。

建议代码:

while($rows = mysqli_fetch_array($result)){
    <li<?php if($rows['tab_id'] == 1) echo ' class="active"'; ?>><a href="#tab<? echo $rows['tab_id']; ?>" 
     role="tab" data-toggle="tab" ><? echo $rows['tab_title']; ?></a>
    </li>
<?php } ?>

while($rows = mysqli_fetch_array($result)){
    echo "<li",($rows['tab_id'] == 1 ? ' class="active"' : ''),">";
        echo "<a href=\"#tab{$rows['tab_id']}\" role=\"tab\" data-toggle=\"tab\" >{$rows['tab_title']}</a>";
    echo "</li>";
}