von einem array ins andere schreiben

  • aaalso da ich ja nen vollhorst in sachen php bin, steh ich mal wieder vorm rätsel der eierlegenden wollmilchsau :)
    nee spass beiseite!
    also folgendes problem:
    ich habe auf ner seite eine anzahl von namen mit ner checkbox davor, diese namen werden aus einer textdatei eingelesen und ausgegeben.
    wenn man namen auswählt und dann auf den button drückt mit "auswahl entfernen" sollen entsprechend der auswahl die einträge entfernt werden.

    meine idee war in der funktion die des durchführt einfach ein array (die auswahl zu übergeben (klappt!)
    dann die textdatei einzulesen und den inhalt komplett in einem array zu speichern (klappt!)
    dann lösche ich die textdatei (klappt ebenfalls)
    erzeuge ein leeres array was für die übernahme der verbleibenden werte dient. (klappt auch:) )

    was mir jetzt fehlt ist die logik, wie ich das array mit 1 bis x einträgen der zu löschenden werte gegenprüfe mit dem array mit den 1 bis x einträgen der alte liste.
    die einträge wo die liste vom trash mit nem eintrag aus der liste der namen übereinstimmt sollen ignoriert werden und alle anderen werte, wo keine übereinstimmung vorhanden ist sollen in das "übernahme"-array geschrieben werden, damit ich die dann in eine neue txt-datei schreiben kann.

    leider haben meine versuche alle ihr ende darin gefunden, dass die komplette alte liste ins übernahme-array geschrieben wurde manchmal sogar mehrfach.
    wenn ihr zwingend nen code sehen wollt, kann ich den gerne bereitstellen ich hab den jetzt vorerst absichtlich weggelassen, weil ich denke, dass es anhand der beschreibung einfacher ist nen code zu bauen, als sich von meiner digitalen verwurstung irritieren zu lassen.

    Danke für eure unterstützung

  • Ungetestet:

  • mmh klappt leider auch net irgendwie..
    deine funktion umgeschrieben, dass die bei mir reinpasst sieht so aus:

    der aufruf der funktion ist folgender:

    zur zeit bastel ich halt noch mit get, weil ich zuerst sehen will, was da so passiert und was in den variablen drinsteht

  • Verrate uns doch mal, wie du das Formular aufbaust (Quellcode) und wie die Datei genau aussieht. Dann ist das etwas leichter für uns, eine passende Lösung zu finden.

  • also so sieht des dann aus: http://badadmin.hopto.org/entwicklung/checker.php

    das ding soll später ne ordnerliste als default haben und ne domainliste eingetippt bekommen, jede domain wird mit jedem ordner verknüpft und bildet ne url.
    die url wird überprüft und der returncode ausgelesen, sobald nen anderer returncode kommt, als aus der 400er-reihe ist sozusagen das directory nicht sicher (bei returncode 200 wurde ein directorylisting komplett geladen und zeigt also ordnerinhalte an)
    ich kann die komplette liste löschen, ich kann nen ordner dranhängen und damit die default-liste erweitern, aber ich bekomm es ums verrecken nicht hin ausgewählte ordner zu löschen:twisted::twisted:

    bisher arbeite ich mit GET, weil ich die werte noch sehen will, bevor ich später nen POST draus mache.

    das hier ist die checker.php:

    das hier ist die functions.php:

    und hier die folders.txt:

    Code
    admin
    adminplugins
    config
    fe
    public
    sc
    static
    WEB-INF
    tools
  • Das ist der springende Punkt:

    PHP
    echo "<input type=\"checkbox\" name=\"".$ordner."\" />".$ordner."<br />";


    Das würde ich so machen:

    PHP
    echo "<input type='checkbox' name='ordner[]' value='$ordner' />$ordner<br />";


    Und dann müsste bei Script von oben (bis auf den Namen und Post) eigentlich passen.

  • Vorraussetzung ist, dass alle Checkboxen den selben Namen haben, also:

    Code
    <form>
    <input type="checkbox" name="delete[]" value="Eintrag der folders.txt" />
    </form>


    Dadurch hast du dann ein Array $_POST['delete'][] (oder halt $_GET['delete'][]).
    Dann kannst du das mit dieser Funktion gegen die alte Liste laufen lassen:

    Sollte gehen.
    Zum Aufrufen dann in etwa so:

    PHP
    $neu = neueListe(readFolders(folders.txt), $_POST['delete']);

    Ungetestet, hoffe aber, es hilft.

    Gruß,
    Jojo

    Edit: da war Bandit schneller ;)


  • also irgendwas will da noch immer nich so ganz..

    ich weiß noch immer nich wo der fehler liegt.. grundlegend verstanden was da passieren soll hab ich, jedoch bring ich es einfach nich auf die kette -.-
    wär toll wenn da nochmal jemand drübergucken könnte.
    hab die funktionalität vorerst nur in der checker.php, damit ich erstma sichergehen kann, dass es fruchtet, bevor ich die funktion auslagere

  • Daran wirst du nicht vorbeikommen:

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Für uns ist es im Moment etwas schwer, dieses Problem nachzuvollziehen, ohne ein entsprechendes Script zu schreiben. Ich werde aber trotzdem mal sehen, dass ich dir etwas bastele.

  • also bis schritt 5 hab ich alles schon durch.. die unstimmigkeit hab ich net ganz eingrenzen können, aber ich bleib da auf jeden fall dran und probier auch selber weiter...
    das problem war bisher immer der abgleich von dem trash-array und dem folders-array
    $key = array_search($value, $data);
    werd ich auf jeden fall weiterhin im auge behalten und damit rumprobieren,
    das scheint ja die funktion zu sein, die ich brauche

  • Getestet:

  • nee des funzt leider auch net bei mir.. ich bekomm im notepad++ zwar gesagt, dass die text-datei von aussen geändert wurde, aber da passiert nix mit.
    selbst dein getesteter code fruchtet nicht..
    hab lediglich das echo der form weggenommen, weil ich das über einen einzelnen button lösen möchte/muss

    http://badadmin.hopto.org/entwicklung/entwicklung.rar

    ich hab das ganze ding jetzt mal gepackt, evtl bringt das ja mehr, hab deinen aktuellen code eingebaut.

    und danke, dass du dir so viel zeit nimmst und auch soviel geduld mitbringst, bandit!

    edit: also bei $key = array_search($value, $data); wird nichts in $key geschrieben..!

    Einmal editiert, zuletzt von synaptic (7. Februar 2009 um 18:03)

  • habs gelöst...

    da war bei dem wert noch irgendwie ne leerzeile mitgekommen oder sows.. mit trim() hats jetzt gefruchtet.., aber wo da was dazukam is mir noch schleierhaft...
    nahe liegt ja dass es beim explode passiert ist..

  • Jaja, die Leerzeilen ;)
    \n, \r\n,... Man weiss nie, was man nehmen soll :D

    Is ein Grund, warum ich oft auf explodes verzichte und selber eine Schleife nach der anderen schreibe.

    Aber schön, dass es jetzt klappt.


  • \n, \r\n,... Man weiss nie, was man nehmen soll :D


    Eigentlich schon. Mit \n liegst du immer richtig, PHP geht damit richtig um, egal auf welcher Plattform. Das Problem sind eher manche Editoren, die den Unix-Zeilenumbruch nicht verkraften.