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

php . का उपयोग करके ड्रॉपडाउन सूची चयन के आधार पर डेटाबेस से डेटा प्राप्त करना चाहते हैं

$sql = mysql_query("select price from plan where planname =".$_REQUEST['planname']);

आप कॉलम प्लाननाम में खोज रहे हैं, लेकिन <option> . को परिभाषित करके के रूप में है

echo "<option value=$row[id]>$row[planname]</option>";

आप आईडी को मूल्य के रूप में भेज रहे हैं।

तो आपकी क्वेरी होनी चाहिए:

$sql = mysql_query("select price from plan where id =".$_REQUEST['planname']);
// better: pdos prepared statements
$stmt = $conn->prepare("select sub_id from sub where sub_id = ?");
$stmt->execute(array($_GET['planname']));

अन्य टिप्पणियाँ भी पढ़ें। आप mysql_* api और PDO को मिला रहे हैं, आपको केवल PDO का उपयोग करना चाहिए। मुझे क्यों नहीं करना चाहिए PHP में mysql_* फ़ंक्शन का उपयोग करें? और जब आप इसमें हों तब इसे देखें: मैं PHP में SQL इंजेक्शन को कैसे रोक सकता हूँ?

आपके कोड की संरचना रखरखाव को वास्तव में कठिन बना देगी, आपको पहले सभी तार्किक कार्य करना चाहिए, सभी डेटा एकत्र करना चाहिए और फिर अगले चरण में अपना html और डेटा प्रदर्शित करना चाहिए।

अपनी योजना को कैसे कार्यान्वित करें

आपको अपनी गतिशील यूआई प्राप्त करने के लिए दो अलग-अलग स्क्रिप्ट का उपयोग करने की आवश्यकता हो सकती है। (आप एक ही फ़ाइल का उपयोग कर सकते हैं लेकिन चीजें गड़बड़ हो सकती हैं और कार्यों को विभाजित करना बेहतर है)

1. फ़्रंटएंड:

जैसा कि पहले कहा गया था, आपको कोड को सार्थक क्रम में बनाना चाहिए। आप देख सकते हैं कि मैं पहले डेटाबेस कनेक्शन स्थापित कर रहा हूं, फिर पूछताछ कर रहा हूं और पहले से ही परिणाम प्राप्त कर रहा हूं। इस तरह से मेरे पास पहले से ही आवश्यक सभी डेटा है इससे पहले कि मैं अन्य सामान आउटपुट करना शुरू कर दूं (यदि कुछ गलत हो जाता है जैसा कि मैंने देखा है कि डेटा के साथ कुछ अमान्य है/जो कुछ भी मैं अभी भी किसी अन्य पृष्ठ पर रीडायरेक्ट कर सकता हूं क्योंकि कोई हेडर नहीं भेजा गया है) ।

आउटपुट शुरू करने के लिए, मैंने आपकी स्क्रिप्ट में कुछ बुनियादी HTML संरचना जोड़ी है, पता नहीं क्या आपके पास पहले से है, कम से कम यह आपके स्निपेट में तो नहीं है।

इसलिए मैंने हेडर और बॉडी को जोड़ा, हेडर में जावास्क्रिप्ट कोड है जो बैकएंड के अनुरोध को निष्पादित करेगा और तदनुसार कार्य करने के लिए प्रतिक्रिया प्राप्त करेगा।

इसके अलावा मैंने कुछ शोर कम किया और आपके अलावा अन्य कोड स्वरूपण का उपयोग किया, मूल रूप से मैं अपने एचटीएमएल को आउटपुट करने के लिए इको का उपयोग करना पसंद नहीं करता क्योंकि कुछ आईडीई ऐसा करने पर सिंटैक्स हाइलाइटिंग करने में सक्षम नहीं होते हैं।

मैंने एक <p></p> भी जोड़ा है जिसमें बैकएंड में कुछ गलत होने पर उपयोगकर्ता को त्रुटि संदेश प्रदर्शित किया जा सकता है।

