2017-09-27 10 views
0

Je souhaite récupérer certaines données de la base de données et les afficher dans un tableau, je dois faire un champ Order_Status pour être une zone de liste déroulante, ses données sont remplies d'une autre table et ajouter au début de la liste déroulante le résultat de la ligne renvoyée par la base de données.Comment remplir la zone de liste déroulante dans un td d'une table

Data Sample from database

Les données nécessaires pour être comme ci-dessous, dans la section rouge pour être combobox. Required Result

Le problème est que je ne pouvais pas mettre le résultat du champ Order_status à apparaître comme une zone de liste déroulante dans le td de la table

$stmt ="SELECT distinct Order_ID,Customer_ID,Required_Date,Order_Status FROM Orders where Required_Date between '".$SDate."' and '".$EDate."'"; 
$row = $conn->query($stmt)->fetchall(PDO::FETCH_ASSOC); 

if (count($row) > 0) 
{ 
    $output.='<hr /> 
      <table class="table1"> 
       <tr> 
        <th>Order No.</th> 
        <th>Customer Name</th> 
        <th>Order Details</th> 
        <th>Delivery Date</th> 
        <th>Order Status</th> 
       </tr> 
    '; 
    foreach ($conn->query($stmt) as $rows) 
    { 
     //Getting Customer Name 
     $sql="SELECT nick_name_ FROM Customers where Cust_id='".$rows["Customer_ID"]."'"; 
     $result=$conn->query($sql)->fetch(PDO::FETCH_ASSOC); 

     //Getting Order Data 
     $query="SELECT * FROM Order_Product where Order_ID='".$rows["Order_ID"]."'"; 

     foreach ($conn->query($query) as $results) 
     { 
      $newsql="SELECT Category_Name from Categories where Category_ID='".$results['Category_ID']."'"; 
      $newresult=$conn->query($newsql)->fetch(PDO::FETCH_ASSOC); 
      $CatName=$newresult['Category_Name']; 

      $newsql="SELECT Product_Name from Products where Product_ID='".$results['Product_ID']."'"; 
      $newresult=$conn->query($newsql)->fetch(PDO::FETCH_ASSOC); 
      $ProName=$newresult['Product_Name']; 

      $output.=' 
      <tr> 
       <td>'.$rows['Order_ID'].'</td> 
       <td>'.$result['nick_name_'].'</td> 
       <td>'.$CatName.",".$ProName." ".$results['Amount'].'</td> 
       <td>'.$rows['Required_Date'].'</td> 
      '; 
      $stmt = "SELECT * FROM Order_Status WHERE Status_Name !='".$rows['Order_Status']."'"; 
      //$res = $conn->query($sql)->fetch(PDO::FETCH_ASSOC); 

      foreach ($conn->query($stmt) as $res) 
      { 

       $output.='<td>' 
       ?> 
        <option value="<?php echo $res['Status_ID']; ?>"><?php echo $res['Status_Name']; ?></option> 
       <?php 
       '</td> 
       </tr> 
       '; 
      } 

     } 
    } 

    $output.='</table>'; 
    $bool_is_data_saved = true; 
    echo $output; 
} 

if(!$bool_is_data_saved) 
{ 
    echo ("Failed"); 
} 
+0

Ceci est brisé! Quel est le problème que vous rencontrez? Pourquoi avez-vous foreach une instruction de requête en tant que ligne> ??? – silversunhunter

Répondre

1

ce code est difficile à ... lire ...

pour moi, il semble plus propre à faire ce qui suit au lieu de la foreach sur la requête réelle:

$stmnt = $conn->prepare("SELECT * FROM table WHERE id=?"); 
$stmnt->execute(array($someId)); 
while ($result = $stmnt->fetch()){ 
    //do stuff 
} 

Également, sortir du PHP dans le foreach pour ensuite faire demi-tour et écho dans le HTML est étrange. Nettoyez cela. Pour finir, afin de rendre cela plus gérable, j'utiliserais quelques fonctions que vous appelez du code HTML. Mettez les fonctions dans le haut du document.

Pour répondre à votre question, je pense que le problème est que vous ne définissez pas un select.

faire ceci:

$output.='<td>'; 
$output .= '<select name="comboBox">'; 

foreach ($conn->query($stmt) as $res) { 
    $output .= '<option value="'.$res['Status_ID'] .'">'.$res['Status_Name'],'</option>'; 
} 
$output .= '</select>'; 
$output .= '</td>'; 

Une chose! Vous utilisez la variable $ stmnt à deux endroits différents pour deux requêtes différentes. soit utilisez une variable différente ou mettez vos requêtes dans des fonctions.