За последние 24 часа нас посетил 49931 программист и 1730 роботов. Сейчас ищет 651 программист ...

как изменить запрос

Тема в разделе "PHP и базы данных", создана пользователем iracwet, 29 июл 2014.

  1. iracwet

    iracwet Новичок

    С нами с:
    21 янв 2014
    Сообщения:
    24
    Симпатии:
    0
    как изменить запрос и вывод из бд не по id а по alias
    в этих файлах осуществляется выбор из бд по категориям и вывод статей в соответствующих категориях
    Код (Text):
    1. <?php
    2. header("Content-Type:text/html;charset=UTF-8");
    3. session_start();
    4. include "config.php";
    5. include "functions.php";
    6. db(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
    7. //получаем название категории
    8. $category_id = (int)$_GET['category_id'];
    9. $res_category = mysql_query("SELECT `name`,`keywords`,`description` FROM `category` WHERE `category_id`= '$category_id'") or die( mysql_error() );
    10. $row_category = mysql_fetch_assoc($res_category);
    11. //выбираем статьи
    12. $res_staty = mysql_query("SELECT `staty_id`,`title`,`alias`,`short_text`,`avatar` FROM `staty` WHERE `category`='$category_id' AND `visible`='1'");
    13. ?><div id="content3">  
    14.  
    15.  <?php  
    16. if(mysql_num_rows($res_staty) > 0){
    17.     while($row_staty = mysql_fetch_assoc($res_staty)){
    18.         echo '<div class = "staty">'."\r\n";
    19.         echo '<h1><a href="'.SITE_URL.'staty/'.$row_staty['staty_id'].'">'.$row_staty['title'].'</a></h1>'."\r\n";
    20.         echo $row_staty['short_text'];
    21.         echo '<a href="'.SITE_URL.'staty/'.$row_staty['staty_id'].'">'."подробнее...".'</a>'."\r\n";
    22.         echo '</div>'."\r\n";  
    23.  
    24. }
    25. }else echo "<script>alert(\"Здесь статей нет\");</script>";
    26. ?>           
    27.         </div>
    а на этой странице уже должна выводится сама статья
    Код (Text):
    1. <?php
    2. header("Content-Type:text/html;charset=UTF-8");
    3. session_start();
    4. include "config.php";
    5. include "functions.php";
    6.  
    7. db(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
    8.  
    9. $staty_id = (int)$_GET['staty_id'];
    10. $res_staty = mysql_query("SELECT `title`,`keywords`,`description`,`content` FROM `staty` WHERE `staty_id` = ".$staty_id." LIMIT 1") or die( mysql_error() );
    11.  
    12. $row_staty = mysql_fetch_assoc($res_staty);
    13.  
    14.  
    15. ?><div id="contents">
    16.  
    17. <?php
    18. if(mysql_num_rows($res_staty) > 0){
    19.     $views = $row_staty['views'] + 1;
    20.     $res = mysql_query("UPDATE `staty` SET `views`='{$views}' WHERE `staty_id`='{$staty_id}'");
    21.     echo "<span class='view_staty'><h1>{$row_staty['title']}</h1></span>";
    22.     echo $row_staty['content'];
    23.  
    24.    
    25. }else echo "<script>alert(\'Такой статьи нет!\");</script>";
    26.  
    27. ?> 
    28.    
    29. </div> <!-- #content -->
    . Всё работает, а вопрос такой, в бд в таблице статьи добавлен столбец alias( с помощью транслита записаны все названия статей) в файле .htaccess внесены соответствующие записи, в результате в строке браузера выводится http://localhost/mysite.ru/staty/dogovor-nayma-arendy, а как теперь изменить запрос к бд, чтобы выводилось не по id, а по alias.
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    какие записи?

    в sql-запросе заменить
    Код (Text):
    1. WHERE `staty_id` = ".$staty_id."
    на
    Код (Text):
    1. WHERE `alias` = '{$alias}'
    (обрати внимание на добавившиеся одинарные кавычки!)
    а вот как вычислить $alias — зависит от правил в .htaccess
     
  3. iracwet

    iracwet Новичок

    С нами с:
    21 янв 2014
    Сообщения:
    24
    Симпатии:
    0
    RewriteEngine On
    RewriteRule ^category/(\d+) /mysyte.ru/articles.php?category_id=$1
    RewriteRule ^staty/([a-z0-9-]+)/?$ view_article.php?staty_id=$1

    Добавлено спустя 2 минуты 1 секунду:
    Это правила в .htaccess
    и как вычислить теперь $alias
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Ок, последний RewriteRule помещает строку с алиасом в get-параметр staty_id. я хотел это имя увидеть. не очень мудро использовать старое имя переменной для новых целей, ну да ладно.

    в скрипте надо сделать то, что я тебе уже показал + перед этим заменить
    Код (PHP):
    1. $staty_id = (int)$_GET['staty_id'];
    на
    Код (PHP):
    1. $alias = mysql_real_escape_string($_GET['staty_id']);