SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 08.01.2010 13:40:59

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

кнопки "вперёд назад"

Здравствуйте! Вопрос состоит в следующем. На странице есть текст загадки и кнопки "вперёд и назад". Нужно по нажатии кнопки вперёд заменить текст загадки следующей загадкой. Базу данных я создал называется Zagadki, там 3 поля (ID, Vopros, Otvet). Я думаю можно к ID прибавлять или отнимать 1, а вот куда вставить этот код не пойму. Помогите плиз.

Неактивен

 

#2 08.01.2010 16:43:49

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

Re: кнопки "вперёд назад"

Вот сам запрос, который переходит на следующую загадку.


<?php

session_start();
$id_zag = 0;
function buttons()
{
$zag = $zag + 1;
include ('mysql.php');

        // делаем запрос к БД
        // и ищем берём 1-ю загадку

        $query = "SELECT *
                    FROM `zagadki`
                    WHERE `id`=$zag
                    LIMIT 1"
;
        $sql = mysql_query($query) or die(mysql_error());

        // если есть
        if (mysql_num_rows($sql) == 1)
        {
            // то мы ставим об этом метку в сессии

            $row = mysql_fetch_assoc($sql);
            $id_zag = $row['id'];
            $zagadka = $row['vopros'];
            $otvet = $row['otvet'];

            print '<h3>Загадка ' . $id_zag . ' <br>  ' . $zagadka . ' <br> ' . $otvet . '</h3>';
        }
}
?>
 


А сама кнопка находится в другом файле. Выглядит так:
<a href="buttons_next.php"><img src="Imgs/vpered .png" width="119" height="58"
longdesc="buttons_next.php" /></a></td>

Естественно при переходе к этому файлу, там ничего нету. Подскажите, как правильно сделать.

Неактивен

 

#3 08.01.2010 18:33:33

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: кнопки "вперёд назад"

Вообще вопрос не совсем по MySQL, ну ладно.

Ссылку в href делать не на buttons_next.php, а на buttons.php?next и buttons.php?prev

В коде обрабатывать:


<?php
session_start();

// для начала нужно понять, начинал ли вообще пользователь отгадывать загадки или нет
// это можно сделать, проверив, установлен ли соотв. элемент массива $_COOKIE
$is_new = !isset($_COOKIE['id_zag']);

if ($is_new) {
    // если человек только что пришел - нужно показать ему первую имеющуюся загадку
    // id загадок могут начинаться не с единицы и идти не подряд - это надо предусмотреть
    $query = "SELECT id FROM zagadki ORDER BY id LIMIT 1";
    // ... получаем id загадки в переменную $id_zag_new (думаю, с этим сами справитесь)
} else {
    $id_zag = intval($_COOKIE['id_zag']);
    if (isset($_GET['next'])) { // нужна следующая загадка
        $query = "SELECT id FROM zagadki WHERE id > $id_zag LIMIT 1";
    }
    elseif (isset($_GET['prev'])) { $query = "SELECT id FROM zagadki WHERE id < $id_zag LIMIT 1"; }
    else { // тут случай, когда ни одна кнопка не нажата, а пользователь просто обновил страницу
        // в таком случае ему просто нужно показать ту же загадка
        // чтобы сохранить единообразность кода, сделаем это так:
        $query = "SELECT $id_zag";
    }
    // ... тут получаем результат запроса в переменную $id_zag_new
}
// теперь id загадки у нас есть
// важно - запишем его в сессию, чтобы пользоваться при следующем просмотре страницы
$_COOKIE['id_zag'] = $id_zag_new;

$query = "SELECT * FROM zagadki WHERE id = $id_zag_new";
// теперь вытаскиваем данные конкретной загадки, печатаем их и т.п.

?>


Обратите внимание, что в случае, если загадка первая, то кнопка "предыдущая загадка" должна быть неактивна (аналогично с последней загадкой и кнопкой "следующая загадка")

Неактивен

 

#4 08.01.2010 18:40:04

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

Re: кнопки "вперёд назад"

даже не расчитывал на такой развёрнутый ответ
огромное спасибо!

Неактивен

 

#5 08.01.2010 18:44:24

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: кнопки "вперёд назад"

Пожалуйста smile

Неактивен

 

#6 09.01.2010 15:15:34

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

Re: кнопки "вперёд назад"

Вот так написал:


<?php

session_start();
include ('mysql.php');
if (isset($_GET['next']))
             {
        // нужна следующая загадка
        $query = "SELECT * FROM `zagadki` WHERE `id` > '$_SESSION[id_zag]' LIMIT 1";
    }
