2017-03-29 10 views
0

Ich entwickle eine kleine Web-App für uni und eine der Anforderungen ist, dass es eine Liste mit Daten aus einer Datenbank haben muss, die durch Klicken auf eine bestimmte Kategorie und dann sortiert werden kann Nur die Artikel aus dieser Kategorie werden angezeigt. Ich habe es geschafft, die Daten aus der Datenbank in eine Tabelle auf der Website zu finden, jedoch funktioniert das Dropdown-Menü nicht, um auszuwählen, welche Kategorie Sie betrachten möchten. Bedeutet, dass es alle Elemente aus der Datenbank anzeigt, egal was passiert. Ich bekomme keine Fehler und habe wirklich keine Ahnung, wie ich dieses Problem lösen könnte. Hoffentlich kann mir jemand dabei helfen. -Code für die Funktion, die nur Anzeigeelemente aus dieser Kategorie sollte:Abrufen ausgewählter Daten aus MySQL

//Get ItemEntity objects from the database and return them in an array. 
function GetItemByCategory($category) { 
    // require 'dbconnect.php'; 

    //Open connection and Select database.  
    $con = mysqli_connect("localhost", "root", "", "login") or die(mysqli_error); 

    $query = "SELECT * FROM items WHERE category LIKE '$category'"; 
    $result = mysqli_query($con, $query) or die(mysqli_error($con)); 
    $itemArray = array(); 

    //Get data from database. 
    while ($row = mysqli_fetch_array($result)) { 

     $name = $row[1]; 
     $category = $row[2]; 
     $place = $row[3]; 
     $date = $row[4]; 
     $description = $row[5]; 
     $image = $row[6]; 

     //Create item objects and store them in an array. 
     $item = new ItemEntity(-1, $name, $category, $place, $date, $description, $image); 
     array_push($itemArray, $item); 
    } 
    //Close connection and return result 
    mysqli_close($con); 
    return $itemArray; 
} 

} 

Ich bin immer noch ganz neu in dieser so könnte es eine einfache Lösung sein, aber wie ich schon sagte, bin ich verloren, so dass deshalb Ich habe mich ausgestreckt. Vielen Dank im Voraus und lassen Sie mich wissen, wenn Sie mehr Code von mir brauchen.

// bearbeiten HTML-Formular, das die Daten anzeigt. Wenn noch etwas benötigt wird, lassen Sie es mich wissen. Danke für Ihre Hilfe.

function CreateItemTables($categories) 
    { 
     $itemModel = new ItemModel(); 
     $itemArray = $itemModel->GetItemByCategory($categories); 
     $result = ""; 

     // Generate an item table for each item entity in the array 
     foreach ($itemArray as $key => $item) { 
      $result = $result . "<table class = 'itemTable'> 
           <tr> 
            <th rowspan='6' width = '150px' ><img runat = 'server' src = '$item->image'/></th> 
            <th width = '75px' >Name: </th> 
            <td>$item->name</td> 
           </tr> 

           <tr> 
            <th>Category: </th> 
            <td>$item->category</td> 
           </tr> 

           <tr> 
            <th>Place: </th> 
            <td>$item->place</td> 
           </tr> 

           <tr> 
            <th>Date: </th> 
            <td>$item->date</td> 
           </tr> 

           <tr> 
            <td colspan='2' >$item->description</td> 
           </tr> 


           </table>"; 
     } 
     return $result; 
    } 

// edit 2 Whole ItemController Klasse

<?php 

require ("Model/ItemModel.php"); 

/** 
* Contains non-db related functions for the Item page 
*/ 
class ItemController 
{ 

    function CreateItemDropdownList() 
    { 
     $itemModel = new ItemModel(); 
     $result = "<form action = '' method = 'post' width = '200px'> 
        Please select a category: <select name = 'types' > 
        <option value = '%' >ALL</option>".$this->CreateOptionValues($itemModel->GetCategories())." 
        </select> 
        <input type = 'submit' value = 'Search' /></form>"; 

       return $result; 
    } 
    function CreateOptionValues(array $valueArray) 
    { 
     $result = ""; 

     foreach ($valueArray as $value) 
     { 
      $result = $result . "<option value ='$value'>$value</option>"; 
     } 
     return $result; 
    } 

    function CreateItemTables($categories) 
    { 
     $itemModel = new ItemModel(); 
     $itemArray = $itemModel->GetItemByCategory($categories); 
     $result = ""; 

     // Generate an item table for each item entity in the array 
     foreach ($itemArray as $key => $item) { 
      $result = $result . "<table class = 'itemTable'> 
           <tr> 
            <th rowspan='6' width = '150px' ><img runat = 'server' src = '$item->image'/></th> 
            <th width = '75px' >Name: </th> 
            <td>$item->name</td> 
           </tr> 

           <tr> 
            <th>Category: </th> 
            <td>$item->category</td> 
           </tr> 

           <tr> 
            <th>Place: </th> 
            <td>$item->place</td> 
           </tr> 

           <tr> 
            <th>Date: </th> 
            <td>$item->date</td> 
           </tr> 

           <tr> 
            <td colspan='2' >$item->description</td> 
           </tr> 


           </table>"; 
     } 
     return $result; 
    } 
} 
?> 
+0

Ich weiß nicht wirklich, wie Ihr db aussieht, aber was ist, wenn Sie "Kategorie LIKE '$ Kategorie'" auf „Kategorie = '$ category' "? –

+0

Versuchen Sie, etwas selbst zu debuggen. Stellen Sie sicher, dass Ihre Funktion die angegebene Kategorie erhalten hat, da Ihre Funktion in Ordnung ist. – Hienz

+0

Debuggen Sie Ihren Code. Finden Sie heraus, welche Abfrage Sie in der Variablen $ query erhalten, indem Sie die Variable drucken. –

Antwort

0
//changed like to = more accurate 
$query = "SELECT * FROM items WHERE category = '$category'"; 
    $result = mysqli_query($con, $query) or die(mysqli_error($con)); 
    $itemArray = array(); 

    //Get data from database. 
//note this 
$i=0; 

while ($row = mysqli_fetch_array($result)) { 
     //gave then a record number so you get the right data 
     $name = $row[$i]; 
     $category = $row[$i]; 
     $place = $row[$i]; 
     $date = $row[$i]; 
     $description = $row[$i]; 
     $image = $row[$i]; 
$item = new ItemEntity($i, $name, $category, $place, $date, $description, $image); 
$i++; 
+0

kann nie richtige Daten mit $ row [1] $ row [2] ..... in einer while-Schleife bekommen – Gert

+0

Danke für den Vorschlag, leider wird nichts angezeigt, wenn ich mich entscheide, Ihre Schleife zu verwenden. Ich nehme an, dass dies bedeutet, dass es ein Problem mit der HTML-Formular-Methode gibt, die diese Daten bekommt? (posted) – Frenzyy

+0

Wenn Sie row ['1'] row ['2'] verwenden, erhalten Sie nur einen Datensatz und sogar aus verschiedenen Zeilen können Sie ihn nicht verwenden. bevor du zu html kommst, solltest du zuerst den php überprüfen. dumm oder echo die Ergebnisse machen das gleiche mit dem Array dann zeigen Sie uns – Gert

Verwandte Themen