Итак, у меня есть два выпадающих списка, которые заполнены данными из двух отдельных таблиц mysql, связанных с внешним ключом, мне было интересно, могу ли я сделать их зависимыми, используя только php (без использования ajax, jscript и т. д.), кроме как с помощью куча операторов if во второй таблице?
пока у меня есть:
Movies:
<select name = "Movie">
<option value = "Pick a Movie">Pick a movie</option>
<?php foreach($movies->fetchAll() as $movie):?>
<option value = "<?php echo $movie['id'];?>"> <?php echo
$movie['movietitle'];?> </option>
<?php endforeach; ?>
</select>
Screening Time:
<select name = "times">
<option value = "Please select a Screening time">Please select a
screening time</option>
<?php foreach($screenings->fetchAll() as $screening):?>
<option value = "<?php echo $screening['id'];?>"> <?php echo
$screening['time'];?> </option>
<?php endforeach; ?>
</select>
Я надеюсь, что когда пользователь выбирает фильм из первого раскрывающегося меню, отображается только время показа этого конкретного фильма, а не все время показа, хранящееся в базе данных.
Я предполагаю, что мне нужен внешний ключ для соединения двух таблиц, поэтому теперь у меня есть две таблицы, которые:
столик для кино
|---------------------|------------------|
| id | movietitle |
|---------------------|------------------|
| 1 | pulp fiction |
|---------------------|------------------|
| 2 | armageddon |
|---------------------|------------------|
| 3 | Titanic |
|---------------------|------------------|
Таблица скрининга
|---------------------|---------------------|-------------|
| id | screening time | courseid(fk)|
|---------------------|---------------------|-------------|
| 1 | sun 11 | 3 |
|---------------------|---------------------|-------------|
| 2 | sat 8 | 1 |
|---------------------|---------------------|-------------|
| 3 | fri 9 | 2 |
|---------------------|---------------------|-------------|
так могу ли я настроить свой код, чтобы включить курс в качестве внешнего ключа, чтобы сделать их зависимыми? если нет, есть ли другой способ заставить пользователя выбирать только определенные группы данных в обоих меню, т.е. «титаник» «пятница 9», но не «титаник» «воскресенье 11» или «титаник» «сб 8»?






Для создания надежного раскрывающегося списка вам необходимо сделать раскрывающийся список, и каждый раскрывающийся список будет иметь отдельный я бы. Используя событие изменения, вы можете постоянно обращаться к серверу. Затем сервер ответит на запрос. После этого вы обработаете запрос и вернете выпадающее меню. Вы можете сделать это внутри цикла while. Вы можете увидеть полный код на веб-сайт github в качестве ссылки
Следуйте приведенному ниже коду и обработайте
index.php
<?php
if (file_exists('function.php')) {
include_once 'function.php';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>Dependable Dropdown Menu</title>
<style>
body{
margin:0px auto;
padding: 0px;
max-width: 600px;
}
.main{
margin: 50px auto;
text-align: center;
}
#country,#city{
width: 500px;
height: 50px;
font-size: 18px;
margin: 0 auto;
}
select{
width: 600px;
}
</style>
</head>
<body>
<div class = "main">
<h1>Dependable Dropdown Menu</h1>
<div class = "dropdownmenu">
<select name = "" id = "country" class = "form-control">
<option value = "">Select</option>
<?php
$con = connection();
$stmt = $con->query("select * from country order by name");
if ($stmt) {
?>
<?php while ($r = $stmt->fetch_assoc()): ?>
<option value = "<?php echo $r['id']; ?>"><?php echo $r['name']; ?></option>
<?php endwhile; ?>
<?php } ?>
</select>
<br/>
<br/>
<select name = "" id = "city" class = "form-control">
<option value = "">Select</option>
</select>
</div>
</div>
<script src = "assets/js/jquery.min.js"></script>
<script>
$('#country').on('change', function () { //dropdown changing event
var countryID = $(this).val(); //getting specific country id from database
console.info(countryID);
if (countryID !== '') {
$.ajax({
url: "fetch.php", //requesting to fetch.php for getting cities list as response
data: {// we are passing two values by get in the url
action: 'getcities',
countryid: countryID
},
method: 'get',
success: function (data) { //getting response from server
$('#city').html(data); //putting response to second dropdown
console.info(data);
}, error: function (e) { //this will show error if exist any
console.info(e); //for looking error message press ctrl+shift+i
}
});
} else {
$('#city').html("<option>Select</option>");
}
});
</script>
</body>
</html>
fetch.php
<?php
if (file_exists('function.php')) {
include_once 'function.php';
}
$con = connection();
if (isset($_GET['action']) && $_GET['action'] == 'getcities') {
$countryid = mysqli_real_escape_string($con, $_GET['countryid']);
$q = "select * from city where country='$countryid' order by name asc";
$stmt = $con->query($q);
$val = "";
if ($stmt) {
if ($stmt->num_rows > 0) {
while ($row = $stmt->fetch_assoc()) {
$val .= "<option value='" . $row['id'] . "'>" . $row['name'] . "</option>";
}
}
} else {
$val = "<option>Select</select>";
}
echo $val;
}
function.php
<?php
//connection for project. this connection will be used in whole project
function connection() {
$con = new mysqli('localhost', 'root', '', 'country_city');
return $con;
}
Это невозможно (ну, это не будет удобно для пользователя) только с php и html, почему вы не хотите использовать js?