2016-01-02 96 views
0

我有什么目前看起来像这样 Example如何在循环内显示循环中所有行的结果?

我想的是,第名为“ASD”,你也可以选择“家”,这可能是在没有任何其他的选择,但由于某种原因,它不是”不工作。

<table class="table"> 
     <tr> 
      <td style="width: 60%;">Section name</td> 
      <td>Edit section</td> 
      <td>Category</td> 
      <td>Order</td> 
     </tr> 
     <form method="post"> 
     <?php 
      $query = $handler->query('SELECT * FROM section ORDER BY sorder'); 
      $cquery = $handler->query('SELECT * FROM category'); 

      if($query->rowCount()){ 
       while($fetch = $query->fetch(PDO::FETCH_ASSOC)){ 
        echo' 
         <tr> 
          <td><strong>' . $fetch['secname'] . '</strong><br />' . $fetch['secdesc'] . '</td> 
          <td><a class="btn btn-warning" href="index.php?p=edit&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Edit</a> 
          <a class="btn btn-danger" href="index.php?p=del&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Delete</a></td> 
          <td><select name="' . $fetch['c_id'] . '" class="form-control" size="1"> 
         '; 
         while($cfetch = $cquery->fetch(PDO::FETCH_ASSOC)){ 
          echo'<option value="' . $cfetch['c_id'] . '" ' . (($cfetch['c_id'] == $fetch['c_id'])? 'selected' : '') . '>' . $cfetch['categoryname'] . '</option>'; 
         } 
        echo' 
          </select></td> 
          <td><input type="number" class="form-control" name="' . $fetch['sc_id'] . '" value="' . $fetch['sorder'] . '" style="width: 60px;" /></td> 
         </tr> 
        '; 
       } 
      } 
      else{ 
       echo '<tr><td colspan="4">' . $noResultsDisplay . '</td></tr>'; 
      } 
     ?> 
      <tr><td colspan="4"><input type="submit" name="section" class="btn btn-primary pull-right" value="Submit" /></td></tr> 
     </form> 
    </table> 

连同它的SQL:

CREATE TABLE IF NOT EXISTS category(
    `c_id` int(10) NOT NULL auto_increment, 
    `categoryname` varchar(250) NOT NULL, 
    `corder` int(10) NOT NULL, 
    PRIMARY KEY `c_id` (`c_id`), 
    UNIQUE KEY (`categoryname`) 
)Engine=InnoDB; 

INSERT INTO category (`categoryname`, `corder`) VALUES ('Home', 1); 

CREATE TABLE IF NOT EXISTS section(
    `sc_id` int(10) NOT NULL auto_increment, 
    `c_id` int(10) NOT NULL, 
    `secname` varchar(250) NOT NULL, 
    `secdesc` varchar(500), 
    `secimage` varchar(500), 
    `sorder` int(10) NOT NULL, 
    PRIMARY KEY `sc_id` (`sc_id`), 
    UNIQUE KEY (`secname`) 
)Engine=InnoDB; 

我使用的PDO和$处理器是我的连接点。

我可以看到我在正确的轨道上,但由于某种原因,第二个循环只循环一次,即使它应该循环多次。


发送表格后,我想设置在数据库中的类别,这是我当前的代码:

if(isset($_POST['section'])){ 
     $fetch = $query->fetch(PDO::FETCH_ASSOC); 
     $category = $_POST['category']; 

     foreach($_POST as $data => $value){ 
      if($data != 'section'){ 
       $sorder = (int)$value; 

       if($sorder != $fetch['c_id']){ 
        echo"UPDATE section SET sorder = :sorder, c_id = :cid WHERE sc_id = :id', [':sorder' => $sorder, ':id' => $data, ':cid' => $category]"; 
        //echo perry('UPDATE section SET sorder = :sorder, c_id = :cid WHERE sc_id = :id', [':sorder' => $sorder, ':id' => $data, ':cid' => $category], null); 
       } 
      } 
     } 
    } 

但由于某些原因,我不能得到的选择菜单的选项发送到数据库。

回答

1

不需要运行嵌套的第二个循环(它总是产生相同的输出)。我将首先把这个输出字符串:

while($cfetch = $cquery->fetch(PDO::FETCH_ASSOC)){ 
    $option .= '<option value="' . $cfetch['c_id'] . '" ' . (($cfetch['c_id'] == $fetch['c_id'])? 'selected' : '') . '>' . $cfetch['categoryname'] . '</option>'; 
} 

这时正好呼应它的循环:

while($fetch = $query->fetch(PDO::FETCH_ASSOC)){ 
    echo' 
     <tr> 
      <td><strong>' . $fetch['secname'] . '</strong><br />' . $fetch['secdesc'] . '</td> 
      <td><a class="btn btn-warning" href="index.php?p=edit&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Edit</a> 
      <a class="btn btn-danger" href="index.php?p=del&id=' . $fetch['sc_id'] . '"><i class="fa fa-times fa-fw"></i> Delete</a></td> 
      <td><select name="' . $fetch['c_id'] . '" class="form-control" size="1"> 
     '; 
    echo $option; 
    echo' 
      </select></td> 
      <td><input type="number" class="form-control" name="' . $fetch['sc_id'] . '" value="' . $fetch['sorder'] . '" style="width: 60px;" /></td> 
     </tr> 
    '; 
} 
+0

我不明白的问题。 $ _POST数组有什么(print_r($ _ POST))和你期望它有什么? – Stavros

+0

对不起,我发布了一段错误的代码。在我回应查询的地方,我希望它显示正确的信息,我得到了整个数据库部分的工作,这只是为了调试。 – Tom