<?php
$servername = 'xxxxxxx';
$username = 'xxxxxx';
$password = 'xxxxxx';

try {
    $conn = new PDO("mysql:host=$servername;dbname=vnet", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    trigger_error("Connection failed: " . $e->getMessage());
}
$selectPlans = "SELECT id, planname, price FROM plan";
$rows = $conn->query($selectPlans)->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">
            function getPrice(id){
                var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
                        var jsonObj = JSON.parse(xmlhttp.responseText);
                        if(jsonObj.success === true){
                            document.getElementById("price").value = jsonObj.price;
                        }else{
                            document.getElementById("price").innerHTML = jsonObj.message;
                        }
                    }
                };
                xmlhttp.open("GET", "ajax.php?id=" + id, true);
                xmlhttp.send();
            }
        </script>
    </head>
<body>
    <select name="planname" id="plannameSelect" onchange="getPrice(this.value)">
    <?php foreach ($rows as $row): ?>
        <option value="<?= $row['id'] ?>"><?= $row['planname'] ?></option>
    <?php endforeach; ?>
    </select>
    <input type="text" name="price[]" value="" id="price" disabled="disabled">
    <p id="error"></p>
</body>

2. बैकएंड:(इस मामले में AJAX.php कहा जाता है)

कोड का एक साधारण टुकड़ा, करने के लिए कुछ खास नहीं है।

पहला कदम:इनपुट को मान्य करना। इस मामले में, मैं बस जांचता हूं कि $_GET . में कोई आईडी है या नहीं -सरणी। मैंने json_encode() . का इस्तेमाल किया एक सरणी पर जिसमें मैं फ्रंटएंड को बताता हूं कि ऑपरेशन सफल था या नहीं। विफलता का पहला मामला तब होगा जब कोई आईडी न हो।

फिर डेटाबेस से कनेक्ट करें, त्रुटियों के लिए पूछें और यदि ऐसा है तो उन्हें तुरंत उपयोगकर्ता को वापस कर दें (echo का उपयोग करके) ), फिर से json_encoded . के माध्यम से सरणी।

आईडी का मूल्य चुनने के लिए विवरण तैयार करें (मैंने यहां त्रुटि जांच छोड़ दी है, आप इसे जोड़ना चाह सकते हैं)। फिर इसे निष्पादित करें।

जांचें कि क्या यह सफल था -> json_encoded सरणी को सफलता के रूप में और कीमत के साथ लौटाएं, या सफलता को फिर से गलत सेट करें और एक त्रुटि संदेश के साथ सरणी लौटाएं।

<?php
$servername = 'xxxxxxx';
$username = 'xxxxxx';
$password = 'xxxxxx';

if(!isset($_GET['id'])){
    echo json_encode(array('success' => false, 'price' => '', 'message' => 'no id given'));
    exit;
}

try {
    $conn = new PDO("mysql:host=$servername;dbname=vnet", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    trigger_error("Connection failed: " . $e->getMessage());
    echo json_encode(array('success' => false, 'price' => '', 'message' => 'shit happened' . $e->getMessage()));
    exit;
}

$stmt = $conn->prepare("SELECT price FROM plan WHERE id = ?");
$stmt->execute(array($_GET['id']));
$result = $stmt->fetch(PDO::FETCH_ASSOC);

if($result === false){
    trigger_error('Query failed: ' . $conn->errorInfo());
    echo json_encode(array('success' => false, 'price' => '', 'message' => 'shit happened'));
    exit;
} else {
    echo json_encode(array('success' => true, 'price' => $result['price'], 'message' => ''));
    exit;
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC कनेक्शन त्रुटि:अपरिचित समयक्षेत्र

  2. लिब्रे ऑफिस बेस से टेबल प्रविष्टियों को संशोधित करना संभव है?

  3. mysql पर एक कॉलम में एक से अधिक आइटम होल्ड करना

  4. पीडीओ गतिशील क्वेरी बिल्डिंग

  5. उत्पन्न करें जहां चर का उपयोग करके बैश में क्लॉज