Здравствуйте. PHP: $tovar = $DBH->query('SELECT `id`, `name`, `opisanie`, `photo`, `cat_id`, `price` from `tovar`'); $tovar->setFetchMode(PDO::FETCH_ASSOC); while($row = $tovar->fetch()){ echo $row['name']; echo $row['opisanie']; echo $row['photo']; echo $row['price']; } На openservere все замечательно, а на серваке просто выводит, что запись есть но не выводит ни названия и артикула ничего. Подскажите в чем причина.
Что означает фраза "выводит, что запись есть" ? Так и пишет, "запись есть но ничего не выведу и не проси" ?
это на openserver это на хосте И никаких ошибок ничего.На хосте в бд только одна запись. Если добавить еще одну, то появиться еще один такой блок.
на хостинге ошибки отключены по дефолту пропиши в начале скрипта PHP: <?php error_reporting(E_ALL); ini_set('display_errors', 'On'); ну и как выводить ошибки MySQL почитай
@exstyles, даже не зная то, как работать с ошибками, вы могли бы давно выяснить причины самыми примитивными способами. Например, запустить SQL-запрос напрямую (в консоли или phpMyAdmin), вывести результат запроса в файл: PHP: file_put_contents('test.txt', var_export($tovar->fetch(), 1)); и т.д. Подключайте фантазию, если пока не хватает опыта
Сравни кодировки, веб-сервер и все кодировки MySQL, на локалхосте и на хосте. Скорее всего причина там.
Сравнил, все один в один. При чем на серваке стоит opencart на другом домене и висит еще один сайт, но там никаких проблем. А тут фигня какае-то. Да лучше и в правду потырили бы их, чем этот гемор=) Точно одна, если добавлю еще одну, то будет такой же пустой блок. Все, разобрался. Всем спасибо=) Но это был полный бред.... Было так и работало на локалке PHP: <?php $tovar->setFetchMode(PDO::FETCH_ASSOC); while($row = $tovar->fetch()){ if (empty($row['photo'])){ $photo = 'narujka'; }else{ $photo = $row['photo']; } ?> <div id="katalog"> <div class="name"> <? echo $row['name']; ?> </div> <div class="photo"> <img src="img/tovar/<?echo $photo;?>.jpg" width="100%"height="100%"></div> <div class="opisanie"> <? echo $row['opisanie']; ?></div> <div class="price">ЦЕНА <? echo $row['price']; ?> руб.</div> </div> <?php } ?> сделал так и заработало на сервере. PHP: $tovar->setFetchMode(PDO::FETCH_ASSOC); while($row = $tovar->fetch()){ if (empty($row['photo'])){ $photo = 'narujka'; }else{ $photo = $row['photo']; } Echo' <div id="katalog"> <div class="name"> '.$row['name'].'</div> <div class="photo"> <img src="img/tovar/'.$photo.'.jpg" width="100%"height="100%"></div> <div class="opisanie"> '.$row['opisanie'].'</div> <div class="price">ЦЕНА '.$row['price'].' руб.</div> </div> '; }
PHP: $window_content = '<div id="katalog"> <div class="name">%s</div> <div class="photo"><img src="img/tovar/%s.jpg" width="100%"height="100%"></div> <div class="opisanie">%s</div> <div class="price">ЦЕНА %s руб.</div> </div>'; if ( $tovar -> rowCount() ) { while ( $res = $tovar -> fetch( \PDO :: FETCH_ASSOC ) ) { # $res['photo'] ?: 'narujka' -----> ( empty ( $res['photo'] ) ? 'narujka' : $res['photo'] ) printf ( $window_content, $res['name'], $res['photo'] ?: 'narujka', $res['opisanie'], $res['price'] ); } } else { # тут что-то подобное "Товар в наличии отсутствует..." }
Проблема-то была в "коротких открывающих тегах" <?, использованных вместо <?php Ещё можно <?=$row['name']?>, например, вместо <?php echo $row['name']; ?>
я конечно же не гуру но попытаюсь предположить что дело именно тут Код (Text): <div class="name"> <? echo $row['name']; ?> </div> поменять нужно было на Код (Text): <div class="name"> <?php echo $row['name']; ?> </div> Дело в том что на openservere первый и второй вариант проходит. А вот на остальных нужно короткий синтакс включать что бы он работал. <??>