2015-06-23 6 views
6

मैंने एक इंटरफ़ेस बनाया जिसमें उपयोगकर्ता चुन सकता है कि कौन से परिणाम प्रदर्शित किए जा रहे हैं। उपयोगकर्ता द्वारा चुने गए विकल्प सरणी में सहेजे गए हैं, इसलिए MySQL क्वेरी इस सरणी के विभिन्न तत्वों के माध्यम से जाती है।MySQL परिणामों को एक ही तालिका में प्रदर्शित करना

तो मैं एक एकल तालिका में परिणाम प्रदर्शित करना चाहते हैं ... कुछ इस तरह:

हैडर 1 | हैडर 2

परिणाम 1-1 | परिणाम 1-2

परिणाम 2-1 | परिणाम 2-2

और मेरे कोड निम्नलिखित है:

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

मैं अगर दूसरे पाश एक अच्छा विचार है के बारे में निश्चित नहीं हूँ, लेकिन मैं नहीं जानता कि मैं क्या परिणाम प्रदर्शित करने के लिए क्या करना चाहिए जैसा मुझे चाहिए।

+0

मुझे पता है कि यह अपने प्रश्न का उत्तर नहीं है, लेकिन अपने कोड एसक्यूएल इंजेक्शन के लिए असुरक्षित है के रूप में आप किसी SQL बयान के अमान्य इनपुट डाल दिया और यह XSS हमलों के लिए असुरक्षित है, क्योंकि HTML के लिए आप उत्पादन अमान्य उपयोगकर्ता इनपुट जो लक्षित वेबपृष्ठ में किसी जावास्क्रिप्ट कोड को लिखने के लिए इस्तेमाल किया जा सकता है। – eX0du5

+1

आपको हर बार डेटाबेस से पूछताछ नहीं करना चाहिए कि यह कुशल तरीका नहीं है। इसके बजाय मैं 'टाइप' नामक एक नया कॉलम जोड़ूंगा, तालिका से सभी रिकॉर्ड्स प्राप्त करूँगा और फिर इसे PHP के प्रयोग से नए कॉलम द्वारा फ़िल्टर करें। – czeski

उत्तर

0

सभी कॉलम पहले प्राप्त करने का प्रयास करें, फिर इसे sql क्वेरी में जोड़ें, डेटाबेस क्वेरी को लूप करने की कोई आवश्यकता नहीं है।

$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

लूप में क्वेरी के लिए कॉलम बनाने के बजाय ''sql = implode (', ', $ _POST [' marks '])' – czeski

+0

@czeski अच्छा अवलोकन जैसे 'implode' फ़ंक्शन का उपयोग करना बेहतर होगा। मैं अपना जवाब संपादित करूंगा, धन्यवाद – alexandreferris

+1

holpducki और czeski आपकी सलाह के लिए धन्यवाद। अंत में, मैंने अपना कोड बदल दिया और "implode" और "str_replace" कार्यों का उपयोग करके मैं अब लूप का उपयोग नहीं करता हूं। eX0du5 मैं इस क्षेत्र में पूरी तरह से नौसिखिया हूं, इसलिए मैंने जो कहा है उसके बारे में और जानने के लिए मैं कोशिश करूंगा। चेतावनी के लिए धन्यवाद! –

संबंधित मुद्दे