【问题标题】:SQL PHP Insert issueSQL PHP插入问题
【发布时间】: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 你能建议解决我的问题吗?谢谢。
  • 我会将问题放在一个可以更轻松地显示引用代码的答案中。

标签: php sql


【解决方案1】:

您拥有的代码存在几个问题。首先,在这一行中,您需要一个名为name_object 的表单字段的值。

 $name_object =$_POST['name_object'];

但是没有这样的表单名称。因此,要么更改该代码以使用正确的字段名称,要么更改表单以使用此名称。找出不同之处:

<select name="object">

在这里:

echo "<option value=\"cust_name1\">" . $row['cust_name'] . "</option>";

这里:

echo "<option value=\"name_object1\">" . $row['name_object'] . "</option>";

您将每个下拉列表的值设置为相同的值,它们都是文本字符串,几乎可以肯定它们不在您的其他表格中。只需在表单显示时在表单上执行“查看源代码”即可了解我的意思。

更改上述内容以使用每个表的唯一 ID,这会将它们传递给您的表单处理代码。一旦进入那里,您需要做的就是

 $sql = "INSERT INTO files (id_cust, register_date, id_object) 
         VALUES ($cust_name, $register_date, $name_object)";

在您对各种值进行了一些验证并修复了字段名称问题之后。

当然,一旦它开始工作,您需要将其更改为使用准备好的语句,而不仅仅是将字符串连接到查询中。

【讨论】:

  • 抱歉对象,我已修复它,但它仍然不起作用 - 注意:未定义索引:cust_name 。我猜它不会将表客户的 cust_name(和 idcust)与 id_cust 关联来自表格文件。
  • 错误信息出现在哪里?当您显示表单和选项时,或者当您尝试提交时?如果是后者,当你var_dump($_POST) 时你看到了什么?你的代码现在是什么样子的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
相关资源
最近更新 更多