2015-06-23 4 views
6

Ich erstellte eine Schnittstelle, in der der Benutzer wählen kann, welche Ergebnisse angezeigt werden. Die vom Benutzer ausgewählten Optionen werden in einem Array gespeichert, sodass die MySQL-Abfrage die verschiedenen Elemente dieses Arrays durchläuft.Anzeigen von MySQL-Ergebnissen in einer einzigen Tabelle

Deshalb möchte ich die Ergebnisse in einer Tabelle anzuzeigen ... etwas wie folgt aus:

Header 1 | Header 2

Ergebnis 1-1 | Ergebnis 1-2

Ergebnis 2-1 | Ergebnis 2-2

Und mein Code ist folgende:

$mark = $_POST['mark']; 
if (isset($_POST['mark']) && is_array($_POST['mark'])) { 
    echo "<table border='1'>"; 
    echo "<tr>"; 
    for ($i = 0; $i < count($mark); $i++) { 
      echo "<th>" . $mark[$i] . "</th>"; 
    } 
    echo "</tr>"; 

    for ($i = 0; $i < count($mark); $i++) { 
     $markQuery = "SELECT $mark[$i] FROM marks LIMIT 10"; 
     $result = mysqli_query($DB_connection, $markQuery); 
     echo "<tr>"; 
     while($row= mysqli_fetch_assoc($result)){ 
      echo "<td>" . $row[$mark[$i]] . "</td>"; 
      } 
     echo "</tr>"; 
     } 
     echo "</table>"; 
} 

Ich bin mir nicht sicher, ob die zweite Schleife ist eine gute Idee, aber ich weiß nicht, was soll ich tun, Ergebnisse anzuzeigen wie ich will.

+0

Ich weiß, dass dies nicht die Antwort auf Ihre Frage, aber der Code ist anfällig für SQL-Injection, wie Sie unvalidated Eingabe in eine SQL-Anweisung setzen und es ist anfällig für XSS-Angriffe, weil Sie Ausgabe unvalidated Benutzereingaben HTML dem könnte verwendet werden, um Javascript-Code in die Zielwebseite zu schreiben. – eX0du5

+1

Sie sollten die Datenbank nicht jedes Mal abfragen, da dies nicht effizient ist. Stattdessen würde ich eine neue Spalte namens "type" hinzufügen, alle Datensätze aus der Tabelle holen und sie dann mit php nach der neuen Spalte filtern. – czeski

Antwort

0

Versuchen Sie, alle Spalten zuerst zu erhalten, dann fügen Sie sie der sql Abfrage hinzu, keine Notwendigkeit, die Datenbankabfrage zu wiederholen.

$mark = $_POST['mark']; 
if (isset($_POST['mark']) && is_array($_POST['mark'])) { 
    echo "<table border='1'>"; 
    echo "<tr>"; 
    for ($i = 0; $i < count($mark); $i++) { 
      echo "<th>" . $mark[$i] . "</th>"; 
    } 
    echo "</tr>"; 

    $sql = implode(',', $_POST['marks']); 

    $markQuery = "SELECT ".$sql." FROM marks LIMIT 10"; 
    $result = mysqli_query($DB_connection, $markQuery); 
    echo "<tr>"; 
    while($row= mysqli_fetch_assoc($result)){ 
     echo "<td>" . $row[$mark[$i]] . "</td>"; 
    } 
    echo "</tr>"; 
    echo "</table>"; 
} 
+0

Anstatt Spalten für die Abfrage in der Schleife zu erstellen, wird es besser 'implode' Funktion wie' $ sql = implode (',', $ _POST ['marks']) ' – czeski

+0

@czeski nette Beobachtung zu verwenden. Ich werde meine Antwort bearbeiten, Danke – alexandreferris

+1

holpducki und czeski Vielen Dank für Ihren Rat. Schließlich habe ich meinen Code geändert und benutze die Funktionen "implode" und "str_replace". Ich benutze keine Loops mehr. eX0du5 Ich bin ein absoluter Neuling auf diesem Gebiet, also werde ich versuchen, mehr über das zu erfahren, was Sie gesagt haben. Danke für die Warnung! –

Verwandte Themen