Здравствуйте, на странице вывожу из база даных информацию в таком виде PHP: <?php $sql = mysql_query("SELECT `title`,`id`,`Price`,'foto' FROM `shop` WHERE `Category` = 'uzi' ", $link); while ($result = mysql_fetch_array($sql)) { echo '<li class="col-md-4 col-sm-6 col-xs-6"> <div class="product-box"> <a href='product-details.php?id=<?php echo $row['id']; ?>'> <img src=""> <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> <ul> <li>смотреть</li> <li><i class="fa fa-heart-o"></i> </li> <li><img src="/images/icon/repeat-icon.png"> </li> </ul> </div> </a> <div class="product-detail"> <a href="#" class="product-title"> '.$result['title'].' </a> <span><span class="price"> '.$result['Price'].'</span> <a href="#" class="btn pull-right">В корзину</a> </span> </div> </div> </li>'; } ?> выходит ошибка Parse error: syntax error, unexpected 'product_details' (T_STRING), expecting ',' or ';' in C:\OpenServer\domains\ufamed\shop\uzi.php on line 101 Помогите разобраться как исправить
Определитесь уже: $result vs $row (последний вариант лучше). --- Добавлено --- $result лучше использовать вместо $sql. Результат выполнения запроса нужно проверять, чтобы быть уверенным, что там находится именно результирующая выборка. Расширение mysql устарело.
1. для таких штук есть другая форма записи, попроще: не <?php echo $row['id'];?> , а <?=$row['id']?> 2. инъекции опасны, просто так выводить всё подряд - нельзя. надо юзать экранирование htmlspecialchars(). Писать эту функцию долго, поэтому удобно сделать PHP: function h ($string) { return htmlspecialchars($string) } и юзать везде, где только можно при выводе: PHP: <div><?=h($row['username'])?></div> типа того. 3. Ошибка синтаксиса это всегда про то, что парсер встретил кусок текста, который не похожь на правильный php код. Это значит, где-то незакрыта кавычка, или лишняя закрывающая кавычка, не стоит точка с запятой и т.п. Иногда ошибка синтаксиса возникает при попытке конкатенации строк без пробела перед точкой. В твоём случае у тебя закрывающая кавычка в строке возникла при копировании из вёрстки: С точки зрения PHP тут кавычка, а дальше куча мусора. Вот он и ругается.
У вас в строке неэкранированные апострофы присутствуют и php-вставки, обратите внимание на подсветку. Замените на кавычки и не использовать echo для вывода шаблона (выводите в нативном виде): ?>разметка<?php --- Добавлено --- Это я ТСу писал --- Добавлено --- @igordata, а зачем кодировать вывод из БД? Там ведь могут быть теги и т.п. Если нужно что-то закодировать/почистить, это обычно делается во время записи в БД.
@MouseZver, экранирование – это другое. А тут кодируются HTML-сущности. Ну не знаю... По-моему, на лицо напрасная трата ресурсов. А нестроковые (несимвольные/нетекстовые) значения так вообще контролируются используемым типом данных.
@igordata, про порчу тегов в строковых значениях вы тоже ничего не ответили... --- Добавлено --- @MouseZver, это пожалуйста, но экранирование??? Короче проехали. Просто вы опять сделали мне какое-то неуместное замечание.
я не понимаю, что ты имеешь в виду. я сказал, как обычно это делают. лучше хранить данные как есть, а коверкать при выводе. про типы значений я вообще не понял при чем тут это.