Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Не записывает форму в таблицу
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016
Помог: 0 раз(а)
Всем Благ! Вопрос новичка - не записывает данные из формы в таблицу.
Полный ламер, но стараюсь. Скрипт записи в txt есть и работает, а вот SQL только только осваиваю. Вход по логину-паролю из БД освоил
Делал вроде по учебнику, и смотрел как у других реализовано, но что-то где-то не то - выдаёт НЕ ДОБАВЛЕНО.
Вот скрипт:
Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
Здесь
(`offer`, `contact`) эти кавычки поменяйте. Не прямые, а косые. Где буква Ё.
И в else всегда при работе пишите вывод ошибки, чтобы само вам подсказывало. Потом можете написать другое. Но при работе и отладке, я думаю это хорошо когда подсказка есть.
Попробуйте так. И что-то в VALUES по моему изобилие символов.
Но попробуйте и смотрите какую ошибку выдаст.
Сам тоже только учусь.
freelsd
Отправлено: 10 Марта, 2016 - 14:39:53
Гость
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
Сейчас mysql* функции не используются, нужно юзать либо PDO либо mysqli. А чтобы понять почему данные не добавились нужно выводить сообщение с информацией об ошибке:
echo "<p>Данные успешно добавлены в таблицу.</p>";
} else {
echo "<p>ERROR, ".mysql_error()." not added.</p>";
}
Barnaus
Отправлено: 10 Марта, 2016 - 16:57:10
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016
Помог: 0 раз(а)
первая ошибка
ERROR, Unknown column 'WTB WTB WTB' in 'field list', not added.
WTBWTBWTB - это текст в текстовом поле.
----
Смысл скрипта таков, что в зависимости от нажатой кнопки добавлять в таблицу WTB или WTS.
Как я понял - ругается на попытку первое текстовое поле записать в соответствующий столбец,
СТолбцы имеют то же название, варчары, кол-во символов большое.
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
Barnaus пишет:
первая ошибка
ERROR, Unknown column 'WTB WTB WTB' in 'field list', not added.
WTBWTBWTB - это текст в текстовом поле.
----
Смысл скрипта таков, что в зависимости от нажатой кнопки добавлять в таблицу WTB или WTS.
Как я понял - ругается на попытку первое текстовое поле записать в соответствующий столбец,
СТолбцы имеют то же название, варчары, кол-во символов большое.
Скрипт говорит что нету такого поля 'WTB WTB WTB' в таблице, что странно, так как кавычки у вас в запрос есть. Кстати, mysql* уже не использует никто, пользуйтесь mysqli и еще перед добавлением текста делайте mysqli->real_escape_string. Сделайте вывод запроса перед добавлением чтобы было видно какой запрос вносится в базу, то есть:
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016
Помог: 0 раз(а)
Добавил по крайнему совету , только вывел ещё и переменные
echo "<p>ERROR, ".mysqli_error().", not added.".$offer.",".$contact."</p>";
Выдаёт ошибку:
INSERT INTO WTB (offer, contact) VALUES ('','')
ERROR, , not added.texttext,name
При этом ведь присвоил
$offer=$_POST['info']; \\ данные из поля INFO
$offer=htmlspecialchars($offer);
$contact=$_POST['cont']; \\ данные из поля CONT
$contact=htmlspecialchars($contact);
Переменные из формы передаются(в текстовый файл ведь пишет), К базе подключается, таблицу находит, соответствующие поля в таблице видит.
Ведь не может же быть ошибки из-за того, что в таблице 10 полей с разными именами, а данные передать хочу только в два?
ПС! мне все зарезервированные команды sql* следует заменить на sqli ?
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
Barnaus пишет:
Добавил по крайнему совету , только вывел ещё и переменные
echo "<p>ERROR, ".mysqli_error().", not added.".$offer.",".$contact."</p>";
Выдаёт ошибку:
INSERT INTO WTB (offer, contact) VALUES ('','')
ERROR, , not added.texttext,name
При этом ведь присвоил
$offer=$_POST['info']; \\ данные из поля INFO
$offer=htmlspecialchars($offer);
$contact=$_POST['cont']; \\ данные из поля CONT
$contact=htmlspecialchars($contact);
Переменные из формы передаются(в текстовый файл ведь пишет), К базе подключается, таблицу находит, соответствующие поля в таблице видит.
Ведь не может же быть ошибки из-за того, что в таблице 10 полей с разными именами, а данные передать хочу только в два?
ПС! мне все зарезервированные команды sql* следует заменить на sqli ?
Да, лучше заменить на mysqli эквиваленты. Я когда код приводил, я там забыл совсем что в mysqli_real_escape_string первым аргументом идет ссылка на соединение (я сам ооп стилем пользуюсь, поэтому совсем про эту деталь забыл), может быть поэтом у вас пустые переменные в запросе получились.
Должно быть что-то вроде:
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016
Помог: 0 раз(а)
Благодарен!
Прогресс есть, но ещё не конец
INSERT INTO WTB (offer, contact) VALUES ('texttext_pole1','contact_pole2')
ERROR, , not added.texttext_pole1,contact_pole2
Данные видит, таблицу и поля видит, значения для таблицы видит. Но не добавляет.
Подозреваю, что чтото ненравится самой таблице и БД. Я в таблице поставил значение полей NULL(чтоб допускалось пустое значение для ненужных полей), но вот с полем ID с автоинкрементом такое не проходит. и туда ничего не пишется(это поле ведь должно само автодобавляться).
А не может ли быть такое, что надо ещё и логин пароль от БД прописывать в команде добавления строки?
Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015
Помог: 1 раз(а)
Barnaus пишет:
Благодарен!
Прогресс есть, но ещё не конец
INSERT INTO WTB (offer, contact) VALUES ('texttext_pole1','contact_pole2')
ERROR, , not added.texttext_pole1,contact_pole2
Данные видит, таблицу и поля видит, значения для таблицы видит. Но не добавляет.
Подозреваю, что чтото ненравится самой таблице и БД. Я в таблице поставил значение полей NULL(чтоб допускалось пустое значение для ненужных полей), но вот с полем ID с автоинкрементом такое не проходит. и туда ничего не пишется(это поле ведь должно само автодобавляться).
А не может ли быть такое, что надо ещё и логин пароль от БД прописывать в команде добавления строки?
Чтобы не гадать нужно сделать так mysqli_error($dbcon) там где у вас ошибка выводится и смотреть на вывод. В общем узнать, что бд не нравится при добавлении.
Barnaus
Отправлено: 11 Марта, 2016 - 09:37:04
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016
Помог: 0 раз(а)
ОТ того, что запросил ошибку с переменной ,результат такой же
INSERT INTO WTB (offer, contact) VALUES ('texttext','name_wts')
Not Added
Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016
Помог: 0 раз(а)
спасибо! пересмотром кода, пересчётом скобок {} и вашими советами , записывать скрипт начал. Теперь над выкинуть все лишние IF
Мелкий
Отправлено: 11 Марта, 2016 - 13:23:41
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
От лишних if при работе с БД очень помогают избавиться исключения.
Для mysqli: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Для PDO: настройка PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.