2016-11-22 1 views
0

у меня есть небольшой проект базы данных с помощью HTML-формы и PHP кода. Он отлично работает, за исключением последней части. В принципе, у меня есть настройка подключения к базе данных и работаю на моем PHP, и, нажав кнопку «Добавить», она должна вставить значения из формы в базу данных. Мой преподаватель сказал, что из-за ограничений таблицы он должен быть вставлен в определенном порядке, в основном адресная таблица сначала, а затем таблица персонала. ЕСЛИ я прокомментирую часть кода для сотрудников, появляется моя успешная страница подтверждения, и каждый раз адрес появляется в базе данных с помощью auto incremented address_id. Проблема в том, что я должен запрашивать MAX (Address_id) и использовать это для вставки части персонала, поскольку он использует address_id как внешний ключ. Когда я это делаю, я получаю ошибку ограничения внешнего ключа в каскаде обновления. Если я полностью вытащил код персонала INSERT и поместил «debug» для печати 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 – LeeR

+0

После того, как вы выполните 'INSERT', вы можете использовать' mysqli_insert_id ($ connect) 'для получения идентификатора, который был назначен. Вы также можете использовать 'LAST_INSERT_ID()' в запросе MySQL, чтобы получить это. 'MAX (address_id)' - плохой способ сделать это. – Barmar

+0

, так что я могу поместить mysqli_insert_id ($ connect) в мой запрос на вставку для таблицы сотрудников? и что бы вставить последний созданный идентификатор из первой вставки? –

ответ

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 персонала (first_name, last_name, address_id, электронная почта, store_id) VALUES ('1', '1', '', '1', '1')) из Sakila: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа терпит неудачу ('sakila'.'staff', скованность' fk_staff_address' FOREIGN KEY ('address_id') ЛИТЕРАТУРЫ' address' ('address_id') ON UPDATE CASCADE) –

-2

проверьте ваш запрос. вы не можете правильно извлекать данные из базы данных.

+0

Попробуйте быть полезным с ответом. Ясно, что студент здесь и все еще понимает вещи. – LeeR

+0

Как вы это понимаете? Пользователь userQuery1 для таблицы персонала? Я знаю, что адрес и MAX-запрос работают, потому что я могу отлаживать и печатать результаты. –

Смежные вопросы