SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.04.2014 13:51:10

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Поочерёдный показ текста по списку из базы данных в строгом порядке

Доброго времени суток. Может быть кто знает как сделать Поочерёдный показ текста по списку из базы данных в строгом порядке?

Тоесть, человек переходит на любой файл php и у него появляется текст1. В базу данных временно добавляется инфа что этот текст просмотрен. И при следующем открытии файла показывается текс2. Эти тексты берутся из базы данных. И когда база данных заканчивается круг начинается заново с текста1


Желательно внедрить в этот код:


<?php
//Чтоб не пропустить нотисы и ошибки
error_reporting(E_ALL);

//Укажем кодировку страницы
header("Content-type: text/html; charset=utf-8");

//Необходимо указать данные для подключения к серверу БД,
//это можно сделать с помощью переменных (или констант), объявим 4 переменные

$host = "localhost"; //Сервер БД
$user = ""; //Имя пользователя, он по умолчанию "root"
$password = ""; //Пароль для пользователя, по умолчанию он пустой
$db = ""; // Имя БД, с которой мы будем работать

//Для подключения к серверу MySQL в php есть функция mysql_connect()
//Синтаксис этой функции прост: mysql_connect(сервер, имя пользователя, пароль пользователя);
//Создадим переменную $link, которая будет содержать идентификатор нашего подключения к серверу БД
$link = mysql_connect($host, $user, $password);

//Выставим кодировку
mysql_query ("SET NAMES utf8");

//Далее необходимо выбрать БД, с которой мы будем работать, но перед этим мы проверим, действительно мы подключились к серверу БД
if($link) //идентично if($link === true), т.е. подключение прошло
    $select_db = mysql_select_db($db);

//Чтобы дальше работать, необходимо проверить, выбрана ли наша БД
if(!$select_db) //Если БД  не выбрана
    echo "Ошибка выбора БД";
else //Если БД выбрана, продолжаем
{
    //Итак, в самом начале статьи мы создали таблицу в нашей базе с помощью SQL - запроса
    //Так и здесь, работая с БД мы всегда будем использовать SQL-запросы
    //Для выбора данных из БД используется команда "SELECT" - выбрать
    //Далее идёт * - она говорит, что выбирать мы будем "Всё", т.е. все столбцы (можно и указать отдельный столбец, например `name`, но об этом ещё рано)
    //FROM `mytable` - далее мы указываем таблицу, данные которой мы будем выбирать.
    //Обратите внимание, что имена столбцов и таблиц - мы обрамляем обратными апострофами `` (Ё - анг. раскладке)
    $sql = "SELECT * FROM `posts` where `post_status` = 'publish'";

    //Далее необходимо отправить этот запрос серверу БД
    //Для этого есть штатная функция mysql_query(запрос, идентификатор подключения)
    //Но так как подключение у нас одно, значит "идентификатор подключения", мы можем опустить
    $query = mysql_query($sql);

    //В данном примере мы конечно знаем, что данные в БД есть, но на приктике - необходимо проверить наличие
    // этих данных, достаточно просто подсчитать кол-во строк в таблице
    if(!mysql_num_rows($query))
        echo "В таблице нет данных!";
    else
    {

   
        // Запрос отправлен, тепер нам необходимо получить выбранные данные которые вернул сервер
        // Для этого в php есть 2 функции: mysql_fetch_array() и mysql_fetch_assoc()
        // mysql_fetch_array() - - нам не подходит, т.к. в результате её работы возвращается два вида массива, один "простой" второй "ассоциативный",
        // в итоге мы получаем избыточные данные, что нам ни к чему."
        // mysql_fetch_assoc - вернёт нам только асициотивный массив
        // Нам нужны данные в виде асициот. массива (ключи таого массива будут содержать имена столбцов таблиц)
        // Исходя из этого, мы ест-но воспользуемся mysql_fetch_assoc(), зачем нам тратить ресурсы сервера на индексный массив
        // Тепер нам нужно сформировать массив, куда мы поместим данные которые вернул сервер после нашего запроса $query
        // Так как в нашей таблице несколько строчек, для этого используем цикл while(), и в цикле наполним массив
        while($row = mysql_fetch_assoc($query)) //Будем писать в массив данные, пока есть строчки в таблице
        {  
           
   
            //И вот на конец мы можем вывести все данные из БД
            echo 'id:' . $row['ID'] . '' . $row['guid'] . '
'
;

            //Раскомментируйте, чтобы посмотреть ввиде массива
            #echo '<pre>' . print_r($row, 1) . '</pre>';
        }
      }
   
   
}

//Закрыли соединение
mysql_close($link);
?>    
 



Буду очень благодарен за помощь!! Заранее спасибо! smile

Неактивен

 

#2 18.04.2014 23:31:18

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

А в чем логика строгого порядка? Если между заходами первого клиента зайдет другой, что он должен увидеть?

Неактивен

 

#3 19.04.2014 14:36:45

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

А в чем логика строгого порядка? Если между заходами первого клиента зайдет другой, что он должен увидеть?

