Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Textdatei Zeilenweise in SQL mit Sonderzeichen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Textdatei Zeilenweise in SQL mit Sonderzeichen

    Hallo zusammen,

    ich beziehe mich nochmal auf diesen Beitrag:
    http://www.php.de/datenbanken/113349...lte-werte.html

    Ich lese eine Textdatei von einem WebServer ein. Das Format ist so:
    PHP-Code:
    DatumNr.;Heimmannschaft;Gastmannschaft;SB;;Halle;Ergebnis
    27.09.2014
    ;6;Team 1 Süd;Team 2 Süd;15:00;14:00;Kätheschule;3:0  (25:1325:1125:8
    So zerlege ich es:

    PHP-Code:
    require_once('db_daten.php');
    $_matches file($_matchesUrl);
    foreach (
    $_matches as $_row){
            
    $_row explode(";",$_row);
            
    $_matchId            $_row[1];
            
    $_matchNumber        $_row[1];
            
    $_matchDate            date("Y-m-d",strtotime($_row[0]));
            
    $_matchTime            $_row[4];
            
    $_team0Name            $_row[2];
            
    $_team1Name            $_row[3];
            
    $_locationName        $_row[6];

    So schreibe ich es in die DB:

    PHP-Code:
            $_insert sprintf("INSERT INTO $_matchesTable(
                `matchId`,
                `matchNumber`,
                `matchDate`,
                `matchTime`,
                `team0Name`,
                `team1Name`,
                `locationName`,
            )
            VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s')"
    ,
                
    mysql_real_escape_string($_matchId),
                
    mysql_real_escape_string($_matchNumber),
                
    mysql_real_escape_string($_matchDate),
                
    mysql_real_escape_string($_matchTime),
                
    mysql_real_escape_string($_team0Name),
                
    mysql_real_escape_string($_team1Name),
                
    mysql_real_escape_string($_locationName),
            );
            echo (
    "matchDate = $_matchDate\n");
            echo (
    "matchTime = $_matchTime\n");
            echo (
    "team0Name = $_team0Name\n");
            echo (
    "team1Name = $_team1Name\n");
            echo (
    "locationName = $_locationName\n");
            
    $_insertInto mysql_query($_insert); 
    Die db_daten.php sieht so aus:

    PHP-Code:
    <?PHP
    $servername 
    "localhost";
    $username       "user";
    $password       "pass";
    $db             "db";
    $link mysql_connect($servername$username$password) or die(mysql_error());
    if (!
    $link) {
        die(
    'Verbindung schlug fehl: ' mysql_error());
    }
    mysql_select_db('db') or die(mysql_error());
    mysql_query("SET NAMES 'utf8'") or die(mysql_error());
    ?>
    Die echo Ausgabe sieht sauber aus. Die DB hat folgende Einstellungen:
    utf8_general_ci

    Dennoch werden alle Variablen beim INSERT nach dem Sonderzeichen abgeschnitten in der DB eingetragen.

    Ich habe keine Idee (mehr).

    Könnt ihr einem Anfänger unter die Arme greifen?

    Danke schon jetzt

  • #2
    Das ist ein Zeichensatzproblem. Die Datei ist vermutlich Latin1 codiert...

    So sollte es gehen:
    PHP-Code:
    ...foreach ($_matches as $_row){
            
    $_row utf8_encode($_row);
            
    $_row explode(";",$_row);... 

    Kommentar


    • #3
      Hallo zusammen,
      habe das Problem gerade glöst:
      PHP-Code:
      mysql_query("SET NAMES 'latin1'") or die(mysql_error()); 
      Verstehen tue ich das noch nicht, aber es sit wie es ist...

      Ciao

      Kommentar


      • #4
        Verstehen tue ich das noch nicht, aber es sit wie es ist...
        Schau mal hier, da steht auch etwas über SET NAMES: Siehe auch: http://php-de.github.io/jumpto/mysql-and-utf8/
        Im Grunde hast du deine DB angelogen, gesagt es kommt etwas in UTF-8 und dann war es aber was anderes..

        Und weil wir gerade dabei sind: Die mysql_ Erweiterung wird bald nicht mehr funktionieren, weil es aus PHP rausfliegt. Nutze besser PDO oder mysqli_ dafür: http://php-de.github.io/jumpto/faq/#deprecated-mysql (ganz unten).

        LG
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Hi, danke für die Antwort. Das mit dem PDO habe ich mir auch schon angeschaut. Das wird das nächste Projekt, wenn ich alles soweit habe...

          Merci

          Kommentar


          • #6
            Das mit dem PDO habe ich mir auch schon angeschaut. Das wird das nächste Projekt
            Aber nicht vergessen Und dann aber (auch) gleich Prepared Statments: http://www.peterkropff.de/site/php/pdo_statement.htm

            LG
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar

            Lädt...
            X