Ankündigung

Einklappen
Keine Ankündigung bisher.

Hochkommata in Datensätzen

Einklappen

Neue Werbung 2019

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

  • Hochkommata in Datensätzen

    Moin Leute,

    ich teste gerade auf meinem Xampp ne Datenbank und habe folgendes Problem:
    Ich will Datensätze aus einer CSV in meine Mysql Datenbank laden, jedoch enthalten manche Datensätze Hochkommata z.B. Thoma's Grill.

    Dadurch bricht er den Upload natürlich immer ab.
    Hier einmal der Code:
    PHP-Code:
    <html>
    <head>
    <meta http-equiv="refresh" content="5"/>
    </head>

    <body>
    <?php

    $date
    =date("H:i:s");

    $dbh=mysql_connect("localhost""root""")
    or die (
    "fail");

    mysql_select_db("test"$dbh)
    or die (
    "faildb");

    $csv_file "mappe1.csv"// Name of the CSV file

    $delet="DELETE FROM test2";
    mysql_query($delet) or die(mysql_error());

    //Import uploaded file to Database

        
    $handle fopen($csv_file"r");

        while ((
    $data fgetcsv($handle1000";")) !== FALSE) {
            
    $import="INSERT into test2(ID,Title,Status,Priority,SLA,User,Company,Category,Stage,Gruppe,Assignee,Created,LastModified) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]')";
            
    mysql_query($import) or die(mysql_error());
        }

        
    fclose($handle);
        echo 
    "Import done $date";


    mysql_close($dbh); // closing connection


    ?>
    </body>
    </html>
    Bitte helft mir!

    Danke schon mal im Vorraus!!!


  • #2
    Bitte nutze PHP-Code-Tags hier im Forum für PHP-Code, kann (will) man so nicht lesen.

    PHP-Code:
    mysql_real_escape_string() 
    und !!
    mysql_ fliegt bald aus PHP raus, da veraltet http://php.net/manual/en/migration55.deprecated.php

    LG
    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


    • #3
      Super schnelle Antwort! :O
      Oh sorry, hatte ausversehen den phpwiki tag
      Muss ich denn mysql_query mit mysql_real_escape_string() ersetzen?

      PHP-Code:
      while (($data fgetcsv($handle1000";")) !== FALSE) {
              
      $import="INSERT into test2(ID,Title,Status,Priority,SLA,User,Company,Category,Stage,Gruppe,Assignee,Created,LastModified) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]')";
              
      mysql_real_escape_string($import) or die(mysql_error()); 
      Also so?

      Kommentar


      • #4
        Nein, die musst du um jede Variable "wickeln", $data[0] - $data[12].

        Nachdem du aber ein Array hast versuche bitte mal folgendes:

        PHP-Code:

                $import
        ="INSERT into test2(ID,Title,Status,Priority,SLA,User,Company,Category,Stage,Gruppe,Assignee,Created,LastModified) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]','$data[12]')";
                
        array_walk($data'mysql_real_escape_string');
                
        mysql_query($import) or die(mysql_error());
            } 
        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
          Hmm das erfolgt folgende Fehlermeldung:

          Warning: mysql_real_escape_string() expects parameter 2 to be resource, integer given in C:\xampp\htdocs\testjanuar\new.php on line 28

          You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Grill

          Gruß Robin

          Kommentar


          • #6
            PHP-Code:
            <?php
               
            for ($i 0$i count($data); $i++)
                 
            $data[$i] = "'" mysql_real_escape_string($data[$i]) . "'";
                 
               
            $data implode(", "$data);
               
               
            $query "INSERT 
                            into 
                              `test2`
                                (`ID`,
                                 `Title`,
                                 `Status`,
                                 `Priority`,
                                 `SLA`,
                                 `User`,
                                 `Company`,
                                 `Category`,
                                 `Stage`,
                                 `Gruppe`,
                                 `Assignee`,
                                 `Created`,
                                 `LastModified`) 
                              values(" 
            $data ")";

              
            mysql_query($query
                or die(
            mysql_error());
            ?>
            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

            Kommentar


            • #7
              Ok, dann entweder das Array data vorher mit foreach durchlaufen und auf jeden Wert die Funktion ausführen,

              PHP-Code:
              foreach ($data as $val) {
                  
              $val mysql_real_escape_string($val);

              oder sonst fällt mir noch eine closure ein, könnte auch gehen:

              PHP-Code:
              array_walk($data, function(&$s) { 
                return 
              mysql_real_escape_string($s);
              }); 
              Aber Vorsicht, die Werte im Array sind dann geändert, dh wenn du damit noch etwas anderso vorhast besser in ein anderes Array buffern oder separaten SQL-String zusammensetzen.

              LG
              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


              • #8
                Hab das jetzt mit der Lösung von uha gemacht.
                Er schreibt jetzt ' mit in die Datenbank.
                Jedoch nur einen Datensatz...

                PHP-Code:
                 $handle fopen($csv_file"r");

                    
                    
                $data fgetcsv($handle1000";");
                for (
                $i 0$i count($data); $i++)
                     
                $data[$i] = "'" mysql_real_escape_string($data[$i]) . "'";
                     
                   
                $data implode(","$data);
                   
                   
                $query "INSERT 
                                into 
                                  `test2`
                                    (`ID`,
                                     `Title`,
                                     `Status`,
                                     `Priority`,
                                     `SLA`,
                                     `User`,
                                     `Company`,
                                     `Category`,
                                     `Stage`,
                                     `Gruppe`,
                                     `Assignee`,
                                     `Created`,
                                     `LastModified`) 
                                  values(" 
                $data ")";

                  
                mysql_query($query
                    or die(
                mysql_error()); 

                Kommentar


                • #9
                  Falls es zwickt, kannst ja nochmals so versuchen.
                  PHP-Code:
                  foreach ($data as $key => $val) {
                      
                  $data[$key] = mysql_real_escape_string($val);


                  $import="INSERT into ... ";

                  mysql_query($import) or die(mysql_error()); 
                  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


                  • #10
                    Damit kommt er wieder nicht am ' vorbei.
                    Selbe Fehlermeldung :

                    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Grill

                    Kommentar


                    • #11
                      Hab #9 editiert.

                      Natürlich gehören die Werte zuerst bearbeitet (escaped) und dann die Query damit zusammengebaut, so:

                      PHP-Code:
                      foreach ($data as $key => $val) {
                          
                      $data[$key] = mysql_real_escape_string($val);


                      $import "INSERT into test2(ID, ...) values('$data[0]','$data[1]', ... )";
                           
                      mysql_query($import) or die(mysql_error()); 
                      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


                      • #12
                        Zitat von roknu Beitrag anzeigen
                        Jedoch nur einen Datensatz...
                        Du hast deine while-Schleife vergessen
                        PHP-Code:
                         <?php
                           $handle 
                        fopen($csv_file"r");

                           while ((
                        $data fgetcsv($handle1000";")) !== FALSE)
                           {
                              for (
                        $i 0$i count($data); $i++)
                                
                        $data[$i] = "'" mysql_real_escape_string($data[$i]) . "'";
                             
                              
                        $data implode(", "$data);
                           
                              
                        $query "INSERT 
                                           into 
                                             `test2`
                                               (`ID`,
                                                `Title`,
                                                `Status`,
                                                `Priority`,
                                                `SLA`,
                                                `User`,
                                                `Company`,
                                                `Category`,
                                                `Stage`,
                                                `Gruppe`,
                                                `Assignee`,
                                                `Created`,
                                                `LastModified`) 
                                             values(" 
                        $data ")";

                             
                        mysql_query($query
                               or die(
                        mysql_error());
                          }
                        ?>
                        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                        Kommentar


                        • #13
                          ICH DREH DURCH! Es Funktioniert! :O
                          Einen Job macht ihr hier! Nur weiter so!

                          Kannst du mir kurz erklären, was er da genau macht, damit ich das, das nächste Mal auch selber machen kann?
                          PHP-Code:
                          foreach ($data as $key => $val) {
                              
                          $data[$key] = mysql_real_escape_string($val); 

                          Kommentar


                          • #14
                            http://php.net/manual/de/control-structures.foreach.php
                            http://php.net/manual/de/function.my...ape-string.php
                            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                            Kommentar


                            • #15
                              http://php.net/manual/de/control-structures.foreach.php

                              foreach durchläuft dein $data Array und ersetzt jeden Wert durch den, den mysql_real_escape_string() zurückgibt. Und die ist genau dafür da um "externe" Daten/Strings sicher so zu escapen das diese korrekt und ohne Schaden (SQL-Injection!) in die DB kommen. Dh es maskiert/escaped bsp. unter anderem ein ' in \' damit das spezielle "Steuerzeichen" (Hochkomma, das ja Strings begrenzt) ein "normales Textzeichen" wird.
                              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