если просмотр остановился на тексте 2, то должен увидеть текст 3

Неактивен

 

#4 19.04.2014 14:39:08

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

Порядок нужно помнить для каждого пользователя или один раз для сайта? Если общий порядок, то нужно сохранять только id.

Неактивен

 

#5 19.04.2014 14:41:07

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

например пользователь1 увидел текст1, тогда пользователь2 увидит текст2 и т.д.

Неактивен

 

#6 19.04.2014 14:41:38

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

по этому и нужна запись в базу, а не в куки

Неактивен

 

#7 19.04.2014 14:48:12

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

Схема решения примерно такая. Нужно создать отдельную таблицу

CREATE TABLE posts_position (position int(11));

Затем в нее вставить одно значение - 0.
INSERT INTO posts_position VALUES (0);

В ней всегда будет один элемент.
Основной запрос SQL заменить на такой:
    $sql = "SELECT p.* FROM `posts` p, posts_position pp where `p.post_status` = 'publish' AND p.ID>pp.position ORDER BY p.ID ASC LIMIT 1";

Это обеспечит выбор одной записи с минимальным ID, превышающим хранимое значение.
После этого
"UPDATE posts_position SET position=".$row['ID']

Неактивен

 

#8 19.04.2014 14:55:02

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

Схема решения примерно такая. Нужно создать отдельную таблицу

CREATE TABLE posts_position (position int(11));

Затем в нее вставить одно значение - 0.
INSERT INTO posts_position VALUES (0);

В ней всегда будет один элемент.
Основной запрос SQL заменить на такой:
    $sql = "SELECT p.* FROM `posts` p, posts_position pp where `p.post_status` = 'publish' AND p.ID>pp.position ORDER BY p.ID ASC LIMIT 1";

Это обеспечит выбор одной записи с минимальным ID, превышающим хранимое значение.
После этого
"UPDATE posts_position SET position=".$row['ID']

благодарю, щас буду пробовать smile

Неактивен

 

#9 19.04.2014 15:01:36

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

Забыл сказать про случай, когда дойдет до конца. Нужно поставить условие, что если запрос не вернет записей, сбросить положение в 0:

    if(!mysql_num_rows($query)) {
          mysql_query("UPDATE posts_position SET position=0");
     }

и повторить запрос

Неактивен

 

#10 20.04.2014 13:10:21

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

Схема решения примерно такая. Нужно создать отдельную таблицу

CREATE TABLE posts_position (position int(11));

Затем в нее вставить одно значение - 0.
INSERT INTO posts_position VALUES (0);

В ней всегда будет один элемент.
Основной запрос SQL заменить на такой:
    $sql = "SELECT p.* FROM `posts` p, posts_position pp where `p.post_status` = 'publish' AND p.ID>pp.position ORDER BY p.ID ASC LIMIT 1";

Это обеспечит выбор одной записи с минимальным ID, превышающим хранимое значение.
После этого
"UPDATE posts_position SET position=".$row['ID']

