E-Mail Adressen aus txt Datei lesen und anschl. aus DB löschen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • E-Mail Adressen aus txt Datei lesen und anschl. aus DB löschen

    Hallo,

    ich schreibe gerade ein Skript, dass mir E-Mail Adressen aus einer Textdatei ausliest (pro Zeile eine Adresse), anschließend in der Datenbank guckt ob sie vorhanden ist, und den Eintrag löscht falls ja.

    Momentan sieht das Skript so aus:

    PHP Code:
    // Datei öffnen und Text einlesen
    $fd fopen("email.txt""r");
    $email "";
    while (!
    feof($fd)) {
        
    $email .= fread($fd1024);
    }

    fclose($fd);

    //In Zeilen aufteilen
    $lines explode("\n"$email);

    for (
    $i=0$i count($lines); $i++) {

    // Verbindung zur DB
    mysql_connect("localhost""name""pw") or die ("Datenbankserver nicht gefunden");
    mysql_select_db("datenbank") or die ("Verbindung zur Datenbank fehlgeschlagen");

    $sql "DELETE FROM `tabelle` WHERE `Email` LIKE '%".$lines[i]."%'";

    if (
    mysql_query($sql)) {
                echo 
    "$lines[$i] gelöscht\n";
      }
     } 
    Tja, nun hat mein hübsches Skript allerdings alle Einträge in der Tabelle gelöscht, und das soll eigentlich nicht sein .

    Kann mir vielleicht jemand helfen den Fehler zu finden?
    Last edited by Serra; 22-06-2006, 09:11.

  • #2
    Re: E-Mail Adressen aus txt Datei lesen und anschl. aus DB löschen

    Regeln lesen, Posting anpassen, auf Umbrüche achten, Danke.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      Re: E-Mail Adressen aus txt Datei lesen und anschl. aus DB löschen

      Original geschrieben von Serra
      Kann mir vielleicht jemand helfen den Fehler zu finden?
      In deinem Textfile ist eine Leerzeile. mit LIKE '%$zeile%' wird diese eine Bedingung auf '%%', also auf alles. mit LIKE %zeile% würde übrigens auch ein hans.franke@, emil.franke@ auf franke@ passen.

      Hier ist "...WHERE Email = '$zeile'..." angebracht, mit = und ohne %. Und zum Testen wäre ein LIMIT 2 sinnvoll. Hoffentlich hast Du eine Kopie der Tabelle.

      Comment


      • #4
        PHP Code:
        $emails=file("email.txt");
        foreach(
        $emails as $k=>$v){$emails[$k]="'".trim($v)."'";}
        mysql_query("DELETE FROM tabelle WHERE 
                      Email in("
        .implode(",",$emails).")") or die(mysql_error()); 
        eben korregiert
        komma in implode vergessen
        Last edited by Slava; 22-06-2006, 10:11.
        Slava
        bituniverse.com

        Comment


        • #5
          Hast du den mysql_connect bei jedem schleifen durchgang??

          Wie dem auch sei ich weis nicht ob gebraucht oder nicht hier ne alternative Lösung:

          PHP Code:
          $i 0;
          $file fopen("emails.txt""r");
          while (
          $buffer fgets($file4096)) {
             if(
          mysql_query("DELETE FROM `tabelle` WHERE `Email` = '".$buffer."'")){
                echo 
          "Zeile gelöscht! Inhalt: ".$buffer."\n<BR>";
                
          $i++;
             }
          }
          fclose($file);
          echo 
          $i." Einträge gelöscht"

          Comment


          • #6
            Danke für die Antworten, die Änderungen von tcpip haben funktioniert und es funktioniert.

            Dabke für die anderen Vorschläge, die Alternativen sehen dich um einiges besser aus als mein Code, und ich werde mir das mal näher ansehen .

            Comment

            Working...
            X