Вопрос Помогите найти ошибку в коде php

Тема в разделе "Веб-разработка", создана пользователем melihovgv, 4 авг 2012.

Статус темы:
Закрыта.
  1. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    --------Код php------------
    PHP:
    <?
    function 
    ShowTree($ParentID$lvl) {
        
        global 
    $link;
        
    //global $lvl;
        
        
    $lvl++;        
        
        
    $sSQL "SELECT * FROM content WHERE parent = " $ParentID " ORDER BY namemenu";
        
        
    $result mysql_query($sSQL$link);

        if (
    mysql_num_rows($result) > 0) {
        
            echo(
    "<UL>\n");
        while ( 
    $row mysql_fetch_array($result) ) {
            
            
    $ID1 $row["id"];
            
    $chpu $row["chpu"];

            echo(
    "<li>");
            
            
            
            echo
    "<a href=\"".$chpu.".html\">" $row["namemenu"] . "</a>" ;
            
            
            
            
            echo(
    "</li>\n");
            
    ShowTree($ID1$lvl); 
            
    $lvl--;
            
        }
            echo(
    "</UL>\n");
        }
        
        }

    ShowTree(00);

    $ID1 = (isset($_GET['id']))?(int)$_GET['id']:1;
    $sql2 "SELECT * FROM `content` WHERE `id`=$ID1 LIMIT 1";//выбираем запись с id=переданный_параметр
    $res2 mysql_query($sql2) or die(mysql_error());

    $row mysql_fetch_array($res2);



    mysql_close($link);

    echo 
    "<b>TITLE</b><br>";
    echo 
    $row['title']."<br>";
    echo 
    "<b>h1zagolovok<br></b>";
    echo 
    $row['h1zagolovok']."<br>";
    echo 
    "<b>Контент</b><br>";
    echo 
    $row['contents']."<br>";

    ?>
    -----htaccess---------------
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    --------------------------------

    Код php формирует меню будущего сайта.
    Меню отрисовывается нормально, проблема в следующем при выводе контента,титлов и т.д. почему-то выводится только первая страница, т.е. при переходе по меню выводится только первая страница.
  2. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    melihovgv, т.е. выводится информация, у которой id=1 в базе?
  3. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    да, именно)

    ---------- Сообщение добавлено в 22:10 ---------- Предыдущее сообщение размещено в 21:52 ----------

    Для того, чтобы формировались чпу я убрал из строки кода get параметр и id. И получается, меню формируется, норм, а когда идет переход не осуществляется гет запрос. Как можно решить это?
  4. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    А как выглядит урл, когда вы переходите на другую страницу?
    В этой части кода ищется id и присваивается числовое значение, но у вас видно там не число, если оно все время единицу присваивает.

    ---------- Сообщение добавлено в 20:38 ---------- Предыдущее сообщение размещено в 20:23 ----------

    Замените это:
    PHP:
    echo"<a href=\"".$chpu.".html\">" $row["namemenu"] . "</a>" ;
    На это для второй страницы:
    PHP:
    echo"<a href=\"".$chpu.".php?id=2\">" $row["namemenu"] . "</a>" ;
  5. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    http://test.ru/index.html перехожу http://test.ru/service.html

    ---------- Сообщение добавлено в 22:42 ---------- Предыдущее сообщение размещено в 22:40 ----------

    Если вот так http://test.ru/service.php?id=3 то работает но не со всем, то что нужно.

    ---------- Сообщение добавлено в 22:43 ---------- Предыдущее сообщение размещено в 22:42 ----------

    $ID1*=*(isset($_GET['id']))?(int)$_GET['id']:1;

    Если бы сюда загнать chpu и чтобы на основе ее выводилось инфа.

    ---------- Сообщение добавлено в 22:48 ---------- Предыдущее сообщение размещено в 22:43 ----------

    Но если делаю вот так
    $chpu = (isset($_GET['chpu']))?(string)$_GET['chpu']:1;
    $sql2 = "SELECT * FROM content WHERE `chpu`=$chpu LIMIT 1";//LIMIT 1выбираем запись с id=переданный_параметр

    $res = mysql_query($sql2);

    $row = mysql_fetch_array($res);

    Контент вообще не выводится.
  6. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    Так можно теоретически, но просто с так как сейчас проще. Да и вы можете избежать вообще GET запроса, если каждой странице присвоите id.
    Например для первой:
    PHP:
    $ID1 1;
    $sql2 "SELECT * FROM `content` WHERE `id`=$ID1 LIMIT 1";//выбираем запись с id=переданный_параметр
    $res2 mysql_query($sql2) or die(mysql_error());
    Например для второй:
    PHP:
    $ID1 2;
    $sql2 "SELECT * FROM `content` WHERE `id`=$ID1 LIMIT 1";//выбираем запись с id=переданный_параметр
    $res2 mysql_query($sql2) or die(mysql_error());
    и тд.

    ---------- Сообщение добавлено в 20:57 ---------- Предыдущее сообщение размещено в 20:51 ----------

    Дак GET-запрос это не урл, а то что после ?. Например, site.ru?home=d, и гет запрос это ?home=d. Я вообщем не учитель я хз как объяснить :)
  7. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    PHP:
    $ID1 1;
            
    $sql2 "SELECT * FROM content WHERE `id`=$ID1 LIMIT 1";
            
    $res mysql_query($sql2);
            
    $row mysql_fetch_array($res);
     
            
    $ID1 2;
            
    $sql2 "SELECT * FROM `content` WHERE `id`=$ID1 LIMIT 1";
            
    $res2 mysql_query($sql2); 
            
    $res mysql_query($sql2);
            
    $row mysql_fetch_array($res);
    Если делаю вот так, выводится последняя запись.

    ---------- Сообщение добавлено в 23:00 ---------- Предыдущее сообщение размещено в 22:59 ----------

    т.е. вторая запись, первая не выводится.
  8. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    Да тут немного ошибся, если на странице должно выводится больше 1 записи, то лучше в базу добавить ещё один столбец, в котором будет указано к какой странице относится информация, а уже потом переменной ID! присваивать знамение столбца на определенной странице.

    Хотя такая же проблема будет и с GET вариантом.
  9. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Можешь на примере показать, как это реализовать. Я уже месяц бьюсь над чпу и выводом)Сама структура, практически готова)
  10. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    Тут все зависит от того, как у вас там все устроено. Вы хотите все текста поместить в одну таблицу и выводить их на разных страницах?
  11. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Да, все тексты содержатся в одной таблице, выводятся на разных страницах.
  12. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    Тогда просто в таблице 'content' создайте ещё оно поле с именем 'cat', в котором будут записаны id станиц, где должен выводится этот тектс. И замените пару строк:
    PHP:
    $ID1 1;
    $sql2 "SELECT * FROM `content` WHERE `cat`=$ID1 LIMIT 1";//выбираем запись с id=переданный_параметр
    $res2 mysql_query($sql2) or die(mysql_error());
    Тогда на странице с id 1 будут выводится статьи, у которых в базе поле 'cat' равно 1
    Если на странице будет больше 1 статьи, то нужно поместить это в цикл:
    PHP:
    $ID1 1;
    $sql2 "SELECT * FROM `content` WHERE `cat`=$ID1 LIMIT 1";//выбираем запись с id=переданный_параметр
    $res2 mysql_query($sql2) or die(mysql_error());
    $res2 mysql_query($sql2) or die(mysql_error());

    while(
    $row mysql_fetch_array($res2)) {



    mysql_close($link);

    echo 
    "<b>TITLE</b><br>";
    echo 
    $row['title']."<br>";
    echo 
    "<b>h1zagolovok<br></b>";
    echo 
    $row['h1zagolovok']."<br>";
    echo 
    "<b>Контент</b><br>";
    echo 
    $row['contents']."<br>";
    }
    Тогда покажет все статьи у которых 'cat' равно 1 на странице с ID1 = 1

    Для лучше доступа к базе можно использовать MySql или если это CMS, то там тоже наверно как-то можно.
  13. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Ну это собственная cms. Простая и полностью заточена под seo. Я так понимаю, нужно установить связь cat и id в mysql?Но у меня не только текст должен выводится, а еще титлы, заголовок и т.д.
  14. Ami

    Ami Модератор На форуме с: 28 ноя 2011 Сообщения: 259 Команда форума

    Ну эти данные у вас же все в одной таблице? Просто ещё один столбец добавить, чтобы знать для какой страницы предназначена статья, заголовок и т.д.
  15. melihovgv

    melihovgv На форуме с: 25 июл 2011 Сообщения: 1.507

    Не со всем понимаю,
    Вот моя структура БД
    CREATE TABLE IF NOT EXISTS `content` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `parent` int(11) NOT NULL,
    `cat` int(11) NOT NULL,
    `chpu` varchar(255) NOT NULL,
    `namemenu` varchar(255) NOT NULL,
    `title` varchar(255) NOT NULL,
    `h1zagolovok` varchar(255) NOT NULL,
    `contents` text NOT NULL,
    `description` varchar(255) NOT NULL,
    `keywords` varchar(255) NOT NULL,
    `date` date NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `id` (`id`),
    KEY `id_2` (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=86 ;
Статус темы:
Закрыта.