За последние 24 часа нас посетили 18352 программиста и 1605 роботов. Сейчас ищут 934 программиста ...

Проблема с выборкой из БД

Тема в разделе "PHP для новичков", создана пользователем beki007, 3 янв 2012.

  1. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    Здравствуйте, у меня проблема с выборкой из БД,
    вот у меня на базе 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
    пожалуйста помогите решить проблему, заранее благодарен
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Весь код покажи.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    И не забудь кнопку PHP
     
  4. beki007

    beki007 Активный пользователь

    С нами с:
    25 дек 2011
    Сообщения:
    25
    Симпатии:
    0
    Все спасибо сработало, просто там создал таблицу например: newseng тогда сработало, а при news2 нет
     
  5. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Здравствуйте! В php несколько дней, так что прошу не пинать.

    Есть скрипт регистрации на сайте. Там все просто, записываем данные в табличку. Но при авторизации зарегистрированного пользователя с логином, состоящим из русских символов, скрипт не находит в базе соответствия логина. При авторизации с логином латинскими символами все ок. Вот код проверки:

    PHP:
    1. <?php
    2.     session_start();//  вся процедура работает на сессиях. Именно в ней хранятся данные  пользователя, пока он находится на сайте. Очень важно запустить их в  самом начале странички!!!
    3. if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
    4.     if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
    5.     //заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
    6. if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
    7.     {
    8.     exit ("Вы ввели не всю информацию, вернитесь <a href='login_org.php'>назад</a> и заполните все поля!");
    9.     }
    10.     //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
    11.     //$login = stripslashes($login);
    12.     //$login = htmlspecialchars($login);
    13.     //$password = stripslashes($password);
    14.     //$password = htmlspecialchars($password);
    15. //удаляем лишние пробелы
    16.     //$login = trim($login);
    17.     //$password = trim($password);
    18. // подключаемся к базе
    19.     include ("connect.php");// файл connect.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
    20.  
    21. $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link); //извлекаем из базы все данные о пользователе с введенным логином
    22.     $myrow = mysql_fetch_array($result);
    23.     if (empty($myrow['password']))
    24.     {
    25.     //если пользователя с введенным логином не существует
    26.     exit ("Логин, который Вы ввели не существует, вернитесь <a href='login_org.php'>назад</a> и заполните все поля!");
    27.     }
    28.     else {
    29.     //если существует, то сверяем пароли
    30.     if ($myrow['password']==$password) {
    31.     //если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
    32.     $_SESSION['login']=$myrow['login'];
    33.     $_SESSION['id']=$myrow['id'];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
    34.     echo "<font color=FFFFFF>Поздравляю,$login, Вы успешно вошли на сайт!</font>";
    35.     }
    36.  else {
    37.     //если пароли не сошлись
    38.  
    39.     exit ("Пароль, введенный Вами, не совпадает с паролем для данного логина, вернитесь <a href='login_org.php'>назад</a> и заполните все поля!");
    40.     }
    41.     }
    42.     ?>
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Можно предположить, что кодировки.
     
  7. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Данные на русском языке корректно вводятся в базу и кореректно из нее выводятся на страничку. Кодировка базы, соединения с бд и самой странички идентичны. Может быть русские символы нужно как то по особому обработать до запроса в бд?
     
  8. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Не...

    Попробуй перед запросом
    $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link);

    добавить:
    $login = mysql_real_escape_string(get_magic_quotes_gpc() ? stripslashes($login) : $login);
     
  9. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Ничего не изменилось, не находит логин в базе. Хотя он добавляется при регистрации.
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А пароль у этого логина есть?
    Просто то, что накодил ты - будет говорить "Логин, который Вы ввели не существует..." в том случае, если поле пароль - пустое. Цифра 0 (хоть в виде int, хоть в виде string) тоже считается empty.
     
  11. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Пароль есть. Пробовал и цифрами и латинскими буквами. Если логин латинскими буквами авторизацию проходит. Если русскими пишет что не существует. =(
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Замени
    $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link);

    на
    $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link) or exit(mysql_error());

    Посмотри - может там ругается оно на что.
     
  13. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Ошибок не выдает. Ничего не меняется.

    Перелопатил весь код. Пробовал разные варианты. Уже дошло до того что в гугле нахожу свое это сообщение. :D

    Прошу помощи. Скрипт регистрации брал отсюда: http://ruseller.com/lessons.php?rub=37&id=347
     
  14. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Друзья, выручайте!
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Замени
    $result = mysql_query("SELECT * FROM org WHERE login='$login'",$link);

    на
    $sql = "SELECT * FROM org WHERE login='$login'";
    $result = mysql_query($sql, $link);
    echo($sql);

    И посмотри текст запроса, который получается.

    Но всё же я думаю, что что-то там с кодировками не то, раз английские логины работают, а русские - нет.
     
  16. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Логин русскими буквами:
    SELECT * FROM org WHERE login='������' :shock:

    Логин латинскими:
    SELECT * FROM org WHERE login='klient1'

    :cry: Ты прав, что то с кодировкой. Но что не пойму.
     
  17. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Установка кодировки подключения к бд:
    PHP:
    1. // Подключение к СУБД
    2. $link = mysql_connect(HOST,USER,PASS) or die (mysql_error());  
    3.        
    4.         // Выбираем базу данных
    5.         mysql_select_db(DB, $link);
    6.        
    7.         //Устанавливаем кодировку UTF8  
    8.          mysql_query ("SET NAMES utf8");
    9.          mysql_query ("set character_set_client='utf8'");
    10.          mysql_query ("set character_set_results='utf8'");
    11.          mysql_query ("set collation_connection='utf8_general_ci'");
    После сохранения файла скрипта в UTF-8 без BOM запрос выглядит вот так:
    SELECT * FROM org WHERE login='тест'

    Если кодировка просто в UTF то:

    SELECT * FROM org WHERE login='������'

    Ни в одном из случаев скрипт найти логин в базе не может. =(
     
  18. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Кодировку скрипта оставь utf8 БЕЗ BOM, в самом начале файла добавь

    header('Content-type: text/html; charset=UTF-8');

    Запросы
    Код (Text):
    1. mysql_query ("set character_set_client='utf8'");
    2. mysql_query ("set character_set_results='utf8'");
    3. mysql_query ("set collation_connection='utf8_general_ci'");
    в принципе не обязательны, достаточно одного
    Код (Text):
    1. mysql_query ("SET NAMES utf8");
    И ещё - если открыть эту таблицу через phpMyAdmin или, например, Navicat - там кракозябры или нормальные читабельные русские буквы?

    При добавлении записей в таблицу - запрос SET NAMES указывался?
     
  19. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Все сделал как ты сказал. В самих таблицах данные отображаются корректно. Set names я прописал в скрипт соединения с базой и его подключаю в нужном месте.

    Вот вывод:
    А вот если убрать строку header('Content-type: text/html; charset=UTF-8'); и оставить в UTF8 без BOM:
    :(
     
  20. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Ну, во-первых, вот это вот:
    Говорит о том, что у тебя там кодировка скрипта UTF-8 с BOM. Во-вторых это же самое говорит о том, что браузер, отображая страницу, считает, что страница в кодировке Windows-1251.
     
  21. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Еще раз проверил. Преобразование делал через notepad++

    UTF8 без BOM
    п»ї SELECT * FROM klient WHERE login='йцукен'Логин, который Р’С‹ ввели РЅРµ существует, вернитесь назад Рё заполните РІСЃРµ поля!

    UTF8
    SELECT * FROM klient WHERE login='������'Логин, который Вы ввели не существует, вернитесь назад и заполните все поля!
     
  22. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Просто дело в том, что вот это вот, что у тебя там вылазит:
    Это и есть BOM [​IMG] Скажем так, это его текстовое представление при кодировке Windows-1251 (ANSI)

    Если ты на 100% уверен, что твой скрипт сохранён в UTF-8 без BOM, то можно предположить, что этот скрипт вызывается не напрямую из браузера, а инклудится из какого-то другого скрипта, к которому идёт обращение браузера. Либо, наоборот, твой скрипт инклудит какой-то другой, который сохранён в кодировке UTF-8 + BOM...
     
  23. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Вот я там вижу у тебя есть в коде:

    include("connect.php");

    Для начала посмотри, в какой кодировке connect.php
     
  24. echo2012

    echo2012 Активный пользователь

    С нами с:
    4 янв 2012
    Сообщения:
    12
    Симпатии:
    0
    Пока стоял в душе мозг прояснился. Перевел все скрипты в UTF8 без BOM. Все работает!

    sobachnik, спасибо, дружище, за терпение и за помощь! :D