[ERLEDIGT] Inhalt einer Reihe auf neuer Seite anzeigen

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Lu4ap

Neues Mitglied
7 März 2020
11
0
1
36
Guten Morgen an alle,

seit knapp 4 Monaten sitze ich an diesem kleinem Porjekt und bin an einem Punkt wo ich nicht mehr weiter weiß. Ich habe vorher nie mit HTML, CSS, PHP und mysql zu tun gehabt und habe mir alles selber beigebracht mit Hilfe des guten alten Internets. Ich weiß das vieles nicht perfekt ist aber ich bin mit meiner Arbeit bisher ganz zufrieden.

Ich habe folgendes Problem. Ich kann mit mit Hilfe einer Formulas Daten in eine Datenbank einlesen und diese auch wieder auslesen. Ich kann auch die Daten in einen Container packen und diesen als Link darstellen lassen.

test 1.jpg

Jedoch möchte ich jetzt, dass wenn ich auf den Link klicke, der Inhalt dieser Reihe aus der Datenbank auf einer komplett neuen Seite erscheint. Damit komme ich absolut nicht weiter.

Ich stelle euch auch die Codes hiermit zur verfügung um einmal zu gucken wo vlt das Problem liegt.

index.php
ist die Startseite

Code:
<?php
    session_start();
    
    if(isset($_GET["section"]))
    {
        $section = $_GET["section"];
    }
    else
    {
        $section = "";
    }
?>
<html>
    <head>
    <title>TEST</title>
    <meta charset="UTF-8" />
        
    <link rel="stylesheet" type="text/css" href="style/style.css"/>
    </head>
    <body>
        <div id="wrapper">
            <header>
            </header>
            <?php include ("menu.php");?>
            <div id="content">
            <?php include ("sites.php");?>
            </div>
            <footer>
            <?php include ("footer.php");?>   
            </footer>
        </div>
    </body>
</html>

eintrag.php - Ist das Formular mit dem in die Datenbank geschrieben wird

Code:
<?php

    

    if(isset($_GET['eintrag']))

    {

    $ID = $_GET['ID'];

    $Titel = $_GET['Titel'];

    $Tag = $_GET['Tag'];

    $Monat = $_GET['Monat'];

    $Jahr = $_GET['Jahr'];

    $Teaser = $_GET['Teaser'];

    $Text = $_GET['Text'];

    

    include_once 'mysql.php';

    

    $sql = "INSERT INTO eintrag (ID, Titel, Tag, Monat, Jahr, Teaser, Text) VALUES ('$ID', '$Titel', '$Tag', '$Monat', '$Jahr','$Teaser', '$Text')";

    echo $sql;

    

    $ergebnis = mysqli_query($db_con, $sql);

    }   

?>   

<form action="index.php?section=eintrag" method="POST">

    <table>

        <tr>

            <td>

                Titel

            </td>

            <td>

                <textarea name="Titel" cols="80"></textarea>

            <td>

        </tr>

            <td valign="center">

                Datum

            </td>

            <td>

                Tag<textarea name="Tag" cols="2" rows="1"></textarea>

                Monat<textarea name="Monat" cols="2" rows="1"></textarea>

                Jahr<textarea name="Jahr" cols="4" rows="1"></textarea>

            <td>

        </tr>

        <tr>

            <td valign="center">

                Teaser:

            </td>

            <td>

                <textarea name="Teaser" cols="80" rows="10"></textarea>

            <td>       

        </tr>

        <tr>

            <td valign="center">

                Text:

            </td>

            <td>

                <textarea name="Text" cols="80" rows="25"></textarea>

            <td>       

        </tr>

        <tr>       

            <td>

                <input type="submit" name="eintrag" value="SENDEN">

            <td>       

        </tr>

    </table>

</form>

startseite.php - Gibt den Inhalt der Datenbank als ein kleiner Container aus mit Datum und einen kurzen Teaser über den Inhalt

Code:
<?
        include_once 'mysql.php';   
        
        $db_erg = mysqli_query($db_con, "SELECT `ID`,`Titel`, `Tag`, `Monat`, `Jahr`, `Teaser`, `Text` FROM `eintrag` ORDER BY `ID` DESC");
        
        echo "<div class = container>";
        while(list($ID, $Titel, $Tag, $Monat, $Jahr, $Teaser, $Text, $Fazit) = mysqli_fetch_row($db_erg))
        {
                echo "<a href='index.php?section=test1'><div class = item>";
                echo "<table border='0' width='100%'>";
                echo "<tr>";
                echo "<td width='20%' style='border-right: 3px solid #9b9b9b'><center><tag>$Tag</tag><br><monat>$Monat</monat><br><monat>$Jahr</monat></center></td>";
                echo "<td align='left'><center><titel>$Titel</titel></center></td>";
                echo "</tr>";
                echo "<tr>";
                echo "<td colspan='2'>$Teaser</td>";
                echo "</tr>";
                echo "</table>";
                echo "</div>";   
                echo "</a>";
        }
        echo "</div>";
?>

test1.php - Die Seite wo die entsprechende Reihe der Datenbank ausgegeben werden soll

