我想创建一个名为“rooms”的下拉菜单,它会显示存储在数据库中的可用房间。
index.php显示一个表,其中包含一些设备以及存储设备的房间名称。 (SQL查询:SELECT deviceID,deviceName,roomName FROM device LEFT JOIN room ON device.roomID = room.roomID),roomID是房间表中的主键,device.roomID是设备表中的外键。
用户应该可以更改设备的房间,我使用每个设备旁边的链接将其重定向到表单。 在这种形式中,我希望下拉菜单将当前房间显示为默认值,并将所有可用房间显示为选项。
$sql1 = "SELECT roomname FROM device LEFT JOIN room ON device.roomID = room.roomID WHERE deviceID='$id'";
$sql7 = "Select distinct roomname, roomID from room";
require_once ('config.php');
$db_link = mysqli_connect (MYSQL_HOST,
MYSQL_USER,
MYSQL_PW,
MYSQL_DATABASE);
mysqli_set_charset($db_link, 'utf8');
$db_erg = mysqli_query( $db_link, $sql1 );
if ( ! $db_erg )
{
die('Error: ' . mysqli_error($db_link));
}
$db_erg2 = mysqli_query( $db_link, $sql7);
echo 'Room:';
echo '</br>';
echo '</br>';
echo '<select name="room>';
while($row = mysqli_fetch_array($db_erg2, MYSQL_ASSOC))
{
echo '<option value="' . $row['roomID'] .'"selected="selected">' . $row['roomname'] . '</option>';
}
while($row = mysqli_fetch_array($db_erg, MYSQL_ASSOC))
{
echo '<option value="' . $row['roomID'] . '">' . $row['roomname'] . '</option>';
}
我添加了一个按钮,用于创建SQL查询以使用新的roomID更新设备表。 但是当我在下拉菜单中更改房间时,roomID仅传递给查询。如果没有,sql-query执行此操作:“UPDATE device blaabala SET device.roomID =”“;并且空白roomID导致”无法添加或更新子行:外键约束失败“
当我不改变房间的时候,我希望它也能通过 (我在这里要提到的是,房间后面会包含盒子,当我更换盒子时,我不想每次都更换房间。)
希望有人理解我的问题,因为英语不是我的母语。 提前致谢
答案 0 :(得分:1)
<option value="<?=$row['roomID']?>"> <?=$row['roomname']?></option>
查询错误
这是因为您执行了参照完整性并且您违反了它。 您正在尝试使用无效外键(不存在的键)添加或更新记录。