1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

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

Dieses Thema im Forum "Relationale Datenbanksysteme" wurde erstellt von Nahla, 22. März 2012.

  1. Nahla

    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
  2. Lime

    Lime frisch fruchtig

    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)
    Code (PHP):
    1.  
    2. $id = 5; //kannst du auch per mysql-Abfrage hier hinschreiben lassen
    3. echo "<a href=\"news.php?id={$id}\">Das Wetter ist gut.</a>";
    In der Seite "news.php" kannst du die ID folgend abfragen:
    Code (PHP):
    1. $id = $_GET['id'];
    2. echo $id; //ausgabe = 5
    3.  
    4. $sqlCmd = "SELECT * FROM news WHERE id=".mysql_real_escape_string($id); //mysql_real_escape_string gegen mysql-injection.
    5. //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...
  3. Nahla

    Nahla Grünschnabel

    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
  4. Lime

    Lime frisch fruchtig

    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. ;)
  5. Nahla

    Nahla Grünschnabel

    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:
    1. head
    2. titleAlte HTML Seite/title
    3. /head
    4.  
    5. body
    6. <? include ("tpnews/inc/hp_ausgabe.inc.php"); ?>
    7. /body
    8. /html
    Dabei wird hp_ausgabe.inc.php mit folgendem Code includet:
    PHP:
    1. <?
    2. include ("tpnews/inc/opendb.inc.php"); // DB öffen
    3. // Auslesen der News
    4. $q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC ";
    5. $r_select=mysql_query($q_select);
    6. while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC))
    7. {
    8.     // Einlesen der Vorlage news.inc.php
    9.     $strVorlage="";
    10.     $arrVorlageZeilen=file("tpnews/tpl/news.inc.php");
    11.     // Zusammensetzen der Vorlage
    12.     foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; }
    13.     // Datum zusammenstellen
    14.     $intDatePart=explode("-", $strAusgabe[startdatum]);
    15.     $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit];
    16.     // Ersetzen der Platzhalter ##NAME##
    17.     $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);    
    18.     $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);    
    19.     $strVorlage=ereg_replace("##TITEL##",$strAusgabe[titel],$strVorlage);    
    20.     $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);    
    21.     // Augabe der News
    22.     echo $strVorlage;  
    23. }
    24. ?>
    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
  6. Lime

    Lime frisch fruchtig

    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...
  7. Nahla

    Nahla Grünschnabel

    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:
    1.  CREATE TABLE `tp_news` (
    2. `id` int(11) NOT NULL AUTO_INCREMENT,
    3. `titel` tinytext NOT NULL,
    4. `nachricht` text NOT NULL,
    5. `startdatum` date NOT NULL DEFAULT '0000-00-00',
    6. `startzeit` time NOT NULL DEFAULT '00:00:00',
    7. `autor` tinytext NOT NULL,
    8. PRIMARY KEY (`id`),
    9. UNIQUE KEY `id` (`id`)
    10. ) 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. :(
  8. Lime

    Lime frisch fruchtig

    Ah, in Ordnung.
    Persönlich finde ich den Code etwas wirr und vielleicht auch "zu komplexx" geschrieben, aber ein Lösungsansatz wäre folgender:

    Code (PHP):
    1.  
    2. <?
    3. include ("tpnews/inc/opendb.inc.php"); // DB öffen
    4. // Auslesen der News
    5. $q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC ";
    6. $r_select=mysql_query($q_select);
    7. while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC))
    8. {
    9.     // Einlesen der Vorlage news.inc.php
    10.     $strVorlage="";
    11.     $arrVorlageZeilen=file("tpnews/tpl/news.inc.php");
    12.     // Zusammensetzen der Vorlage
    13.     foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; }
    14.     // Datum zusammenstellen
    15.     $intDatePart=explode("-", $strAusgabe[startdatum]);
    16.     $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit];
    17.  
    18.     //verlinken des Titels
    19.     $titel = '<a href="hierdeinedatei.php?id='.$strAusgabe[id].'">'.$strAusgabe[titel].'</a>';
    20.     // Ersetzen der Platzhalter ##NAME##
    21.     $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);      
    22.     $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);      
    23.     $strVorlage=ereg_replace("##TITEL##",$strAusgabe[titel],$strVorlage);      
    24.     $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);    
    25.     // Augabe der News
    26.     echo $strVorlage;  
    27. }
    28. ?>
    29.  
    hierdeinedatei.php musst du ändern, in den gewünschten Namen.
    Die Datei kannst du dann folglich so programmieren:

    Code (PHP):
    1.  
    2. <?PHP
    3. if(isset($_GET['id']))
    4. {
    5.    include ("tpnews/inc/opendb.inc.php"); // DB öffen
    6.    // Auslesen der News
    7.    $q_select="SELECT * FROM tp_news WHERE id=".mysql_real_escape_string($_GET['id']);
    8.    $q_qry = mysql_query($q_select);
    9.    $row = mysql_fetch_object($q_qry);
    10.    //Anzeigen der News...
    11.    echo "ID: ".$row->id."<br />";
    12.    echo "Titel: ".$row->titel."<br />";
    13.    echo "Nachricht: ".$row->nachricht."<br />";
    14.    echo "Datum: ".$row->startdatum.", um ".$row->startzeit." Uhr<br />";
    15.    echo "Autor: ".$row->autor;
    16. } else {
    17.    echo 'Hier gibt es nichts zu sehen.';
    18. }
    19. ?>
    20.  
    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.
  9. Nahla

    Nahla Grünschnabel

    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.
  10. Lime

    Lime frisch fruchtig

    Kommt ein Fehler? Wenn ja, welcher?
  11. Nahla

    Nahla Grünschnabel

    Es passiert leider gar nichts. Die zwei Titel zu den News stehen so wie zuvor dort und sind nicht anklickbar.
  12. Lime

    Lime frisch fruchtig

    Mein Fehler. Ich generiere extra eine Variable für den klickbaren Titel und schreib sie nicht richtig rein...

    Code (PHP):
    1.  
    2. <?
    3. include ("tpnews/inc/opendb.inc.php"); // DB öffen
    4. // Auslesen der News
    5. $q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC ";
    6. $r_select=mysql_query($q_select);
    7. while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC))
    8. {
    9.     // Einlesen der Vorlage news.inc.php
    10.     $strVorlage="";
    11.     $arrVorlageZeilen=file("tpnews/tpl/news.inc.php");
    12.     // Zusammensetzen der Vorlage
    13.     foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; }
    14.     // Datum zusammenstellen
    15.     $intDatePart=explode("-", $strAusgabe[startdatum]);
    16.     $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit];
    17.  
    18.     //verlinken des Titels
    19.     $titel = '<a href="titel.php?id='.$strAusgabe[id].'">'.$strAusgabe[titel].'</a>';
    20.     // Ersetzen der Platzhalter ##NAME##
    21.     $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);      
    22.     $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);      
    23.     $strVorlage=ereg_replace("##TITEL##",$titel,$strVorlage);      
    24.     $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);    
    25.     // Augabe der News
    26.     echo $strVorlage;  
    27. }
    28. ?>
    29.  
    30. Jetzt sollte zumindest der Titel anklickbar sein. Habe die Datei schon als titel.php festgelegt. Vielleicht klappts ja diesmal auf Anhieb.
    31.  

Diese Seite empfehlen