Блин не срабатывает почему то (( может я не туда прописываю. Если не трудно, вставь это всё в мой код.
Буду благодарен.

Неактивен

 

#11 20.04.2014 13:14:19

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

$sql = "SELECT p.* FROM `posts` p, posts_position pp where `p.post_status` = 'publish' AND p.ID>pp.position ORDER BY p.ID ASC LIMIT 1";  заменил и уже после этого должно было начать работать, но увы...

Неактивен

 

#12 20.04.2014 13:25:54

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

вставлять в код php - за пределами тематики форума

Неактивен

 

#13 20.04.2014 13:41:19

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

вставлять в код php - за пределами тематики форума

Ок, понимаю. Но факт в том что не работает предложенный вариант. Делал как Вы и говорили.

Неактивен

 

#14 20.04.2014 13:44:54

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

Выкладывайте код и текст ошибки, которая возникает.

Неактивен

 

#15 20.04.2014 14:12:23

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

Выкладывайте код и текст ошибки, которая возникает.


<?php
//Чтоб не пропустить нотисы и ошибки
error_reporting(E_ALL);

//Укажем кодировку страницы
header("Content-type: text/html; charset=utf-8");

//Необходимо указать данные для подключения к серверу БД,
//это можно сделать с помощью переменных (или констант), объявим 4 переменные

$host = "localhost"; //Сервер БД
$user = ""; //Имя пользователя, он по умолчанию "root"
$password = ""; //Пароль для пользователя, по умолчанию он пустой
$db = ""; // Имя БД, с которой мы будем работать

//Для подключения к серверу MySQL в php есть функция mysql_connect()
//Синтаксис этой функции прост: mysql_connect(сервер, имя пользователя, пароль пользователя);
//Создадим переменную $link, которая будет содержать идентификатор нашего подключения к серверу БД
$link = mysql_connect($host, $user, $password);

//Выставим кодировку
mysql_query ("SET NAMES utf8");

//Далее необходимо выбрать БД, с которой мы будем работать, но перед этим мы проверим, действительно мы подключились к серверу БД
if($link) //идентично if($link === true), т.е. подключение прошло
    $select_db = mysql_select_db($db);

//Чтобы дальше работать, необходимо проверить, выбрана ли наша БД
if(!$select_db) //Если БД  не выбрана
    echo "Ошибка выбора БД";
else //Если БД выбрана, продолжаем
{
    //Итак, в самом начале статьи мы создали таблицу в нашей базе с помощью SQL - запроса
    //Так и здесь, работая с БД мы всегда будем использовать SQL-запросы
    //Для выбора данных из БД используется команда "SELECT" - выбрать
    //Далее идёт * - она говорит, что выбирать мы будем "Всё", т.е. все столбцы (можно и указать отдельный столбец, например `name`, но об этом ещё рано)
    //FROM `mytable` - далее мы указываем таблицу, данные которой мы будем выбирать.
    //Обратите внимание, что имена столбцов и таблиц - мы обрамляем обратными апострофами `` (Ё - анг. раскладке)
    $sql = "SELECT p.* FROM `posts` p, posts_position pp where `p.post_status` = 'publish' AND p.ID>pp.position ORDER BY p.ID ASC LIMIT 1";

    //Далее необходимо отправить этот запрос серверу БД
    //Для этого есть штатная функция mysql_query(запрос, идентификатор подключения)
    //Но так как подключение у нас одно, значит "идентификатор подключения", мы можем опустить
    $query = mysql_query($sql);

    //В данном примере мы конечно знаем, что данные в БД есть, но на приктике - необходимо проверить наличие
    // этих данных, достаточно просто подсчитать кол-во строк в таблице
    if(!mysql_num_rows($query))
        echo "В таблице нет данных!";
    else
    {

   
        // Запрос отправлен, тепер нам необходимо получить выбранные данные которые вернул сервер
        // Для этого в php есть 2 функции: mysql_fetch_array() и mysql_fetch_assoc()
        // mysql_fetch_array() - - нам не подходит, т.к. в результате её работы возвращается два вида массива, один "простой" второй "ассоциативный",
        // в итоге мы получаем избыточные данные, что нам ни к чему."
        // mysql_fetch_assoc - вернёт нам только асициотивный массив
        // Нам нужны данные в виде асициот. массива (ключи таого массива будут содержать имена столбцов таблиц)
        // Исходя из этого, мы ест-но воспользуемся mysql_fetch_assoc(), зачем нам тратить ресурсы сервера на индексный массив
        // Тепер нам нужно сформировать массив, куда мы поместим данные которые вернул сервер после нашего запроса $query
        // Так как в нашей таблице несколько строчек, для этого используем цикл while(), и в цикле наполним массив
        while($row = mysql_fetch_assoc($query)) //Будем писать в массив данные, пока есть строчки в таблице
        {  
           
   
            //И вот на конец мы можем вывести все данные из БД
            echo 'id:' . $row['ID'] . '' . $row['guid'] . '<br />';

            //Раскомментируйте, чтобы посмотреть ввиде массива
            #echo '<pre>' . print_r($row, 1) . '</pre>';
        }
      }
   
   
}

//Закрыли соединение
mysql_close($link);
?>    
 



Ошибка:

Warning: Cannot modify header information - headers already sent by (output started at /home/p245505/public_html/click5.php:1) in /home/p245505/public_html/click5.php on line 6

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/p245505/public_html/click5.php on line 48
В таблице нет данных!
 

Отредактированно Donotlie (20.04.2014 14:12:54)

Неактивен

 

#16 20.04.2014 14:26:34

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

Замените

    $query = mysql_query($sql);

на
    $query = mysql_query($sql) or die(mysql_error());


В запросе замените `p.post_status` на p.`post_status`

Неактивен

 

#17 20.04.2014 17:56:27

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

Замените

    $query = mysql_query($sql);

на
    $query = mysql_query($sql) or die(mysql_error());


В запросе замените `p.post_status` на p.`post_status`

Спасибо, заработало. p. надо удалить. Только немного не понятно с

"UPDATE posts_position SET position=".$row['ID']


Мне это прописывать так?
$sql = "UPDATE posts_position SET position=".$row['ID']
 

Если так, то опять проблемы ((

Отредактированно Donotlie (20.04.2014 17:57:04)

Неактивен

 

#18 20.04.2014 18:02:19

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

Все проблемы в синтаксисе PHP/MySQL. Вам поможет книга Харриса PHP/MySQL для начинающих.

Неактивен

 

#19 20.04.2014 18:05:42

Donotlie
Участник
Зарегистрирован: 18.04.2014
Сообщений: 21

Re: Поочерёдный показ текста по списку из базы данных в строгом порядке

rgbeast написал:

Все проблемы в синтаксисе PHP/MySQL. Вам поможет книга Харриса PHP/MySQL для начинающих.

понятно - надоел)) Ладно, спасибо и на этом. Дальше уж как нибудь сам)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson