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]   

> Без описания
Andrey
Отправлено: 28 Августа, 2007 - 22:49:46
Post Id


Новичок


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


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




При попытке вставить в БД таблицу customer данные полученные из формы посредством кода представленого ниже:
PHP:
скопировать код в буфер обмена
  1.  
  2. $sql= "INSERT INTO customer
  3. (customer_surname, customer_name, customer_parthname, customer_phone,
  4. customer_email, customer_metro, customer_address, customer_time,
  5. customer_comments) VALUES ('Алексеев', 'Алексей', 'Алексеевич', '587-2291',
  6. 'alex@mail.ru', '3', 'Тихомирова, 28-92', '10-18', 'ХОЧУ')";
  7. $res=$this->conn->query($sql);
  8. if($res)
  9. echo "Данные добавлены";
  10. else
  11. echo "FUCK";
  12.  

браузер выдаёт "FUCK", то есть данные не добавляется.
Когда я пытаюсь сделать запрос напрямую в базе в MySQL-Front, выдаёт сообщение об ошибке:
-------------------------------- -------------------------------- -------------------------------- ---
Ошибка при выполнении SQL-запроса (1366). Ответ от сервера:
Incorrect string value: "xC0xEBxE5xEAxF1xE5...' for column 'customer_surname'
-------------------------------- -------------------------------- -------------------------------- ----

Как бороться с данной проблемой?
 
 Top
evgenijj
Отправлено: 28 Августа, 2007 - 23:16:57
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Andrey пишет:

Как бороться с данной проблемой?


Проблемы с кодировкой. Копай в сторону SET NAMES ...
 
 Top
Andrey
Отправлено: 28 Августа, 2007 - 23:29:53
Post Id


Новичок


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


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




evgenijj пишет:

Проблемы с кодировкой. Копай в сторону SET NAMES ...


Ну, спасибо! Сам бы я не догадался, что это проблемы с кодировкой!

Попробовал перед кодом вставить такой кусок:
PHP:
скопировать код в буфер обмена
  1.  
  2. $user_surname=iconv("Windows-1251","UTF-8", $user_surname);
  3. $user_parthname=iconv("Windows-1251","UTF-8", $user_parthname);
  4. $user_telephone=iconv("Windows-1251","UTF-8", $user_telephone);
  5. $user_address=iconv("Windows-1251","UTF-8", $user_address);
  6. $user_time=iconv("Windows-1251","UTF-8", $user_time);
  7. $user_addition=iconv("Windows-1251","UTF-8", $user_addition);
  8.  


и такой:
PHP:
скопировать код в буфер обмена
  1.  
  2. $this->conn->query ("set character_set_client='cp1251'");
  3. $this->conn->query ("set character_set_results='utf-8'");
  4. $this->conn->query ("set collation_connection='cp1251_general_ci'");
  5.  


Ни то, ни другое не помогает...
 
 Top
evgenijj
Отправлено: 28 Августа, 2007 - 23:42:50
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Что-то больно хитро.

Обычно делают так
PHP:
скопировать код в буфер обмена
  1.  
  2.  $r = mysql_connect ($dblocation, $dbuser, $dbpswrd);
  3.  mysql_query ("SET NAMES cp1251");
  4.  

Но это не всегда помогает. Подробности здесь
http://www[dot]webmasterschool[dot]ru/ar[dot][dot][dot]es/article17.php

Поэтому пишут так
PHP:
скопировать код в буфер обмена
  1.  
  2.  $r = mysql_connect ($dblocation, $dbuser, $dbpswrd);
  3.  mysql_query ("set character_set_client='cp1251'");
  4.  mysql_query ("set character_set_results='cp1251'");
  5.  mysql_query ("set collation_connection='cp1251_general_ci'");
  6.  


Этим ты говоришь серверу БД, что будешь отдавать данные в win-1251 и просишь отдавать тебе данные в win-1251. При этом сам сервер может хранить данные в UTF-8, KOI8-R или ISO 8859-5. Как их будет хранить сервер определяется при создании таблиц. Мало того, отдельные поля таблицы могут храниться в разных кодировках.

PHP:
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE enctest (
  3.   str1 CHAR(10) CHARSET koi8r,
  4.   str2 CHAR(15) COLLATE utf8_general_ci
  5. );
  6.  

В данном примере создается таблица с двумя полями, одно из которых будет храниться в кодировке KOI8-R (и с сопоставлением по-умолчанию). Второе поле будет иметь сопоставление utf8_general_ci и кодировку UTF-8 (кодировка определяется по сопоставлению, т.к. сопоставление зависит от нее).
 
 Top
valenok
Отправлено: 29 Августа, 2007 - 00:16:38
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




(customer_surname, customer_name, customer_parthname, customer_phone,
customer_email, customer_metro, customer_address, customer_time,
customer_comments)

если это все поля таблицы то сотрите к чёртовой матери эту часть.


-----
Truly yours, Sasha.
 
My status
 Top
Andrey
Отправлено: 29 Августа, 2007 - 19:14:09
Post Id


Новичок


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


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




valenok пишет:
(customer_surname, customer_name, customer_parthname, customer_phone,
customer_email, customer_metro, customer_address, customer_time,
customer_comments)

если это все поля таблицы то сотрите к чёртовой матери эту часть.


В том-то и дело, что заполняю не все поля в таблице, а только некоторые.
Но я проблему решил.
Всего-то надо было в phpmyadmin в свойствах таблицы значение "Сравнение" поменять с "latin1_bin" на "cp1251_bin".
 
 Top
valenok
Отправлено: 29 Августа, 2007 - 19:18:33
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




так, а bin зачем?
cp1251_general_ci\n\n(Добавление)
Вставь пустые кавычки для бедного id из за которого ты столько текста вписал.
Да и вообще для всего чему установлен default value\n\n(Добавление)
У меня на локалке всё в cp1251_general_ci
а на сервере latin1_swedish_ci
Можно пользоваться и кодом Евгения


-----
Truly yours, Sasha.
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB