Php 检索连接三个表的外键值

Php 检索连接三个表的外键值,php,mysql,Php,Mysql,我有三个数据库表:大厅、电影和放映,如下所示。 在我的筛选表中,我将movie_id和hall_id作为外键,分别引用表movie和hall 在我的添加详细信息表单中添加放映详细信息时,我想显示一个下拉菜单,分别显示table hall和movie中可用的电影标题和大厅标题 但在我提交表格后,我希望各个电影和大厅的ID保存在放映表中,而不是它们的标题 如何在PHP中实现这一点 我是这样把三张桌子连在一起的 $sql="SELECT scr_id,scr_date,scr_start,scr_e

我有三个数据库表:大厅、电影和放映,如下所示。

在我的筛选表中,我将movie_id和hall_id作为外键,分别引用表movie和hall

在我的添加详细信息表单中添加放映详细信息时,我想显示一个下拉菜单,分别显示table hall和movie中可用的电影标题和大厅标题

但在我提交表格后,我希望各个电影和大厅的ID保存在放映表中,而不是它们的标题

如何在PHP中实现这一点

我是这样把三张桌子连在一起的

$sql="SELECT scr_id,scr_date,scr_start,scr_end,m.movie_id,h.hall_id 
        FROM screening as scr
        join movie as m on scr.movie_id=m.movie_id 
        join halls as h on scr.hall_id=h.hall_id";
这是我的添加详细信息表:

这是我用来添加细节的表格。我已经对前两个元素进行了注释,因为我无法导出添加这些元素的逻辑

<?php
    if(isset($_GET['action'])&&$_GET['action']=="add")
    {

  ?>
<div class="cover">
<h1>Add Schedule</h1>

    <form action="scheduleact.php" method="post">
       <!-- <label for="title">Movie Title</label><input type="text" name="title" value=""/>
          <label for="hall">Hall</label><input type="text" name="hall" value=""/>  -->     
        <label for="date">Date</label><input type="date" name="date"/>
        <label for="start">Start Time</label><input type="time" name="start"/> 
        <label for="end">End Time</label><input type="time" name="end"/>                                             
        <p><input type="submit" name="addschedule" value="submit"/></p>
    </form>
</div>
<?php
    }
?>

添加时间表
日期
开始时间
结束时间

这是scheduleact.php

function addschedule($date,$start,$end)
            {
                $sql="insert into screening (movie_id,hall_id,scr_date,scr_start,scr_end) values ('$movid','$hallid',$date','$start','$end')";
                $this->exeQuery($sql) or die(mysql_error());
            }
<?php
    include_once("../class/db_inc.php");

    if(isset($_POST['addschedule'])&&($_POST['addschedule']=='submit'))
    {
        //$movid=$_POST[''];
        //$hallid=$_POST[''];
        $date=$_POST['date'];
        $start=$_POST['start'];
        $end=$_POST['end'];
        $schedule->addschedule($date,$start,$end);
        echo "<script>alert('added successfully');</script>";
        echo "<script>window.location='index.php?obj=viewschedule';</script>";
    }
?>
函数addschedule($date、$start、$end)
{
$sql=“插入到筛选(电影id、大厅id、scr日期、scr开始、scr结束)值(“$movid”、“$hallid”、$date”、“$start”、“$end”);
$this->exeQuery($sql)或die(mysql_error());
}

我认为将表连接在一起不是填充下拉菜单所需的方法。您可以执行两个单独的查询,一个用于电影,另一个用于大厅。这里是一个一般的例子。我不知道你用什么来运行你的查询,但是希望这能给你一个大概的想法

<select name="movie_id">
<?php
$movies_sql = 'SELECT movie_id, movie_title FROM movie';
//execute your query
while ($row = $query_result->fetch) {
    echo "<option value=\"$row[movie_id]\">$row[movie_title]</option>";
}
?>
</select>

<select name="hall_id">
<?php
$halls_sql = 'SELECT hall_id, hall_title FROM halls';
//execute your query
while ($row = $query_result->fetch) {
    echo "<option value=\"$row[hall_id]\">$row[hall_title]</option>";
}
?>
</select>


当您检索已存储的筛选记录并希望包含相关信息(电影和大厅)时,您主要需要连接表。

我认为将表连接在一起不是填充下拉菜单所需的方法。您可以执行两个单独的查询,一个用于电影,另一个用于大厅。这里是一个一般的例子。我不知道你用什么来运行你的查询,但是希望这能给你一个大概的想法

<select name="movie_id">
<?php
$movies_sql = 'SELECT movie_id, movie_title FROM movie';
//execute your query
while ($row = $query_result->fetch) {
    echo "<option value=\"$row[movie_id]\">$row[movie_title]</option>";
}
?>
</select>

<select name="hall_id">
<?php
$halls_sql = 'SELECT hall_id, hall_title FROM halls';
//execute your query
while ($row = $query_result->fetch) {
    echo "<option value=\"$row[hall_id]\">$row[hall_title]</option>";
}
?>
</select>


在检索已存储的筛选记录并希望包含相关信息(电影和大厅)时,您主要需要加入表。

在填充表的HTML中,将HTML值设置为ID,将name组件设置为name。并将ID而不是名称返回给php以插入表中。例如:
StarWars
在PHP中,您指的是值,而不是名称/文本,如果编辑,则在选项值中添加“选定”文本,如果该选项是存储的选项。@xQbert我对此不熟悉,因此我不太了解您。你能详细说明一下吗?这里有一个来自上一篇堆栈文章的示例:这行
echo'$名字将更改为echo
”$名字假设ID在查询中。这是第1步,因此您有要保存在DB中的值。然后,当您提交表单时,下拉选择的值将包含您需要存储的Id。您的问题缺少我们需要查看的代码。如何首先填充页面以确保具有正确的值!在用于填充表的HTML中,将HTML值设置为IDA,将name组件设置为name。并将ID而不是名称返回给php以插入表中。例如:
StarWars
在PHP中,您指的是值,而不是名称/文本,如果编辑,则在选项值中添加“选定”文本,如果该选项是存储的选项。@xQbert我对此不熟悉,因此我不太了解您。你能详细说明一下吗?这里有一个来自上一篇堆栈文章的示例:这行
echo'$名字将更改为echo
”$名字假设ID在查询中。这是第1步,因此您有要保存在DB中的值。然后,当您提交表单时,下拉选择的值将包含您需要存储的Id。您的问题缺少我们需要查看的代码。如何首先填充页面以确保具有正确的值!我执行了这个,但是我得到了一个空的下拉菜单。是的,我的答案中的代码不是完全可以工作的代码。您仍然需要连接到数据库并执行查询。如何做将取决于您是否使用mysqli、pdo等。我已经为查询执行函数exeQuery($sql){$res=mysql\u query($sql);return$res;}创建了一个函数,所以我使用了$res=mysql\u query($halls\u sql);下拉菜单仍然是空的。我连接了数据库,一切都正常。现在我得到了这个错误。无法添加或更新子行:外键约束失败我执行了此操作,但我得到的下拉菜单为空。是的,我的答案中的代码不是完全可用的代码。您仍然需要连接到数据库并执行查询。如何做将取决于您是否使用mysqli、pdo等。我已经为查询执行函数exeQuery($sql){$res=mysql\u query($sql);return$res;}创建了一个函数,所以我使用了$res=mysql\u query($halls\u sql);下拉菜单仍然是空的。我连接了数据库,一切都正常。现在我得到了这个错误。无法添加或更新子行:外键约束失败