Ankündigung

Einklappen
Keine Ankündigung bisher.

Abspeichern von Daten in einer txt datei in einer Zeile

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abspeichern von Daten in einer txt datei in einer Zeile

    Guten Tag,
    Ich habe ein Newsskript geschrieben, welches ein Formular bietet (Für die Admins) bei welchem news geschrieben werden können. Das Problem ist folgendes: Sobald man mehr als 1 zeile beim formular unter text einträgt, wird dies auch so in die txt datei übernommen. Beim auslesen geschieht nun aber folgender Fehler:
    Code:
    Notice: Undefined offset: 2 in /var/www/Dev/index.html on line 36
    Mein Code sieht wie folgt aus:
    Erstell html formular:
    HTML-Code:
    <form method="post" action="beitrag_abspeichern.php">
    <div id="beitrag_titel">Titel: <input type="text" size="100" name="Titel"></div>
     <div id="beitrag_datum">Datum:<input type="text" name="Datum"><br></div></div>
    <div id="text"> Text:</div><div id="beitrag_text"><textarea name="Text" cols="200" rows="40"></textarea><br></div>
    <div id="submit"><input type="submit" name="senden" value="Senden"></div>
    </form>
    Abspeicherungs Skript:
    PHP-Code:
    <?php
    $titel 
    $_POST['Titel'];
    $datum $_POST['Datum'];
    $text $_POST['Text'];
    $daten $titel "|" $datum ."|"$text "\n";
    $datei fopen("../news.db","a+");
    fwrite($datei$daten);
    fclose($datei);
    echo
    "Skript ausgeführt!";
    ?>
    Auslese skript:
    PHP-Code:
    <?php
    $datei 
    file("news.db");
    krsort($datei);
    foreach(
    $datei AS $ausgabe)
        {
        
    $zerlegen explode("|"$ausgabe);    
        echo
    "<h1>$zerlegen[0] - $zerlegen[1]</h1><br>$zerlegen[2]<br><br>";
        }
        
    ?>
    Ps: Zeile 36 ist übrigens folgende:
    PHP-Code:
        echo"<h1>$zerlegen[0] - $zerlegen[1]</h1><br>$zerlegen[2]<br><br>"
    Ich hoffe ihr könnt mir helfen. Grüße anghenfil
    Nützliches:


  • #2
    Du schreibst immer einen Zeilenumbruch in die Datei und somit wird am Ende deiner foreach-Schleife die leere Zeile per explode berbeitet und das geht dann natürlich schief. Zeilen in der Schleife trimmen und auf Länge prüfen sollte helfen.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Danke für deine Antwort,
      Ich vermute mal, du meintest das "\n"
      Ich habe es entfernt, doch leider nützt das auch nichts. Ich bekomme immernoch den selben fehler. So siehts übrigens aus:

      Achso meine txt datei wo alles abgespeichert wird sieht von der theorie her so aus:

      Titel d. News | Datum | Text der News

      Wenn allerdings in Mehrere Zeilen geschrieben wird sieht es so aus:

      Mein Titel | Mein Datum | Anfang des Textes
      Ende textes

      Grüße Anghenfil
      Nützliches:

      Kommentar


      • #4
        Benutz bitte eine Datenbank, wenigstens SQLite, oder ein besseres Datenformat wie JSON, dann kannst du solche Probleme vermeiden. Wenn du den Zeilenumbruch als Trennzeichen nimmst sollte er zwangsläufig konsequent rausgeschmissen und für nichts anderes, auch nicht für den Text, verwendet werden.

        (Google: SQLite; PHP.net: [MAN]json_encode[/MAN], [MAN]json_decode[/MAN], [MAN]array[/MAN], zur Not auch [MAN]serialize[/MAN])
        You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

        Kommentar


        • #5
          Hmm ok, ich werde mich dann wohl in sachen (My)SQL schlau machen, wenn es keine andere lösung gibt. Hatte extra keine Datenbank benutzt, da ich davon zumindest noch keine ahnung habe.
          Nützliches:

          Kommentar


          • #6
            Es sprechen nur die üblichen Probleme (z.B. File Locking, Geschwindigkeit, ACID) dagegen eine Textdatei zu benutzen, kannst du machen, wenn du unbedingt willst. Aber "ich benutze ein eigenes Format und baue mir einen eigenen Parser der alle Fallstricke berücksichtigt und eine vernünftige API bietet" ist was für Fortgeschrittene. Mit ner Datenbank kannst du das Problem ein Level weiter oben anpacken, die kann das praktisch schon alles, tiefer kannst du später immernoch gehen.
            You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

            Kommentar


            • #7
              Zitat von chorn Beitrag anzeigen
              Benutz bitte eine Datenbank, wenigstens SQLite, oder ein besseres Datenformat wie JSON,
              oder eine DB, die JSON kann, wie z.B. PostgreSQL.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Ok, vielen dank @all Ich habe es jetzt per mysql gemacht. Mein einziges Problem ist jetzt nur noch das ich möchte das nach 5 beiträgen/news automatisch die nächsten 5 beiträge auf einer 2. seite stehen. Ich hoffe ihr könnt mir helfen... Achja hier jetzt mal die schnipsel wie ich es gemacht habe:

                Die News anzeige:
                PHP-Code:
                <?php
                //Standart connect + auswahl der Datenbank
                $verbindung mysql_connect ("localhost","www"'jh/!$?"%KCSjk')
                or die (
                "keine Verbindung möglich.Benutzername oder Passwort sind falsch");
                mysql_select_db("www")
                or die (
                "Die Datenbank existiert nicht.");

                $ergebnis mysql_query("SELECT * FROM news ORDER BY id DESC");
                while(
                $row mysql_fetch_object($ergebnis))
                   {
                   echo 
                "<h1>$row->titel $row->datum </h1><br> $row->inhalt <br><br>";
                }
                ?>
                Die Abspeicherung:
                PHP-Code:
                <?php
                $titel 
                $_POST['Titel'];
                $datum $_POST['Datum'];
                $inhalt $_POST['Text'];
                //Standart connect + auswahl der Datenbank
                $verbindung mysql_connect ("localhost","www"'***********')
                or die (
                "keine Verbindung möglich.Benutzername oder Passwort sind falsch");
                mysql_select_db("www")
                or die (
                "Die Datenbank existiert nicht.");

                //Eintrag machen 
                $eintrag "INSERT INTO news(titel,datum,inhalt) VALUES('$titel', '$datum', '$inhalt')";

                $eintragen mysql_query($eintrag);
                ?>
                Grüße Anghenfil
                Nützliches:

                Kommentar


                • #9
                  Google -> Pagination
                  You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

                  Kommentar


                  • #10
                    Ok...Ich habe nun auch die pagination umgesetzt. Ich poste hier mal meinen aktuellen Code. Vielleicht gibt es ja Verbesserungsvorschläge:

                    Der Skript zur Ausgabe:
                    PHP-Code:
                    //Seiten Abfrage
                    @$seite $_GET["seite"];

                    //Wenn keine Seite angegeben --> 1. Seite
                    if(!isset($seite))
                        {
                        
                    $seite 1;
                        }

                    //Standart connect + auswahl der Datenbank
                    $link mysql_connect ("localhost","www"'**********')
                    or die (
                    "Keine Verbindung möglich.");
                    mysql_select_db("www")
                    or die (
                    "Die Datenbank existiert nicht.");

                    //Einträge pro Seite
                    $eintraege_pro_seite 5;

                    //Ausrechnen welche Spalte man zuerst ausgeben muss:
                    $start $seite $eintraege_pro_seite $eintraege_pro_seite;

                    //Tabellen Abfrage
                    $abfrage "SELECT * FROM news ORDER BY id DESC LIMIT $start$eintraege_pro_seite";
                    $ergebnis mysql_query($abfrage) OR die("Error: $abfrage <br>".mysql_error());
                    while(
                    $row mysql_fetch_object($ergebnis)) 
                          { 
                      echo 
                    "<h1>$row->titel $row->datum </h1><br> $row->inhalt <br><br>";
                        } 
                    $result mysql_query("SELECT id FROM news"); 
                    $menge mysql_num_rows($result); 

                    //Errechnen wieviele Seiten es geben wird 
                    $wieviel_seiten $menge $eintraege_pro_seite

                    //Ausgabe der Seitenlinks: 
                    echo "<div align=\"center\">"
                    echo 
                    "<b>Seite:</b> ";
                    //Ausgabe der Links zu den Seiten 
                    for($a=0$a $wieviel_seiten$a++) 
                       { 
                       
                    $b $a 1
                     
                       if(
                    $seite == $b
                          { 
                          echo 
                    "  <b>$b</b> "
                          } 

                       else 
                          { 
                          echo 
                    "  <a href=\"?seite=$b\">$b</a> "
                          } 


                       } 
                    echo 
                    "</div>"
                    Grüße Anghenfil
                    Nützliches:

                    Kommentar


                    • #11
                      Hi.

                      Ok, Ich poste hier mal meinen aktuellen Code. Vielleicht gibt es ja Verbesserungsvorschläge:
                      Ja.

                      @$seite = $_GET["seite"];
                      @-Zeichen entfernen. Zudem solltest Du prüfen, ob der GET Parameter überhaupt existiert und in dem Fall auch nummerisch ist.

                      $link = mysql_connect ("localhost","www", '**********')
                      or die ("Keine Verbindung möglich.");
                      mysql_select_db("www")
                      or die ("Die Datenbank existiert nicht.");
                      mysql_* ist veraltet. Bitte nutze PDO oder mysqli.

                      $abfrage = "SELECT * FROM news ORDER BY id DESC LIMIT $start, $eintraege_pro_seite";
                      In SQL Statements bitte nicht "*" schreiben, sondern die einzelnen Spalten auflisten.

                      "<h1>$row->titel $row->datum </h1><br> $row->inhalt <br><br>";
                      <br> ist nicht schön. Arbeite mit div's, oder lieber noch mit Tabellenzeilen.

                      Die Blätterfunktion, die Du gefunden hast (http://www.php-einfach.de/tuts_mysql...erfunktion.php) ist für den praktischen Einsatz m.E. nichts, aber für's grundlegende Verständnis gut. Besser du nutzt z.B. sowas hier (mit PDO):

                      http://www.phpro.org/tutorials/Pagin...P-and-PDO.html

                      mfg Wolf29
                      while (!asleep()) sheep++;

                      Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                      Kommentar


                      • #12
                        Ich muss mal Lob an dieser Stelle aussprechen... der TE hat sich nach den Hinweisen tatsächlich selber hingesetzt, recherchiert, gelernt, ausprobiert und ist offensichtlich voran gekommen. Sowas sieht man leider nicht allzuoft.

                        +1 für die Eigeninitiative
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          @istegelitz: stimme ich Dir zu (kommt nicht oft vor!)! Mein Kommentar bezog sich nur auf sein

                          Vielleicht gibt es ja Verbesserungsvorschläge:
                          was man noch optimieren kann!

                          mfg Wolf29
                          while (!asleep()) sheep++;

                          Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                          Kommentar


                          • #14
                            Du kriegst auch ein +1 (u.a auch stellvertretend für deine fortgesetzten Bemühungen in anderen Threads, Anfängern weiterzuhelfen)
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              Du kriegst auch ein +1 (u.a auch stellvertretend für deine fortgesetzten Bemühungen in anderen Threads, Anfängern weiterzuhelfen)
                              while (!asleep()) sheep++;

                              Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                              Kommentar

                              Lädt...
                              X