PHP Editor inhalt auf andere Php Seite übertragen

  • Hallo ForenUser,
    ich freue mich nun in euerm Forum zu sein, und hoffe dass dies der Richtige bereich für meine Frage ist.

    Nun möchte ich aber auch mal zu meiner Frage kommen, ich habe vor eine Art News Seite zu erstellen, dafür habe ich bereits einen Editor, der im Internen Bereich meiner Homepage liegt, nun habe ich aber ein Problem den inhalt des Editors auf eine Andere Php Seite (als die wo der editor eingebunden ist) zu übertragen und auszugeben.

    Folgende Sourcecodes sind Betroffen:

    internal.php

    index.php

    Bekomme dann aber folgenden fehler auf der index.php angezeigt:

    Code
    [B]Notice[/B]: Undefined index: editor1 in [B]G:\Benutzer\Documents\xampp\htdocs\loginscript-master\index.php[/B] on line [B]26[/B]


    Versuche ich es aber in der internal.php auszugeben funktioniert es. Es ist warscheinlich ein echt dummer anfänger fehler, aber ich bitte dennoch um ernsthafte Hilfe.

    mfg Sullaysur

  • Das $_POST Array und insbesondere der Eintrag $_POST['editor1'], beinhaltet nur dann Werte, wenn du das Array vorher mittels eines Formulars (<form target=".." method="post"> ...deine Inputs... </form>) an die Seite gesendet hast, auf der du mit den Werten arbeiten willst. Wenn du das nichts machst, existiert weder $_POST['editor1'].. noch kannst du diesen Inhalt mit echo ausgeben.
    Das müsste im übrigen bei beiden deiner php Seiten so passieren, zumindest beim ersten Aufruf der Seite 'internal.php', denn $_POST['editor1'] aus dem Input..

    PHP
    <textarea name="editor1" id="editor1" rows="10" cols="80">


    existiert erst dann, wenn du den Wert von textarea mit

    PHP
    <input type="submit">


    abgeschickt hast.

    if(!sleep)

    {$sheep++;}

  • Würde das halt gerne abspeichern, damit dass da dann stehen bleibt, praktisch wie die Beiträge hier im Forum, und in einem anderen Forum meinten die das klappt so, aber hat es nicht und dann wurden sie unfreundlich.
    Hoffe hier finde ich dafür eine Ordentlich Antwort.

    Damit man sich in etwa vorstellen kann wie das aussehen soll:

    So wie die Beiträge da untereinander sind, möchte ich die Texte auch aus dem Editor in die seite einspeichern, aber wie mache ich das?

  • Das ist wie ein Gästebuch, indem neueste Beiträge ganz oben angezeigt werden und dann folgen die davor geposteten Beiträge. Mit der Datei, die das Formular enthält, liest du die bisherige Datei ein, das geht auch in EINE Variable, setzt diesen eingelesenen Inhalt hinter die Formulardaten und speicherst das dann alles zusammen ab. Wird die neue Datei im Browser aufgerufen, steht der neueste Beitrag ganz oben.

    Oder habe ich dein Anliegen falsch verstanden?

    Gegen Mods kommt man nicht an, die haben immer Recht. Sind scheinbar nicht kritikfähig.

  • Nein das ist genau dass was ich haben möchte, dass immer wenn ich einen neuen "post" mache, dass dann der Beitrag ganz nach oben gestellt wird und alle anderen darunter gelistet werden.

  • Ersetze mal die Codezeile

    HTML
    <form method="post">


    in deiner 'internal.php' durch

    HTML
    <form action="index.php" method="post">


    Damit sollte dann deine Eingabe bei klicken auf Submit nach index.php übertragen werden.
    Es sollte dann bei

    PHP
    echo $_POST['editor1'];


    auch die übergebenen Inhalte angezeigt werden.
    Damit wird allerdings nichts gespeichert... und vorherige Einträge sind auch keine da, noch hast du ja nichts gespeichert

    if(!sleep)

    {$sheep++;}


  • Wie kann ich das ganze nun permanent abspeichern ?


    In einer Datenbank, dazu gibt es massenhaft Tutorials im Internet, einfach mal ein paar davon durcharbeiten.

  • Genau, dass ist richtig, deswegen wende ich mich ja an dieses Forum, in der Hoffnung, dass man mir hier mit solchen Antworten halt hilft.

    Also eine Verbindung zu einer Datenbak habe ich schon, benötige ich ja für mein Login Script, dann könnte ich die wieder nehmen und würde da dann eine neue Tabelle anlegen.
    Würde sich folgende Tabelle dafür eignen?

    Die funktion zum einfügen der daten:

    PHP
    <?php
    $statement = $pdo->prepare("INSERT INTO posts (created_at, created_by, html_code) VALUES (?, ?, ?)");
    $statement->execute(array('', '', 'editor_1'));
    ?>

    Dann müsste die folgende Abfrage passend dazu sein!?

    PHP
    <?php 
        $statement = $pdo->prepare("SELECT * FROM posts ORDER BY id");
        $result = $statement->execute();
        while($row = $statement->fetch()) {
            echo "Erstellt am: ".$row['created_at']."<br/>";
            echo "Editiert am: ".$row['updated_at']."<br/>";
            echo "Editiert am: ".$row['created_by']."<br/>";
            echo "".$row['created_by']."";
        }
    ?>

    Falls nicht, wäre ich für hilfe dankbar.

    4 Mal editiert, zuletzt von Sullaysur (20. Februar 2019 um 11:03) aus folgendem Grund: Informationen angefügt

  • Nun ja... der Weg ist schon mal richtig.
    Du solltest beim schreiben in die Datenbank aber nicht einen String nehmen

    PHP
    $statement->execute(array('', '', 'editor_1'));


    Sondern die Variabel übergeben, die den Wert enthält, den du speichern willst...

    PHP
    $statement->execute(array('', '', $_POST['editor_1']));


    Dann führt die Anweisung 'ORDER BY id' wohl dazu, dass du den ältesten Beitrag zuerst ausgibst - du wolltest doch den Neuesten ganz oben haben... oder?
    Schau mal hier
    https://www.w3schools.com/sql/sql_orderby.asp
    Und dann solltest du bei der Ausgabe des Ergebnisse in der letzten 'echo' Zeile nicht noch einmal den Wert

    PHP
    echo "".$row['created_by']."";


    nutzen. Sonst hast du 'created_by' doppelt drin und der Text aus 'html_code' wird gar nicht ausgegeben.

    if(!sleep)

    {$sheep++;}

  • Ich habe nun folgende fehler behoben:

    • Variable anstatt den String übergeben
    • Order by 'id' in Order by 'created_at' geändert
    • im letzten echo created_by durch html_code ersetzt

    Nun muss ich dass ja nur noch in die index.php einbinden!?

  • Ja... aber nun mach doch einfach mal - wenn es nicht klappt, kannst du ja nachfragen. Wird schon schief gehen.
    Denk aber daran, du musst du Datenbank 'öffnen', bevor du reinschreiben und lesen kannst.

    if(!sleep)

    {$sheep++;}

  • Habe es nun eingebeunden, wird aber nicht über den Button übergeben, wie muss ich das bei dem Submit button einstellen, damit dass in die Db eingetragen wird?

    Code
    CREATE TABLE IF NOT EXISTS `posts` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `updated_at` timestamp NULL DEFAULT NULL,
      `created_by` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `html_code` Text COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    index.php

    internal.php

  • Oh jeeeeee.... so gar nicht! Was ist denn mit den Änderungen, die du nach meinem Beitrag #6 schon durchgeführt hattest und wo dann das $_POST['editor1'] schon übergeben und von dir auf dem Bildschirm ausgegeben wurde? ... schon wieder vergessen?
    Und dann gehört der Code für das Schreiben in die Datenbank natürlich auch in die 'index.php'! In der 'internal.php' existiert die Variabel $_POST['editor1'] nicht, die wird erst erzeugt und an die Adresse gesendet, die im action="..." angegeben ist, wenn du auf Submit klickst - du müsstest jedes mal eine Fehlermeldung bekommen, wenn du die nutzen willst. Hast du die Fehlermeldungen vom PHP deaktiviert?
    Also mach das mal richtig und poste deinen korrigierten Code, wenn du weiterhin Probleme damit hast.

    if(!sleep)

    {$sheep++;}

  • Ok, ist abgeändert und funktioniert auch, nur noch 2 Fehler:


    • Siehe Bild! Das passiert wenn man die Seite neu läd, wie bekomme ich das weg?
    • Siehe Bild! Wie kann ich das ganze jetzt so einstellen, dass er pro "Post" einen solchen container erstellt bzw nutzt und nicht alle in einen packt?
    • Die Beiträge werden immernoch der neuste unten und der älteste oben gelistet, wie kann ich das umkehren?

    Bild zu 1:

    Bild zu 2:

    Einmal editiert, zuletzt von Sullaysur (20. Februar 2019 um 19:33)

  • zu 1:
    Denk mal darüber nach.. du aktualisierst die Seite oder rufst die Seite auf, ohne vorher einen Eintrag gemacht und mit submit abgeschickt hast... naaa? Dann ist die Variabel $_POST['editor1'] nicht gesetzt - du musst also in deiner Index Datei einen Weg finden, wie du erkennst, ob gesetzt oder nicht gesetzt ist und für den Fall, dass es diese Variabel nicht gibt, musst du den Codeteil, wo sie benutzt wird, eben überspringen.
    Nutze mal deine Suchmaschine und schau was du unter 'PHP if isset'... bzw 'PHP if !isset' findest - und dann nochmal der dringende Rat, befasse dich mit den Grundlagen von PHP, sonst wirst du nicht viel Spaß mit deiner Webseite haben.
    zu 2:
    Indem du in deiner 'while' Schleife einfach zusätzlich zu den Werten, die du 'echo' ausgibst, eben noch einen Container ausgibst, den du mit CSS so formatierst, dass das von dir gewünschte Ergebnis rauskommt.
    zu 3:
    Das habe ich dir weiter oben (Beitrag #12) schon beantwortet... schau dir den Link in diesem Beitrag nochmal genau an und versuche herauszubekommen, was 'ASC' und 'DESC' in einer solchen Abfrage wohl für eine Bedeutung haben?

    if(!sleep)

    {$sheep++;}

  • 1. Ok einfache if Abfrage:

    Code
    if (isset($_POST['editor1'])) { $statement...}

    stimmts?
    2. Klar, wieso stell ich eigentlich so eine dumme Frage?
    3. Danke, hab das irgendwie übersehen mit dem DESC.

    4. Jetzt habe ich noch eine letzte Frage, ist es möglich die Variable username aus der internal.php mit in die index.php zu übertragen, wenn man auf den senden button drückt? (die rufe ich dort so ab: echo htmlentities($user['username']);)

  • Der richtige Weg - ja, mit if(isset... stellst du sicher, dass $_POST['editor1'] vorhanden ist, bevor du damit arbeitest.

    zu 4:
    Ich habe zwar keine Ahnung, wo diese Variabel $user['username'] jetzt herkommt, aber wenn du sie mit dem submit Button auch nach index übertragen willst, dann schreib einfach in dieses Formular, in dem auch schon dein editor1 drin ist einen zusätzlichen input type="hidden" mit dem value="$user['username']"
    Jetzt musst du nur entscheiden, ob dieser Input im HTML Text oder im PHP Code drin steht?
    HTML würde so aussehen:

    HTML
    <input type="hidden" name="username" value="<?php echo $user['username'];?>">


    und als PHP so:

    PHP
    echo "<input type=\"hidden\" name=\"username\"  value=\"".$user['username']."\">";

    Und auf der index Seite kommt dann $_POST['username'] als Variabel an.

    if(!sleep)

    {$sheep++;}