2016-11-22 77 views
0

我有一個使用HTML表單和PHP代碼的小型數據庫項目。除了最後一部分外,它正在完美地工作。基本上,我有我的數據庫連接設置,並在我的PHP中工作,並點擊添加按鈕時,它應該從窗體插入值到數據庫。我的老師說,由於表格的限制,它必須按照一定的順序插入,基本上先列出表格,然後再列出員工表格。如果我將員工的部分代碼註釋掉,則會顯示我的成功確認頁面,並且每次使用自動遞增的address_id時,地址都會顯示在數據庫中。問題是我應該查詢MAX(Address_id)並使用它來插入職員部分,因爲它使用address_id作爲外鍵。當我這樣做時,在更新級聯上會出現外鍵約束錯誤。如果我完全拔出INSERT人員代碼,並將「調試」打印出MAX(address_id),則它會正確打印。我只是無法正確地將其插入到工作人員表中,以便我的表單中的所有內容都可以創建工作人員記錄。以下是代碼:PHP/MYSQL選擇MAX值並將其用作插入值

$userQuery = "INSERT INTO address (address, district, city_id, postal_code, phone) 
       VALUES ('$address', '$district', '$city', '$postal_code', '$phone') "; 

$addressResult = mysqli_query($connect, $userQuery); 
if (!$addressResult) 
{ 
    die("Could not successfully run query ($userQuery) from $db: " .  
    mysqli_error($connect)); 
} 



$maxQuery = "SELECT MAX(address_id) FROM address"; 
$result = mysqli_query($connect, $maxQuery); 
$row = mysqli_fetch_assoc($result); 
if (!$result) 
{ 
    die("Could not successfully run query ($userQuery) from $db: " .  
    mysqli_error($connect)); 
} 
/**else 
{ 

    print ("<p>Average hourly wage:".$row['MAX(address_id)']."</p>"); 

}**/ 


$userQuery1 = "INSERT INTO staff (first_name, last_name, address_id, email, store_id) 
       VALUES ('$first_name', '$last_name', '$row', '$email', '$store_id')"; 
$staffResult = mysqli_query($connect, $userQuery1); 
if (!$staffResult) 
{ 
    die("Could not successfully run query ($userQuery1) from $db: " . 
    mysqli_error($connect)); 
} 
else 
{ 
    print(" <h1>New Staff Record Added!</h1>"); 
    print ("<p>The following record was added:</p>"); 
    print("<table border='0'> 
      <tr><td>First Name</td><td>$first_name</td></tr> 
      <tr><td>Last Name</td><td>$last_name</td></tr> 
      <tr><td>Email</td><td>$email</td></tr>  
      <tr><td>Store ID</td><td>$store_id</td></tr> 
      <tr><td>Address</td><td>$address</td></tr> 
      <tr><td>City</td><td>$city</td></tr> 
      <tr><td>District</td><td>$district</td></tr> 
      <tr><td>Postal Code</td><td>$postal_code</td></tr> 
      <tr><td>Phone</td><td>$phone</td></tr> 
      </table>"); 
} 
+0

而不是使用'MAX()',只需使用'mysqli_insert_id'。這將從前面的INSERT語句中返回ID – LeeR

+0

執行'INSERT'後,可以使用'mysqli_insert_id($ connect)'獲取分配的ID。你也可以在MySQL查詢中使用'LAST_INSERT_ID()'來獲得它。 'MAX(address_id)'是一個不好的方法。 – Barmar

+0

所以我將能夠把mysqli_insert_id($連接)插入到我的職員表插入查詢?那會插入最後創建的ID從第一次插入? –

回答

0

您沒有調用正確的關聯索引。你只是調用數組:

$userQuery1 = "INSERT INTO staff (first_name, last_name, address_id, email, store_id) VALUES ('$first_name', '$last_name', '{$row['MAX(address_id)']}', '$email', '$store_id')"; 
+0

我已經將大括號添加到數組中。現在就試試。 – Daerik

+0

好吧,我剛剛應用了這個改變,我認爲這會起作用,謝謝。我仍然遇到了約束錯誤,但我想我可能需要更改兩個表之間的關聯方式:在每個字段中僅使用'1'作爲測試值 –

+0

無法成功運行查詢(INSERT INTO staff (first_name,last_name,address_id,email,store_id)來自sakila的VALUES('1','1','','1','1')):無法添加或更新子行:外鍵約束失敗'sakila'.'staff',CONSTRAINT'fk_staff_address' FOREIGN KEY('address_id')REFERENCES'address'('address_id')ON UPDATE CASCADE) –

-2

檢查查詢。你不能從數據庫中正確地獲取數據。

+0

試着幫助您的迴應。很明顯,這裏的一個學生,仍然掌握着一些東西 – LeeR

+0

你是什麼意思?員工表的userQuery1?我知道地址和MAX查詢工作,因爲我可以調試和打印結果。 –