За последние 24 часа нас посетили 22425 программистов и 1150 роботов. Сейчас ищет 701 программист ...

Правильное оформление кода php

Тема в разделе "PHP для новичков", создана пользователем Kizer, 5 май 2019.

Метки:
  1. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    Здравствуйте, сейчас перебираю свой самописный сайт. Вот код на вывод новостей:
    PHP:
    1. if ($_GET['cat']) {
    2.     $cat = '>=1';
    3. } else {
    4.     $cat = '=2';
    5. }
    6.  
    7. $query = mysqli_query($mysqli, "SELECT * FROM news WHERE status $cat ORDER BY id DESC ");
    8. $short = substr(0, 100);
    9.  
    10. if (mysqli_num_rows($query) == 0) {
    11.     echo "There are no records!";
    12. } else {
    13.     mysqli_set_charset(connection, "utf8");
    14.     while ($art = mysqli_fetch_assoc($query)) {
    15.         echo '<div class="news" id="' . $art['id'] . '">';
    16.         echo '   <div class="news_content">';
    17.         if ($art['img']) {
    18.             echo '      <img class="news_img" src="/content/img/' . $art['img'] . '">';
    19.             echo '      <img class="news_img_m" src="/content/img/' . $art['img'] . '">';
    20.         }
    21.         echo '      <h5>' . $art['date'] . ' <a href="/visit/' . $art['author'] . '">Автор</a></h5>';
    22.         echo '      <p>';
    23.         echo mb_strimwidth(htmlspecialchars($art['text']), 0, 300, '... <a href="/p/' . $art['id'] . '">Читать далее</a>');
    24.         echo '      </p>';
    25.         echo '   </div>';
    26.         echo '</div>';
    27.     }
    28. }
    29. echo '<br>';
    Сам код выглядит не очень, хоть и работает отлично. Есть ли статьи с этой темой, в которой на примере показывается как правильно оформить такой код?
     
  2. NikolaMSk

    NikolaMSk Новичок

    С нами с:
    4 май 2019
    Сообщения:
    10
    Симпатии:
    1
    Надо отделять представление php от html. И передавать в html только переменные.
     
  3. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @NikolaMSk, РНР это как раз логика, а не представление.
    @Kizer, установка кодировки соединения по хорошему должна быть один раз при установке соединения с бд.
    Для грамотного написания кода одной статьи не достаточно. Прочтите 3-4 книги и пару лет практики в большинстве случаев достаточно.
     
    NikolaMSk нравится это.
  4. NikolaMSk

    NikolaMSk Новичок

    С нами с:
    4 май 2019
    Сообщения:
    10
    Симпатии:
    1
    @Valick,
    Точно, логику Php от представления html :)
     
  5. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    Из цитатника этот ответ взял? Очень легко сказать читай книги, при этом даже не порекомендовав ни одну))
    Нет у меня столько времени, что бы читать книгу( Поэтому и прошу примеры, а дальше с php.su читаю то, что не понятно.
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    ошибка
    --- Добавлено ---
    --- Добавлено ---
    книги - пустая трата времени
     
    _ne_scaju_ нравится это.
  7. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    В чём ошибка? Если в запросе присутствует 'cat' то сделать то-то то-то.
    Со вторым согласен, место connection должна быть переменная (возможно стёр случайно)
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Я вам как-то уже давал ссылку на мою статью Как сделать вывод списка статей? Выводов вообще никаких не сделали.

    Как написал Валик, установку кодировки делаете внутри той же обертки, что и коннект. В нек. случаях это действие можно опустить, но вам для надежности лучше всегда делать. И результат этой ф-ции нужно учитывать, например:
    PHP:
    1. function mysqli_open()
    2. {
    3.     require PATH.'include/dbconfig.php';
    4.     if (($link=mysqli_connect($host,$user,$pw,$db))&&!mysqli_set_charset($link,'utf8'))
    5.     {
    6.         mysqli_close($link);
    7.         return false;
    8.     }
    9.     return $link;
    10. }
    --- Добавлено ---
    P.S. Обратите внимание на обертку, используемую в шаблоне. В нем не должно быть никаких mysqli-ф-ций.
     
  9. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    а если в запросе его не будет?
    --- Добавлено ---
    потому что каждый раз, когда посетителям предлагаешь тот или иной код из этой мути, смотрят как в коде переменные с воздуха берутся/прилетают. Просто вырезка безобразная. Что они там должны понять - хз, своих проблем отбавляй.
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @MouseZver, ТСу прежде всего нужен пример с отделением шаблона от осн. кода списка. Шаблон списка в статье есть. Осн. код – по первой ссылке в ней, в котором определяется большинство из используемых в шаблоне переменных. Думаю, ТС в состоянии понять, что если ему не нужна вилка «список/отдельная статья», то ее использовать не нужно. Про реально непонятные переменные для «пришедших со стороны» меня спросили в первом комменте к статье, но они ТСу нафиг не нужны.
    --- Добавлено ---
    P.S. Если ТС не догадается, для чего нужны ф-ции вроде extra('head-section','<style type="text/css">...</style>') или error(404), то сам виноват. Впрочем первая в реале обычно тоже никому не нужна, а для второй всегда найдется достойная замена из своего каркаса.
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @Kizer, что у вас там с substr vs mb_strimwidth? Первая, видимо, орфан, да и к тому же калека. Если избавляетесь от тэгов путем HTML-кодирования, резать строку вслепую все равно нельзя, т.к. могут остаться обрезки от кода HTML-сущности. Используйте обычную очистку от тэгов. Или сначала обрежьте, а потом закодируйте.

    P.S. И результаты запросов нужно проверять ;)
     
  12. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    Это я делаю в ядре сайта)
     
  13. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    if если есть то сделать это, else, то есть нету, то сделать это
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    @Kizer кто так учил проверять входные переменные ? ответь.

    отобрази все ошибки

    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL );
    еще раз
     
  15. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    И сколько, по-твоему, нужно времени, чтобы прочитать книгу?
     
  16. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    Среднее время прочтения одной страницы на количество страниц в книге))
    Здесь же не рассказ, что бы его читать. Нужно применять на практике каждую тему.
     
  17. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    с учётом того, что надо для начала научиться читать, скорее всего много :)
    --- Добавлено ---
    для начала прочитай как рассказ, а потом уже будешь знать где искать, когда начнёшь применять
    подозреваю рассказы тебе тоже некогда читать?
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Я про это :)
    PHP:
    1. $query = mysqli_query($mysqli, "SELECT * FROM news WHERE status $cat ORDER BY id DESC ");
    --- Добавлено ---
    В случае ошибки можно генерировать 503-ью (см. осн. код списка).
     
  19. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    @Kizer ответа ждать ?
     
  20. Kizer

    Kizer Новичок

    С нами с:
    19 авг 2018
    Сообщения:
    44
    Симпатии:
    0
    Ага, ошибка есть -
    Notice: Undefined index: cat
     
  21. Ondottr

    Ondottr Новичок

    С нами с:
    24 ноя 2017
    Сообщения:
    46
    Симпатии:
    5
  22. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень