[MySQL] URL für einzelne News zur Einzeldarstellung generieren

Nahla

Grünschnabel
Hallo liebe Community,

ich bin ein neues Mitglied hier im Forum und freue mich, darauf gestoßen zu sein. :)

Vorab die wichtigste Info: Ich arbeite mit MySQL-Client-Version: 5

Ich habe mich am Newssystem mit PHP und MySQL auf traum-projekt.com versucht und es funktioniert soweit alles.

Allerdings finde ich keine Antwort zur folgenden Frage: Wie kann man die News so anlegen, dass für sie automatisch eine URL generiert wird?

Um die Frage besser darzustellen, nenne ich ein Beispiel: Ich habe drei News erstellt, die dem Alter entsprechend untereinander erscheinen. Nun möchte ich aber an irgendeiner anderen Stelle auf meiner Website nur auf die News vom 19.03. verweisen inkl. Kommentare. Angenommen ich habe in meiner Navigation auf meiner Website "Wetter" stehen, wie muss die URL für die News vom 19.03. aussehen, damit ein Klick nur zu diesem Beitrag führt?

Ich vermute, dass ich hierbei etwas in der Datenbank ändern muss, aber ich weiß leider gar keinen Ansatz. Mir fehlt ein Denkanstoß, vermutlich google ich mit den falschen Begriffen bei der Suche nach einer Lösung und komme deshalb nicht weiter. :(

Ich wäre für jeden Hinweis sehr dankbar.

Liebe Grüße
Nahla
 
Prinzipiell ist das nicht schwer.

Wenn du einen Beitrag hast, mit der Überschrift "Das Wetter ist gut.", welcher in der Datenbank die ID 5 hat, dann mach folgendes drauß. (nur ein Beispiel)
PHP:
$id = 5; //kannst du auch per mysql-Abfrage hier hinschreiben lassen
echo "<a href=\"news.php?id={$id}\">Das Wetter ist gut.</a>";

In der Seite "news.php" kannst du die ID folgend abfragen:
PHP:
$id = $_GET['id'];
echo $id; //ausgabe = 5

$sqlCmd = "SELECT * FROM news WHERE id=".mysql_real_escape_string($id); //mysql_real_escape_string gegen mysql-injection.
//Dadurch liest du alle Daten zum Beitrag mit der ID5 aus, damit du ihn einzeln anzeigen kannst.

Also normalerweise verweist du per ID auf einzelne Beiträge o.Ä.
Ich hoffe ich bin an deiner Frage nicht vorbei...
 
Hallo Lime,
vielen lieben Dank für deine Antwort!

Ich habs lange probiert, aber es möchte einfach nicht funktionieren. :(

Du bist keineswegs an meiner Frage vorbei, ich kann deine Lösung auch nachvollziehen, weiß nur nicht, warum es nicht funktioniert.

Ich habe den ersten von dir genannten PHP-Code auf der Seite eingefügt, wo der Beitrag mit der ID 1 einzeln erscheinen soll.
Habe die ID in 1 umgeändert und statt "news.php" "ausgabe.php" eingegeben. Dabei wird aber nur "Das Wetter ist gut" verlinkt und wenn man drauf klickt wird man auf eine 404-Seite weitergeleitet mit folgender Angabe in der URL: www.XY/"ausgabe.php?id={$id}\"

Beim zweiten von dir genannten PHP-Code habe ich wieder die ID in 1 umgewandelt und bei ""SELECT * FROM news WHERE id=" statt "news" "ausgabe". Habe diese Angaben in ausgabe.php gespeichert, aber der Code wird leider nicht umgesetzt.

Oh je, ich hoffe, ihr habt Nachsehen mit mir. Mir fehlt viel an Grundwissen, aber ich bin lernwillig und freue mich über jeden Hinweis über mögliche Fehlerquellen.

Vielen Dank!

Lieben Gruß
Nahla
 
Wenn du hier mal sowohl den Code für den Link, als auch den Code der ausgabe.php posten würdest, kann ich oder jemand anderes dir bestimmt helfen. ;)
 
Oh je, das habe ich ganz vergessen, danke für die Erinnerung.

Also hierbei handelt sich wie im ersten Beitrag bereits geschrieben um dieses Tutorial.

Der Code für ausgabe.php lautet:
PHP:
head
titleAlte HTML Seite/title
/head
 
body
<? include ("tpnews/inc/hp_ausgabe.inc.php"); ?>
/body
/html

Dabei wird hp_ausgabe.inc.php mit folgendem Code includet:
PHP:
<?
include ("tpnews/inc/opendb.inc.php"); // DB öffen
// Auslesen der News
$q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC ";
$r_select=mysql_query($q_select);
while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC))
{
    // Einlesen der Vorlage news.inc.php
    $strVorlage="";
    $arrVorlageZeilen=file("tpnews/tpl/news.inc.php");
    // Zusammensetzen der Vorlage
    foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; }
    // Datum zusammenstellen
    $intDatePart=explode("-", $strAusgabe[startdatum]);
    $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit];
    // Ersetzen der Platzhalter ##NAME##
    $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);     
    $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);     
    $strVorlage=ereg_replace("##TITEL##",$strAusgabe[titel],$strVorlage);     
    $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);     
    // Augabe der News
    echo $strVorlage;  
}
?>

