INSERT INTO не работает для 2-го стола

Я новичок в PHP, но обычно могу решить большинство проблем, но эта проблема у меня есть.

Я пытаюсь создать подписку на новостную рассылку (одно поле) с помощью одной кнопки отправки. У меня это работает нормально, отправив электронное письмо и вставив данные формы в мою таблицу. Однако я хочу добавить функциональность, чтобы письмо с подтверждением отправлялось тому, кто подписывается. Я провел обширные исследования и знаю метод, лежащий в основе этого, но мой код просто не вводит данные в мою 2-ю таблицу, используемую для хранения информации подтверждения.

У меня есть 2 таблицы:
В таблице 1 названы столбцы «новостной рассылки»:

idmail,emailaddress,datetime,state

idmail установлен в AUTO_INCREMENT

Таблица 2 с именем столбца подтверждения:

idconfirm,emailaddress,confirmkey

Вот мой код (я пропустил часть электронной почты, которая идет после этого, так как все работает нормально):

//connect to database
include('admin/connection.php');
$email = mysqli_real_escape_string($dbc, $_POST['email']);
//check if value exists in table
$result = mysqli_query($dbc, "SELECT emailaddress FROM newsletter WHERE emailaddress = '$email'");
if (mysqli_num_rows($result)==0) {

//Insert value into database
$query1 = mysqli_query($dbc, "INSERT INTO newsletter(emailaddress, datetime, state) VALUES('$email','$now','0')");
mysqli_query($dbc, $query1);

// Get ID of last record
$id = mysqli_insert_id($dbc);

//Create a random key
$hash = $email.date('mY');
$hash = md5($hash);
//Insert value into database
$query2 = mysqli_query($dbc, "INSERT INTO confrim(idconfirm, emailaddress, confirmkey) VALUES('$id','$email','$hash')");
mysqli_query($dbc, $query2);

Когда я отправляю адрес электронной почты, первая таблица заполняется правильно.

Цель здесь — получить автоматический идентификатор, созданный в первом запросе INSERT INTO, в переменную, а затем добавить его в столбец 2-й таблицы с именем ‘idconfim’.

Я старался:

echo $id;
echo $email;
echo $hash;

и все переменные содержат правильную информацию.

У кого-нибудь есть какие-либо идеи?
Я пытался многое перечислить здесь, но я исследовал это, и я просто не знаю, где я иду не так.

Заранее спасибо.

-3

Решение

Я публикую свой комментарий в качестве ответа здесь:

Проблема здесь заключается в следующем $query2 = mysqli_query($dbc,... '$hash')"); mysqli_query($dbc, $query2); и ты должен был получить ошибку об этом. Это помимо возможной опечатки для имени таблицы confrim,

Вы должны удалить mysqli_query($dbc, $query2); здесь и замените его на:

if($query2){ echo "Success"; }

else{ echo "Error: " . mysqli_error($dbc);

(Другое редактирование): Вы сделали ту же ошибку здесь:

$query1 = mysqli_query($dbc, "INSERT INTO newsletter ... '$now','0')");
mysqli_query($dbc, $query1);

и должен быть изменен на:

if($query1){ echo "Success"; }

else{ echo "Error: " . mysqli_error($dbc);

Как указано в комментариях RiggsFolly; не используйте MD5 для хэширования паролей, это больше не безопасно. За 30 лет под мостом течет много воды.

использование password_hash() http://php.net/manual/en/function.password-hash.php и подготовленное заявление.

Редактировать: Теперь мне кажется, что после повторного просмотра вашего кода вы пытаетесь сохранить пароль, а не ключ подтверждения. Если это так, то вы можете игнорировать пароли. Однако, если вы решите использовать MD5 для хранения паролей в будущем, нет.

5

Другие решения

Одна из проблем заключается в том, что вы не видите ошибку MySQL, если она есть. Таким образом, вам нужно либо проверить журналы сервера на наличие ошибок в PHP, вы можете принудительно распечатать ошибку в журнале ошибок или сделать что-то еще:

например:

mysqli_query($dbc, $query2) or error_log(mysqli_error($dbc));

mysqli_query($dbc, $query2) or custome_error_handler(mysqli_error($dbc));

Также php должен возвращать HTTP-ошибку клиенту. Вы должны поймать эту ошибку.

Как только вы увидите ошибку SQL, вам будет легко понять, что вы сделали неправильно.

РЕДАКТИРОВАТЬ Фред II поймал настоящую ошибку, но я думаю, что ошибка была бы сгенерирована, когда ошибка будет совершена в первый раз:

mysqli_query($dbc, $query1);

$query1 не строка И если вы заметили, что уже выполнили запрос в строке выше. Чтение журналов ошибок PHP покажет вам, где именно находится ошибка.

2

Извините за потраченное время.

Спасибо jeffery_the_wind за указание на логи. Я буду использовать их в будущем.

Проблема заключалась в ДВУХ орфографических ошибках: одна в имени столбца в php и одна в базе данных mysql. не сказать ни слова! Я слегка лексиклик!

Спасибо за ваши быстрые ответы.

-3
По вопросам рекламы [email protected]