suchen und löschen in dateien

  • Themenstarter Themenstarter Kebb
  • Beginndatum Beginndatum
K

Kebb

hallo, also ich plane mal wieder ein weiteres admin-script für meine website.
nun will ich galerieeinträge ändern bzw. löschen können, das wär nicht das problem. nun muss ich aber in der datei vor dem script alle einträge aufgelistet haben wo ich mir einen rauspicken kann um diesen dann zu bearbeiten.
dazu wird das script dann beim eintragen eins eintrags in eine datei, html oder txt, mal sehn, die verweise setzen. (ich arbeite komplett mit text-dateien anstatt mit einer mysql-tabelle, weil ich mich damit nicht auskenne und ich so am besten zurecht komme :))

nun zu meiner frage:
um das löschen eines eintrags realisieren zu können muss beim löschen aus der datei mit den verweisen der eintrag zu diesem objekt gelöst werden. dazu muss ich es irgendwie schaffen in dieser datei den richtigen eintrag rauszusuchen und diesen dann zu entfernen. wie könnte ich das anstellen?

also die html- oder txt-datei schaut dann z.b. so aus, habs noch nicht richtig durchgeplant, ist also nicht final, soll nur ein beispiel sein:

PHP:
<a href="editobjekt1.php">Objekt1</a><br>
<a href="editobjekt2.php">Objekt2</a><br>
<a href="editobjekt3.php">Objekt3</a><br>
<a href="editobjekt4.php">Objekt4</a><br>
<a href="editobjekt5.php">Objekt5</a><br>
<a href="editobjekt6.php">Objekt6</a><br>
<a href="editobjekt7.php">Objekt7</a><br>
<a href="editobjekt8.php">Objekt8</a><br>
<a href="editobjekt9.php">Objekt9</a><br>

die zeilen wurden dann per eintragen-script erstellt...
 
Tolle Rechtschreibung.
Ludz hat dir doch den nötigen Hinweis gegben.
Wenn du etwas nicht verstehst was machst du dann?
Richtig! Google.de benutzen.
Eine Suche Nach RegeEx und Tutorials führt dich bestimmt zu tollen Erklärungen.
Ausserdem ist das Thema nicht so schwer -setz dich 10 Minuten konzentriert an dieses Thema ,und du hast es grundsätzlich verstanden..
 
nun, ein Neuling gleich mit preg_match zuballern ist aber nicht die feine Art ;).
So einfach ist das nicht eine bestimmte Zeile aus einer Textdatei zu löschen. Ich selber mache wenig mit Textdatein, aber zu meinen Anfängen mit PHP habe ich dieses Script benutzt. Dabei wird der Inhalt in eine Neue Textdatei geschrieben welche letztendlich wieder umbenannnt wird. Sollte aber ein Datensatz deinem Suchkriterium entsprechen($name_alt), so wird dieser mit continue übersprungen.

PHP:
$oldfile = "Dateiname.php";
$old = fopen($oldfile, "r");
$new = fopen($oldfile.".new", "w");

while($line = fgets($old, 1024)) {
  if ($name_alt == trim($line))
    continue;  
	
  fputs($new, $line);
}
fclose($old); 

unlink($oldfile);
fclose($new);

rename($oldfile.".new", $oldfile);
 
@KristophS: Ich habe früher immer gegoogled wenn ich eine Erklärung zu irgend etwas brauchte nur hab ich, einfach in einem vielbesuchten Forum danach zu fragen, eine viel bessere Chance etwas passendes zu finden. Wenn ich mir irgendwo ein Tutorial anschaue ist dies immer damit verbunden das bei mir Fragen aufkommen oder ich es nicht verstehe, da ich ja nun nicht wirklich PHP kann und es eine, am Anfang zumindest, recht kompliziere Sprache ist, und ich eh in ein Forum gehen muss. So rum komme ich eher zum Ziel.

Tolle Rechtschreibung.
Hehe, naja hab ich mir so angewöhnt mit der Zeit. :)

@Kervin: Danke! Es kommen mir aber noch einige Fragen auf:

PHP:
$oldfile = "Dateiname.php";                    // OK, das ist der Dateiname
$old = fopen($oldfile, "r");                   // Die Datei wird erstellt
$new = fopen($oldfile.".new", "w");            // Das ist mir mich noch ein Rätsel!
                                               // Heisst die Datei dann "Dateiname.php.new"
                                               // oder was macht das?

