Apabila mencipta borang carian yang membolehkan pengguna memasukkan berbilang parameter, adalah penting untuk mempertimbangkan bagaimana hasil carian akan ditapis.
Dalam contoh yang disediakan, borang carian mempunyai medan input yang berasingan untuk ID, nama, jurusan dan kolej. Fail results.php kemudian menggunakan pernyataan if/elseif individu untuk mengendalikan setiap parameter ini secara berasingan.
Walau bagaimanapun, untuk membolehkan pengguna memasukkan satu atau lebih parameter, pendekatan yang lebih dinamik diperlukan. Ini boleh dicapai dengan membina klausa WHERE untuk pertanyaan SQL secara dinamik berdasarkan parameter yang dimasukkan.
Berikut ialah versi semakan fail results.php yang menunjukkan pendekatan ini:
<?php $wheres = array(); $params = array(); if (!empty($_GET['id'])) { $wheres[] = 'a.uid = :uid'; $params[':uid'] = $_GET['id']; } if (!empty($_GET['major'])) { $wheres[] = 'a.major = :major'; $params[':major'] = $_GET['major']; } if (!empty($_GET['name'])) { $wheres[] = 'b.name LIKE :name'; $params[':name'] = '%'.$_GET['name'].'%'; } $sql = "SELECT * FROM user_details AS a JOIN user AS b ON a.uid = b.id"; if (!empty($wheres)) { $sql .= " WHERE " . implode(' AND ', $wheres); } $stmt = $db->prepare($sql); $stmt->execute($params); while ($student = $stmt->fetch()) { echo ' <tr> <td>'.$student['uid'].'</td> <td>'.$student['name'].'</td> <td>'.$student['major'].'</td> <td>'.$student['college'].'</td> <td><a href="?m=profile&id='.$student['id'].'">
Kod ini membina klausa WHERE secara dinamik berdasarkan parameter yang dimasukkan. Jika pengguna hanya memasukkan nama, maka pertanyaan hanya akan menapis mengikut nama. Jika pengguna memasukkan kedua-dua nama dan major, maka pertanyaan akan menapis mengikut kedua-dua parameter.
Pendekatan ini membolehkan pengalaman carian yang lebih fleksibel dan mesra pengguna.
Atas ialah kandungan terperinci Bagaimana untuk Membina Borang Carian Dinamik dengan Pelbagai Parameter dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!