$sql = mysql_query($query) or die(mysql_error());
    // если есть
    if (mysql_num_rows($sql) == 1)
    {
        $row = mysql_fetch_assoc($sql);
        $id_zag_new = $row['id'];
        $zagadka = $row['vopros'];
        $otvet = $row['otvet'];
        print '<h3>Загадка ' . $id_zag_new . ' <br>  ' . $zagadka . ' <br> ' . $otvet . '</h3>';
    }
?>
 

Если просто открываю файл в браузере (Денвером), показывает нужную запись, а если по нажатии кнопки

<a href="buttons_next?next.php"><img src="Imgs/vpered.png" width="119" height="58"  
longdesc="buttons_next?next.php" /></a>
 

Ошибку выдаёт, в Денвере пишет что такой файл не найден.
В чём проблема подскажите пожалуйста.

Неактивен

 

#7 09.01.2010 15:35:24

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: кнопки "вперёд назад"

Проблема в том, что у Вас указан относительный путь - buttons_next.php (кстати; файл лучше переименуйте в buttons.php, т.к. он у Вас должен обрабатывать обе кнопки, иначе путаница возникнет).
Вам надо продумать взаимное расположение ваших скриптов. Самый простой вариант - положить все в корневой каталог(и писать "/buttons.php" вместо "buttons.php"). Однако это может оказаться неудобным. В этом отношении серьезно помогает mod_rewrite, посмотрите нашу статью на эту тему:
http://webew.ru/articles/2291.webew

Кстати. Вопросы по PHP лучше задавать на webew.ru. Там мы все те же (даже нас немножко побольше), и портал как раз в т.ч. этому посвящен.

Неактивен

 

#8 10.01.2010 12:31:52

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

Re: кнопки "вперёд назад"

С этим разобрался, но сразу возникла ещё одна головоломка smile.
После нажатия на кнопку "вперёд", меня кидает на страницу
.../buttons_next.php?next, а там пусто. А мне надо остаться на странице .../zagadki.php, но с обновлённой загадкой. Я пробовал дописать в конце файла с запросом -

header('Location: zagadki.php');
exit;

выдал какую-то ошибку.

Ещё использовал такой вариант
<script type="text/javascript">
window.location = "zagadki.php"
</script>

Но мелькает пустая страница, можно этого избежать как-то?

Отредактированно Pegas (10.01.2010 12:41:00)

Неактивен

 

#9 10.01.2010 16:30:20

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

Re: кнопки "вперёд назад"

Всё таки не получается перейти на следующую загадку, объединил 2 файла получилось:


<?php

session_start();
include ('mysql.php');

function Draw_zagadka()
{

        // делаем запрос к БД
        // и ищем загадку

        $query = "SELECT *
                    FROM `zagadki`
                    WHERE `id` > '$id_zag'
                    ORDER BY `id`
                    LIMIT 1"
;

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

        // если есть
        if (mysql_num_rows($sql) == 1)
        {
            // то мы ставим об этом метку в сессии

            $row = mysql_fetch_assoc($sql);
            $id_zag = $row['id'];
            $zagadka = $row['vopros'];
            $otvet = $row['otvet'];

            $_SESSION[$id_zag] = $id_zag;

            print '<h3>Загадка ' . $id_zag . ' <br>  ' . $zagadka . ' <br> ' . $otvet . '</h3>';

        echo 'id выводимой загадки - ' . $id_zag . '. Её и будем выводить';
    }
}

if (isset($_GET['next']))
{
    $id_zag_new = $_SESSION[$id_zag];
    print '<h3>Загадка ' . $id_zag_new . ' <br></h3>';
    // нужна следующая загадка
    $query = "SELECT *
                FROM `zagadki`    
                WHERE `id` > '$id_zag'
                ORDER BY `id`
                LIMIT 1"
;
    $sql = mysql_query($query) or die(mysql_error());
    // если есть
    if (mysql_num_rows($sql) == 1)
    {
        $row = mysql_fetch_assoc($sql);
        $id_zag = $row['id'];
        $zagadka = $row['vopros'];
        $otvet = $row['otvet'];                        
        print '<h3>Загадка ' . $id_zag . ' <br>  ' . $zagadka . ' <br> ' . $otvet . '</h3>';
    }
    Draw_zagadka();
/*        ?>
        <script type="text/javascript">
        window.location = "zagadki.php"
        </script>
        <?
*/

}

