मेरे पास एक PHP स्क्रिप्ट है, जो HTML फॉर्म से मान प्राप्त कर रही है, और फिर इसमें से SQL स्टेटमेंट बनाता है।
सब कुछ ठीक काम करता है, इस तथ्य के बावजूद कि मैं जोड़ना चाहता हूं ORDER BY
साथ ही चेक बॉक्स भी। यह HTML रूप में सब ठीक है, लेकिन जब यह एसक्यूएल स्टेटमेंट बनाने की बात आती है, तो मैं इसे काम नहीं कर सकता।
मेरे नाम के कॉलम हैं col1, col2, ... ,col5
बयान
... ORDER BY x, y, z, i, j;
इस तरह काम कर रहा है: अगर चेकबॉक्स के लिए col1
है checked
फिर x = col1
और बाकी के लिए यह वही है। क्या काम नहीं करता है, जब मैं कुछ बक्से की जांच नहीं करता हूं - उदाहरण के लिए मैं केवल col1 और col4 द्वारा ORDER करना चाहता हूं, इसलिए मैं उन दोनों की जांच करता हूं, और बयान का उत्पादन
ORDERY BY col1, y, z, col4, j
लेकिन मैं यह भी जाँच रहा हूँ कि क्या एक चेकबॉक्स col1
है empty
, और यदि यह है, तो इसका मूल्य बदल रहा है x
सेवा मेरे और यहाँ मैं "मैं कर रहा हूँ बताते हुए" अंदर डालने की कोशिश की 1=1, NULL, col1
जब भी कोई चेकबॉक्स चेक नहीं किया जाता है (और बाकी के लिए यह वही है y,z,i,j
)।
तो मुझे जिस चीज की आवश्यकता है, वह यह है कि बयान को काम करने के लिए कुछ चतुर तरीका है।
जब मैंने सभी मूल्यों को बदल दिया x, ..., j
जब भी कोई डिब्बा खाली होता था 1=1
बयान केवल के लिए काम किया 1 बॉक्स की जाँच की, लेकिन जब मैंने 2 की जाँच की - यह उनके द्वारा आदेश नहीं था
उत्तर:
उत्तर № 1 के लिए 1यदि संबंधित चेक बॉक्स की जाँच नहीं की जाती है तो आप केवल एक कॉलम को पूरी तरह से बाहर क्यों नहीं छोड़ते हैं?
$sql = "SELECT * FROM table";
$ordercolumns = array();
if (isset($_POST["col1"])) {
$ordercolumns[] = "x";
}
...
if (isset($_POST["col5")) {
$ordercolumns[] = "j";
}
if (sizeof($ordercolumns) > 0) {
$sql .= " ORDER BY " . implode(",", $ordercolumns);
}