PHP, baza danych, system newsów

Co ja piszę! zły kod! teraz działa, lecz bez skutku.*

Nadal mam X postów, tutaj mam już problem jak to okodzić w PHP, te wyświetlanie, bo jak wspominałeś w HTML nie da się.

Podaj komunikat błędu, w poprzednim poście obiekt PDO był z zmiennej $dbh więc może zmień $pdo na $dbh?

Ogólnie mniej zaawansowane edytory mają problemy z HEREDOC-ami, więc z tego może wynikać brak kolorowania.

To znaczy teraz już nie mam błędów, przerobiłem kod tak jak mi podpowiedziałeś. Teraz to kwestia działania tego PHP w index.php, który ma za zadanie wyświetlać ten tekst, czyli to “echo” lecz nie wiem jak to zastosować.

<?php require __DIR__.'/includes/functions.php' ?>
<html>
<head>
	<title>Welcome to news channel</title>
	<link rel="stylesheet" type="text/css" href="design/style.css">
</head>
<body>
<div class="container">

<div class="news-box">

	<div class="news">

	<?php
	// get the database handler
	$dbh = connect_to_db(); // function created in dbconnect, remember?
	// Fecth news
	$news = fetchOnPage($dbh, isset($_GET['page']) ? intval($_GET['page']) : 1);
	?>

        <?php if ( $news && !empty($news) ) :?>

        <?php foreach ($news as $key => $article) :?>
	<h2><a href="read-news.php?newsid=<?= $article->news_id ?>"><?= stripslashes($artic le->news_title) ?></a></h2>
	<p><?= stripslashes($article->news_short_description) ?></p>
	<span>published on <?= date("M, jS Y, H:i", $article->news_published_on) ?> by <?= stripslashes($article->news_author) ?></span>
	<?php endforeach?>
	<?php endif?>
					
	</div>

</div>

	<div class="footer">
		phpocean.com &copy; <?= date("Y") ?> - all rights reserved.
	</div>

	</div>
</body>
</html>

W porównaniu do tego jak tutaj masz to wykonane niema potrzeby korzystać z heredoc-ów - bałem się, że zrobisz coś takiego:

<?= '<h2>'. $tytul.'</h2>'.$tresc.'<p>Autor: '. $autor .' dnia '. $data .'</p>';

albo jeszcze gorzej:

<?= "<h2>$tytul</h2>$tresc<p>Autor: $autor dnia $data</p>";

Przy takim zapisie jaki masz zastosowany jest ok, tj:

<?php foreach ($news as $key => $article) :?>
    <h2><a href="read-news.php?newsid=<?= $article->news_id ?>"><?= stripslashes($article->news_title) ?></a></h2>
    <p><?= stripslashes($article->news_short_description) ?></p>
    <span>published on <?= date("M, jS Y, H:i", $article->news_published_on) ?> by <?= stripslashes($article->news_author) ?></span>
    <?php endforeach?>

Jedyne do czego bym się przyczepił to brak semicolów na końcu zakończeń instrukcji, ale ogólnie jest ok.

Chwilka … jak nie heredocki to zwykły HTML? Wtedy nie mam połączenia z PHP i nie widzę mojego limitu, ahh trafił Ci się nieznośny ludek. Readnews.php odpowiada za wyświetlanie treści ale po kliknięciu w tytuł, a ja ten tytuł muszę gdzieś dodać.

Podobno najwydajniejsze jest wplatanie PHP w kod HTML - od łączenia stringów na pewno (chyba wszystko jest szybsze), ale czy od heredoc-ów to przyznam się szczerze nigdy nie sprawdzałem.

Zasadniczo w rzeczach, które robię stosuje je zależnie od kontekstu, jeśli plik jest templatką to wplatam PHP, jeśli natomiast jest to plik zasadniczo w kodem i tylko chcę wpleść kawałek HTML-a to wciskam go heredoc-iem.

Musisz mi dokładnie wytłumaczyć na czym utkwiłeś.

Nie znam się na tym całym PHP więc powiem jak myślę, mój cel, a aktualnie to na czym utkwiłem to właśnie dodanie tekstu do strony głównej, gdzie ten tekst będzie tytułem, zaś nagłówek będzie przedstawiał skrót treści newsa, a po kliknięciu w niego przeniesie się do strony ( czyli readnews.php) z całym tekstem. Jak już wspominałem, chodzi mi o podobną technikę działania jak na stronie np. dobreprogramy.pl. W moim przypadku chyba lepiej się sprawdzi wplecenie PHP w kod HTML.