Newsseite mit "Mehr lesen..." link in PHP verwirklichen

sh00ter999

Grünschnabel
Hallo liebe Community,
Ich möchte in PHP eine simple newsseite schreiben. Das ist mir bis jetzt ganz gut gelungen aber ichhabe noch ein Problem , und zwar möchte ich einen "mehr lesen..." link am ende eines jeden beitrags anbringen der mir dann den kompletten einzelnen eintrag anzeigt.

Es ist so : wenn ich news.php aufrufe, dann zeigt er alle einträge nach Zeit geordnet an.
Sprich : Select * From news ORDER BY date... Wenn ich nun den Link klicke , möchte ich dass er mir nur einen anzeigt also :

SELECT ID, Titel, DATE_FORMAT(Datum, "%d.%M %Y ") AS Datum, Inhalt, Kategorie FROM news WHERE ID = "?"

aber ich habe keine ahnung wie ich diesen befehl ausführen kann indem ich auf einen hyperlink klicke ? Am besten wäre es wenn dann der link lautet news.php/?id=1 oder so aber ich habe leider noch nicht wirklich erfahrung darin wie sowas geht (mit dem ?id=1).

Bitte beachtet dass ich erst seit Montag in der PHP szene bin also bitte recht anfängerfreunlich sein :p


Vielen Dank im Voraus :)
 
Heyho,

undzwar der Grund gedanke ist richtig.

Du fügst einfach einen Hyperlink hinzu indem du die ID des Beitrages als GET Parameter übergibst.

wenn du zb:

PHP:
$sql = "SELECT * FROM TABLE";
$mysql = mysql_fetch_array($sql);
while($rs = mysql_fetch_array($mysql)){
  echo "<a href='link?eintrag=".$rs["id"]."'>weiterlesen</a>
}

nehmen würdest, könntest du
a) eine neue Seite aufrufen (neues Script) welches des Eintrag dann ausgibt
b) die gleiche Seite aufrufen und am Anfang der Seite eine weiche bauen, ob eine ID übergeben wurde oder ob alle ausgegeben werden sollen.

Solltest du Probleme haben, stell dein ganzes Script mal hier herein.

Lg cRs
 
Erstmal vielen Dank für deine schnelle Antwort :)

Also so ganz kriege ich es nicht hin..
Ich schreibe mal wie das Ganze bei mir aussieht :

PHP:
$sql = 'SELECT ID, Titel, DATE_FORMAT(Datum, "%d.%M %Y ") AS Datum, Inhalt, Kategorie FROM news WHERE ID = ".$id." ';

