Mysql php скрипт для записи в бд записывает вопросительные знаки.

bazlight

Новичок
у меня ubuntu с LAMP
делаю запрос SHOW VARIABLES LIKE 'char%'; выводится:
PHP:
Variable_name	Value
character_set_client	utf8
character_set_connection	utf8
character_set_database	utf8
character_set_filesystem	binary
character_set_results	utf8
character_set_server	latin1
character_set_system	utf8
character_sets_dir	/usr/share/mysql/charsets/
пробовал ковыряться в файле my.cnf но безрезультатно. потом нашел на забугорном форуме сообщение о том, что это ошибка в версии убунту 12.04 Решил обновиться до последней версии, но толку ни какого.

если выполнять команду с phpmyadmin, то все ок. запись нормального вида. и на страницу также выводится в нормальном виде, а вот при использовании скрипта "??????"


вид формы для записи:
PHP:
<form action="insert.php" method="post">
Имя: <input type="text" name="name" />
Номер телефона: <input type="text" name="phone" />
Коментарий: <input type="text" name="post" />
<input type="submit" />
</form>
файл insert:
PHP:
<?php

$server = 'localhost';
$user = 'root';
$password = 'alex';
// в какой кодировке получать данные от клиента
mysql_query('set character_set_client="utf8"');
// в какой кодировке получать данные от БД для вывода клиенту
mysql_query('set character_set_results="utf8"');
mysql_query('set character_set_database="utf8"');
$link = mysql_connect("$server", "$user", "$password")
        or die("Could not connect: " . mysql_error());
mysql_select_db ('test', $link) or die (mysql_error());

$sql="INSERT INTO user (name, phone, post)
VALUES
('$_POST[name]','$_POST[phone]','$_POST[post]')";

if (!mysql_query($sql,$link))
  {
  die('Error: ' . mysql_error());
  }
echo "Запись добавлена";

mysql_close($link);
?>
у меня VPS есть. решил там все испытать, но там такая же ситуация с character_set_server latin1, и скрипт также записывает вопросительные знаки. а файл my.cnf найти так и не смог. видать совсем руки корявые.

помогите определиться в чем проблема. в самом скрипте или из за character_set_server latin1
 

Фанат

oncle terrible
Команда форума
в самом скрипте.
серверные переменные вообще ни на что не влияют
 

Фанат

oncle terrible
Команда форума
но сам код, конечно - туши свет.
ты его откуда копипастил?
 

bazlight

Новичок
show create table user
CREATE TABLE `user` (
`name` varchar(20) DEFAULT NULL,
`phone` int(11) DEFAULT NULL,
`post` varchar(500) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
вывожу так:
PHP:
<?php
  //соединение с базой данных при помощи функции mysql_connect()
  //в аргументах функции укажите имя сервера, логин и пароль. 
  $db = mysql_connect("$server","$user","$password");
  //функция mysql_select_db() выбирает текущую 
  //базу данных с именем "test"
  mysql_select_db("test");
  echo mysql_error(). "\n";

// Выводим заголовок таблицы:
echo "<table border=\"1\" width=\"100%\" bgcolor=\"#FFFFE1\">";
echo "<tr><td>Email</td><td>Ім'я</td><td>Коментарій</td>";
echo "<td>Телефон</td><td>Стать</td></tr>";

// SQL-запрос:
$q = mysql_query ("SELECT * FROM post");

// Выводим таблицу:
for ($c=0; $c<mysql_num_rows($q); $c++)
{
echo "<tr>";

$f = mysql_fetch_array($q);
echo "<td>$f[email]</td><td>$f[name]</td><td>$f[post]</td>";
echo "<td>$f[phone]</td><td>$f[date]</td>";

echo "</tr>";
}
echo "</table>";

$result=mysql_query('SELECT * FROM `post`');// делаем выборку из таблицы
while($row=mysql_fetch_array($result))// берем результаты из каждой строки
{ echo '<p>Запись id='.$row['id'].'. Текст: '.$row['post'].'</p>';// выводим данные
}

  mysql_close($db);

?>
 

Фанат

oncle terrible
Команда форума
ну так что ж ты при ЗАПИСИ указываешь, "в какой кодировке получать данные от БД", хотя никаких данных при этом не получаешь, а при получении - нет?

а книги эти сожги.
 

bazlight

Новичок
вывод корректный. вывожу другую таблицу. ее информацию через phpmyadmin записывал.
в скрипте убрал "в какой кодировке получать данные от БД". теперь в таблицу записываются не вопросительные знаки, а проверка
 

bazlight

Новичок
латинские символы пишет нормально. проблема с русским языком
 

Фанат

oncle terrible
Команда форума
ОМГ.
то есть ты при записи убрал, но при выводе всё равно не добавил?
 

Фанат

oncle terrible
Команда форума
можешь ещё показать show create table для "другой" таблицы
 

bazlight

Новичок
вот. это та, которая выводит данные:
CREATE TABLE `post` (
`id` int(11) NOT NULL,
`date` datetime NOT NULL,
`name` varchar(30) NOT NULL DEFAULT 'NOT NULL',
`phone` varchar(11) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
`post` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
 

Фанат

oncle terrible
Команда форума
от я дебил...
PHP:
mysql_query('set character_set_results="utf8"');
mysql_query('set character_set_database="utf8"');
$link = mysql_connect("$server", "$user", "$password")
и как, по-твоему, запросы должны работать без подключения к базе?
 

bazlight

Новичок
наверное я дебил) не понял. подключение ведь есть:
PHP:
$server = 'localhost';
$user = 'root';
$password = 'alex';
// в какой кодировке получать данные от клиента
mysql_query('set character_set_client="utf8"');
// в какой кодировке получать данные от БД для вывода клиенту
mysql_query('set character_set_results="utf8"');
mysql_query('set character_set_database="utf8"');
$link = mysql_connect("$server", "$user", "$password")
        or die("Could not connect: " . mysql_error());
mysql_select_db ('test', $link) or die (mysql_error());

$sql="INSERT INTO user (name, phone, post)
VALUES
('$_POST[name]','$_POST[phone]','$_POST[post]')";
 

Фанат

oncle terrible
Команда форума
скрипты исполняются сверху вниз, а не снизу вверх
 

bazlight

Новичок
$link = mysql_connect("$server", "$user", "$password")
or die("Could not connect: " . mysql_error());
// в какой кодировке получать данные от клиента
mysql_query('set character_set_client="utf8"');
если так, то не работает. записывает одни вопросительные знаки.
 

Фанат

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

покажи как записываешь сейчас и как выводишь.

ТУ ТАБЛИЦУ, С КОТОРОЙ У ТЕБЯ ПРОБЛЕМЫ.

в прошлый раз, как я понимаю, ты подсунул мне другую
 
Сверху