За последние 24 часа нас посетили 17559 программистов и 1731 робот. Сейчас ищут 994 программиста ...

Ошибка в запросе

Тема в разделе "PHP и базы данных", создана пользователем igolka, 15 ноя 2011.

  1. igolka

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

    С нами с:
    13 ноя 2011
    Сообщения:
    7
    Симпатии:
    0
    Помогите пожалуйста разобраться! При запросе

    $result2 = mysql_query ("SELECT * FROM comments ORDER BY id ORDER BY id LIMIT $start, $num",$db)

    выскакивает ошибка

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id LIMIT 0, 5' at line 1

    Скрипт постраничного вывода вот:

    $result77 = mysql_query("SELECT str FROM nav_gb", $db);
    $myrow77 = mysql_fetch_array($result77);
    $num = $myrow77["str"];
    // Извлекаем из URL текущую страницу
    @$page = $_GET['page'];
    // Определяем общее число сообщений в базе данных
    $result00 = mysql_query("SELECT COUNT(*) FROM comments");
    $temp = mysql_fetch_array($result00);
    $posts = $temp[0];
    // Находим общее число страниц
    $total = (($posts - 1) / $num) + 1;
    $total = intval($total);
    // Определяем начало сообщений для текущей страницы
    $page = intval($page);
    // Если значение $page меньше единицы или отрицательно
    // переходим на первую страницу
    // А если слишком большое, то переходим на последнюю
    if(empty($page) or $page < 0) $page = 1;
    if($page > $total) $page = $total;
    // Вычисляем начиная с какого номера
    // следует выводить сообщения
    $start = $page * $num - $num;
    // Выбираем $num сообщений начиная с номера $start
     
  2. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    а че 2 раза ORDER BY id ORDER BY id ?
     
  3. igolka

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

    С нами с:
    13 ноя 2011
    Сообщения:
    7
    Симпатии:
    0
    Ага) да, только что заметила, но суть не меняется) . Вот полностью скрипт

    <?php

    $result77 = mysql_query("SELECT str FROM nav_news", $db);
    $myrow77 = mysql_fetch_array($result77);
    $num = $myrow77["str"];
    // Извлекаем из URL текущую страницу
    @$page = $_GET['page'];
    // Определяем общее число сообщений в базе данных
    $result00 = mysql_query("SELECT COUNT(*) FROM news");
    $temp = mysql_fetch_array($result00);
    $posts = $temp[0];
    // Находим общее число страниц
    $total = (($posts - 1) / $num) + 1;
    $total = intval($total);
    // Определяем начало сообщений для текущей страницы
    $page = intval($page);
    // Если значение $page меньше единицы или отрицательно
    // переходим на первую страницу
    // А если слишком большое, то переходим на последнюю
    if(empty($page) or $page < 0) $page = 1;
    if($page > $total) $page = $total;
    // Вычисляем начиная с какого номера
    // следует выводить сообщения
    $start = $page * $num - $num;
    // Выбираем $num сообщений начиная с номера $start

    function print_news($news) {
    $id=-1;
    if (isset($_REQUEST["id"])&&$_REQUEST["id"]<>"") { /* Проверяем, установлен ли ID новости в запросе */
    $id=$_REQUEST["id"]; /* Если установлен, присваиваем. Внимание! Опасное мест. Здесь нужно сделать проверку входных значений!!!!!! */
    }
    foreach ($news as $i=>$new) {
    if ($i<>$id) {
    ?>
    <div class="date"><a name="n<?php print $i;?>"><?php print $new["data"];?></a></div>
    <div id="title_na"><a href="news.php?id=<?php print $i;?>#n<?php print $i;?>"><?php print $new["title"];?></a></div>
    <div class="textNews"><?php print $new["anounce"];?></div>
    <?php
    } else {
    ?>
    <div class="date"><a name="n<?php print $i;?>"><?php print $news[$id]["data"];?></a></div>
    <div id="title_n"><?php print $news[$id]["title"];?></div>
    <div class="textNews"><?php print $news[$id]["text"];?></div>
    <?php
    }
    }
    }


    /* Получаем новости из базы данных */

    function fetch_news($db) {
    $DB_news="news";
    $query="select id, title, anounce, text, data from ".$DB_news." ORDER BY id desc LIMIT $start, $num"; /* формируем SQL-запрос */
    $res=mysql_query($query,$db);
    if (!$res) {
    print "Query error \"".$query."\" - ".mysql_error($db);
    mysql_close($db);
    die();
    }
    $news=array(); /* Помещаем выводимые новости в двойной ассоциативный массив */
    while ($new=mysql_fetch_array($res)) {
    $news[$new["id"]]=array("title"=>$new["title"],
    "anounce"=>$new["anounce"],
    "text"=>$new["text"],
    "data"=>$new["data"]);
    }
    return $news;
    }

    $news=array(); /* Инициализация массива */
    $news=fetch_news($db); /* Получение новостей из базы */

    ?>
    <?php
    print_news($news); /* Собственно, вывод новостей */
    ?>



    Ошибка:

    Query error "select id, title, anounce, text, data from news ORDER BY id desc LIMIT , " - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
     
  4. krow7

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

    С нами с:
    12 авг 2009
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    из Азии
    LIMIT не указали сколько
     
  5. localhost

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

    С нами с:
    12 ноя 2011
    Сообщения:
    16
    Симпатии:
    0
    1.
    Код (Text):
    1.  echo $query;
    2.
    Код (Text):
    1.  echo mysql_error();
    И вывод пости сюда. После уже можно будет что-то сказать....
     
  6. igolka

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

    С нами с:
    13 ноя 2011
    Сообщения:
    7
    Симпатии:
    0
    LIMIT $start, $num
    Лимит указан, а можно пожалуйста поподробнее, куда вывод постить?) просто я с php пока еще на ВЫ, вторую неделю изучаю. Заранее спасибо. Я так понимаю, что дело тут в алгоритме вывода новостей, без постраничного вывода все прекрасно работает, а кот когда начинаю добавлять скрипт постраничного разбиения, почему то косяк возникает. ЗЫ: Этот скрипт прекрасно работает на другой странице (Гостевая Книга), где просто идет вывод всех постов...
     
  7. igolka

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

    С нами с:
    13 ноя 2011
    Сообщения:
    7
    Симпатии:
    0
    И еще такой вопрос. В гостевой книге. Как сделать, чтобы при добавлении комментария, перенаправлялось на последнюю страницу?

    URL=gb.php?page=.$total

    почему то не работает(((((
     
  8. igolka

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

    С нами с:
    13 ноя 2011
    Сообщения:
    7
    Симпатии:
    0
    И желательно еще в конец страницы, а не в начало)

    <?php
    session_start();

    include ("db.php");

    if (isset($_POST['author']))
    {
    $author = $_POST['author'];
    }


    if (isset($_POST['text']))
    {
    $text = $_POST['text'];
    }


    if( isset($_POST['submit']))
    {
    if (isset($author)) {trim ($author);}
    else {$author="";}

    if (isset($text)) {trim ($text);}
    else {$text="";}

    if (empty($author) or empty($text))
    {exit ("<p class='post_text'>Заполнены не все поля. Вернитесь назад.<br>
    <input name='back' type='button' value='Назад' onclick = 'javascript:self.back();'></p>");}

    $author=stripslashes($author);
    $text=stripslashes($text);
    $author=stripslashes($author);
    $text=stripslashes($text);

    if ( $_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'] ) ) {
    $date = date ("Y-m-d");
    $result = mysql_query ("INSERT INTO comments (author, text, date) VALUES ('$author', '$text', '$date')",$db);
    $adress = "bclazertag@gmail.com";
    $subject = "Новый комментарий в гостевой";
    $message = "Сообщение от:".$author."\n Текст сообщения:".$text."";
    mail($adress,$subject,$message, "Content-type:text/plain; Charset:UTF-8 \r\n;");

    echo "<html><head>
    <meta http-equiv='Refresh' content='0; URL=gb.php?page=.$total>
    </head></html>";
    exit();
    }
    else
    {
    {exit ("<p class='post_text'>Вы ввели неверный код. Вернитесь назад.<br>
    <input name='back' type='button' value='Назад' onclick = 'javascript:self.back();'></p>");}
    }

    }
    else
    {
    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Гостевая книга клуба Battle Call</title>
    <link href="css/style.css" type="text/css" rel="stylesheet">
    </head>

    <body>
    <div id="wrapper">
    <div id="header"></div>
    <div id="nav_g">
    <ul>
    <li><a href="index.php"><span>Главная</span></a></li>
    <li><a href="arsenal.php"><span>Арсенал</span></a></li>
    <li><a href="places.php"><span>Полигоны</span></a></li>
    <li><a href="script.php"><span>Сценарии</span></a></li>
    <li><a href="price.php"><span>Услуги и цены</span></a></li>
    </ul>
    </div>
    <div id="left">
    <div id="nav_v">
    <ul>
    <li><a href="foto.php"><span>Фото</span></a></li>
    <li><a href="video.php"><span>Видео</span></a></li>
    <li><a href="gb.php"><span>Гостевая книга</span></a></li>
    <li><a href="contact.php"><span>Контакты</span></a></li>
    </ul>
    </div>
    <?php include ("blocks/news_b.php");?>
    <div id="pogoda"><a href="http://clck.yandex.ru/redir/dtype=stred/pid=7/cid=1228/*http://pogoda.yandex.ru/obninsk"><img src="http://info.weather.yandex.net/obninsk/2.png" border="0" alt="Яндекс.Погода"/><img width="1" height="1" src="http://clck.yandex.ru/click/dtype=stred/pid=7/cid=1227/*http://img.yandex.ru/i/pix.gif" alt="" border="0"/></a></div>
    </div>
    <div id="content">
    <div id="wrapper_gb">
    <h3>Добро пожаловать в гостевую книгу клуба Battle Call</h3>
    <p>Здесь Вы можете оставлять свои отзывы о клубе, делиться впечатлениями об играх, обсуждать вопросы, связанные с лазертагом, а также оставлять свои пожелания и предложения.</p>
    <?php
    echo "<p class='post_title'>Сообщения:</p>";

    $result77 = mysql_query("SELECT str FROM nav_gb", $db);
    $myrow77 = mysql_fetch_array($result77);
    $num = $myrow77["str"];
    // Извлекаем из URL текущую страницу
    @$page = $_GET['page'];
    // Определяем общее число сообщений в базе данных
    $result00 = mysql_query("SELECT COUNT(*) FROM comments");
    $temp = mysql_fetch_array($result00);
    $posts = $temp[0];
    // Находим общее число страниц
    $total = (($posts - 1) / $num) + 1;
    $total = intval($total);
    // Определяем начало сообщений для текущей страницы
    $page = intval($page);
    // Если значение $page меньше единицы или отрицательно
    // переходим на первую страницу
    // А если слишком большое, то переходим на последнюю
    if(empty($page) or $page < 0) $page = 1;
    if($page > $total) $page = $total;
    // Вычисляем начиная с какого номера
    // следует выводить сообщения
    $start = $page * $num - $num;
    // Выбираем $num сообщений начиная с номера $start

    $result2 = mysql_query ("SELECT * FROM comments ORDER BY id LIMIT $start, $num",$db) or die(mysql_error());
    if (mysql_num_rows($result2) > 0)
    {
    $myrow2 = mysql_fetch_array($result2);
    do
    {
    printf ("<div class='border'><div class='post_user'>Сообщение добавил(а): <strong>%s</strong> <br> Дата: <strong>%s</strong> </div>
    <p class='post_text'>%s</p></div>", $myrow2["author"],$myrow2["date"],$myrow2["text"]);

    }
    while ($myrow2 = mysql_fetch_array($result2));



    // Находим две ближайшие станицы с обоих краев, если они есть
    if($page - 5 > 0) $page5left = ' <a href=gb.php?&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
    if($page - 4 > 0) $page4left = ' <a href=gb.php?&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
    if($page - 3 > 0) $page3left = ' <a href=gb.php?&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
    if($page - 2 > 0) $page2left = ' <a href=gb.php?&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
    if($page - 1 > 0) $page1left = '<a href=gb.php?&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';

    if($page + 5 <= $total) $page5right = ' | <a href=gb.php?&page='. ($page + 5) .'>'. ($page + 5) .'</a>';
    if($page + 4 <= $total) $page4right = ' | <a href=gb.php?&page='. ($page + 4) .'>'. ($page + 4) .'</a>';
    if($page + 3 <= $total) $page3right = ' | <a href=gb.php?&page='. ($page + 3) .'>'. ($page + 3) .'</a>';
    if($page + 2 <= $total) $page2right = ' | <a href=gb.php?&page='. ($page + 2) .'>'. ($page + 2) .'</a>';
    if($page + 1 <= $total) $page1right = ' | <a href=gb.php?&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

    // Вывод меню если страниц больше одной

    if ($total > 1)
    {
    Error_Reporting(E_ALL & ~E_NOTICE);
    echo "<div class=\"pstrnav\">";
    echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
    echo "</div>";
    }

    }

    ?>

    <p class='post_title'>Добавить Ваше сообщение:</p>
    <form action="gb.php" method="post" name="form_com">
    <p class='post_text'><label>Ваше имя: </label><input name="author" type="text" size="41" maxlength="30"></p>
    <p class='post_text'><label>Текст сообщения: <br><textarea name="text" cols="41" rows="4"></textarea></label></p>
    <p class='post_text'><img src="CaptchaSecurityImages.php?width=100&height=40&characters=5" /></p>
    <p class='post_text'><label for="security_code">Введите код с картинки: </label><input id="security_code" name="security_code" type="text" /></p>
    <p class='post_text'><input name="submit" type="submit" value="Добавить"></p>

    </form>

    </div>
    </div>
    <div class="clear"></div>
    <div id="footer">копирайт</div>
    </div>
    </body>
    </html>

    <?php
    }
    ?>