Здравствуйте, у меня проблема с выборкой из БД, вот у меня на базе 2 похожие таблицы, settings и settings2 и когда я так делаю выборку оно получает данные из settings: $result = mysql_query ("SELECT title,meta_d,meta_k,text FROM settings2 WHERE page = 'index'",$db); <?php echo $myrow['text']; ?> - здесь выводит данные из settings пожалуйста помогите решить проблему, заранее благодарен
Здравствуйте! В php несколько дней, так что прошу не пинать. Есть скрипт регистрации на сайте. Там все просто, записываем данные в табличку. Но при авторизации зарегистрированного пользователя с логином, состоящим из русских символов, скрипт не находит в базе соответствия логина. При авторизации с логином латинскими символами все ок. Вот код проверки: PHP: <?php session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!! if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} } //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт { exit ("Вы ввели не всю информацию, вернитесь <a href='login_org.php'>назад</a> и заполните все поля!"); } //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести //$login = stripslashes($login); //$login = htmlspecialchars($login); //$password = stripslashes($password); //$password = htmlspecialchars($password); //удаляем лишние пробелы //$login = trim($login); //$password = trim($password); // подключаемся к базе include ("connect.php");// файл connect.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link); //извлекаем из базы все данные о пользователе с введенным логином $myrow = mysql_fetch_array($result); if (empty($myrow['password'])) { //если пользователя с введенным логином не существует exit ("Логин, который Вы ввели не существует, вернитесь <a href='login_org.php'>назад</a> и заполните все поля!"); } else { //если существует, то сверяем пароли if ($myrow['password']==$password) { //если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел! $_SESSION['login']=$myrow['login']; $_SESSION['id']=$myrow['id'];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь echo "<font color=FFFFFF>Поздравляю,$login, Вы успешно вошли на сайт!</font>"; } else { //если пароли не сошлись exit ("Пароль, введенный Вами, не совпадает с паролем для данного логина, вернитесь <a href='login_org.php'>назад</a> и заполните все поля!"); } } ?>
Данные на русском языке корректно вводятся в базу и кореректно из нее выводятся на страничку. Кодировка базы, соединения с бд и самой странички идентичны. Может быть русские символы нужно как то по особому обработать до запроса в бд?
Не... Попробуй перед запросом $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link); добавить: $login = mysql_real_escape_string(get_magic_quotes_gpc() ? stripslashes($login) : $login);
А пароль у этого логина есть? Просто то, что накодил ты - будет говорить "Логин, который Вы ввели не существует..." в том случае, если поле пароль - пустое. Цифра 0 (хоть в виде int, хоть в виде string) тоже считается empty.
Пароль есть. Пробовал и цифрами и латинскими буквами. Если логин латинскими буквами авторизацию проходит. Если русскими пишет что не существует. =(
Замени $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link); на $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link) or exit(mysql_error()); Посмотри - может там ругается оно на что.
Ошибок не выдает. Ничего не меняется. Перелопатил весь код. Пробовал разные варианты. Уже дошло до того что в гугле нахожу свое это сообщение. Прошу помощи. Скрипт регистрации брал отсюда: http://ruseller.com/lessons.php?rub=37&id=347
Замени $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link); на $sql = "SELECT * FROM org WHERE login='$login'"; $result = mysql_query($sql, $link); echo($sql); И посмотри текст запроса, который получается. Но всё же я думаю, что что-то там с кодировками не то, раз английские логины работают, а русские - нет.
Логин русскими буквами: SELECT * FROM org WHERE login='������' :shock: Логин латинскими: SELECT * FROM org WHERE login='klient1' :cry: Ты прав, что то с кодировкой. Но что не пойму.
Установка кодировки подключения к бд: PHP: // Подключение к СУБД $link = mysql_connect(HOST,USER,PASS) or die (mysql_error()); // Выбираем базу данных mysql_select_db(DB, $link); //Устанавливаем кодировку UTF8 mysql_query ("SET NAMES utf8"); mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); После сохранения файла скрипта в UTF-8 без BOM запрос выглядит вот так: SELECT * FROM org WHERE login='тест' Если кодировка просто в UTF то: SELECT * FROM org WHERE login='������' Ни в одном из случаев скрипт найти логин в базе не может. =(
Кодировку скрипта оставь utf8 БЕЗ BOM, в самом начале файла добавь header('Content-type: text/html; charset=UTF-8'); Запросы Код (Text): mysql_query ("set character_set_client='utf8'"); mysql_query ("set character_set_results='utf8'"); mysql_query ("set collation_connection='utf8_general_ci'"); в принципе не обязательны, достаточно одного Код (Text): mysql_query ("SET NAMES utf8"); И ещё - если открыть эту таблицу через phpMyAdmin или, например, Navicat - там кракозябры или нормальные читабельные русские буквы? При добавлении записей в таблицу - запрос SET NAMES указывался?
Все сделал как ты сказал. В самих таблицах данные отображаются корректно. Set names я прописал в скрипт соединения с базой и его подключаю в нужном месте. Вот вывод: А вот если убрать строку header('Content-type: text/html; charset=UTF-8'); и оставить в UTF8 без BOM:
Ну, во-первых, вот это вот: Говорит о том, что у тебя там кодировка скрипта UTF-8 с BOM. Во-вторых это же самое говорит о том, что браузер, отображая страницу, считает, что страница в кодировке Windows-1251.
Еще раз проверил. Преобразование делал через notepad++ UTF8 без BOM п»ї SELECT * FROM klient WHERE login='йцукен'Логин, который Р’С‹ ввели РЅРµ существует, вернитесь назад Рё заполните РІСЃРµ поля! UTF8 SELECT * FROM klient WHERE login='������'Логин, который Вы ввели не существует, вернитесь назад и заполните все поля!
Просто дело в том, что вот это вот, что у тебя там вылазит: Это и есть BOM Скажем так, это его текстовое представление при кодировке Windows-1251 (ANSI) Если ты на 100% уверен, что твой скрипт сохранён в UTF-8 без BOM, то можно предположить, что этот скрипт вызывается не напрямую из браузера, а инклудится из какого-то другого скрипта, к которому идёт обращение браузера. Либо, наоборот, твой скрипт инклудит какой-то другой, который сохранён в кодировке UTF-8 + BOM...
Вот я там вижу у тебя есть в коде: include("connect.php"); Для начала посмотри, в какой кодировке connect.php
Пока стоял в душе мозг прояснился. Перевел все скрипты в UTF8 без BOM. Все работает! sobachnik, спасибо, дружище, за терпение и за помощь!