[Funktion] Bestimmte Zeile per Link aus Datei löschen !!!

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

  • [Funktion] Bestimmte Zeile per Link aus Datei löschen !!!

    Hi,

    ich habe ein Gästebuch programmiert, welches soweit sehr gut funktoiniert !!
    Jetzt habe ich eine Frage. Ich möchte einen Admin-Bereich haben, in welchem ich Beiträge löschen kann.
    Ich weiß, dass ich das mit dem Login so machen kann:

    PHP-Code:
    <?php
    (...)
    if (
    $_POST[user]=="Admin" AND $_POST[pw]=="testpasswort") {
    echo 
    "<a href='Admin_Menu.php'>Hier gehts weiter zum Admin Menu</a>"; }
    else {
    echo 
    "Irgendwas wurde falsch eingegeben !!!"; }
    ?>
    So. Jetzt bin ich im Admin-Menu eingeloggt. Die kompletten Einträge des Gb's sind in einer Txt-Datei gespeicher ($file). Die Datei sieht nach 2 Einträgen so aus:



    Code:
    Datum%Name%Nachricht%Titeldernachricht%EmailAdresse
    Datum2%Name2%Nachricht2%Titeldernachricht2%EmailAdresse2
    so, dieses kann ich auch so einlesen (in ein Array) und dann mit einer for-Schleifen "exploden":

    PHP-Code:
    $array=file($file);
    $temp=count($array)-1;
    for (
    $i=$temp;$i>=0;$i--)
     { 
    element=explode("%",$array[$i]);
        echo 
    "Eintrag am ".$element[0]."<br>";
        echo 
    "von: ".$element[1]."<br>";
        echo 
    "Titel:".$element[2]."<br>";
        echo 
    "Nachricht:".$element[3]."<br>";
        echo 
    "Mail:".$element[4]."<br>";
    }
    ?> 
    das ist jetzt natürlich eine Ausgabe für dieses Forum ohne HTML-Verschönerungen, damit es besser zum Überblicken ist !!!
    Wie kann ich das jetzt machen, dass der Admin den Eintrag löschen kann ??

    Wäre um jede Hilfe dankbar, habe auch schon die Suchfunktion genutzt, hat mir aber nichts genützt. Und habe natürlich auf www.selfphp.de und php.net nachgeschaut, aber irgendwie kann ich das nicht anwenden. Ich bin auch noch Anfänger, abnsonsten würde ich nicht mit einemGästebuch rumkämpfen !!!

    Vielen Dank

  • #2
    speichere am anfang jeder zeile noch eine unikale id:
    25%bla%bla...
    damit es einfacher wird.

    gib im adminbereich zu jeder news noch n link/button aus, sodass z.b. über die url die id übergeben werden kann.

    dann kann das script diese id gezielt suchen und die zeile löschen (array durchlaufen kannst du ja, brauchst ja nur die abfrage der id zu entwickeln)

    Kommentar


    • #3
      des mit der id is schonma gut, nur wie mache ich das, das da auch immer die id je eintrag eins höher gezählt wird ??
      also ich mein, wenn ich die daten in die datei scheribe, wie weiß der vorher, welche id als letztes war, und welche er dann als nächstes schreiben muss ??
      soll ich da ne extra datei anlegen, in welcher auch die letzte id steht, und die er ausliest, um eins erhöht, in die daten-datei und wieder in die id-datei schreibt ??
      danke, für die cshnelle hilfe

      Kommentar


      • #4
        wäre auch ne möglichkeit, aber wenn du die neuen einträge immer unten hast reicht es ja, die letzte zeile zu lesen, die id herauszuholen, und schon hast du die nächste am starten...

        Kommentar


        • #5
          so, ich hab eds jetzt ma mit den ids gemacht, alles funktioniert, un so !!
          nun hab ich mir gedacht, dass ich im admin-menu irgendwie sowas machen muss:

          PHP-Code:
          <?php
          $action
          =$_GET[delete];
          if (
          $action) {

          // Hier der Code, um die ID zu löschen
          }
          else {
          // Hier die ausgabe der Einträge wie ichs vorhin auf der Normalen 
          // GB-Seite gemacht habe, nur mit dem hinzugefügt:
          // Angenommen im $element[0] steht die ID :
          echo "<a href='$PHP_SELF?delete=".$element[0].">löschen</a>";
          }
          seh ich das so richtig, und wie kann ich die Zeile dann in der IF-Abfrage löschen ??

          Kommentar


          • #6
            eher
            PHP-Code:
             <?php
            $action
            =$_GET[delete];
            if (
            $action=="delete") {
                
            $idZumKillen $_GET["id"];
                 
            // Hier der Code, um die ID $idZumKillen zu löschen
            }

            //ganz normal admin-interface ausgeben

            Kommentar


            • #7
              aber wie ruf ich jetzt die seite auf um eine id zu löschen ??so:
              datei.php?actoin=delete?id=1 ??

              und wie sieht denn die fnktion zum killen aus

              Kommentar


              • #8
                wie kann man in einem array ein element löschen ??

                Kommentar


                • #9
                  bla.php?action=delete&id=5

                  das steht in der dokumentation
                  php.net/array

                  Kommentar


                  • #10
                    ich weiß jetzt, dass ich die funktion "array_splice" brauche.
                    Ich würde so vorgehen:

                    // Angenommen die Id steht in $id, dann mache ich so im Adminmenu den Link zum löschen:

                    <a href="admin.php?action=delete?id=$id">löschen</a>
                    Natürlich noch sytacmäßig erichtig machen, aber ich weiß einfach nicht wie ich jetzt per array_splice dazu komme, genau das Array stück mit der ID-wegzubekommen. Ich würde weiter so vorgehen:

                    PHP-Code:
                    $array=file($file);
                    $neuarray array_splice /* hier bitte helfen */ );
                    unlink($file);
                    $fp=fopen($file"a+");
                    fputs($fp$neuarray);
                    fclose($fp); 
                    bitte helf mir mit array_splice !!

                    Kommentar


                    • #11
                      pseudo:

                      Code:
                       $counter= 0;
                      
                      wie gewohnt, zeile für zeile durchgehen {
                          anfang der zeile (wo id steht) auslesen;
                          if (id == $id) {
                              $neueId = $counter;
                          }
                          $counter++;
                      }
                      nun erreichst du das gesuchte element mit $arrayMitDerDatei[$neueId];


                      weiterlesen

                      Kommentar


                      • #12
                        also ich hab da jetzt die ganze zeit micht mit der funktion array_splice beschäftigt. ich kann sie einfach nicht gescheit verwenden. meine versuche sind so:

                        PHP-Code:
                        <?php
                        $action
                        =$_GET[delete];
                        if (
                        $action=="delete") {
                            
                        $idzumkillen $_GET["id"];
                            
                             
                        // Hier der Code, um die ID $idZumKillen zu löschen
                            
                        $arraykill=file($idfile);
                                
                        $idsplice=$idzumkillen-1;
                            }
                            
                        $neuohneid=array_splice($arraykill$idsplice/*XX*/);

                        // dann hier die $neuohneid in textdatei schreiben (...)
                        (...)
                        warum funktioniert das nicht ?? das müsste doch eigentlich funktionieren. Array[0] ist ja Id1, also ziehe ich VON id EINS AB; UM DAS ZUGEHÖRIGE aRAY ZU HABEN; UND LÖSCHE DANN DIESES AUS $arraykill !!! ich verstehe jetzt einfach nicht, warum das nicht funktioniert. muss ich vllt noch die funktion strlen(array[idzumkillen-1] benutzen, damit ich weiß, wie viel ich aus dem arrayteil löschen muss, also wie viel Zeichen ich dort löschen muss. (an der Stelle XX)??

                        Kommentar


                        • #13
                          Original geschrieben von penizillin
                          [B]pseudo:

                          Code:
                           $counter= 0;
                          
                          wie gewohnt, zeile für zeile durchgehen {
                              anfang der zeile (wo id steht) auslesen;
                              if (id == $id) {
                                  $neueId = $counter;
                              }
                              $counter++;
                          }
                          ,

                          da verstehe ich nicht ganz, warum ich der neuen ID dann den Wert von $counter geben soll. Und erstrecht nicht, warum dieser dann erhöht wird. Ich möchte doch nur die gegebene ID löschen, das heißt $zulöschendeid=$id-1, und diese dann aus dem Array entfernen.

                          Kommentar


                          • #14
                            warum kann mi keiner helfen ??? ich hab jketzt wirklich schon den ganzen abend mich damit beschäftigt, und ihr mods, oder wer auch immer könnt es doch. könnt ihr mir nicht helfen ??
                            Bitte, was soll ich denn machen, außer paar Stunden lesen, reicht euch des net als Beweiß dafür, dass ich mich bemühe, es hinzubekommen ??

                            Kommentar


                            • #15
                              drängel mal hier nicht rum!


                              dateidemo (zeilenweise einträge)
                              Code:
                              dsfjkhdjfkhjdsfsdfsdfkdsjfkls
                              dsfkljdsklfjdsklfjdskljkljfkl
                              dsfkljdsfkljdslkfskfsljldjksd
                              dsklfdskljfkldsjfkldsjkldskl
                              natürlich hast du hier deine werte so drin, dass du mit dem explode() arbeiten kannst.

                              eine id brauchst du nicht speichern.

                              lade die datei mit file(). damit hast du ein nummerisches array.
                              dieses gibst du nun zeile für zeile aus. ja. du darfst auch zur darstellung dein explode() verwenden. sonst sieht es ja wirklich doof aus. hast ja recht.

                              da du das array mit for() durchläufst, hast du auch einen zähler $i.

                              nun machst du zu jedem eintrag ein löschen-link. hier trägst du i als parameter ein. gb.php?delete=2 (2 ist jetzt der dritte eintrag aus der datei.)

                              damit rufst du die seite gb.php neu auf. du liest dein array wieder ein und machst dann nur ein unset() auf den index. unset($gbfile[$_GET['delete']]).

                              nun musst du das array neu in deiner datei speichern. anschliessend lädst du die gb.php erneut (mit header() am besten), damit die indizies wieder ohne lücke in deinem löscharray sind.

                              alles verstanden? gut. dann kannst du ja nun loslegen.

                              hast du nicht alles verstanden. lies es noch einmal, noch einmal und noch einmal durch. bis du es verstanden hast. nimm dann www.php.net zur hand und lies dir alles zu den von mir genannten funktionen durch.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X