mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mi 24.04.2024 15:58 Benutzername: Passwort: Auto-Login

Thema: Textdatei zeilenweise in schleife in MySQL-Tabelle einfügen? vom 30.07.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Textdatei zeilenweise in schleife in MySQL-Tabelle einfügen?
Autor Nachricht
bluespoon
Threadersteller

Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht: Männlich
Verfasst Mi 30.07.2008 23:32
Titel

Textdatei zeilenweise in schleife in MySQL-Tabelle einfügen?

Antworten mit Zitat Zum Seitenanfang

Solved

Hallo,

ich habe folgendes Problem: Ich möchte gerne eine Textdatei auslesen und jede Zeile einmal als normalen String und einmal als MD5-Hasch in eine MySQL-Tabelle übertragen. Dabei prüfe ich vor jedem Eintrag, ob er evtl. schon existiert.

Die Tabelle hat die Felder "index", "plaintext", "md5"

Allerdings funktioniert mein Script nicht. Ich finde aber den Fehler einfach nicht *Schnief* und bekomme auch keine Rückmeldungen. Das einzige was passiert ist, dass bei der if-Abfrage der Teil ausgeführt wird, der ausgeführt werden sollte, wenn der Eintrag schon existiert (nein, tut er nicht ... habe ich schon geprüft Grins )

Ihr seht schon am Code, ich probiere seit einiger Zeit daran rum und werde langsam ziemlich umständlich mit dem Code. Vor einer Stunde war er noch mindestens 10 Zeilen kürzer Grins

Code:
<?php
   error_reporting(E_ALL);
   
   $Datenbankserver = 'localhost';
   $Datenbankbenutzer = 'root';
   $Datenbankpasswort = '';
   $Datenbankname = '***';
   $Datenbanktabelle = '***';

   $Verbindung = mysql_connect($Datenbankserver, $Datenbankbenutzer, $Datenbankpasswort) OR die(mysql_error());
   mysql_select_db($Datenbankname) OR die(mysql_error());
      
   $Zeilen = file ('wordlist.txt');

   foreach ($Zeilen as $Zeile) {
      $sql = "SELECT
               COUNT(*)
            FROM
               ".$Datenbanktabelle."
            WHERE
               md5 = '".md5('htmlspecialchars($Zeile)')."'";
               
      $Ergebnis = mysql_query($sql); // OR die(mysql_error());
      $R = mysql_fetch_assoc($Ergebnis);
               
      if(!$R) {
         $sql = "INSERT INTO
                  ".$Datenbanktabelle."
               (plaintext, md5)
               VALUES
                  ('".htmlspecialchars($Zeile)."', '".md5('htmlspecialchars($Zeile)')."')";
         
         mysql_query($sql); // OR die(mysql_error());
         echo "<span style=\"color: #009900\">" . htmlspecialchars($Zeile) . "  ->  " . md5('htmlspecialchars($Zeile)') . "  =  OK</span><br>";
         
      } else {
         echo "<span style=\"color: #990000\">" . htmlspecialchars($Zeile) . "  ->  " . md5('htmlspecialchars($Zeile)') . "  =  Existiert schon</span><br>";
      }
      
      //unset($R);
      //unset($Ergebnis);
   }
   
   mysql_close($Verbindung);
?>


Schonmal vielen Dank für Eure Hilfe *zwinker*


Zuletzt bearbeitet von bluespoon am Do 31.07.2008 01:33, insgesamt 3-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
bluespoon
Threadersteller

Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht: Männlich
Verfasst Mi 30.07.2008 23:47
Titel

Antworten mit Zitat Zum Seitenanfang

So. Ändere ich das ganze etwas, sodass meine Schleife so aussieht ... funktioniert zumindest schon einmal der erste Eintrag. Aber die übrigen eben nicht. Die sind angeblich schon vorhanden. ??? Beim nochmaligen Durchlaufen erkennt er auch, dass der erste Eintrag bereits vorhanden ist. Es wird hier also immer die gleiche Zeile mit der Datenbank abgeglichen, obwohl die Zeilen aus der Textdatei richtig eingelesen werden, da sie alle zumindest textlich korrekt auf dem Screen erscheinen.

Anderungen:
- COUNT(*) as Kram
- if($R['Kram'] == 0) {

Code:
   foreach ($Zeilen as $Zeile) {
      $sql = "SELECT
               COUNT(*) as Kram
            FROM
               ".$Datenbanktabelle."
            WHERE
               md5 = '".md5('htmlspecialchars($Zeile)')."'";
               
      $Ergebnis = mysql_query($sql) OR die(mysql_error());
      $R = mysql_fetch_assoc($Ergebnis);
               
      if($R['Kram'] == 0) {
         $sql = "INSERT INTO
                  ".$Datenbanktabelle."
                  (plaintext, md5)
               VALUES
                  ('".htmlspecialchars($Zeile)."', '".md5('htmlspecialchars($Zeile)')."')";
         
         mysql_query($sql) OR die(mysql_error());
         echo "<span style=\"color: #009900\">" . htmlspecialchars($Zeile) . "  ->  " . md5('htmlspecialchars($Zeile)') . "  =  OK</span><br>";
         
      } else {
         echo "<span style=\"color: #990000\">" . htmlspecialchars($Zeile) . "  ->  " . md5('htmlspecialchars($Zeile)') . "  =  Existiert schon</span><br>";
      }
      
      unset($R);
      unset($Ergebnis);
   }


Zuletzt bearbeitet von bluespoon am Mi 30.07.2008 23:50, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Do 31.07.2008 00:05
Titel

Antworten mit Zitat Zum Seitenanfang

MySQL INSERT bietet die Möglichkeit mehrere Zeilen gleichzeitig einzufügen.

Code:
INSERT INTO tabelle VALUES (1,2,3),(1,2,3),(1,2,3)


Also dass nur mal so nebenbei, sowas in einer Schleife zu machen muss ja nicht sein.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
bluespoon
Threadersteller

Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht: Männlich
Verfasst Do 31.07.2008 00:37
Titel

Antworten mit Zitat Zum Seitenanfang

Hey ... warum hab' ich denn da net dran gedacht? Dankeschön!

Ich hab' meinen Fehler gefunden. So muss es aussehen:
md5(htmlspecialchars($Zeile));
Zumindest funktioniert es jetzt. Aber ich hab' ohnehin noch was
anderes falsch gemacht. Der jeweilige MD5-Hash wird nur für die
letzte Zeile korrekt erzeugt. Und dann auch nur, wenn ich keinen
Zeilenumbruch hinterherschiebe. Die muss ich ergo auch noch
berücksichtigen.

Edit: Da war ich wohl etwas zu schnell. Ich brauche die Schleife,
weil ich ja vorher nicht weiß, wie viele Zeilen mein Textdokument
hat Lächel Wobei ich wohl auch mit einer Funktion und der Anzahl der
übergebenen Elemente arbeiten könnte.


Zuletzt bearbeitet von bluespoon am Fr 01.08.2008 01:04, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
bluespoon
Threadersteller

Dabei seit: 10.11.2006
Ort: Hannover
Alter: 41
Geschlecht: Männlich
Verfasst Do 31.07.2008 01:10
Titel

Antworten mit Zitat Zum Seitenanfang

So ... vielen Dank erst einmal. Jetzt funktioniert es einwandfrei. Hatte es mit einem lf versucht, aber Windows benutzt ja den crlf, ergo musste ich nur "\r\n" durch "" ersetzen. Hier:

Code:
$KlartextMitUmbruch = htmlspecialchars($Zeile);
$Klartext = str_replace("\r\n", "", $KlartextMitUmbruch);
$Hash = md5(htmlspecialchars($Klartext));




Hier ist noch einmal der komplette funktionierende Code:

Code:
<?php
   error_reporting(E_ALL);
   
   $Datenbankserver = 'localhost';
   $Datenbankbenutzer = 'root';
   $Datenbankpasswort = '';
   $Datenbankname = '***';
   $Datenbanktabelle = '***';

   $Verbindung = mysql_connect($Datenbankserver, $Datenbankbenutzer, $Datenbankpasswort) OR die(mysql_error());
   mysql_select_db($Datenbankname) OR die(mysql_error());
      
   $Zeilen = file ('wordlist.txt');
   
   //INSERT INTO $Datenbanktabelle VALUES (1,2,3),(1,2,3),(1,2,3)
   
   foreach ($Zeilen as $Zeilennummer => $Zeile) {
      $KlartextMitUmbruch = htmlspecialchars($Zeile);
      $Klartext = str_replace("\r\n", "", $KlartextMitUmbruch);
      $Hash = md5(htmlspecialchars($Klartext));
      
      $sql = "SELECT
               COUNT(*) as Kram
            FROM
               ".$Datenbanktabelle."
            WHERE
               md5 = '".$Hash."'";
               
      $Ergebnis = mysql_query($sql) OR die(mysql_error());
      $R = mysql_fetch_assoc($Ergebnis);
               
      if($R['Kram'] == 0) {
         $sql = "INSERT INTO
                  ".$Datenbanktabelle."
                  (plaintext, md5)
               VALUES
                  ('".$Klartext."', '".$Hash."')";
         
         mysql_query($sql) OR die(mysql_error());
         echo "<span style=\"color: #009900\">" . $Klartext . "  ->  " . $Hash . "  =  OK</span><br>";
         
      } else {
         echo "<span style=\"color: #990000\">" . $Klartext . "->  " . $Hash . "  =  Existiert schon</span><br>";
      }
      
      unset($Klartext);
      unset($Hash);
   }
   
   mysql_close($Verbindung);
?>


Zuletzt bearbeitet von bluespoon am Do 31.07.2008 01:30, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Textdatei zeilenweise auslesen und anzeigen
MySQL/PHP - If-Abfrage in einer while-Schleife
[PHP/MySQL] MySQL Error: 1054, falsche Tabelle ausgewählt?
Höhe aus Tabelle auslesen und in andere Tabelle einfügen
BLOB in mysql per php oder mysql einfügen
MySQL Tabelle
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.