while($line = fgets($old, 1024)) {             // Was mach while? Was bedeutet die 1024 im fgets?
  if ($name_alt == trim($line))                // Die Zeile kapier ich auch nicht wirklich, was macht trim?
    continue;                                  // er fährt fort  
     
  fputs($new, $line);                          // Er packt $line in die neue Datei
} 
fclose($old);                                  // Datei $old wird geschlossen

unlink($oldfile);                              // Hui, kann ich garned
fclose($new);                                  // Die neue Datei wird geschlossen

rename($oldfile.".new", $oldfile);             // Datei wird umbenannt in, aber welche in was?
 
PHP:
$oldfile = "Dateiname.php";                    
$old = fopen($oldfile, "r");                   // Die Datei wird nicht erstellt sondern geöffnet
$new = fopen($oldfile.".new", "w");            // Die Datei Dateiname.php.new wird geöffnet

while($line = fgets($old, 1024)) {             // Solange noch Buchstaben ausgelesen werden können (die Datei nicht zu Ende ist).... 1024=Zahl der ausgelesenen Bytes oder so was
  if ($name_alt == trim($line))                // trim() löscht leerzeichen und \n's am anfang und ende weg
    continue;                                  // er überspringt das fputs() dieses mal (bzwbeendet diesen schleifendurchlauf und geht zum nächsten)
      
  fputs($new, $line);                          // Er packt $line in die neue Datei 
} 
fclose($old);                                  // Datei $old wird geschlossen 

unlink($oldfile);                              // Datei $oldfile wird gelöscht
fclose($new);                                  // Die neue Datei wird geschlossen 

rename($oldfile.".new", $oldfile);             // Datei wird umbenannt in, aber welche in was? Gute Frage

Nur so nebenbei: http://www.php.net oder (was mir irgendwie lieber ist) http://www.selfphp.de
 
Zuletzt bearbeitet:
ich hab mal n bisl rumprobiert und wollte mal fragen ob das funktionieren würde:

PHP:
$verweisdatei = "verweise.html";
$datei = fopen ("$verweisdatei", "w+");
$dateiinhalt = fread($datei,filesize("verweise.html"));
$dateiinhalt2 = ereg_replace("<a href=\"editobjekt5.php\">Objekt5</a><br>","",$dateiinhalt); 
fclose($datei);

$datei2 = fopen("$verweisdatei","w+");
fputs($datei2,$dateiinhalt2);
fclose($datei2);

PS: Danke für den Tip mit http://www.selfphp.de, da viel mir das oben ein
 
Original geschrieben von Harrier
PHP:
rename($oldfile.".new", $oldfile);             // Datei wird umbenannt in, aber welche in was? Gute Frage

Die neu angelegte Datei "Dateiname.php.new " wird zurück umbenannt in "Dateinname.php", also den Namen, den die Datei ursprünglich hatte damit alles gleich bleibt.

Ansonsten sind die Erklrüngen soweit korrekt.



Und ob das Funktioniert musst du einfach mal testen. Wenn es das nicht sollte, dann meldest dich wieder ;)
 
also hab das jetzt so:

PHP:
<?php
$verweisdatei = "verweise.html";
$datei = fopen ("$verweisdatei", "w+");
$dateiinhalt = fread($datei,filesize("verweise.html"));
$dateiinhalt2 = ereg_replace('<a href="editobjekt5.php">Objekt5</a><br>',"<br>",$dateiinhalt); 
fclose($datei);

$datei2 = fopen("$verweisdatei","w+");
fputs($datei2,$dateiinhalt2);
fclose($datei2);

echo "fertig";
?>

...mal getestet und es leider nicht :(
Die verweis.html-datei ist dann leer, vorher war das hier drin:

PHP:
<a href="editobjekt1.php">Objekt1</a><br> 
<a href="editobjekt2.php">Objekt2</a><br> 
<a href="editobjekt3.php">Objekt3</a><br> 
<a href="editobjekt4.php">Objekt4</a><br> 
<a href="editobjekt5.php">Objekt5</a><br> 
<a href="editobjekt6.php">Objekt6</a><br> 
<a href="editobjekt7.php">Objekt7</a><br> 
<a href="editobjekt8.php">Objekt8</a><br> 
<a href="editobjekt9.php">Objekt9</a><br>
 
Zurück