?>
 


Проблема состоит в том, что переменная $id_zag не сохраняет значение за пределами функции Draw_zagadka(). Не понимаю почему, я ведь её в сеансе сохранил.
А при входе в GET я принтом сразу проверил её и там пусто. Чё за проблема не пойму, подскажите плиз.

Неактивен

 

#10 11.01.2010 03:12:14

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: кнопки "вперёд назад"

Так. Что-то обсуждение раздвоилось.
Давайте дальнейшее обсуждать здесь - http://webew.ru/posts/2680.webew
Перепостите последний вопрос там, а то я не пойму, в каком состоянии сейчас у Вас всё находится.

Неактивен

 

#11 11.01.2010 19:21:49

Pegas
Участник
Зарегистрирован: 08.01.2010
Сообщений: 7

Re: кнопки "вперёд назад"

На том форуме никто не отвечает, поэтому продолжаю писать тут.
Взял всё в один файл запихнул, вроде получше стало, однако загадка не заеняет предидущую, а пишется ниже. Вот отрывок кода:

  <table width="100%" height="332" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td width="20%" height="332" align="center" valign="top"><img src="Imgs/ukazatel.png" alt="ukaz" width="191" height="328" border="0" usemap="#MapMapMap" />
            <map name="MapMapMap" id="MapMapMap">
              <area shape="poly" coords="8,273,36,239,42,249,147,213,157,248,49,273,52,288" href="poslovici.php" />
              <area shape="poly" coords="24,162,136,162,136,148,173,173,139,198,137,187,24,197" href="games.php" />
              <area shape="poly" coords="40,127,12,98,52,80,49,88,162,108,153,139,45,115" href="skazki.php" />
              <area shape="poly" coords="22,40,133,24,133,12,171,26,143,58,138,48,27,73" href="zagadki.php" />
              <area shape="poly" coords="21,39,21,38" href="#" />
            </map></td>
          <td width="80%" align="center" valign="top"><p class="стиль2">Загадки</p>
            <table width="85%" height="268" border="0" cellpadding="0" cellspacing="0">
              <tr>
                <td height="164" colspan="2"><p align="center" class="стиль2">
                 
                <? 
                print '<h3> Флаг = '.$flag.'</h3><br>';
                if ($flag == 0)
                {
                    if (isset($_GET['next']))
                    {     
                    print '<h3> Флаг 1 = '.$flag.'</h3><br>';

                    $query = "SELECT * 
                    FROM `zagadki`     
                    WHERE `id` > '$id_zag_new'
                    ORDER BY `id`
                    LIMIT 1";
                    $sql = mysql_query($query) or die(mysql_error());
                    // если есть
                    if (mysql_num_rows($sql) == 1)
                    {
                        $row = mysql_fetch_assoc($sql);
                        $id_zag = $row['id'];
                        $zagadka = $row['vopros'];
                        $otvet = $row['otvet'];                         
                        echo '<h3>Загадка ' . $id_zag . ' <br>  ' . $zagadka . ' <br> ' . $otvet . '</h3>';
                    }
                    //Draw_zagadka();
                     
                    $id_zag_new = $id_zag;
                    }
                }
                else
                {
                    print '<h3> Флаг 2 = '.$flag.'</h3><br>';

                    include ("zagadki_zapros.php");
                    Draw_zagadka();
                    $flag = 0;
                }
                ?>
                </p></td>
              </tr>
              <tr>
                <td colspan="2" valign="middle" class="стиль2"><div align="center">Ответ 
                  <input name="otvet" type="text" id="otvet" maxlength="20" /> 
                  <input type="submit" name="proverka" id="proverka" value="Проверить" />
                </div></td>
              </tr>
              <tr>                 
                <td width="51%" align="right" valign="middle" class="стиль2">
            <?    print '<a href="zagadki.php?prev"><img src="Imgs/nazad.png" width="119" height="58" 
                longdesc="zagadki.php?prev" /></a>'?>
                </td>
                <td width="49%" align="left" valign="middle" class="стиль2">
            <?    print '<a href="zagadki.php?next"><img src="Imgs/vpered.png" width="119" height="58" 
                longdesc="zagadki.php?next" /></a>'?>
                </td>
              </tr>
            </table>
            <p class="стиль2">&nbsp;</p>
          </tr>
      </table>

Неактивен

 

#12 11.01.2010 19:26:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: кнопки "вперёд назад"

Закрываю тему, чтобы не было желания отвечать тут tongue

Неактивен

 

Board footer

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