Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Ingin mengambil data dari database berdasarkan pilihan daftar dropdown menggunakan php

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

Anda mencari di kolom nama rencana, tetapi dengan mendefinisikan <option> sebagai

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

Anda mengirimkan id sebagai nilai.

Jadi kueri Anda seharusnya:

$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']));

Baca juga komentar lainnya. Anda mencampur api mysql_* dan PDO, Anda hanya boleh menggunakan PDO. Mengapa saya tidak menggunakan fungsi mysql_* di PHP? Dan lihat ini saat Anda melakukannya: Bagaimana cara mencegah injeksi SQL di PHP?

Struktur kode Anda akan membuat pemeliharaan sangat merepotkan, pertama-tama Anda harus melakukan semua pekerjaan logis, mengumpulkan semua data dan kemudian menampilkan html dan data Anda pada langkah berikutnya.

Bagaimana menerapkan rencana Anda

Anda perlu/mungkin ingin menggunakan dua skrip berbeda, untuk mendapatkan ui dinamis Anda. (Anda bisa menggunakan file yang sama tetapi hal-hal bisa menjadi berantakan dan lebih baik untuk membagi tugas)

1. Tampilan depan:

Seperti yang dikatakan sebelumnya, Anda harus menyusun kode dalam urutan yang bermakna. Anda dapat melihat saya pertama kali mengatur koneksi database, kemudian melakukan kueri dan sudah mengambil hasilnya. Dengan cara ini saya sudah memiliki semua data yang diperlukan sebelum saya mulai menampilkan hal-hal lain (jika ada yang tidak beres seperti pada saya perhatikan ada sesuatu yang tidak valid dengan data/apa pun saya masih bisa mengarahkan ke halaman lain karena belum ada header yang dikirim) .

Untuk memulai output, saya menambahkan beberapa struktur HTML dasar ke skrip Anda, tidak tahu apakah Anda sudah memilikinya, setidaknya tidak ada di cuplikan Anda.

Jadi saya menambahkan header dan body, di header adalah kode javascript yang akan mengeksekusi permintaan ke backend dan menerima respons untuk bertindak sesuai.

Selain itu, saya mengurangi beberapa noise dan menggunakan pemformatan kode selain Anda, pada dasarnya saya tidak suka menggunakan echo untuk menampilkan HTML saya karena beberapa IDE tidak dapat melakukan penyorotan sintaks saat melakukannya.

Saya juga menambahkan <p></p> di mana pesan kesalahan dapat ditampilkan kepada pengguna, jika terjadi kesalahan di backend.

<?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. Backend:(dalam hal ini disebut ajax.php)

Sepotong kode sederhana, tidak ada yang istimewa untuk dilakukan.

Langkah pertama:memvalidasi input. Dalam hal ini, saya cukup memeriksa apakah ada id di $_GET -Himpunan. Saya menggunakan json_encode() pada array di mana saya memberi tahu frontend apakah operasi itu berhasil atau tidak. Kasus kegagalan pertama adalah jika tidak ada id.

Kemudian sambungkan ke database, minta kesalahan dan jika demikian segera kembalikan ke pengguna (dengan menggunakan echo ), lagi melalui json_encoded Himpunan.

Siapkan pernyataan untuk memilih harga id (saya melewatkan pemeriksaan kesalahan di sini, Anda mungkin ingin menambahkannya). Kemudian jalankan.

Periksa apakah berhasil -> kembalikan larik json_encoded sebagai sukses dan dengan harga, atau setel kembali sukses salah dan kembalikan larik dengan pesan kesalahan.

<?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. Sistem penandaan:Pertanyaan solusi toksik

  2. Apakah MySQL Regexp mendukung pencocokan Unicode?

  3. PHP / SQL, pilih sederhana di mana mendapatkan nilai sebagai kolom

  4. Python mysql.connector - Cara yang benar untuk mengambil baris sebagai kamus

  5. mysql Memilih dari dua tabel yang berbeda.