Und die Ausgabe aller Newsbeiträge sieht so aus :
PHP:
if (!$result->num_rows) {
    echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
} else {
    while ($row = $result->fetch_assoc()) {

		echo '<h1>'.$row['Titel']."</h1>";
        echo '
				<p>'.substr($row['Inhalt'],0,500).'...'.$link.
				'<br \><br \><span>Beitrag verfasst am </span>'.
				'<span class="rest">'.$row['Datum'].
				' in der Kategorie: <a href="'.$row['Kategorie'].'">'.$row['Kategorie']."</a></span>"."</p>";	
    }
 
Hi,

konnte das Script jetzt nicht testen, aber so müsste es klappen.
Du musst unten noch den Dateinamen deines PHP Scriptes einsetzen (wo jetzt "DIESES_SCRIPT" steht)


PHP:
<?php
# Abfrage ob News existiert. Rückgabe 1 oder 0
function checkAuswahl($id){
	$sql = "SELECT COUNT(*) as anzahl FROM news WHERE ID = '".$id."' LIMIT 1";	
	$m = @mysql_query($sql);
	$rs = mysql_fetch_array($m);
	return $rs["anzahl"];
}

# Hier wird abgefragt ob eine News ausgewählt wurde und ob diese Tatsächlich existiert (URL Manipulation)
if(isset($_GET["auswahl"]) && checkAuswahl($_GET["auswahl"])==1){
	#Hier die komplette ausgabe deiner News
}else{
	# Hier werden alle News ausgegeben
	$sql = "SELECT * FROM news ORDER BY Datum";
	$mysql = mysql_query($sql)
	
	if (mysql_num_rows($mysql)==0) {
		echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
	} else {
		while ($rs = mysql_fetch_array($mysql)) {
	
			echo '<h1>'.$rs['Titel'].'</h1>';
			echo '<p>'.substr($rs['Inhalt'],0,500).'...'.$link.
					'<br \><br \><span>Beitrag verfasst am </span>'.
					'<span class="rest">'.$rs['Datum'].
					' in der Kategorie: <a href="'.$rs['Kategorie'].'">'.$rs['Kategorie']."</a></span>"."</p>".
					' <a href="DIESES_SCRIPT.php?auswahl='.$rs['ID']'>weiterlesen</a>';				
		}  
	}
}
?>
 
Also ich habe das nun versucht und ich bekomme folgdenen Fehler :
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\test\news.php on line 59

in der Zeile :
PHP:
if (mysql_num_rows($mysql)==0) {


Ansonsten läd die Seite auch richtig nur steht da "Keine Newsbeiträge vorhanden"
 
schau mal was mit mysql_error() ausgegebn wird. vlt ist die sql abfrage fehlerhaft und du musst die tabellenfelder anpassen.

Da du im moment keine Einträge bei der Abfrage zurück bekomsmt sagt er das keine Vorhanden sind.

Teste mal wie gesagt mysql_error() und poste fehler.
 
Quasi einfach unten in die Seite echo mysql_error(); einfügen ?
Gibt bei mir nichts aus :/
Tut mir schrecklich leid aber wie gesagt ich bin noch sehr sehr neu auf diesem Gebiet.

EDIT : OMG , Mein fehler , ich hatte das mysql_error(); in ne andere Seite eingefügt :/ Der Fehlercode lautet
No database selected

Ich glaube fast, ,dass du viel getan hast. Ich hatte ja im Grunde schon alles außer den funktionierenden Link der nur zu der seite news.php?id=1 (Wie geht das mit dem ?id=1?) und dort soll alles genau so sein wie auf der eigentlichen news.php nur , dass die var $sql abgeändert ist und zwar eben mit select * from news WHERE id = $id
 
Zuletzt bearbeitet:
Der Fehler bedeutet, das du keine Datenbank selectiert hast aus der du lesen kannst.

Die Seite sieht genauso aus wie die News.php du musst dann halt oben abfragen ob eine ID per GET Übergeben wird oder alle news ausgegeben werden.



TRY THIS

PHP:
<?php
# Abfrage ob News existiert. Rückgabe 1 oder 0
function checkAuswahl($id){
	$sql = "SELECT COUNT(*) as anzahl FROM news WHERE ID = '".$id."' LIMIT 1";	
	$m = @mysql_query($sql);
	$rs = mysql_fetch_array($m);
	return $rs["anzahl"];
}

# Hier wird abgefragt ob eine News ausgewählt wurde und ob diese Tatsächlich existiert (URL Manipulation)
if(isset($_GET["auswahl"]) && checkAuswahl($_GET["auswahl"])==1){
	#Hier die komplette ausgabe deiner News
	$sql = "SELECT * FROM news WHERE ID = '".$_GET["auswahl"]."'";
	$mysql = mysql_query($sql);
	while ($rs = mysql_fetch_array($mysql)) {
	
			echo '<h1>'.$rs['Titel'].'</h1>';
			echo '<p>'.$rs['Inhalt'].' '.$link.
					'<br \><br \><span>Beitrag verfasst am </span>'.
					'<span class="rest">'.$rs['Datum'].
					' in der Kategorie: <a href="'.$rs['Kategorie'].'">'.$rs['Kategorie']."</a></span>"."</p>".
					' <a href="DIESES_SCRIPT.php?auswahl='.$rs['ID']'>weiterlesen</a>';				
		}  
}else{
	# Hier werden alle News ausgegeben
	$sql = "SELECT * FROM news ORDER BY Datum";
	$mysql = mysql_query($sql)
	
	if (mysql_num_rows($mysql)<0) {
		echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
	} else {
		while ($rs = mysql_fetch_array($mysql)) {
	
			echo '<h1>'.$rs['Titel'].'</h1>';
			echo '<p>'.substr($rs['Inhalt'],0,500).'...'.$link.
					'<br \><br \><span>Beitrag verfasst am </span>'.
					'<span class="rest">'.$rs['Datum'].
					' in der Kategorie: <a href="'.$rs['Kategorie'].'">'.$rs['Kategorie']."</a></span>"."</p>".
					' <a href="news.php?auswahl='.$rs['ID']'>weiterlesen</a>';				
		}  
	}
}
?>
 
Immernoch das selbe...


Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\test\news.php on line 70 und 73

in der Zeile :

PHP:
 if (mysql_num_rows($mysql)<0) {

und
PHP:
while ($rs = mysql_fetch_array($mysql)) {

MySQL Error : No database selected
 
Zurück