2010-06-03 7 views
5

कैसे My12QL और PHP द्वारा सेट <option selected="selected"> बनाने के लिए?कैसे <विकल्प चयनित = "चयनित"> MySQL और PHP द्वारा सेट किया गया है?

मेरे कोड:

echo '<select>'; 
$tempholder = array(); 
$rs = mysql_query("SELECT * FROM id ORDER BY year"); 
$nr = mysql_num_rows($rs); 
for ($i=0; $i<$nr; $i++){ 
    $r = mysql_fetch_array($rs); 
    //if($year==$r["year"]){ $selected=' selected="selected"'; }//doesn't work so 
    if (!in_array($r['year'], $tempholder)){ 
     $tempholder[$i] = $r['year']; 
     echo "<option>".$r["year"]."</option>";//<option$selected>... 
    } 
} 
unset($tempholder); 
echo '</select>'; 
+0

आपकी टिप्पणी में आप $ r ["वर्ष"] का परीक्षण क्यों कर रहे हैं इससे पहले कि आपने $ r असाइन किया हो? आपके द्वारा किए गए कोड में आपको क्या त्रुटि है? –

+0

@ मार्क बेयर्स: ओ.के., मैं इसे बदलता हूं। और यह '$ r' असाइन करने के बाद भी काम नहीं करता है। – Binyamin

उत्तर

5

=/== पकड़ लिया फिक्सिंग के अलावा, आप अपने आप को सरणी देखने बचाने के लिए और कोड को आसान बनाने के कर सकते हैं डेटाबेस पूछ क्वेरी में केवल एक बार हर साल वापस जाने के लिए द्वारा:

<select> 
    <?php $result= mysql_query('SELECT DISTINCT year FROM id ORDER BY year'); ?> 
    <?php while($row= mysql_fetch_assoc($result)) { ?> 
     <option <?php if ($row['year']==$year) { ?>selected="selected"<?php } ?>> 
      <?php echo htmlspecialchars($row['year']); ?> 
     </option> 
    <?php } ?> 
</select> 

(आप कर सकते हैं htmlspecialchars() की आवश्यकता नहीं है कि यह एक संख्यात्मक वर्ष है, लेकिन यह एचटीएमएल से बचने के लिए हमेशा अच्छा अभ्यास है- एचटीएमएल टेम्पलेट में शामिल किसी भी सादे पाठ से बचें। टाइपिंग पर कटौती करने के लिए echo htmlspecialchars करने के लिए आप एक छोटे से नाम के साथ एक फ़ंक्शन को परिभाषित कर सकते हैं।)

+0

आपके नमूने और @ कौ-बॉय कोड के बीच क्या अंतर है? 'Htmlspecialchars() 'जोड़ने' को अनदेखा करने वाला कौन सा तेज़, सुरक्षित आदि है? – Binyamin

+0

एचटीएमएल-एस्केपिंग यहां एकमात्र 'सुरक्षा' मुद्दा है।गति के रूप में, डुप्लिकेट वर्षों को छोड़ने के लिए PHP के बजाय डेटाबेस का उपयोग करना, क्योंकि इस उत्तर में मूल प्रश्न कोड और कौ-बॉय के संस्करण में मूल प्रश्न कोड और क्यू-बॉय के संस्करण की आवश्यकता होती है, डेटाबेस से निकाले जाने के लिए 'id' तालिका की संपूर्ण सामग्री और PHP पर वापस आ गई। – bobince

+0

दूसरा मुख्य अंतर यह है कि मैंने स्वरूपण को बदल दिया है ताकि PHP को स्वयं सामग्री को टेम्पलेट करने के लिए HTML में सामग्री को टेम्पलेट करने के लिए बदल दिया हो, और स्ट्रोकिंग को फिर से गूंजने के बजाय, और अपने स्वयं के PHP में ब्लॉक संरचनाओं ('इस मामले में ') को अलग कर दिया हो। टैग। यह एक एकल, लगातार इंडेंटेशन पदानुक्रम की अनुमति देता है। यह पूरी तरह स्टाइलिस्ट पसंद है, प्रदर्शन पर बहुत कम प्रभाव नहीं है, लेकिन मुझे लगता है कि पठनीयता की मदद की जाती है। – bobince

2

आप $selected हर परिभाषित करना होगा, और आप असाइनमेंट ऑपरेटर के बजाय इस्तेमाल कर रहे थे तुलना की:

echo '<select>'; 
$tempholder = array(); 
$rs = mysql_query("SELECT * FROM id ORDER BY year"); 
$nr = mysql_num_rows($rs); 
for ($i = 0; $i < $nr; $i++){ 
    if($year == $r["year"]) { //not $year = $r["year"] 
     $selected=' selected="selected"'; 
    } 
    else { 
     $selected = ""; 
    } 
    $r = mysql_fetch_array($rs); 
    if (!in_array($r['year'], $tempholder)){ 
     $tempholder[$i] = $r['year']; 
     echo "<option$selected>" . $r["year"] . "</option>"; 
    } 
} 
unset($tempholder); 
echo '</select>'; 
+0

दुर्भाग्य से यह ** ** काम नहीं करता है, यह हमेशा एक ही मूल्य (नवीनतम 'वर्ष': 2010) के लिए 'चयनित' विकल्प रखता है। – Binyamin

+0

@ बिन्यामिन मुझे जो चाहिए वह काफी नहीं मिला, लेकिन इस कोड को आजमाएं - निश्चित रूप से $ चुना गया स्थिर नहीं है। – Artefacto

6

प्रयास करें यह एक:

echo '<select>'; 
$tempholder = array(); 
$rs = mysql_query("SELECT * FROM id ORDER BY year"); 
$nr = mysql_num_rows($rs); 
for ($i=0; $i<$nr; $i++){ 
    $r = mysql_fetch_array($rs); 
    if (!in_array($r['year'], $tempholder)){ 
     $tempholder[$i] = $r['year']; 
     echo "<option".(($year==$r["year"])? ' selected="selected"' : '').">".$r["year"]."</option>"; 
    } 
} 
unset($tempholder); 
echo '</select>'; 

यह राज्य को एक वेरिएबल में सहेजता नहीं है जिसे आपको ओवरराइट करना है।

और मुझे लगता है कि वास्तविक त्रुटि $ वर्ष = $ आर ["वर्ष"] में एक समान बराबर चिह्न था और शेष कोड को विहटिन नहीं किया गया था।

+0

बहुत बहुत धन्यवाद! यह grate काम करता है! – Binyamin

+0

मुझे खुशी है कि आपकी मदद कर सकता है। – 2ndkauboy

0

जोड़ना यहां उत्तरदायीता के लिए उत्तर दें, पुराने कोड, जो उस समय सही होने पर (वास्तव में mysqli मौजूद था, लेकिन कई मेजबान PHP 5 का समर्थन नहीं करते थे), दुर्भाग्य से बहिष्कृत कोड का उपयोग कर रहा है।

यहाँ है डेटाबेस कनेक्शन

$conn = new mysqli($host, $username, $password, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

यह मानते हुए कि $year चर एक रूप से आ रहा है (: mysql_ एक्सटेंशन का उपयोग करने के बजाय, यहाँ एक तरह से एक वस्तु उन्मुख दृष्टिकोण जो mysqli_ कनेक्शन के साथ काम करेंगे का उपयोग कर इसे संभाल करने के लिए है हालांकि यह GET या SESSION या जहाँ भी)

$year = $_POST['year']; 

से इस्तेमाल किया जा सकता यहाँ विकल्प बटन के लिए क्वेरी (मैं यह टूटा हुआ है है इसे पढ़ने के लिए थोड़ा आसान बनाने के लिए अलग-अलग पंक्तियों में बाहर):

$result=$conn->query($sql); 
    while($row = $result->fetch_assoc()) {  
     if ($row['year']==$year) { 
      $selected = 'selected="selected"'; 
     } 
     else { 
      $selected = ''; 
     } 
     echo '<option value="'.$row['year'].'" '. $selected . '>"' 
      . $row['year'] .'</option>'; 
    } 

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

  • कोई संबंधित समस्या नहीं^_^