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

    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());
            } 

        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());
            ?>

            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

              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()); 

                  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()); 

                      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());
                          }
                        ?>

                        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

                            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.

                              Kommentar

                              Lädt...
                              X