За последние 24 часа нас посетили 187356 программистов и 2135 роботов. Сейчас ищут 1743 программиста ...

Скрипт полной новости

Тема в разделе "PHP для новичков", создана пользователем klon5555, 1 фев 2012.

  1. klon5555

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

    С нами с:
    11 дек 2010
    Сообщения:
    74
    Симпатии:
    0
    Как вариант - 1 файл, принимающий различные запросы при нажатии на главной странице у любой новости кнопки "Подробнее"

    Потер лишние, т.к. оно действительно неактуально. Начало темы с 3 поста.:)
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Re: Создание папки под каждую запись

    Только в 1 месте запрос используй, параметры меняй, чтобы не переписывать по тысячу раз...
     
  3. klon5555

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

    С нами с:
    11 дек 2010
    Сообщения:
    74
    Симпатии:
    0
    Re: Создание папки под каждую запись

    Начал с подобной заготовки:
    Код (Text):
    1. <?header('Content-Type: text/html; charset=utf-8');
    2. include("header.php");
    3. $result = mysql_query("SELECT * from news WHERE id LIKE %".$_GET['id']."%");?>
    4.     <div class="gradient">
    5.         <blockquote class="panel margin radtitle"><p></p></blockquote>
    6.         <p></p>
    7.         <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>
    8.     </div>
    9. <?include("footer.php");?>
    Планирую в каждую новость засунуть ссылку с ее ID, который посылается GETом. А там уже по ID находится новость и отображается.
    Насколько я понимаю для того что-бы найти эту новость в базе будет достаточно:
    Код (Text):
    1. $result = mysql_query("SELECT * from news WHERE id LIKE %".$_GET['id']."%");
    Проблема заключается в том, что я не знаю каким должен быть цикл в этом случае...
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Re: Создание папки под каждую запись

    И вообще зачем LIKE ?
    WHERE id='".$_GET['id']."'
    Про экранирование не забывайте.

    цикл делайте обычный
    while()
    {

    }

    не надо никаких do{}
     
  5. klon5555

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

    С нами с:
    11 дек 2010
    Сообщения:
    74
    Симпатии:
    0
    Небольшой вопрос не по теме. Чем отличаются циклы?
    do()
    while()
    for()

    Ну а по теме: вроде разобрался.
    Но использовал for()
    Код (Text):
    1. <?header('Content-Type: text/html; charset=utf-8');
    2. include("header.php");
    3. $result = mysql_query("SELECT * from news WHERE id=".$_GET['id']);
    4.     for ($c=0; $c<mysql_num_rows($result); $c++) {
    5.         echo '<div class="gradient">';
    6.         $new = mysql_fetch_array($result);
    7.         echo '<blockquote class="panel margin radtitle"><p>'.$new['title'].'</p></blockquote>';
    8.         echo '<p>'.$new['description'].'</p>';
    9.         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>';
    10.         echo '</div>';
    11.     }
    12. include("footer.php");?>
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    do() :))))

    while:
    while(){}

    do while:
    do{} while();

    for:
    for()

    Тут все есть
     
  7. klon5555

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

    С нами с:
    11 дек 2010
    Сообщения:
    74
    Симпатии:
    0
    Странно, зачем я спрашивал...) Вить в мануале действительно всё есть.
    Насчет скрипта - работает вроде отлично. Тему можно закрывать...)
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    do и while циклы с выходом по условию. у while условие проверяется до цикла. в do - после.
     
  9. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Зачем делать цикл если заведомо известно, что в результате запроса "SELECT ...... WHERE id='...' " будет возвращен один ряд?
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не зачем. ты это к чему?
     
  11. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Не, ну последние посты усилено обсуждаются циклы (перебор мускульного ресурса) в рамках темы задачи, а в действительности они тут просто не нужны =)
     
  12. asokol

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

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Offtop:
    Код (Text):
    1. <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.
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    еще разик пропиарю свой набор методов, которые меня радуют.

    Код (PHP):
    1. <?php
    2.  
    3. class DB {
    4.  
    5.   static public $connect = null;
    6.   static private $last_query = '';
    7.   static public $allqueries = array();
    8.  
    9.   static public function query($query) {
    10.     self::$last_query = $query;
    11.     self::$allqueries[] = $query;
    12.     return self::$connect->query($query);
    13.   }
    14.  
    15.   static public function escape($string) {
    16.     return self::$connect->real_escape_string($string);
    17.   }
    18.  
    19.   static public function error() {
    20.     return self::$connect->errno . ' - ' . DB::$connect->error . ' QUERY = "' . self::$last_query . '"';
    21.   }
    22.  
    23.   static public function id($query) {
    24.     self::$last_query = $query;
    25.     self::$allqueries[] = $query;
    26.     self::$connect->query($query);
    27.     $id = self::$connect->insert_id;
    28.     if ($id === 0) {
    29.       $id = false;
    30.     }
    31.     return $id;
    32.   }
    33.  
    34.   static public function assoc($query) {
    35.     self::$last_query = $query;
    36.     self::$allqueries[] = $query;
    37.     $r = false;
    38.     $result = self::$connect->query($query);
    39.     if ($result!==false) {
    40.       //return $result->fetch_all(MYSQLI_ASSOC);
    41.       while ($row = $result->fetch_assoc()) {
    42.         $r[] = $row;
    43.       }
    44.     }
    45.     return $r;
    46.   }
    47.  
    48.   /**
    49.    * Возвращает массив как и assoc, но с айдишниками из БД в качестве ключей
    50.    * @param string $query
    51.    * @param string $value_column
    52.    * @return Array or FALSE
    53.    */
    54.   static public function assoc_id($query, $value_column = false) {
    55.     //возвращает массив как и assoc, но с айдишниками из БД в качестве ключей
    56.     $r = array();
    57.     $result = self::assoc($query);
    58.     if (!empty($result)) {
    59.       foreach ($result as $row) {
    60.         $r[$row['id']] = ($value_column === false ? $row : $row[$value_column]);
    61.       }
    62.       return $r;
    63.     }
    64.     return false;
    65.   }
    66.  
    67.   /**
    68.    * Возвращает массив как и assoc, но в качестве ключей выступает значение $column
    69.    * 
    70.    * @param string $query
    71.    * @param string $column
    72.    * @param string $value_column
    73.    * @return Array or FALSE
    74.    */
    75.   static public function assoc_column($query, $column, $value_column = false) {
    76.     //возвращает массив как и assoc, но в качестве ключей выступает значение $column
    77.     $r = array();
    78.     $result = self::assoc($query);
    79.     if (!empty($result)) {
    80.       foreach ($result as $row) {
    81.         $r[$row[$column]] = ($value_column === false ? $row : $row[$value_column]);
    82.       }
    83.       return $r;
    84.     }
    85.     return false;
    86.   }
    87.  
    88.   static public function assoc_sorted($query, $group_column, $id_column = false, $value_column = false) {
    89.     //SLT::SectionStart('assoc_sorted');
    90.     self::$last_query = $query;
    91.     self::$allqueries[] = $query;
    92.     //возвращает массив как и assoc, но с айдишниками из БД, сгруппированный в массивы по колонке
    93.     $r = array();
    94.     //$result = self::assoc($query);
    95.     //SLT::Step('Doing request');
    96.     $result = self::$connect->query($query);
    97.     //SLT::Step('Processing reply');
    98.     if ($result !== false) {
    99.       while ($row = $result->fetch_assoc()) {
    100.         $r[$row[$group_column]][$row[($id_column === false ? 'id' : $id_column)]] = ($value_column === false ? $row : $row[$value_column]);
    101.       }
    102.       //SLT::SectionEnd('OK');
    103.       return $r;
    104.     }
    105.     //SLT::SectionEnd('FAIL');
    106.     return false;
    107.   }
    108.  
    109.   static public function count($table, $where = '') {
    110.     $query = 'SELECT COUNT(*) FROM `' . $table . '`' . ( $where ' WHERE ' . $where : '');
    111.     $r = self::query($query);
    112.     if ($r) {
    113.       $r = $r->fetch_row();
    114.       return $r[0];
    115.     }
    116.     return false;
    117.   }
    118.  
    119.   static public function value($table, $field, $id) {
    120.     $query = "SELECT `$field` FROM `$table` WHERE `id`=$id";
    121.     $r = self::query($query);
    122.     if ($r === false){
    123.       return false;
    124.     }
    125.     $r = $r->fetch_row();
    126.     return $r[0];
    127.   }
    128.  
    129.   static public function firstrow($query) {
    130.     $query .= ' LIMIT 1';
    131.     self::$last_query = $query;
    132.     self::$allqueries[] = $query;
    133.     if ($result = self::$connect->query($query)) {
    134.       if ($row = $result->fetch_assoc()) {
    135.         return $row;
    136.       }
    137.     }
    138.     return false;
    139.   }
    140.  
    141.   static public function collect($array, $column, $string = true, $delimiter = ', ') {
    142.     $r = array();
    143.     if (is_array($array)) {
    144.       if (isset($array[$column])) {
    145.         $r[] = $array[$column];
    146.       } else {
    147.         foreach ($array as $value) {
    148.           $r = array_merge($r, self::collect($value, $column, false));
    149.         }
    150.       }
    151.     }
    152.     $r = array_unique($r);
    153.     sort($r);
    154.     if ($string === true) {
    155.       $r = implode($delimiter, $r);
    156.     }
    157.     return $r;
    158.   }
    159.  
    160.   public static function ShowQuery() {
    161.     echo "<pre>SQL: " . self::$last_query . "</pre>\n<br>\n";
    162.   }
    163.  
    164.   public static function StartTransaction() {
    165.     return self::$connect->query('START TRANSACTION');
    166.   }
    167.  
    168.   public static function Commit() {
    169.     return self::$connect->query('COMMIT');
    170.   }
    171.  
    172.   public static function Rollback() {
    173.     return self::$connect->query('ROLLBACK');
    174.   }
    175.  
    176. }
    177.  
    178. DB::$connect = new mysqli('localhost', 'walter', 'walter', 'walter');
    179. DB::query("SET NAMES 'utf8'");
    180. DB::query("set @@session.time_zone = '+04:00'");
    181. ?>
     
  14. yuri

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

    С нами с:
    16 янв 2012
    Сообщения:
    288
    Симпатии:
    2
    +
    Код (PHP):
    1.  public static function getVersion() {
    2.     return '© '.date('Y').' by igordata. All rights reserved.';
    3.  } 
    :)
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в этом классе нет попытки заменить 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:
    рекурсивно собирает значения указанной колонки и выдает их через запятую. удобно. работает медленно, но не слишком, чтобы об этом думать.
     
  16. AndreJM

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

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    igordata, Почему бы туда не воткнуть __call и замутить одним методом всякие там getbyIdFromTestTable, getTitleFromNewsById и т.п. ?
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это уже работа для вышестоящего класса.
     
  18. klon5555

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

    С нами с:
    11 дек 2010
    Сообщения:
    74
    Симпатии:
    0
    Способ с float не использовал т.к. смотрится криво. Пробовал убивать padding и margin в 0, но всеравно остается место по краям. А в таком случае всё нормально.

    Насчет цикла - он тут действительно не нужен, не подумал =)
     
  19. asokol

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

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    css:
    Код (Text):
    1. .left, .right { float:left; width:50%; margin:0; padding:0; }
    2. .right { float:right; }
    3. .clr { clear:both; }
    html:
    Код (Text):
    1. <div class="left"></div>
    2. <div class="right"></div>
    3. <div class="clr"></div>
    Или (правда, уже другой css, в интернете полно примеров):
    Код (Text):
    1. <dl>
    2.     <dt></dt>
    3.     <dd></dd>
    4. </dl>