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 :: Не записывает форму в таблицу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не записывает форму в таблицу
Barnaus
Отправлено: 10 Марта, 2016 - 13:29:42
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Всем Благ! Вопрос новичка - не записывает данные из формы в таблицу.
Полный ламер, но стараюсь. Скрипт записи в txt есть и работает, а вот SQL только только осваиваю. Вход по логину-паролю из БД освоил Улыбка
Делал вроде по учебнику, и смотрел как у других реализовано, но что-то где-то не то - выдаёт НЕ ДОБАВЛЕНО.
Вот скрипт:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. if (isset($_POST['wtb']))
  5.  
  6. {
  7.  
  8.  
  9. $offer=$_POST['info'];
  10. $offer=htmlspecialchars($offer);
  11. $contact=$_POST['cont'];
  12. $contact=htmlspecialchars($contact);
  13.  
  14.  
  15. $dbcon = mysql_connect("localhost", "elcarcus_broker", "*******");
  16. mysql_select_db("elcarcus_broker", $dbcon);
  17.  
  18.  
  19.  $sql = mysql_query("INSERT INTO `WTB` ('offer', 'contact')
  20.                        VALUES ('".$offer."','".$contact."')");
  21.     //Если вставка прошла успешно
  22.     if ($sql) {
  23.         echo "<p>Данные успешно добавлены в таблицу.</p>";
  24.                } else
  25.                   {
  26.         echo "<p>ERROR, not added.</p>";
  27.                   }
  28. //header("location:page1.php");
  29. //exit;
  30. }
  31.  
  32.  
  33. elseif (isset($_POST['wts']))
  34.  
  35. {
  36.  
  37. $offer=$_POST['info'];
  38. $offer=htmlspecialchars($offer);
  39. $contact=$_POST['cont'];
  40. $contact=htmlspecialchars($contact);
  41.  
  42.  
  43. $dbcon = mysql_connect("localhost", "elcarcus_broker", "*******");
  44. mysql_select_db("elcarcus_broker", $dbcon);
  45.  
  46.  
  47.  $sql = mysql_query("INSERT INTO `WTS` ('offer','contact')
  48.                        VALUES ('".$offer."','".$contact."')");
  49.     //Если вставка прошла успешно
  50.     if ($sql) {
  51.         echo "<p>OK.</p>";
  52.                } else
  53.                   {
  54.         echo "<p>ERR, not Added WTS.</p>";
  55.                   }
  56. //header("location:page1.php");
  57. //exit;
  58. }
  59.  
  60. ?>
  61.  

СПС!

(Отредактировано автором: 10 Марта, 2016 - 13:43:58)

 
 Top
ytrewq123
Отправлено: 10 Марта, 2016 - 14:38:04
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Здесь
(`offer`, `contact`) эти кавычки поменяйте. Не прямые, а косые. Где буква Ё.
И в else всегда при работе пишите вывод ошибки, чтобы само вам подсказывало. Потом можете написать другое. Но при работе и отладке, я думаю это хорошо когда подсказка есть.
PHP:
скопировать код в буфер обмена
  1.   $sql = mysql_query("INSERT INTO `WTS` (`offer`,`contact`)
  2.                         VALUES ('".$offer."','".$contact."')");
  3.       //Если вставка прошла успешно
  4.      if ($sql) {
  5.          echo "<p>OK.</p>";
  6.                 } else
  7.                   {
  8.          print_r(‘ERR, not Added WTS’ . mysql_error());
  9.                    }

Попробуйте так. И что-то в VALUES по моему изобилие символов.
Но попробуйте и смотрите какую ошибку выдаст.
Сам тоже только учусь.
 
 Top
freelsd
Отправлено: 10 Марта, 2016 - 14:39:53
Post Id


Гость


Покинул форум
Сообщений всего: 108
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Сейчас mysql* функции не используются, нужно юзать либо PDO либо mysqli. А чтобы понять почему данные не добавились нужно выводить сообщение с информацией об ошибке:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. if ($sql) {
  4.         echo "<p>Данные успешно добавлены в таблицу.</p>";
  5. } else {
  6.         echo "<p>ERROR, ".mysql_error()." not added.</p>";
  7.        
  8. }
 
 Top
Barnaus
Отправлено: 10 Марта, 2016 - 16:57:10
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




первая ошибка
ERROR, Unknown column 'WTB WTB WTB' in 'field list', not added.

WTBWTBWTB - это текст в текстовом поле.


----
Смысл скрипта таков, что в зависимости от нажатой кнопки добавлять в таблицу WTB или WTS.
Как я понял - ругается на попытку первое текстовое поле записать в соответствующий столбец,
СТолбцы имеют то же название, варчары, кол-во символов большое.

(Отредактировано автором: 10 Марта, 2016 - 17:01:59)

 
 Top
freelsd
Отправлено: 10 Марта, 2016 - 19:06:45
Post Id


Гость


Покинул форум
Сообщений всего: 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. Сделайте вывод запроса перед добавлением чтобы было видно какой запрос вносится в базу, то есть:
PHP:
скопировать код в буфер обмена
  1. $query = "INSERT INTO `WTB` ('offer', 'contact')
  2.                       VALUES ('".$offer."','".$contact."')";
  3. echo $query;

Так будет виднее что в запросе за ошибка.

Вообще я был сделал так:

PHP:
скопировать код в буфер обмена
  1. $query = sprintf("INSERT INTO WTB (offer, contact)
  2.                       VALUES ('%s','%s')", mysqli_real_escape_string($offer), mysqli_real_escape_string($contact));
  3. echo $query;
  4. $result = mysqli_query($query);
  5. ...
  6.  

(Отредактировано автором: 10 Марта, 2016 - 19:09:06)

 
 Top
Barnaus
Отправлено: 10 Марта, 2016 - 20:21:34
Post Id


Новичок


Покинул форум
Сообщений всего: 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 ?

(Отредактировано автором: 10 Марта, 2016 - 20:31:30)

 
 Top
freelsd
Отправлено: 10 Марта, 2016 - 20:48:55
Post Id


Гость


Покинул форум
Сообщений всего: 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 первым аргументом идет ссылка на соединение (я сам ооп стилем пользуюсь, поэтому совсем про эту деталь забыл), может быть поэтом у вас пустые переменные в запросе получились.
Должно быть что-то вроде:

PHP:
скопировать код в буфер обмена
  1. $dbcon = mysqli_connect("localhost", "elcarcus_broker", "*******");
  2. ...
  3. $query = sprintf("INSERT INTO WTB (offer, contact)
  4.                          VALUES ('%s','%s')", mysqli_real_escape_string($dbcon, $offer), mysqli_real_escape_string($dbcon, $contact));
  5. echo $query;
  6. $result = mysqli_query($query);

Попробуйте, надеюсь что проблему решит.

(Отредактировано автором: 10 Марта, 2016 - 20:49:20)

 
 Top
Barnaus
Отправлено: 10 Марта, 2016 - 21:16:53
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Благодарен!
Прогресс есть, но ещё не конец Улыбка

INSERT INTO WTB (offer, contact) VALUES ('texttext_pole1','contact_pole2')
ERROR, , not added.texttext_pole1,contact_pole2

Данные видит, таблицу и поля видит, значения для таблицы видит. Но не добавляет.

Подозреваю, что чтото ненравится самой таблице и БД. Я в таблице поставил значение полей NULL(чтоб допускалось пустое значение для ненужных полей), но вот с полем ID с автоинкрементом такое не проходит. и туда ничего не пишется(это поле ведь должно само автодобавляться).


А не может ли быть такое, что надо ещё и логин пароль от БД прописывать в команде добавления строки?

(Отредактировано автором: 10 Марта, 2016 - 21:58:19)

 
 Top
freelsd
Отправлено: 11 Марта, 2016 - 09:21:32
Post 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) там где у вас ошибка выводится и смотреть на вывод. В общем узнать, что бд не нравится при добавлении.
 
 Top
Barnaus
Отправлено: 11 Марта, 2016 - 09:37:04
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




ОТ того, что запросил ошибку с переменной ,результат такой же
INSERT INTO WTB (offer, contact) VALUES ('texttext','name_wts')
Not Added

А вот добавив проверку ошибки при соединении,
PHP:
скопировать код в буфер обмена
  1.  
  2. $dbcon = mysqli_connect("localhost", "elcarcus_broker", "**********");
  3. mysqli_select_db("elcarcus_broker", $dbcon);
  4. if (!$dbcon)
  5.         {
  6.     echo "<p>Connection ERR to  MySQL!</p>".mysqli_error($dbcon); exit();
  7.     } else {
  8.     if (!mysqli_select_db("elcarcus_broker", $dbcon))
  9.     {
  10.     echo("<p>DB doesn't exist!</p>");
  11.     }
  12.         }
  13.  


выдало
DB doesn't exist!

То есть скрипт не видит Базу данных. Разве неправильно прописано подключение?

Именно так же прописано подключение у скрипта проверки логина\пароля, который замечательно работает.

(Отредактировано автором: 11 Марта, 2016 - 09:46:23)

 
 Top
ytrewq123
Отправлено: 11 Марта, 2016 - 10:38:39
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Да, не правильно.
В mysqli Надо так.
PHP:
скопировать код в буфер обмена
  1. $dbcon = mysqli_connect("localhost", "elcarcus_broker", "**********", "elcarcus_broker");
  2. if (!$dbcon)
  3.       {
  4.     echo "<p>Connection ERR to  MySQL!</p>". mysqli_connect_error(); exit();
  5.     }
  6.  else {
  7.     Можно else не писать или тогда тут пишите запрос. Думаю тут главное увидеть если есть ошибка.
  8.     }
  9.  

(Отредактировано автором: 11 Марта, 2016 - 10:40:25)

 
 Top
Barnaus
Отправлено: 11 Марта, 2016 - 12:50:57
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




спасибо! пересмотром кода, пересчётом скобок {} и вашими советами , записывать скрипт начал. Теперь над выкинуть все лишние IF Улыбка
 
 Top
Мелкий Супермодератор
Отправлено: 11 Марта, 2016 - 13:23:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




От лишних if при работе с БД очень помогают избавиться исключения.
Для mysqli: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Для PDO: настройка PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB