2015-06-23 16 views
6

Kullanıcının hangi sonuçların görüntüleneceğini seçebileceği bir arayüz oluşturdum. Kullanıcı tarafından seçilen seçenekler bir diziye kaydedilir, bu yüzden MySQL sorgusu bu dizinin farklı öğelerinden geçer.MySQL sonuçlarını tek bir tabloda görüntüleme

yüzden ... tek bir tablo içinde sonuçlarını görüntülemek için böyle bir şey istiyorum:

Başlık 1 | Başlık 2

Sonuç 1-1 | Sonuç 1-2

Sonuç 2-1 | Sonuç

2-2 Ve kod şudur:

$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>"; 
} 

Ben ikinci döngü iyi bir fikir olup olmadığını konusunda emin değilim, ama sonuçlarını görüntülemek için ne yapması gerektiğini bilmiyorum istediğim gibi.

+0

Ben bu sorunun cevabı olmadığını biliyoruz ama bir SQL ifadesine unvalidated girişi koymak gibi kod SQL enjeksiyon için açıktır ve XSS saldırılarına karşı savunmasız olduğunu HTML çıkış unvalidated kullanıcı girişi hangi çünkü Herhangi bir Javascript kodunu hedef web sayfasına yazmak için kullanılabilir. – eX0du5

+1

Veritabanını her seferinde etkin bir şekilde değil sorgulamanız gerekir. Bunun yerine 'type' olarak adlandırılan yeni bir sütun ekleyeceğim, tablodan tüm kayıtları alıp php kullanarak yeni sütunla filtreleyeceğim. – czeski

cevap

0

Önce tüm sütunları almayı deneyin, ardından veritabanı sorgusunu döngülemeye gerek kalmadan sql sorgusuna ekleyin.

$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

Döngüde sorgu için sütunlar oluşturmak yerine, '' sql = implode (',', $ _POST ['işaretleri']) ' – czeski

+0

@czeski güzel gözlem gibi' implode' işlevini kullanmak daha iyi olacaktır. Cevabımı düzenleyeceğim, Teşekkür ederim – alexandreferris

+1

holpducki ve czeski Tavsiyeniz için teşekkürler. Son olarak, kodumu değiştirdim ve "implode" ve "str_replace" işlevlerini kullanıyorum. Artık döngü kullanmıyorum. eX0du5 Bu alanda tamamen acemiyim, bu yüzden söyledikleriniz hakkında daha fazla şey öğrenmeye çalışacağım. Uyarı için teşekkürler! –

İlgili konular