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
Форумы портала PHP.SU :: Версия для печати :: Неполучается вставить данные из формы в БД
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Неполучается вставить данные из формы в БД

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

1. Andrey - 28 Августа, 2007 - 22:49:46 - перейти к сообщению
При попытке вставить в БД таблицу 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'
-------------------------------- -------------------------------- -------------------------------- ----

Как бороться с данной проблемой?
2. evgenijj - 28 Августа, 2007 - 23:16:57 - перейти к сообщению
Andrey пишет:

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


Проблемы с кодировкой. Копай в сторону SET NAMES ...
3. Andrey - 28 Августа, 2007 - 23:29:53 - перейти к сообщению
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.  


Ни то, ни другое не помогает...
4. evgenijj - 28 Августа, 2007 - 23:42:50 - перейти к сообщению
Что-то больно хитро.

Обычно делают так
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 (кодировка определяется по сопоставлению, т.к. сопоставление зависит от нее).
5. valenok - 29 Августа, 2007 - 00:16:38 - перейти к сообщению
(customer_surname, customer_name, customer_parthname, customer_phone,
customer_email, customer_metro, customer_address, customer_time,
customer_comments)

если это все поля таблицы то сотрите к чёртовой матери эту часть.
6. Andrey - 29 Августа, 2007 - 19:14:09 - перейти к сообщению
valenok пишет:
(customer_surname, customer_name, customer_parthname, customer_phone,
customer_email, customer_metro, customer_address, customer_time,
customer_comments)

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


В том-то и дело, что заполняю не все поля в таблице, а только некоторые.
Но я проблему решил.
Всего-то надо было в phpmyadmin в свойствах таблицы значение "Сравнение" поменять с "latin1_bin" на "cp1251_bin".
7. valenok - 29 Августа, 2007 - 19:18:33 - перейти к сообщению
так, а bin зачем?
cp1251_general_ci\n\n(Добавление)
Вставь пустые кавычки для бедного id из за которого ты столько текста вписал.
Да и вообще для всего чему установлен default value\n\n(Добавление)
У меня на локалке всё в cp1251_general_ci
а на сервере latin1_swedish_ci
Можно пользоваться и кодом Евгения

 

Powered by ExBB FM 1.0 RC1