सीधे समस्या का समाधान करने के लिए (मैं थोड़ा और अधिक प्राप्त करूंगा), आप उपकरणों की पूरी सूची के माध्यम से पुनरावृति कर रहे हैं और फिर - आपके द्वारा उन सभी के माध्यम से लूपिंग करने के बाद - आप उन्हें प्रदर्शित करने का प्रयास करते हैं। इस वजह से, आप केवल उस अंतिम उपकरण को प्रदर्शित कर रहे हैं जिसे छुआ गया था।
आपका वर्तमान कोड, छोटा कर दिया गया है:
while($row = mysql_fetch_array($result_devices)) {
$server = $row['devicename'];
$ustart = $row['ustartlocation'];
}
for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {
$u = $cabinets_sqlrow[2] - $i;
...
if ($u == $ustart) {
echo $server;
}
...
}
अगर मैं समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, तो आपको प्रत्येक डिवाइस को "डिवाइस" एरे में स्टोर करना होगा और अपने के लिए
के प्रत्येक पुनरावृत्ति के दौरान इसके माध्यम से लूप करना होगा। फंदा। कुछ इस तरह का प्रयास करें:
$devices = array();
while($row = mysql_fetch_array($result_devices)) {
$devices[] = array(
'server' => $row['devicename'],
'ustart' => $row['ustartlocation']
);
}
for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {
...
$output = 'empty';
foreach ($devices as $device) {
if ($u == $device['ustart']) {
$output = $device['server'];
break;
}
}
echo $output;
...
}
ustartlocation
. का उपयोग करके इसी कार्य को पूरा करने का एक और शानदार तरीका किया जा सकता है सरणी के सूचकांक के रूप में, लेकिन इसके लिए यह आवश्यक होगा कि ustartlocation
एक व्यक्तिगत डिवाइस/सर्वर के लिए अद्वितीय है:
$devices = array();
while($row = mysql_fetch_array($result_devices)) {
$devices[$row['ustartlocation']] = $row['devicename'];
}
for ($i = 0; $i < $cabinets_sqlrow[2]; $i++) {
...
echo (isset($devices[$u]) ? $devices[$u] : 'empty');
...
}
यह विधि हर बार उपकरणों की सूची के माध्यम से लूप करने की आवश्यकता को छोड़ देगी, लेकिन फिर से - इसके लिए यह आवश्यक है कि ustartlocation
अद्वितीय है।
साइड नोट्स (अतिरिक्त, गैर-उत्तर-विशिष्ट समालोचना)
-
अपने कोड की शुरुआत में आप
$sql_devices="SELECT * FROM
. निष्पादित करते हैं डिवाइस";
और$result_devices=mysql_query($sql_devices);
, लेकिन इस वस्तु का कभी भी उपयोग न करें। इसे हटाया जा सकता है और हटाया जाना चाहिए क्योंकि यह एक अतिरिक्त (काफी भारी) प्रश्न है। -
दूसरे में
जबकि
-लूप आपके पास लाइन है$num_devices=mysql_numrows($result_devices);
. कोई PHP-फ़ंक्शन नहीं हैmysql_numrows()
, मेरा मानना है कि यहmysql_num_rows()
के लिए टाइपो है फ़ंक्शन (वह, या आपके पास वही काम करने के लिए एक कस्टम-लिखित फ़ंक्शन है। साथ ही,$num_devices
वेरिएबल का कभी भी उपयोग नहीं किया जाता है इसलिए इस लाइन को वास्तव में पूरी तरह से हटाया जा सकता है। -
आप पुराने और अप्रचलित हो रहे
mysql_
. का उपयोग कर रहे हैं फ़ंक्शंस (इन कार्यों के लिए किसी भी दस्तावेज़-पृष्ठ के शीर्ष पर चेतावनी-संदेश देखें; यहांmysql_connect()
संदर्भ के लिए)। मैं और समुदाय, आपकोmysqli_<में अपग्रेड करने की सलाह देते हैं। /कोड>
याPDO
तरीके। -
आपका कोड अस्वच्छ-एसक्यूएल त्रुटियों के लिए खुला है, विशेष रूप से एसक्यूएल-इंजेक्शन तक सीमित नहीं है क्योंकि ऐसा प्रतीत नहीं होता है कि आप सीधे उपयोगकर्ता-इनपुट से इनपुट ले रहे हैं, लेकिन इस कारक को भी खारिज नहीं कर रहे हैं। उदाहरण के लिए, क्या होगा यदि एक
कैबिनेट
याडेटासेंटर
मूल्य में एकल-उद्धरण होता है? चूंकि आपmysql_
का उपयोग कर रहे हैं मेरा सुझाव है कि आप प्रत्येक कोmysql_real_escape_string()
से रैप करें। डेटाबेस कॉल में उनका उपयोग करने से पहले:$sql_cabinets="SELECT * FROM कैबिनेट्स जहां डेटासेंटर ='" । mysql_real_escape_string($datacenters_sqlrow[0]) । "' कैबिनेट नंबर द्वारा ऑर्डर करें";