Zeile aus Textdatei Löschen - Hilfe!

rhs

Grünschnabel
Hallo an alle,

habe das Tutorial von "Nucleus" durchgemacht, "in Textdatei Schreiben, Lesen und Zeile Löschen" und irgendwie komm ich da nicht weiter.

Also, Schreiben und Lesen funktioniert 1a, aber Zeile löschen will einfach nicht.

In der Textdatei steht folgendes:
Name 1 | Email 1 | Datum | Zeit
Name 2 | Email 2 | Datum | Zeit
Name 3 | Email 3 | Datum | Zeit
Name 4 | Email 4 | Datum | Zeit

Wenn $mail == Email 3 --> dann soll Zeile 3 Gelöscht werden!

Was mache ich falsh? bitte um hilfe, suche schon stunden im Forum und bin auf keine Lösung gestoßen.

PHP:
//---------------------Config Daten --------------------
$log =  "../db/eintraege.txt";
$fp = fopen($log,"r");
$array = file($log);
$anzahl = count($array);
$id = $mail;

//--------------------- Auslesen des Eintrages der geloescht werden soll --------------------------------
$eintrag = explode("|",$array[$id]);

echo "$eintrag[0]";

//----------------- Beginn der Form -------------------------------
echo"<form action = \"$PHP_SELF\" method=\"POST\">";
echo "<input type =\"submit\" name = \"submit\" value = \"Ok\">";
echo "</form>";
//------------------------- ---------------------------------------

//---------------- Anfang der zu löschenden Datei -----------------
//if ($submit == "Ok"){

   global $log,$array,$anzahl,$id;
   if ($anzahl == 0){
   echo"Konnte keinen Eintrag loeschen!";
   
   }else{
        
        $zeile = $id;
// Ab hier Loeschcode
If ($anzahl <= $zeile){
echo"Eintrag nicht vorhanden!";
}else{

unset($array[$zeile]);

$newinhalt = fopen($log,"w");
fputs($newinhalt,implode("",$array));
fclose($newinhalt);
echo"Der $zeile wurde geloescht.";
// Ende Code
}

}
 
Hallo!

Erstmal hast Du //if ($submit == "Ok"){ als Kommentarzeile, dass solltest Du zuerst ändern und dann musst Du gucken wo ein } fehlt, denn es wird ein Parse-Error ausgegeben.

Gruss Dr Dau
 
hi,

habe nun die if abfrage ganz raus gemacht, tut sich nicht, keine ahnung wieso

PHP:
$log =  "test.txt";
$fp = fopen($log,"r");
$array = file($log);
$anzahl = count($array);
$id = $mail;

//--------------------- Auslesen des Eintrages der geloescht werden soll --------------------------------
$eintrag = explode("|",$array[$id]);

echo "$eintrag[0]";

   global $log,$array,$anzahl,$id;
   if ($anzahl == 0){
   echo"Konnte keinen Eintrag loeschen!";

   }else{

        $zeile = $id;
// Ab hier Loeschcode
If ($anzahl <= $zeile){
echo"Eintrag nicht vorhanden!";
}else{

unset($array[$zeile]);

$newinhalt = fopen($log,"w");
fputs($newinhalt,implode("",$array));
fclose($newinhalt);
echo"Der $zeile wurde geloescht.";
// Ende Code
}

}
 
Falls mail über die Adressleiste gegeben wird. probier es mal mit $_GET['mail']. Ansonsten siehe eins drüber! :D
 
Hi,

abe das Problem anders gelöst.

PHP:
$deluser_id = $mail;
$inhalte = file("./data.php");
$fp = fopen("./data.php", 'w+');
flock($fp, 2) or die('Kann die Datei nicht locken');

foreach ($inhalte as $value) {
$zeile = explode("|",$value);
chop($zeile);

if ($zeile[0] != $deluser_id) {
fwrite($fp, "$value");
}
}
fclose($fp);

funktionier einwand frei, die $mail wird mit dem Link übergeben.

Danke für eure bemühungen.
 
Also mit GET, oder? Verwende darum $_GET['mail'] anstatt von $mail. So funktionierts mit jeder PHP-Version!
 
Hallo!

Freud mich. :)
Dann markiere das Thema bitte als erledigt.... unten rechts auf "Status: nicht erledigt" klicken.

Gruss Dr Dau
 
Danke für den Tipp $_GET[''mail],
aber irgendwie muss doch die variable erst übergeben werden, www.link.de?mail=$mail, oder nicht?
Sorry das mit dem "Status nicht erledigt" ist mir nicht aufgefallen.

Grüße
RHS
 
Wenn du auf eine Seite, sagen wir mal index.php mit so einem Link drauf gehst,
index.php?mail=foo@bar.de
dann ist es besser, wenn man auf dieses mail per $_GET['mail'] zugreift!
 
Zurück