За последние 24 часа нас посетили 54100 программистов и 1779 роботов. Сейчас ищут 979 программистов ...

не могу найти функцию... или может я не прав...

Тема в разделе "Прочие вопросы по PHP", создана пользователем vittt, 23 авг 2007.

  1. vittt

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

    С нами с:
    23 авг 2007
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Irkutsk
    может кто подскажет...
    Вобщем примерно идея такова:
    есть БД, таблица. в таблице хранятся статьи (id,theme,stheme,avtor,date,content,link). В поле link находится одно слово (типа укороченой темы), а в поле stheme - тема, но 1-2 словами для вывода на меню. Теперь, собствено задумка: в одной ячейке html-таблицы генерится меню-навигация по темам, которые берутся из БД:

    PHP:
    1.  $query=mysql_query("SELECT * FROM `content`;");
    2.  while($row=mysql_fetch_array($query))
    3.  {
    4.  $link=$row['link'];
    5.  echo "<a href='?page=".$link."'>".$row['stheme']."</a>
    6. ";
    7.  }


    ниже есть блок "switch-case",который в зависимости от значения $_GET[page] выдает в другой ячейке таблицы содержимое страницы "content.php". Та, в свою очередь, выводит сперва тему (поля theme) и ниже саму статью (поля content) из БД, в зависимости от того, какое сейчас значение имеет $link. То есть тема и статья должны быть с той же строки, что и $link. Но вот проблема - $link всегда у меня принимает значение последней строки в таблице, а как сделать, чтоб оно не было фиксированым?
    (надеюсь все поняли, а то самому сложно объяснить :( )
     
  2. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    у тебя блок switch-case идет после цикла, соответственно, после окончания цикла переменная $link навсегда остается равной последнему присвоенному ей в цикле значению.

    проверяй и приравнивай $link то, что в $_GET[page], если она пуста - то значение по умолчанию
     
  3. Angerslave

    Angerslave Guest

    Хм, тебе нужно брать из базы запись, у которой link совпадает с $_GET['page']. Как запрос составить разберёшься? Посмотри ман по мускулу, раздел по синтаксису SELECT, тебе нужно WHERE.
     
  4. vittt

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

    С нами с:
    23 авг 2007
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Irkutsk
    DarkElf, извини, а можешь немного подробней объяснить?
     
  5. vittt

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

    С нами с:
    23 авг 2007
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Irkutsk
    на всякий случай кидаю код:
    index.php:
    PHP:
    1. <? include "kernel.php"; ?>
    2. <html>
    3.     <head>
    4.         <title>Блог одного человека</title>
    5.         <link rel="stylesheet" href="style.css" type="text/css">
    6.     </head>
    7.     <body>
    8.     <form action="search.php" method="post">
    9.     <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"><tr><td bgcolor="#4281F4">
    10.         <table border="0" width="100%" height="100%" cellspacing="1" cellpadding="7">
    11.             <tr height="3%" bgcolor="#81AAF8" valign="top">
    12.                 <td align="center" bgcolor="#81AAF8" rowspan="2" width="20%">
    13.                    
    14. <?
    15. //блин, надо разобраться с этой долбаной $link!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!            
    16. ?>
    17.                     <p><br>
    18.                         <?
    19.                         $query=mysql_query("SELECT * FROM content;");
    20.                         while($row=mysql_fetch_array($query))
    21.                         {
    22.                             $link=$row['link'];
    23.                             echo "<a href='?page=".$link."'>".$row['stheme']."</a><br>";
    24.                         }
    25.  
    26.  
    27.  
    28.                         ?>                                     
    29.                     </p>
    30.                    
    31.                    
    32.                 </td>
    33.                 <td align="center">
    34.                         <a href="?page=main">Главная &nbsp;&nbsp;&nbsp;&nbsp;</a>
    35.                         <a href="?page=enter">Вход &nbsp;&nbsp;&nbsp;&nbsp;</a>
    36.                         <a href="?page=register">Регистрация &nbsp;&nbsp;&nbsp;&nbsp;</a>
    37.                         <a href="?page=archive">Архив статей &nbsp;&nbsp;&nbsp;&nbsp;</a>
    38.                         <a href="?page=avtor">Автор &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
    39.                         <font size="2"align="right">Поиск: </font><input type="text" name="search" value=" пока не работает...">
    40.                 </td>
    41.             </tr>
    42.             <tr valign="top">
    43.  
    44.                 <td bgcolor="#ffffff" cellpadding="10">
    45.                
    46.                
    47.                
    48.                     <?
    49.                         $content="main.php";
    50.                         switch (@$_GET['page'])
    51.                         {
    52.                             case "enter":           $content="enter.php";break;
    53.                             case "register":    $content="register.php";break;
    54.                             case "archive":     $content="archive.php";break;
    55.                             case "avtor":           $content="avtor.php";break;
    56.                             case $link:             $content="content.php";break;
    57.                             default:                    $content="main.php";
    58.                         }
    59.                         include $content;
    60.                     ?>
    61.                
    62.                
    63.                
    64.                 </td>
    65.             </tr>
    66.         </table>
    67.     </td></tr></table>
    68.     </form>
    69.     </body>
    70. </html>
    content.php:
    PHP:
    1. <p align="center">
    2. <?
    3.        
    4.         $query_c=mysql_query("SELECT * FROM content WHERE link='$link';");
    5.         $array=mysql_fetch_array($query_c);
    6.         echo "<br><h3 align='center'>".$array['theme']."</h3></p><br>".$array['content'];
    7. ?>
    8. </p>
    [/list]
     
  6. vittt

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

    С нами с:
    23 авг 2007
    Сообщения:
    4
    Симпатии:
    0
    Адрес:
    Irkutsk
    все, сделал :)

    Простой вариант

    PHP:
    1. <?
    2.  $query=mysql_query("SELECT * FROM `content`;");
    3.  while($row=mysql_fetch_array($query))
    4.  {
    5.      
    6.     echo "<a href='?page=".$row['link']."'>".$row['stheme']."</a><br/>";
    7.     if( $_GET['page'] == $row['link'] ) $link = $row['link'];
    8.  }
    9.  ?>



    Немного сложнее - с простенькой защитой
    PHP:
    1.  <?
    2.  if ( !isset( $_GET["page"] ) ) $_GET["page"] = "main";  
    3.  $query = mysql_query("SELECT * FROM `content`;");
    4.  $tmp = 0;
    5.  while( $row = mysql_fetch_array($query) )
    6.  {
    7.      
    8.     if( $tmp == 0 ) $link = $row['link'];
    9.     echo "<a href='?page=".$row['link']."'>".$row['stheme']."</a><br/>";
    10.     if( $_GET['page'] == $row['link'] ) $link = $row['link'];
    11.     $tmp++;
    12.  }
    13.  ?>
     
  7. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <?
    2. $query = mysql_query('SELECT `link`, `stheme` FROM `content`');
    3. while ($row = mysql_fetch_assoc($query)){      
    4.     echo '<a href="?page='.$row['link'].'">'.$row['stheme'].'</a><br/>';
    5.  
    6.     if ($_GET['page'] == $row['link'])
    7.         $link = $row['link'];
    8. }
    9.  
    10. if (!$link)
    11.     $link = 'main.php';
    12. ?>
    content.php
    PHP:
    1. <?
    2. $query = mysql_query('SELECT * FROM content WHERE link = "'.mysql_escape_string($link).'"');
    3. $array = mysql_fetch_assoc($query);
    4. echo '<br><h3 align="center">'.$array['theme'].'</h3></p><br>'.$array['content'];
    5. ?>
    Как-то так правильнее.

    Пара советов.

    1. Качни какую-нибудь библиотеку для работы с базой (например, DBSimple), через mysql_* работать не удобно и длинно. Интерфейс должен быть удобный.

    2. Выроботай почтение к html`у. Двойные кавычки это его, одинарные - для php оставь. Так же пользуй xhtml`ное правило: если тег не закрытый (типа <открываем>ля-ля-ля</закрываем>), то ставь слэш (<открываем_и_закрываем_в_одном_флаконе />). Можно посчтитать это фетишем, но html 4 кончается и стандарты рано или подно будут стандартами, а не сейчас. К тому же есть xml (с которым так или иначе столкнёшься), который подобные ошибки не позволяет делать.

    3. Это не фетиш, а необходимость. Выбирай из базы только те поля, которые собираешься использовать. Не делай select *.

    4. Ещё один не фетиш. Используй mysql_fetch_assoc() ведь ты используешь массив по ассоциативным ключам ($array['ключ']), а не по численным ($array[0]). Используя mysql_fetch_array() ты забиваешь память в два раза больше, чем того следовало бы. Потому что массив содержит дубли.

    5. Ещё один фетиш. Не пользуй echo для вывода контента. Лучше:
    Код (Text):
    1. какой-то html
    2. <?=переменная; ?>
    3. дальше другой html
    Потому что посмотришь месяца через два и всё, хоп-хоп, понятно и приятненько. Ведь приятненько? :)
     
  8. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    1 и 2 это просто фетиш, причём местами не просто лишний а вообще ужас
    3 и 4 реально хорошие советы
    5 это не фетиш а практически жизненная необходимость
     
  9. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Не соглашусь с "вообще ужас". (кстати, почему ужас?)

    1. Всё полезно, что в рот полезло... Всмысле, всё хорошо, что удобно. Следовательно, это плохо:
    Код (Text):
    1. mysql_query('SELECT * FROM content WHERE link = "'.mysql_escape_string($link).'"');
    А это хорошо:
    Код (Text):
    1. $sql->query('SELECT * FROM content WHERE link = ?', $link);
    2. Пока твой браузер игнорирует твои же ошибки в синтаксисе это фетиш, да. К тому же, если на php стараться писать правильно это хорошо, то почему html верстать правильно - плохо? У верстальщиков тоже существует понятие хорошего тона. Сюрприз, да? :) После программиста работают именно верстальщики. Зачем же людей лишний раз шокировать?
    Это раз.
    Два.
    Плохо:
    Код (Text):
    1. $output = "<img src=\"img.gif\" width=\"100\" height=\"100\" alt=\"some image\" border=\"0\">";
    Хорошо:
    Код (Text):
    1. $output = '<img src="img.gif" width="100" height="100" alt="some image" border="0" />';
    И повторю. Писать правильно на чём-то одном и игнорировать что-то другое - как-то не кошерно. Ведь html это не левый придаток php, а самостоятельный язык разметки со своими правилами и стандартами.
     
  10. Veem

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

    С нами с:
    21 авг 2007
    Сообщения:
    76
    Симпатии:
    0
    Я тоже согласен с lexa. Сужу в том числе с позиции пресловутого верстальщика с его понятиями :)
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Глянь в HTML код любого из моих "хомячков" (один в профиле один в подписи, правда на одном из них хостер в конец мусорный код вставляет) и увидишь что я тоже не пальцем деланный

    Я не против, можно писать без ошибок, я против того что
    XHTML мало того так и не родился, но уже успел умереть (но это тема отдельного топика)

    HTML учить надо, но делать это не фанатично, а технично.

    С моей точки зрения потому что я в 80-х годах любил писать на ASM (но к топику это не относится)

    А вообще хотя бы потому что сторонние библиотеки не гарантируют безопасности/скорости/простоты и пока человек не научится обходиться без них и не поймёт зачем они и как устроены то лучше ему в них не соваться (а то вырастет кодер не умеющий правильно кавычки слешировать, сделает интернет магазин, и обанкротится)
     
  12. Angerslave

    Angerslave Guest

    Сам верстальщик и программист, и считаю, что нужно xHTML чтить. А то у каждого свой стандарт получается...
     
  13. Anonymous

    Anonymous Guest

    Я рад, что w3c признало идею xHTML провальной в том виде, в каком она планировалась. Считаю, что Web Applications 1.0 (n.a.k.a HTML5) - это правильный шаг. Потому что xHTML был перегружен бессмысленной, технической информацией, отягощающей реализацию семантики, а не помогающей ей. Так что xHTML 5 - мой выбор. А пока что — xhtml 1.0-Transitional.

    PS. Многие просто не поняли, для чего вводился xHTML. Семантика всегда была стержнем, а вовсе не «валидная верстка».
     
  14. Veem

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

    С нами с:
    21 авг 2007
    Сообщения:
    76
    Симпатии:
    0
    Так никаких претензий, просто второй пункт мне довольно близок, и не такой уж это "просто фетиш", на мой взгляд. Впрочем, с первым (по поводу библиотек), я тоже не согласен - это лишнее.
     
  15. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Так точно. Не гарантируют. Вообще ничего в мире не гарантирует безопасность. Это норма. :)

    В сторонних библиотеках в том и плюс, что их можно выбрать: подходит тебе интерфейс, удобен ли и т.д.. Поэтому касательно "простоты" ты ошибаешься.

    И, мне кажется, ты судишь обо всём в куче, а не конкретно по какой-то отдельной части. Например, я говорю в данный момент исключительно о интерфейсе к MySQL.

    Но ты прав говоря о необходимости постигать азы. Без фундамента дом рухнет.