Code:
<?
        include_once 'mysql.php';   


        $db_erg = mysqli_query($db_con, "SELECT `ID`,`Titel`, `Tag`, `Monat`, `Jahr`, `Teaser`, `Text` FROM `eintrag` ORDER BY `ID` DESC");
        while(list($ID, $Titel, $Tag, $Teaser, $Text, $Fazit) = mysqli_fetch_row($db_erg))
        {
                echo "<table border='1' width='100%'>";
                echo "<tr>";
                echo "<td width='15%'>$Tag</td>";
                echo "<td align='left'>$Titel</td>";
                echo "</tr>";
                echo "<td colspan='2'>$Text</td>";
                echo "</table>";
                echo "<br>";
                echo "<br>&nbsp";
        }
?>

Ich weiß es ist an vielen Stellen bestimmt nicht sauber programmiert aber ich bin auch meine getane Arbeit bisher ganz stolz. Ich würde mich sehr über Hilfe freuen. Ich bin auch gerne dazu bereit etwas neues zu lernen, damit das Projekt klappt.
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.664
196
63
So wie ich das sehe, kann doch nichts in die Datenbank geschrieben werden, denn das Formular wird per
Code:
method="POST"
abgeschickt, aber im Script werden die Daten per $_GET abgefragt.

Dann solltest du Tag, Monat und Jahr nicht einzeln in die Datenbank schreiben, denn dafür gibt es den Datentyp date

Außerdem schreibst du die Daten ohne zu Escapen in die Datenbank, das ist gefährlich, siehe daher https://www.php.net/manual/de/mysqli.real-escape-string.php

Wo kommt $_GET['ID'] her? Die ID solltest du nicht selber bearbeiten, sondern das der Datenbank überlassen, in dem du die Spalte auf autoincrement stellst.

Dann solltest du an den Anfang deiner Scripte diese Zeilen einbauen:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
Damit werden dir von PHP festgestellte Probleme angezeigt.

Deine echo-Marathon's solltest du eleminieren, das geht auch so:
PHP:
echo "<table border='1' width='100%'>
       <tr>
         <td width='15%'>$Tag</td>
         td align='left'>$Titel</td>
       </tr>
         <td colspan='2'>$Text</td>
      </table>";

Und dein HTML-Code ist veraltet, width, align, center, etc. regelt man per CSS

So, für den Anfang hast du erst mal genug zu tun. Wenn du das alles erledigt hast, wird dir das weiterhelfen:

Lese die Daten aus und erzeuge einen Link, an dem die ID aus der Datenbank als Parameter hängt. Dann kannst du in dem entsprechendem Script per $_GET an die ID kommen, die du dann mit einem

where id=$id

an die Query hängst.
 

Lu4ap

Neues Mitglied
7 März 2020
11
0
1
36
In welcher Datei muss ich $_GET eintragen um an die ID zukommen und an welche Querey muss ich das genau hängen???
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.664
196
63
PHP:
while(list($ID, $Titel, $Tag, $Monat, $Jahr, $Teaser, $Text, $Fazit) = mysqli_fetch_row($db_erg))
{
  echo "<div class = item>
         <table border='0' width='100%'>
           <tr>
            <td style='border-right: 3px solid #9b9b9b; text-align:center;'>$Tag<br>$Monat<br>$Jahr</td>
            <td style='text-align:center;'>$Titel</td>
           </tr>
           <tr>
            <td colspan='2'>$Teaser</td>
           </tr>
           <tr>
            <td colspan='2'><a href='test1.php?id=$ID'>Mehr lesen</a></td>
           </tr>
         </table>
        </div>";  
}
PHP:
if (isset($_GET['id']) && is_numeric($_GET['id']))
{
   $db_erg = mysqli_query($db_con, "SELECT
                                     `Titel`,
                                     `Tag`,
                                     `Monat`,
                                     `Jahr`,
                                     `Teaser`,
                                     `Text`
                                   FROM
                                     `eintrag`
                                   where
                                     `ID`= $id");
                                 
        while(list($Titel, $Tag, $Teaser, $Text, $Fazit) = mysqli_fetch_row($db_erg))
        {
                echo "<table border='1' width='100%'>";
                echo "<tr>";
                echo "<td width='15%'>$Tag</td>";
                echo "<td align='left'>$Titel</td>";
                echo "</tr>";
                echo "<td colspan='2'>$Text</td>";
                echo "</table>";
                echo "<br>";
                echo "<br>&nbsp";
        }
}
 

m.scatello

Senior HTML'ler
15 Februar 2017
1.664
196
63
Crossposting :mad::mad:

 

Lu4ap

Neues Mitglied
7 März 2020
11
0
1
36
Problem hat sich gelöst! Danke an die zahlreiche Hilfe! Crossposten kommt nie wieder vor! Habe es gelernt!!!!
 

Lu4ap

Neues Mitglied
7 März 2020
11
0
1
36
Ich glaube ich hatte mich falsch ausgedrück! Ich wollte, dass der Inhalt der Zeile anstelle der index.php angezeigt wird also quasi unter der Navigationsleiste. Habe es jetzt so gemacht, dass ich den Link geändert habe, so dass er auf der index.php erstmal angezeigt wird.

Code:
<a href='index.php?id=$id'>

Ist vlt nicht optimale Lösung aber es funktioniert ganz gut. Interessant wird es erst werden, wenn noch weitere Seiten hinzukommen und ich mit $section und switch arbeite aber das wird schon werden