2009-08-07 19 views
6
$sql = mysql_query("SELECT * FROM comments WHERE user = 1"); 

$i = 1; 
while ($row = mysql_fetch_assoc($sql)) { 

<p>$i. <?php echo $row['comment'] ?></p> 

<div class="border"></div> 

$i++; 
} 

कैसे मैं पिछले टिप्पणी के नीचे करने के लिए नहीं उत्पादन <div class="border"></div> कर सकता है?पीएचपी, जबकि पाश अंतिम पंक्ति को खोजने

उत्तर

20
$sql = mysql_query("SELECT * FROM comments WHERE user = 1"); 
$number = mysql_num_rows($sql); 
$i = 1; 
while ($row = mysql_fetch_assoc($sql)) { 

    echo '<p>' . $i . $row['comment'] . '</p>'; 

    if ($i < $number) 
    { 
     echo '<div class="border"></div>'; 
    } 

    $i ++; 
} 

WebDevHobo के सुझाव का उपयोग करना।

+5

आप '$ मैं' घ जरूरत नहीं है। बस 'अगर (- $ संख्या === 0) 'का उपयोग करें। – Martijn

+0

पीडीओ के साथ: '$ संख्या = $ req-> rowCount(); जबकि (...) { अगर (- $ संख्या = 0) { ... } } ' – cyclone200

3
$number = mysql_num_rows($sql); 

यह आपको बताएगा कि कितनी पंक्तियां वापस आ जाएंगी। उस पर आधारित, आप यह सुनिश्चित कर सकते हैं कि अंतिम पर DIV नहीं है।

0
$rslt = mysql_query("SELECT * FROM comments WHERE user = 1"); 

$i = 1; 
if ($row = mysql_fetch_assoc($rslt)) { 
    echo '<p>'. $i . ' '. $row['comment'] . '</p>'; 
    $i++; 
    while ($row = mysql_fetch_assoc($rslt)){ 
    echo '<div class="border"></div>'; 
    echo '<p>'. $i . ' ' . $row['comment'] . '</p>'; 
    $i++; 
    } // end while 
} // end if 

पंक्तियों की संख्या जानने की आवश्यकता से बचें। प्रत्येक लूप के बजाय केवल एक बार कथन निष्पादित करता है। एचटीएमएल और पीएचपी गन्दा और असंगत थे, इसलिए मैंने अभी माना कि पूरा ब्लॉक php टैग के भीतर था। जाहिर है, जब आप फिट देखते हैं तो PHP टैग को खोलें और बंद करें।

यह काफी हद तक एक स्टाइल मुद्दा है, लेकिन मैंने फैसला किया कि परिवर्तनीय नाम $ sql थोड़ा भ्रामक था, क्योंकि इसे अक्सर एसक्यूएल कथन की स्ट्रिंग को निष्पादित करने के लिए उपयोग किया जाता है, इसलिए मैंने चर नाम बदल दिया $ rslt करने के लिए।

7
$sql = mysql_query("SELECT * FROM comments WHERE user = 1"); 
$output = array(); 
while ($row = mysql_fetch_assoc($sql)) { 
    $output[] = $row['comment']; 
} 
echo join('<div class="border"></div>', $output); 
+0

मैं तर्क और उत्पादन ... अच्छे डिजाइन की जुदाई की तरह। – Umingo

1
$sql = mysql_query("SELECT * FROM comments WHERE user = 1"); 

$i = 1; 
while ($row = mysql_fetch_assoc($sql)) { 

$out_data[] = "<p>$i {$row['comment']} </p>"; 

$i++; 
} 

$divider = '<div class="border"></div>'; 
$output = implode ($divider, $out_data); 

echo $output; 
0

इस प्रकार की समस्या के लिए एक सामान्य जवाब है, और जावास्क्रिप्ट का उपयोग कर इसे एक कंसोल में फेंक और साथ खेलने के लिए आसान है क्योंकि:

var count = 0; 
var foo = 3; 
while(count < 3) { 
    console.log("Header - " + count); 
    console.log("Body - "+ count); 
    console.log("Footer - " + count); 
    count++; 
} 

यह प्रिंट होगा:

हैडर - 0
शरीर - पाद लेख - हैडर - 1
शरीर - 1
पाद - 1
हैडर - 2
शरीर - 2
पाद - 2

मामले अनुरोध किया जा रहा मूल रूप से कह रहा है "सभी पर एक पाद लेख लेकिन पिछले तत्व प्रिंट। "

यदि आप दूसरे लूप पुनरावृत्ति को केवल पहले की निरंतरता के रूप में देखते हैं तो आप देख सकते हैं कि रिकॉर्ड्स की कुल संख्या को खोजने के बिना इसे कैसे किया जाए - उदा। गिनती के लिए दूसरी क्वेरी करने की आवश्यकता नहीं है। अधिक संक्षेप में: जब आप एक लूप (या रिकर्सन) का उपयोग करके कुछ करने के तरीके को समझने की कोशिश कर रहे हैं, तो आपको वास्तव में यह लिखना चाहिए कि आपका लूप क्या करता है, लेकिन वास्तव में लूपिंग के बिना - उदा। लूप ब्लॉक को कम से कम तीन बार कॉपी और पेस्ट करें।

के बजाय है कि यहाँ, मैं सिर्फ जवाब के साथ खत्म, और पाठक के लिए व्युत्पत्ति छोड़ने के लिए जा रहा हूँ: ~)

var count = 0; 
var foo = 3; 
while(count < 3) { 
    if(count > 0) { 
     console.log("Footer - " + (count - 1)); 
    } 
    console.log("Header - " + count); 
    console.log("Body - "+ count); 
    count++; 
} 
संबंधित मुद्दे