【问题标题】:multiple foreach within foreach giving only one resultforeach 中的多个 foreach 只给出一个结果
【发布时间】:2014-10-25 23:16:24
【问题描述】:

我正在尝试根据数据库中的结果在表格布局中构建 html div。

我有包含行位置的 sql 表和包含单元格内容和位置的 sql 表。 我的代码只给出了数据库中的第一个结果...

rowId
rowPos
latestRow


cellsRowId
cellsRowOrder
cellsContent

$sql="SELECT `rowId` FROM `positions` ORDER BY `rowPos` ASC";

$result=mysqli_query($con,$sql);

 if (!mysqli_query($con,$sql)) {
     printf("Errormessage: %s\n", mysqli_error($con));}
  else{
   while ($pos=mysqli_fetch_assoc($result)){ 

    foreach($pos as $rowId){
        $sql="SELECT `cellsRowOrder` FROM `content` WHERE `cellsRowId` = '$rowId' ORDER BY `cellsRowOrder` ASC";
        $result=mysqli_query($con,$sql);

        if (!mysqli_query($con,$sql)) {
        printf("Errormessage: %s\n", mysqli_error($con));}
        else{

         while ($order=mysqli_fetch_assoc($result)){
          foreach($order as $cellRowOrder){
             $sql="SELECT `cellsContent` FROM `content` WHERE `cellsRowId` = '$rowId' AND `cellsRowOrder` = '$cellRowOrder'";
             $result=mysqli_query($con,$sql);

             if (!mysqli_query($con,$sql)) {
             printf("Errormessage: %s\n", mysqli_error($con));}
             else{

             while ($cellsContent=mysqli_fetch_assoc($result)){
             foreach($cellsContent as $cellContent){
                    echo '  
       <div class="content-layout-row" onmouseover="editButton'.$rowId.'()" onmouseout="editButtonClose'.$rowId.'()" id="r'.$rowId.'" >
        <div  id="editButton'.$rowId.'" style="visibility:hidden;width:100%;left:0;top:0px;z-index:2">
         <form method="POST" target="_top">
          <input type="hidden" name="rowId" value="'.$rowId.'"> 
          <input type="hidden" name="editRow" value="1">
          <button style="font-size:12px;border-radius:2px 5px 0px 0px" type="submit">edit</button>
         </form>
        </div>
        <div class="layout-cell" id="r'.$rowId.'s'.$cellRowOrder.'" >
         '.$cellContent.'
        </div>
       </div>
        <script type="text/javascript">
        function editButton'.$rowId.'(){
         $("#editButton'.$rowId.'").css("visibility","visible"); 
        }
        function editButtonClose'.$rowId.'(){
         $("#editButton'.$rowId.'").css("visibility","hidden"); 
        }
        </script> ';
                 }
               }
             }
           }
         }
       }
     }
   }
 };

【问题讨论】:

  • 我读的不多,但您执行了两次查询 (mysqli_query())。这是不必要的。在if 中检查$result

标签: php loops mysqli foreach while-loop


【解决方案1】:
$sql="SELECT `cellsRowOrder` FROM `content` WHERE `cellsRowId` = '$rowId' ORDER BY `cellsRowOrder` ASC";
$result=mysqli_query($con,$sql);

您正在重新定义 $result 在循环的中途,该循环已经使用您之前对 $result 的定义作为其条件。

您需要做的就是将您的第二个 $result 重命名为其他名称,例如$result2

你又在做同样的事情

$sql="SELECT `cellsContent` FROM `content` WHERE `cellsRowId` = '$rowId' AND `cellsRowOrder` = '$cellRowOrder'";
$result=mysqli_query($con,$sql);

不要忘记在所有适当的地方重命名它们,而不仅仅是这些行。

【讨论】:

  • 谢谢,这是个问题,而且我在错误的地方有 while 和 foreach 循环 - 给了我多个结果。
  • 我花了一些时间阅读有关 mysqli_multi_query 的信息。我的代码有效,但我不喜欢我自己需要一个接一个地调用多个查询才能得到正确的结果。任何人都可以验证在我的情况下 mysqli_Multi_query 是否合适且更快,为什么只需几句话?
猜你喜欢
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 2013-03-11
相关资源
最近更新 更多