簡體   English   中英

SQL PHP 插入問題

[英]SQL PHP Insert issue

干杯,

所以,我有一個“父表”,我需要在其中插入一些東西。 “父表” - 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 =$_POST['name_object'];

但沒有這樣的表格名稱。 因此,要么更改該代碼以使用正確的字段名稱,要么更改表單以使用此名稱。 指出不同:

<select name="object">

在這里:

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

和這里:

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

您將每個下拉列表的值設置為相同的值,它們都是文本字符串,幾乎可以肯定不在您的其他表中。 只需在顯示表單時在表單上執行“查看源代碼”即可了解我的意思。

更改上面的內容以使用每個表的唯一標識,這會將它們傳遞給您的表單處理代碼。 一旦進入那里,您需要做的就是

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

在您對各種值進行了一些驗證並修復了字段名稱問題之后。

當然,一旦它開始工作,您就會希望將其更改為使用准備好的語句,而不僅僅是將字符串連接到查詢中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM