Как вариант - 1 файл, принимающий различные запросы при нажатии на главной странице у любой новости кнопки "Подробнее" Потер лишние, т.к. оно действительно неактуально. Начало темы с 3 поста.
Re: Создание папки под каждую запись Только в 1 месте запрос используй, параметры меняй, чтобы не переписывать по тысячу раз...
Re: Создание папки под каждую запись Начал с подобной заготовки: Код (Text): <?header('Content-Type: text/html; charset=utf-8'); include("header.php"); $result = mysql_query("SELECT * from news WHERE id LIKE %".$_GET['id']."%");?> <div class="gradient"> <blockquote class="panel margin radtitle"><p></p></blockquote> <p></p> <p class="information"><table border="0" cellpadding="0" cellspacing="0" class="infotable"><tr><td style="align: left;" class="author"><span>Автор: </span></td><td style="align: right;" class="time"><span>Время добавления: </span></td></tr></table></p> </div> <?include("footer.php");?> Планирую в каждую новость засунуть ссылку с ее ID, который посылается GETом. А там уже по ID находится новость и отображается. Насколько я понимаю для того что-бы найти эту новость в базе будет достаточно: Код (Text): $result = mysql_query("SELECT * from news WHERE id LIKE %".$_GET['id']."%"); Проблема заключается в том, что я не знаю каким должен быть цикл в этом случае...
Re: Создание папки под каждую запись И вообще зачем LIKE ? WHERE id='".$_GET['id']."' Про экранирование не забывайте. цикл делайте обычный while() { } не надо никаких do{}
Небольшой вопрос не по теме. Чем отличаются циклы? do() while() for() Ну а по теме: вроде разобрался. Но использовал for() Код (Text): <?header('Content-Type: text/html; charset=utf-8'); include("header.php"); $result = mysql_query("SELECT * from news WHERE id=".$_GET['id']); for ($c=0; $c<mysql_num_rows($result); $c++) { echo '<div class="gradient">'; $new = mysql_fetch_array($result); echo '<blockquote class="panel margin radtitle"><p>'.$new['title'].'</p></blockquote>'; echo '<p>'.$new['description'].'</p>'; echo '<p class="information"><table border="0" cellpadding="0" cellspacing="0" class="infotable"><tr><td style="align: left;" class="author"><span>Автор: '.$new['author'].'</span></td><td style="align: right;" class="time"><span>Время добавления: '.$new['date'].'</span></td></tr></table></p>'; echo '</div>'; } include("footer.php");?>
Странно, зачем я спрашивал...) Вить в мануале действительно всё есть. Насчет скрипта - работает вроде отлично. Тему можно закрывать...)
Зачем делать цикл если заведомо известно, что в результате запроса "SELECT ...... WHERE id='...' " будет возвращен один ряд?
Не, ну последние посты усилено обсуждаются циклы (перебор мускульного ресурса) в рамках темы задачи, а в действительности они тут просто не нужны =)
Offtop: Код (Text): <table border="0" cellpadding="0" cellspacing="0" class="infotable"><tr><td style="align: left;" class="author"><span>Автор: </span></td><td style="align: right;" class="time"><span>Время добавления: </span></td></tr></table> - как будет свободное время, почитайте про float:left|right и clear:both.
еще разик пропиарю свой набор методов, которые меня радуют. Код (PHP): <?php class DB { static public $connect = null; static private $last_query = ''; static public $allqueries = array(); static public function query($query) { self::$last_query = $query; self::$allqueries[] = $query; return self::$connect->query($query); } static public function escape($string) { return self::$connect->real_escape_string($string); } static public function error() { return self::$connect->errno . ' - ' . DB::$connect->error . ' QUERY = "' . self::$last_query . '"'; } static public function id($query) { self::$last_query = $query; self::$allqueries[] = $query; self::$connect->query($query); $id = self::$connect->insert_id; if ($id === 0) { $id = false; } return $id; } static public function assoc($query) { self::$last_query = $query; self::$allqueries[] = $query; $r = false; $result = self::$connect->query($query); if ($result!==false) { //return $result->fetch_all(MYSQLI_ASSOC); while ($row = $result->fetch_assoc()) { $r[] = $row; } } return $r; } /** * Возвращает массив как и assoc, но с айдишниками из БД в качестве ключей * @param string $query * @param string $value_column * @return Array or FALSE */ static public function assoc_id($query, $value_column = false) { //возвращает массив как и assoc, но с айдишниками из БД в качестве ключей $r = array(); $result = self::assoc($query); if (!empty($result)) { foreach ($result as $row) { $r[$row['id']] = ($value_column === false ? $row : $row[$value_column]); } return $r; } return false; } /** * Возвращает массив как и assoc, но в качестве ключей выступает значение $column * * @param string $query * @param string $column * @param string $value_column * @return Array or FALSE */ static public function assoc_column($query, $column, $value_column = false) { //возвращает массив как и assoc, но в качестве ключей выступает значение $column $r = array(); $result = self::assoc($query); if (!empty($result)) { foreach ($result as $row) { $r[$row[$column]] = ($value_column === false ? $row : $row[$value_column]); } return $r; } return false; } static public function assoc_sorted($query, $group_column, $id_column = false, $value_column = false) { //SLT::SectionStart('assoc_sorted'); self::$last_query = $query; self::$allqueries[] = $query; //возвращает массив как и assoc, но с айдишниками из БД, сгруппированный в массивы по колонке $r = array(); //$result = self::assoc($query); //SLT::Step('Doing request'); $result = self::$connect->query($query); //SLT::Step('Processing reply'); if ($result !== false) { while ($row = $result->fetch_assoc()) { $r[$row[$group_column]][$row[($id_column === false ? 'id' : $id_column)]] = ($value_column === false ? $row : $row[$value_column]); } //SLT::SectionEnd('OK'); return $r; } //SLT::SectionEnd('FAIL'); return false; } static public function count($table, $where = '') { $query = 'SELECT COUNT(*) FROM `' . $table . '`' . ( $where ? ' WHERE ' . $where : ''); $r = self::query($query); if ($r) { $r = $r->fetch_row(); return $r[0]; } return false; } static public function value($table, $field, $id) { $query = "SELECT `$field` FROM `$table` WHERE `id`=$id"; $r = self::query($query); if ($r === false){ return false; } $r = $r->fetch_row(); return $r[0]; } static public function firstrow($query) { $query .= ' LIMIT 1'; self::$last_query = $query; self::$allqueries[] = $query; if ($result = self::$connect->query($query)) { if ($row = $result->fetch_assoc()) { return $row; } } return false; } static public function collect($array, $column, $string = true, $delimiter = ', ') { $r = array(); if (is_array($array)) { if (isset($array[$column])) { $r[] = $array[$column]; } else { foreach ($array as $value) { $r = array_merge($r, self::collect($value, $column, false)); } } } $r = array_unique($r); sort($r); if ($string === true) { $r = implode($delimiter, $r); } return $r; } public static function ShowQuery() { echo "<pre>SQL: " . self::$last_query . "</pre>\n<br>\n"; } public static function StartTransaction() { return self::$connect->query('START TRANSACTION'); } public static function Commit() { return self::$connect->query('COMMIT'); } public static function Rollback() { return self::$connect->query('ROLLBACK'); } } DB::$connect = new mysqli('localhost', 'walter', 'walter', 'walter'); DB::query("SET NAMES 'utf8'"); DB::query("set @@session.time_zone = '+04:00'"); ?>
+ Код (PHP): public static function getVersion() { return '© '.date('Y').' by igordata. All rights reserved.'; }
в этом классе нет попытки заменить PDO или изобрести велик. Тут есть просто несколько способов сортировки результата запроса. firstrow: вы получаете строку или false. очень удобно. assoc: возвращает $r заполненный по принципу $r[] = $row; при наличии нейтив драйвера может сократиться до одной строки return $result->fetch_all(MYSQLI_ASSOC); assoc_id: возвращает массив, с ключами из колонки id простенько и со вкусом можно вернуть массив значений из колонки $value вместо полных строк. оч удобно. assoc_column: возвращает массив с ключами из колонки, которую укажешь. Тоже можно не всю строку, а только значения какой-то колонки. assoc_sorted: помогает сгруппировать массив хитрым образом в группы по значению. т.е. вы получаете массив с ключами по значению колонки группировки, в каждом члене его - массив строк по id Это очень мощный метод, который позволяет упростить программу порой до двух вложенных циклов =) count: считает кол-во строк value: вытаскивает одно значение collect: рекурсивно собирает значения указанной колонки и выдает их через запятую. удобно. работает медленно, но не слишком, чтобы об этом думать.
igordata, Почему бы туда не воткнуть __call и замутить одним методом всякие там getbyIdFromTestTable, getTitleFromNewsById и т.п. ?
Способ с float не использовал т.к. смотрится криво. Пробовал убивать padding и margin в 0, но всеравно остается место по краям. А в таком случае всё нормально. Насчет цикла - он тут действительно не нужен, не подумал =)
css: Код (Text): .left, .right { float:left; width:50%; margin:0; padding:0; } .right { float:right; } .clr { clear:both; } html: Код (Text): <div class="left"></div> <div class="right"></div> <div class="clr"></div> Или (правда, уже другой css, в интернете полно примеров): Код (Text): <dl> <dt></dt> <dd></dd> </dl>