Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक चेकबॉक्स के आधार पर एक क्वेरी चलाएँ

आपकी समस्या का मूल यह तथ्य प्रतीत होता है कि आप DetailName . कॉलम के आस-पास हैं सिंगल कोट्स में:"'DetailName'='" जब यह सब होना चाहिए "DetailName='"

सुरक्षा के एक नोट पर, मैं यह बताना चाहूंगा कि फ़ंक्शन mysql_escape_string() आप इनपुट को mysql- अनुकूल होने के लिए बाध्य करने के लिए उपयोग कर रहे हैं और सुरक्षा छेद के साथ पुराना है। इसके बजाय, मैं अधिक सुरक्षित कार्यान्वयन का उपयोग करने की सलाह दूंगा:mysql_real_escape_string() . नीचे दिए गए कोड उदाहरण नए, सुरक्षित फ़ंक्शन का उपयोग करते हैं।

हालांकि, उन मुद्दों से अलग, मैं थोड़ा अलग दृष्टिकोण अपनाने की सलाह दूंगा जिसे पढ़ना आसान होगा और लंबे समय में प्रबंधित करना बहुत आसान होगा।

शुरुआत के लिए, मैं सभी चेकबॉक्सों पर एक ही नाम का उपयोग करने की सलाह दूंगा, और DetailName को कुंजी के बजाय मान के रूप में उपयोग करने की सलाह दूंगा:

<td>
    <input name="criteria[]" type="checkbox" id="Buffet" value="Buffet" />
    <strong><label for="Buffet">Buffet</label></strong>
</td>
<td>
    <input name="criteria[]" type="checkbox" id="Breakfast" value="Breakfast" />
    <strong><label for="Breakfast">Breakfast</label></strong>
</td>
<td>
    <input name="criteria[]" type="checkbox" id="BYOB" value="BYOB" />
    <strong><label for="BYOB">BYOB</label></strong>
</td>

इसके बाद, कुंजी के बजाय आपके इनपुट के मूल्यों का उपयोग करके, अब हम अपना क्लॉज उत्पन्न कर सकते हैं। बहुत कुशलता से:

// Runs mysql_real_escape_string() on every value encountered.
$clean_criteria = array_map('mysql_real_escape_string', $_REQUEST['criteria']);
// Convert the array into a string.
$criteria = implode("','", $clean_criteria);

अंत में, आपकी क्वेरी में, मैं IN . का उपयोग करने की अनुशंसा करता हूं OR . के बजाय ऑपरेटर दक्षता और पठनीयता के लिए ऑपरेटर:

SELECT
    tblLocations.CityID, tblRestaurants.RestName, tblLocations.Street, tblLocations.Phone, tblLocations.Price, tblLocations.Rating, tblDetails.DetailName
FROM
    (
        tblRestaurants
    INNER JOIN
        tblLocations ON tblRestaurants.RestID = tblLocations.RestID
    )            
INNER JOIN
    (
        tblLocDet
    INNER JOIN
        tblDetails ON tblLocDet.DetailID = tblDetails.DetailID
    ) ON tblLocations.LocationID = tblLocDet.LocID
WHERE tblLocations.CityID='16' AND tblDetails.DetailName IN ($criteria)
ORDER BY tblRestaurants.RestName ASC

आपके तर्क के साथ मेरे द्वारा सुझाए गए संशोधनों को मिलाने वाली चीजों का संपूर्ण PHP पक्ष है:

<?php
require "congig.php";
if(!empty($_POST['criteria'])) { // empty() checks if the value is set before checking if it's empty.
    foreach($_POST['criteria'] as $key=>$value){ 
        // Runs mysql_real_escape_string() on every value encountered.
        $clean_criteria = array_map('mysql_real_escape_string', $_REQUEST['criteria']);
        // Convert the array into a string.
        $criteria = implode("','", $clean_criteria);
    }

    $rs = mysql_query("
        SELECT
            tblLocations.CityID, tblRestaurants.RestName, tblLocations.Street, tblLocations.Phone, tblLocations.Price, tblLocations.Rating, tblDetails.DetailName
        FROM
            (
                tblRestaurants
            INNER JOIN
                tblLocations ON tblRestaurants.RestID = tblLocations.RestID
            )            
        INNER JOIN
            (
                tblLocDet
            INNER JOIN
                tblDetails ON tblLocDet.DetailID = tblDetails.DetailID
            ) ON tblLocations.LocationID = tblLocDet.LocID
        WHERE tblLocations.CityID='16' AND tblDetails.DetailName IN ($criteria)
        ORDER BY tblRestaurants.RestName ASC
    ");
    if(!$rs) {
        echo "Cannot parse query";
    } else if(mysql_num_rows($rs) == 0) {
        echo "No records found";
    } else {
        echo "<table id=\"myTable\" table width=\"710\" class=\"beautifuldata\" align=\"Left\" cellspacing=\"0\">\n";
        echo "<thead>\n<tr>";
        echo "<th>PLACE</th>";
        echo "<th>ADDRESS</th>";
        echo "<th>PHONE</th>";
        echo "<th>PRICE</th>";
        echo "<th>RATING</th>";
        echo "</tr>\n</thead>\n";
        while($row = mysql_fetch_array($rs)) {
            echo"<tr>
            <td><strong><a href='$row[RestPage]'>$row[RestName]</a></strong></td>
            <td>$row[Address]</td>
            <td>$row[Phone]</td>
            <td>$row[Price]</td>
            <td>$row[Rating]</td>
            </tr>\n";
        }
        echo "</table><br />\n";
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या Django मॉडल MySQL फ़ंक्शंस का उपयोग कर सकते हैं?

  2. NodeJS mySQL ब्लॉब डालें

  3. जावा MySQL अद्यतन क्वेरी

  4. संख्या मानों के लिए सेल के डेटाटाइप को टेक्स्ट के रूप में स्पष्ट रूप से सेट करें

  5. MySQL परिणाम को बैश में संसाधित करना