может кто подскажет... Вобщем примерно идея такова: есть БД, таблица. в таблице хранятся статьи (id,theme,stheme,avtor,date,content,link). В поле link находится одно слово (типа укороченой темы), а в поле stheme - тема, но 1-2 словами для вывода на меню. Теперь, собствено задумка: в одной ячейке html-таблицы генерится меню-навигация по темам, которые берутся из БД: PHP: $query=mysql_query("SELECT * FROM `content`;"); while($row=mysql_fetch_array($query)) { $link=$row['link']; echo "<a href='?page=".$link."'>".$row['stheme']."</a> "; } ниже есть блок "switch-case",который в зависимости от значения $_GET[page] выдает в другой ячейке таблицы содержимое страницы "content.php". Та, в свою очередь, выводит сперва тему (поля theme) и ниже саму статью (поля content) из БД, в зависимости от того, какое сейчас значение имеет $link. То есть тема и статья должны быть с той же строки, что и $link. Но вот проблема - $link всегда у меня принимает значение последней строки в таблице, а как сделать, чтоб оно не было фиксированым? (надеюсь все поняли, а то самому сложно объяснить )
у тебя блок switch-case идет после цикла, соответственно, после окончания цикла переменная $link навсегда остается равной последнему присвоенному ей в цикле значению. проверяй и приравнивай $link то, что в $_GET[page], если она пуста - то значение по умолчанию
Хм, тебе нужно брать из базы запись, у которой link совпадает с $_GET['page']. Как запрос составить разберёшься? Посмотри ман по мускулу, раздел по синтаксису SELECT, тебе нужно WHERE.
на всякий случай кидаю код: index.php: PHP: <? include "kernel.php"; ?> <html> <head> <title>Блог одного человека</title> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body> <form action="search.php" method="post"> <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"><tr><td bgcolor="#4281F4"> <table border="0" width="100%" height="100%" cellspacing="1" cellpadding="7"> <tr height="3%" bgcolor="#81AAF8" valign="top"> <td align="center" bgcolor="#81AAF8" rowspan="2" width="20%"> <? //блин, надо разобраться с этой долбаной $link!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ?> <p><br> <? $query=mysql_query("SELECT * FROM content;"); while($row=mysql_fetch_array($query)) { $link=$row['link']; echo "<a href='?page=".$link."'>".$row['stheme']."</a><br>"; } ?> </p> </td> <td align="center"> <a href="?page=main">Главная </a> <a href="?page=enter">Вход </a> <a href="?page=register">Регистрация </a> <a href="?page=archive">Архив статей </a> <a href="?page=avtor">Автор </a> <font size="2"align="right">Поиск: </font><input type="text" name="search" value=" пока не работает..."> </td> </tr> <tr valign="top"> <td bgcolor="#ffffff" cellpadding="10"> <? $content="main.php"; switch (@$_GET['page']) { case "enter": $content="enter.php";break; case "register": $content="register.php";break; case "archive": $content="archive.php";break; case "avtor": $content="avtor.php";break; case $link: $content="content.php";break; default: $content="main.php"; } include $content; ?> </td> </tr> </table> </td></tr></table> </form> </body> </html> content.php: PHP: <p align="center"> <? $query_c=mysql_query("SELECT * FROM content WHERE link='$link';"); $array=mysql_fetch_array($query_c); echo "<br><h3 align='center'>".$array['theme']."</h3></p><br>".$array['content']; ?> </p> [/list]
все, сделал Простой вариант PHP: <? $query=mysql_query("SELECT * FROM `content`;"); while($row=mysql_fetch_array($query)) { echo "<a href='?page=".$row['link']."'>".$row['stheme']."</a><br/>"; if( $_GET['page'] == $row['link'] ) $link = $row['link']; } ?> Немного сложнее - с простенькой защитой PHP: <? if ( !isset( $_GET["page"] ) ) $_GET["page"] = "main"; $query = mysql_query("SELECT * FROM `content`;"); $tmp = 0; while( $row = mysql_fetch_array($query) ) { if( $tmp == 0 ) $link = $row['link']; echo "<a href='?page=".$row['link']."'>".$row['stheme']."</a><br/>"; if( $_GET['page'] == $row['link'] ) $link = $row['link']; $tmp++; } ?>
PHP: <? $query = mysql_query('SELECT `link`, `stheme` FROM `content`'); while ($row = mysql_fetch_assoc($query)){ echo '<a href="?page='.$row['link'].'">'.$row['stheme'].'</a><br/>'; if ($_GET['page'] == $row['link']) $link = $row['link']; } if (!$link) $link = 'main.php'; ?> content.php PHP: <? $query = mysql_query('SELECT * FROM content WHERE link = "'.mysql_escape_string($link).'"'); $array = mysql_fetch_assoc($query); echo '<br><h3 align="center">'.$array['theme'].'</h3></p><br>'.$array['content']; ?> Как-то так правильнее. Пара советов. 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): какой-то html <?=переменная; ?> дальше другой html Потому что посмотришь месяца через два и всё, хоп-хоп, понятно и приятненько. Ведь приятненько?
1 и 2 это просто фетиш, причём местами не просто лишний а вообще ужас 3 и 4 реально хорошие советы 5 это не фетиш а практически жизненная необходимость
Не соглашусь с "вообще ужас". (кстати, почему ужас?) 1. Всё полезно, что в рот полезло... Всмысле, всё хорошо, что удобно. Следовательно, это плохо: Код (Text): mysql_query('SELECT * FROM content WHERE link = "'.mysql_escape_string($link).'"'); А это хорошо: Код (Text): $sql->query('SELECT * FROM content WHERE link = ?', $link); 2. Пока твой браузер игнорирует твои же ошибки в синтаксисе это фетиш, да. К тому же, если на php стараться писать правильно это хорошо, то почему html верстать правильно - плохо? У верстальщиков тоже существует понятие хорошего тона. Сюрприз, да? После программиста работают именно верстальщики. Зачем же людей лишний раз шокировать? Это раз. Два. Плохо: Код (Text): $output = "<img src=\"img.gif\" width=\"100\" height=\"100\" alt=\"some image\" border=\"0\">"; Хорошо: Код (Text): $output = '<img src="img.gif" width="100" height="100" alt="some image" border="0" />'; И повторю. Писать правильно на чём-то одном и игнорировать что-то другое - как-то не кошерно. Ведь html это не левый придаток php, а самостоятельный язык разметки со своими правилами и стандартами.
Глянь в HTML код любого из моих "хомячков" (один в профиле один в подписи, правда на одном из них хостер в конец мусорный код вставляет) и увидишь что я тоже не пальцем деланный Я не против, можно писать без ошибок, я против того что XHTML мало того так и не родился, но уже успел умереть (но это тема отдельного топика) HTML учить надо, но делать это не фанатично, а технично. С моей точки зрения потому что я в 80-х годах любил писать на ASM (но к топику это не относится) А вообще хотя бы потому что сторонние библиотеки не гарантируют безопасности/скорости/простоты и пока человек не научится обходиться без них и не поймёт зачем они и как устроены то лучше ему в них не соваться (а то вырастет кодер не умеющий правильно кавычки слешировать, сделает интернет магазин, и обанкротится)
Сам верстальщик и программист, и считаю, что нужно xHTML чтить. А то у каждого свой стандарт получается...
Я рад, что w3c признало идею xHTML провальной в том виде, в каком она планировалась. Считаю, что Web Applications 1.0 (n.a.k.a HTML5) - это правильный шаг. Потому что xHTML был перегружен бессмысленной, технической информацией, отягощающей реализацию семантики, а не помогающей ей. Так что xHTML 5 - мой выбор. А пока что — xhtml 1.0-Transitional. PS. Многие просто не поняли, для чего вводился xHTML. Семантика всегда была стержнем, а вовсе не «валидная верстка».
Так никаких претензий, просто второй пункт мне довольно близок, и не такой уж это "просто фетиш", на мой взгляд. Впрочем, с первым (по поводу библиотек), я тоже не согласен - это лишнее.
Так точно. Не гарантируют. Вообще ничего в мире не гарантирует безопасность. Это норма. В сторонних библиотеках в том и плюс, что их можно выбрать: подходит тебе интерфейс, удобен ли и т.д.. Поэтому касательно "простоты" ты ошибаешься. И, мне кажется, ты судишь обо всём в куче, а не конкретно по какой-то отдельной части. Например, я говорю в данный момент исключительно о интерфейсе к MySQL. Но ты прав говоря о необходимости постигать азы. Без фундамента дом рухнет.