За последние 24 часа нас посетили 17989 программистов и 1649 роботов. Сейчас ищут 1672 программиста ...

создать ссылки

Тема в разделе "PHP и базы данных", создана пользователем naruk, 26 фев 2018.

  1. naruk

    naruk Новичок

    С нами с:
    26 фев 2018
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, на странице вывожу из база даных информацию в таком виде
    PHP:
    1.                   <?php
    2.                     $sql = mysql_query("SELECT `title`,`id`,`Price`,'foto' FROM `shop` WHERE `Category` = 'uzi' ", $link);
    3.                       while ($result = mysql_fetch_array($sql)) {
    4.                           echo
    5.                           '<li class="col-md-4 col-sm-6 col-xs-6">
    6.                            <div class="product-box">
    7.                              <a href='product-details.php?id=<?php echo $row['id']; ?>'>
    8.                               <img src="">
    9.                               <div class="product-hover"><span class="rating"><i class="fa fa-star-o"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star-o"></i> <i class="fa fa-star-o"></i></span>
    10.                               <ul>
    11.                                   <li>смотреть</li>
    12.                                   <li><i class="fa fa-heart-o"></i>
    13.                                   </li>
    14.                                   <li><img src="/images/icon/repeat-icon.png">
    15.                                   </li>
    16.                               </ul>
    17.                               </div>
    18.                               </a>
    19.                       <div class="product-detail">
    20.                         <a href="#" class="product-title">
    21.                       '.$result['title'].'
    22.                                 </a> <span><span class="price">
    23.                       '.$result['Price'].'</span> <a href="#" class="btn pull-right">В корзину</a>
    24.                                 </span>
    25.                             </div>
    26.                         </div>
    27.                     </li>';
    28.                           }
    29.                   ?>
    выходит ошибка Parse error: syntax error, unexpected 'product_details' (T_STRING), expecting ',' or ';' in C:\OpenServer\domains\ufamed\shop\uzi.php on line 101
    Помогите разобраться как исправить
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    Определитесь уже: $result vs $row (последний вариант лучше).
    --- Добавлено ---
    $result лучше использовать вместо $sql. Результат выполнения запроса нужно проверять, чтобы быть уверенным, что там находится именно результирующая выборка. Расширение mysql устарело.
     
  3. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    1. для таких штук есть другая форма записи, попроще:
    не <?php echo $row['id'];?> , а <?=$row['id']?>

    2. инъекции опасны, просто так выводить всё подряд - нельзя. надо юзать экранирование htmlspecialchars(). Писать эту функцию долго, поэтому удобно сделать
    PHP:
    1. function h ($string) {
    2.     return htmlspecialchars($string)
    3. }
    и юзать везде, где только можно при выводе:
    PHP:
    1. <div><?=h($row['username'])?></div>
    типа того.

    3. Ошибка синтаксиса
    это всегда про то, что парсер встретил кусок текста, который не похожь на правильный php код. Это значит, где-то незакрыта кавычка, или лишняя закрывающая кавычка, не стоит точка с запятой и т.п. Иногда ошибка синтаксиса возникает при попытке конкатенации строк без пробела перед точкой.

    В твоём случае у тебя закрывающая кавычка в строке возникла при копировании из вёрстки:
    upload_2018-2-26_14-25-15.png
    С точки зрения PHP тут кавычка, а дальше куча мусора. Вот он и ругается.
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    У вас в строке неэкранированные апострофы присутствуют и php-вставки, обратите внимание на подсветку. Замените на кавычки и не использовать echo для вывода шаблона (выводите в нативном виде):
    ?>разметка<?php
    --- Добавлено ---
    Это я ТСу писал :)
    --- Добавлено ---
    @igordata, а зачем кодировать вывод из БД? Там ведь могут быть теги и т.п. Если нужно что-то закодировать/почистить, это обычно делается во время записи в БД.
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    Экранировать
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    обычно наоборот
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    @MouseZver, экранирование – это другое. А тут кодируются HTML-сущности.

    Ну не знаю... По-моему, на лицо напрасная трата ресурсов. А нестроковые (несимвольные/нетекстовые) значения так вообще контролируются используемым типом данных.
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.797
    Симпатии:
    1.331
    Адрес:
    Лень
    @miketomlin вообще то преобразовываются
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.842
    Симпатии:
    652
    @igordata, про порчу тегов в строковых значениях вы тоже ничего не ответили...
    --- Добавлено ---
    @MouseZver, это пожалуйста, но экранирование??? Короче проехали. Просто вы опять сделали мне какое-то неуместное замечание.
     
  10. igordata

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

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