Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche in Text-Datenbank ein Array und lösche es - Lösung

Einklappen

Neue Werbung 2019

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

  • Suche in Text-Datenbank ein Array und lösche es - Lösung

    Von allein wäre ich nie darauf gekommen, wie man es anstellen kann - man hat mich günstigerweise nochmal auf den richtigen Weg geschubbst, das Skript welches ich hierdurch zusammenstellen konnte, wirkt nach dem Prinzip, einen Array in einer Text-Datenbank anhand eines vorzugebenden Suchbegriffes ausfindig zu machen und zu löschen, indem die Text-Datenbank - hier die "uebung.txt" zeilenweise eingelesen wird, befindet sich an erster Stelle im Array nicht der Suchbegriff für den Array, der gelöscht werden soll, dann wird der Array in einem größeren Array zwischengelagert - in diesen großen Array wird alles hineingegeben, was eben nicht an Position 1 das Suchkriterium enthält - so gesehen kann man also auch gleich mehrere Datensätze selektieren, die an einer bestimmten Position das gleiche Suchkriterium haben.
    Anschließend wird der große Array wieder zeilenweise in die Datei "uebung.txt" hineingeschrieben.

    Hier mal das Skript:

    PHP-Code:
    <?php
    $vorname 
    Udo;
    $variable file("uebung.txt");  
    $suche = array();
    foreach (
    $variable as $zeile

    $term explode("|"$zeile);
    if ( 
    $term[0]!=$vorname )
    array_push ($suche$term);
    $uebertrag array_merge($suche);
    }
    $uebungdatei fopen ("uebung.txt","w+");
    foreach (
    $uebertrag as $mein_uebertrag)
    {
    $eintrag ="$mein_uebertrag[0]|$mein_uebertrag[1]|$mein_uebertrag[2]";
    fwrite($uebungdatei"$eintrag");
    }
    fclose($uebungdatei);
    ?>
    Was dieses Skript gleich noch miterledigt - es nimmt die Zeilenumbrüche mit, so musste ich diese bei Zusammensetzung des Eintrages nicht noch extra ergänzen.

    Das Suchkriterium für Position 1 eines jeden Arrays ist hier Udo als Vorname - dieser Wert wurde hier direkt eingetragen, kann und wird freilich auch über ein Drop-Down-Menü oder ein Eingabefeld an diese Datei übergeben werden - da hier sämtliche Kontrollmechanismen fehlen, was die Schreibweise angeht, ist es lediglich für ein Drop-Down-Menü verwendbar - wie man ein solches Drop-Down-Menü aus einer Text-Datenbank automatisch erstellen lassen kann, hatte ich bereits in einem anderen Beitrag beschrieben.

    Hierüber wird geprüft, ob der erste Array-Eintrag nicht mit dem Suchbegriff übereinstimmt:

    PHP-Code:
    if ( $term[0]!=$vorname 
    Nur wenn diese Bedingung erfüllt ist, dann wird die durchsuchte Zeile - bereits in Einzelteile zerlegt - in ein großes Array eingefügt, das hier den Namen uebertrag trägt, $suche bezeichnet das zuvor gebildete Array:

    PHP-Code:
    $uebertrag array_merge($suche); 
    An dieser Stelle wird der Inhalt der Text-Datenbank nicht mehr benötigt, da sich alle Daten in dem großen Array befinden - würde jetzt an dieser Stelle aber der Server abstürzen, hätte man möglicherweise ein Problem - da wir aber alle clever sind, haben wir ja die Website-Dateien nochmals auf dem eigenen PC hinterlegt, denn nun wird die Text-Datenbank über w+ aufgerufen, was zum sofortigen Löschen des vorhandenen Inhaltes führt.

    Da sich in dem großen Array nun lauter kleine Arrays befinden, hat man ein mehrdimensionales Array, und dieses wird jetzt aufgelöst, so dass nur noch die kleinen Arrays übrigbleiben:

    PHP-Code:
    foreach ($uebertrag as $mein_uebertrag
    Da bereits vorher die einzelnen Arrays aufgeteilt wurden, bekamen alle Bestandteile der kleinen Arrays einen Schlüsselwert - hier jeweils von [0] - [2] zugewiesen, worüber sie jetzt direkt angesprochen werden können - und das beste dabei - jeweils der Eintrag mit dem Schlüsselwert 2 - also der letzte Eintrag, bringt den Zeilenumbruch mit.

    Unter Verwendung des Trennzeichens "|" wird wieder ein Array zusammengefügt, das hier den einfachen Namen "eintrag" erhält.

    PHP-Code:
    $eintrag ="$mein_uebertrag[0]|$mein_uebertrag[1]|$mein_uebertrag[2]"
    Mit

    PHP-Code:
    fwrite($uebungdatei"$eintrag"); 
    wird in die zuvor geöffnete uebungdatei der Eintrag hineingeschrieben und anschließend über fclose die Datei wieder geschlossen.

    Solange man selbst und direkt die Textdatenbank bearbeiten kann, ist es bei übersichtlichen Datenbanken sicher einfacher, die Zeilen über den Editor rauszulöschen - dies hier soll lediglich dazu dienen, dass sich ein einzelner User aus der Textdatenbank mitsamt seinen Daten selbst löschen kann - die Berechtigung hierzu kann man ja über die Hinterlegung des Usernamens und des hoffentlich codierten Passwortes innerhalb des jeweiligen Arrays vereinfachen, da man so recht schnell eine Passwortabfrage für den Fall aufrufen kann, wenn jemand von außen den Array löschen möchte.

    Noch weiß ich nicht, was einfacher zu gestalten ist - lediglich der Grundgedanke war, berechtigten Usern Änderungen am eigenen Datenbankeintrag zu ermöglichen und dies dann über Löschung des bisherigen Datensatzes und den Neueintrag des veränderten Datensatzes zu realisieren.


  • #2
    PHP-Code:
    array_push ($suche$term);
    $uebertrag array_merge($suche); 
    Das ist ziemlich überflüssig, hier zwei Arrays zu nutzen.

    Da reicht auch
    PHP-Code:
    $suche[] = $term
    und im weiteren Verlauf dann mit $suche statt $uebertrag arbeiten.

    A pro pos weiterer Verlauf, eine weitere Schleife zum Zurückschreiben in die Datei braucht es da nicht - da reichen ein, zwei implodes und anschließend einmalig file_put_contents aus.


    Gegenüber einer richtigen Datenbank hat das natürlich immer noch Nachteile - einer der ärgsten, der am ehesten ernste Probleme machen kann, ist das fehlende Datei-Locking.

    Kommentar


    • #3
      Zitat von ChrisB Beitrag anzeigen
      PHP-Code:
      array_push ($suche$term);
      $uebertrag array_merge($suche); 
      Das ist ziemlich überflüssig, hier zwei Arrays zu nutzen.

      Da reicht auch
      PHP-Code:
      $suche[] = $term
      und im weiteren Verlauf dann mit $suche statt $uebertrag arbeiten.

      A pro pos weiterer Verlauf, eine weitere Schleife zum Zurückschreiben in die Datei braucht es da nicht - da reichen ein, zwei implodes und anschließend einmalig file_put_contents aus.


      Gegenüber einer richtigen Datenbank hat das natürlich immer noch Nachteile - einer der ärgsten, der am ehesten ernste Probleme machen kann, ist das fehlende Datei-Locking.
      Wieder mal, Danke - schön, wenn einem einer hilft - sobald ich dann gerafft habe, was ich da ändere, und weshalb, werde ich das gern anwenden - so würde ich es nur übernehmen, und wenn mich mal einer fragen sollte, wieso und weshalb, dann wüsste ich es nicht - wäre schon peinlich irgendwo.

      PHP-Code:
      <?php
      $vorname 
      $_POST["vorname"];
      $nachname $_POST["nachname"];
      $plz $_POST["plz"];
      $eintrag ="$vorname|$nachname|$plz\r\n";
      $uebungdatei fopen ("uebung.txt","a");
      flock($uebungdatei,LOCK_EX);
      fwrite($uebungdatei"$eintrag");
      flock($uebungdatei,LOCK_UN);
      fclose($uebungdatei);
      echo 
      "$vorname, Ihr Eintrag wurde ergänzt
      <br><a href=\"uebung.html\">Weiter</a>"
      ;
      ?>
      Ist das flock hier richtig eingesetzt? - Öffne die Datei, schütze sie gegen weitere schreibende Zugriffe von außen, dann schreibe ich in die Datei, dann gebe ich die Datei wieder zum Schreiben frei - und dann schließe ich die Datei wieder.

      Nun gut, dann muss ich nur noch irgendwie herausbekommen, ob vor dem Versuch, die Datei gegen Schreibrechte von außen zu sichern, bereits von jemand anderem von außen gegen Schreibrechte gesichert wurde - es sollen hier nämlich mehrere Leute gleichzeitig Einträge vornehmen können, sich dabei aber nicht gegenseitig blockieren.

      Auf jeden Fall wieder mal Danke - das bringt mich hier echt weiter - naja, als Newbie, da kann man anfangs nicht gleich alles bedenken - so ist es schon sehr wertvoll, dass einem hier wirklich geholfen und man nicht allein gelassen wird.

      Kommentar

      Lädt...
      X