【发布时间】:2020-05-07 13:16:44
【问题描述】:
干杯,
所以,我有一个“父表”,我需要在其中插入一些东西。 “父表” - FILES 包含
id_file
id_cust - foreign key for idcust from table Customers
register_date
id_object - foreign key for idcust from table Objects
餐桌顾客
idcust
cust_name
address
phone
表格对象
idobject
name_object
我创建了一个 HTML 表单来插入一个包含 2 个组合框和注册日期的新文件
<form method="post" action="">
<tr>
<td>Customer name: </td> <td>
<select name="cust_name">
<?php
$sql = mysqli_query($conn, "SELECT * FROM customers");
while ($row = $sql->fetch_assoc()){
echo "<option value=\"cust_name1\">" . $row['cust_name'] . "</option>";
}?>
</select></td></tr>
<tr>
<td>Register date</td>
<td> <input type="date" name="register_date"/></td>
</tr>
<tr>
<td>Object: </td> <td>
<select name="object">
<?php
$sql = mysqli_query($conn, "SELECT * FROM objects");
while ($row = $sql->fetch_assoc()){
echo "<option value=\"name_object1\">" . $row['name_object'] . "</option>";
}?>
</select></td></tr>
<tr><td colspan=2> <input name ="submit" type="submit" value="Add a new file"></td>
</tr></form>
我尝试过的:
从昨天开始,我尝试了很多查询,这是最后一个:
<?php
$conn = mysqli_connect("localhost", "root", "", "testdb");
if ($conn -> connect_error){
die("Connection failed:". $conn-> connect_error);
}
if(!empty($_POST['submit'])){
$cust_name = $_POST['cust_name'];
$register_date = date('Y-m-d',strtotime($_POST['register_date']));
$name_object =$_POST['name_object'];
$sql = "INSERT INTO files VALUES (
(SELECT * FROM customers c WHERE c.cust_name = $cust_name),
$register_date,
(SELECT * FROM objects o WHERE o.name_object = $name_object)
)";
$conn->query($sql);
if($conn->error){
echo $conn->error;
} else
{
$message= "We have added the file no. " .$conn->insert_id;
}
}
?>
我尝试了 LEFT JOIN,但没有任何成功... 你能帮我解决这个问题吗?谢谢。
【问题讨论】:
-
您没有名为“name_object”的表单字段,因此您的
$name_object变量将没有内容。 -
当您在 HTML 表单中填充下拉列表时,您应该将每个表中的 id 分配给
value,而不是像您在此处所做的那样。如果您有两个同名的客户怎么办?您似乎为每个选项分配了相同的值。使用 ids,然后你可以按照上面@Jens 所说的那样做,并且值已经是正确的。 -
无论如何,如果您的方法可行(如果您解决了值问题,它可能会起作用),您需要
select id,而不是select *- 你认为它会怎样当您只需要一个值时,如何处理所有返回的列?你应该只select你需要的列,无处不在。 -
@droopsnoot 你能建议解决我的问题吗?谢谢。
-
我会将问题放在一个可以更轻松地显示引用代码的答案中。