Ich weiß allerdings nicht, was du mit dem Code für den Link meinst, Lime. :-(

Bitte lasst mich wissen, wenn ich mit ausgabe.php falsch liege. Werde dann nochmal das Tutorial nach einer evtl. dafür geeigneteren Datei durchforsten.
Ganz schön schwere Kost für einen Laien wie mich.
:google: läuft bei mir durch meine vielen Suchanfragen diesbezüglich schon heiß. :D
 
Ok die Datei hilft mir zwar schon weiter, aber mich interessiert die Datei, in der alle News übersichtlich dargestellt werden. Wo du also eine Liste hast, mit allen News, die du dann einzeln anklicken können sollst, damit man sie im einzelnen sieht. Weil ich denke, da ist der Hund vergraben...
 
Bei ausgabe.php sieht man alle News übersichtlich, allerdings kann man sie nicht anklicken, die Titel der jeweiligen News stehen nur als Text.
Hatte in meinem ersten Beitrag deshalb geschrieben, dass ich vermute, dass man in der Datenbank etwas ändern muss, damit er den Titel eine URL zuteilt.
Aber ich habe überhaupt keine Vorstellung davon, wie das funktionieren soll.

Laut dem Tutorial erstellt man mit folgendem Code die Tabelle in der Datenbank:
PHP:
 CREATE TABLE `tp_news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titel` tinytext NOT NULL,
`nachricht` text NOT NULL,
`startdatum` date NOT NULL DEFAULT '0000-00-00',
`startzeit` time NOT NULL DEFAULT '00:00:00',
`autor` tinytext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) TYPE=MyISAM;

Hoffentlich weißt du Rat oder vielleicht eine Quelle, wo ich fündig werden könnte, da Google diesbezüglich nicht viel hergibt. :(
 
Ah, in Ordnung.
Persönlich finde ich den Code etwas wirr und vielleicht auch "zu komplexx" geschrieben, aber ein Lösungsansatz wäre folgender:

PHP:
<? 
include ("tpnews/inc/opendb.inc.php"); // DB öffen 
// Auslesen der News 
$q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC "; 
$r_select=mysql_query($q_select); 
while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC)) 
{ 
    // Einlesen der Vorlage news.inc.php 
    $strVorlage=""; 
    $arrVorlageZeilen=file("tpnews/tpl/news.inc.php"); 
    // Zusammensetzen der Vorlage 
    foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; } 
    // Datum zusammenstellen 
    $intDatePart=explode("-", $strAusgabe[startdatum]); 
    $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit]; 

    //verlinken des Titels
    $titel = '<a href="hierdeinedatei.php?id='.$strAusgabe[id].'">'.$strAusgabe[titel].'</a>';
    // Ersetzen der Platzhalter ##NAME##
    $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);      
    $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);      
    $strVorlage=ereg_replace("##TITEL##",$strAusgabe[titel],$strVorlage);      
    $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);     
    // Augabe der News 
    echo $strVorlage;   
} 
?>

hierdeinedatei.php musst du ändern, in den gewünschten Namen.
Die Datei kannst du dann folglich so programmieren:

PHP:
<?PHP
if(isset($_GET['id']))
{
   include ("tpnews/inc/opendb.inc.php"); // DB öffen 
   // Auslesen der News 
   $q_select="SELECT * FROM tp_news WHERE id=".mysql_real_escape_string($_GET['id']);
   $q_qry = mysql_query($q_select);
   $row = mysql_fetch_object($q_qry);
   //Anzeigen der News...
   echo "ID: ".$row->id."<br />";
   echo "Titel: ".$row->titel."<br />";
   echo "Nachricht: ".$row->nachricht."<br />";
   echo "Datum: ".$row->startdatum.", um ".$row->startzeit." Uhr<br />";
   echo "Autor: ".$row->autor;
} else {
   echo 'Hier gibt es nichts zu sehen.';
}
?>

Ich habs jetzt nicht getestet, aber sollte soweit eigentlich funktionieren. An der Formatierung kannst du natürlich alles ändern, soll ja nur ein kurzes Beispiel sein.
 
Vielen Dank für deine Mühe, die Codes zu erstellen, Lime. :)

Ich habs ausprobiert und hierdeinedatei.php in titel.php umbenannt, doch leider sind die einzelnen News weiterhin nicht anklickbar. :(

Ich hab mir die Codes mehrfach durchgelesen, aber konnte nicht erkennen, wo ich noch etwas anpassen muss.
Die Vorgehensweise leuchtet mir ein, allerdings kann ich nicht die Ursache erkennen, weshalb es nicht funktioniert.
 
Zurück