Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme bei Insert in Mysql DB mit PHP

Einklappen

Neue Werbung 2019

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

  • Probleme bei Insert in Mysql DB mit PHP

    Hi zusammen,

    ich habe eine MySQL Tabelle mit ein paar Feldern.

    ich versuche gerade in 4 der Felder einen Wert einzutragen.

    PHP-Code:
    include 'dbcon.php';
    error_reporting(E_ALL);
    /* change character set to utf8    ergibt Initial character set: latin1 Current character set: utf8
    printf("Initial character set: %s\n", mysqli_character_set_name($conn));
    if (!mysqli_set_charset($conn, "utf8")) {
        printf("Error loading character set utf8: %s\n", mysqli_error($conn));
        exit();
    } else {
        printf("Current character set: %s\n", mysqli_character_set_name($conn));
    }*/

    if (($handle fopen("OPUS_prod_Library.csv""r")) !== FALSE) {
        while ((
    $data fgetcsv($handle5000";")) !== FALSE) {
            
    $prodnr explode('.'$data[2]);
            
    $eins $prodnr[0]; //01
            
    $zwei $prodnr[1]; //01
            
    $drei $prodnr[2]; //02
            
    $vier $data[7]; //Produkt ™
            //$vier = htmlentities($vier);
            
    echo $vier//Ausgabe im Broser is korrekt
            //echo mb_detect_encoding($vier); // ergibt ASCII
            
    echo "<br />";

                
    $sql "INSERT INTO tblprod (herstellernum, funktnum, prodnum, prodname)
                VALUES (" 
    $eins ", " $zwei ", " $drei ", " $vier ")";
                        
    mysqli_query($conn$sql);
        }
        
    fclose($handle);

    dabei sind die Vars eins-drei lediglich Zahlen, die vier ist ein Produktname der auch Sonderzeichen enthält (TM zb).
    Nun zu meinem Problem, wenn ich versuche das in die DB einzutragen, geschieht gar nichts, also das PHP script wird durchgelaufen, aber nichts in die DB eingetragen und auch kein Fehler ausgegeben.
    Wenn ich allerdings nur die Var eins, zwei, drei eintrage, so funktionierts.
    Das DB Feld ist definiert als varchar(64) utf8_general_ci. Wie ihr seht, hab ich schon einiges probiert, aber nichts hat geholfen.

    Ich hatte auch gestern ein anderes Problem, dass ich versucht habe den string 00001 in ein Varchar Feld einzutragen und die 0en immer abgeschnitten wurden, einzige "Möglichkeit" das zu fixen war in INT feld mit Zerofill.

    Hat jmd eine Idee was da schief läuft?

    Grüssle

  • #2
    Zitat von Skadie Beitrag anzeigen
    Hat jmd eine Idee was da schief läuft?
    Ja, ich. Und damit wäre deine Frage korrekt beantwortet.

    Strings gehören zwischen Ticks '

    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


    • #3
      PHP-Code:
      $a 0001;
      echo 
      gettype($a) . ", ";

      $b '0001';
      echo 
      gettype($b); 

      Kommentar


      • #4
        Zitat von uha Beitrag anzeigen
        Ja, ich. Und damit wäre deine Frage korrekt beantwortet.

        Strings gehören zwischen Ticks '
        ok das ist mein Fehler.
        forget it xD Ich habs endlich, alle haben mal die Füsse vom Schlauch genommen.

        Danke euch Zwei

        Kommentar


        • #5
          Hallo, wenn ich noch was sagen darf

          Deine Variablenbezeichnungen sind Grütze (entschuldige), schau mal, wenn du mehr von der Sorte hast > dann bekommst du echt Probleme. $eins? $zwei? Benenne die vars sinnvoll und in englischer Sprache .

          Und, wenn du Code postest, lösch deinen auskommentierten Code. Bei längerem Code ist das übel zu lesen, und wenn du es auskommentierst, ist es wohl eh nicht von belang.

          DB-Handling: Generell empfehle ich Dir, mit prepared Statements zu arbeiten. Das ist am Anfang vielleicht ein wenig aufwändiger, aber dafür z. B. sicherer was SQL Injections angeht.

          Das Nachfolgende ist nur exemplarisch, bitte NICHT einfach so übernehmen

          PHP-Code:
          $servername "localhost";
          $username "mydbuser";
          $password "mydbpass";
          $dbname "mydbname";

          // Create DB connection
          $conn = new mysqli($servername$username$password$dbname);

          // Check DB connection
          if ($conn->connect_error) {
              die(
          "Connection failed: " $conn->connect_error);
          }

          // Prepare and bind
          $stmt $conn->prepare("INSERT INTO tblprod (herstellernum, funktnum, prodnum, prodname) VALUES (?, ?, ?, ?)");
          // "iiis" > i = integer, s = string, je nach dem, was für einen Typ du erwartest
          $stmt->bind_param("iiis"$eins$zwei$drei$vier);

          $stmt->execute();
          $stmt->close(); 
          Dies ist die objektorientierte Variante, das gibt es aber auch in prozeduralem Code. Einfach mal ne Lesestunde einlegen.

          Kommentar


          • #6
            Zitat von Miss Santrop Beitrag anzeigen
            Hallo, wenn ich noch was sagen darf

            Deine Variablenbezeichnungen sind Grütze (entschuldige), schau mal, wenn du mehr von der Sorte hast > dann bekommst du echt Probleme. $eins? $zwei? Benenne die vars sinnvoll und in englischer Sprache .

            Und, wenn du Code postest, lösch deinen auskommentierten Code. Bei längerem Code ist das übel zu lesen, und wenn du es auskommentierst, ist es wohl eh nicht von belang.

            DB-Handling: Generell empfehle ich Dir, mit prepared Statements zu arbeiten. Das ist am Anfang vielleicht ein wenig aufwändiger, aber dafür z. B. sicherer was SQL Injections angeht.

            Das Nachfolgende ist nur exemplarisch, bitte NICHT einfach so übernehmen

            Dies ist die objektorientierte Variante, das gibt es aber auch in prozeduralem Code. Einfach mal ne Lesestunde einlegen.
            Hiho,

            danke für deine Tipps. Eigentlich wird direkt der Array in die DB geschrieben, solche Variablen benutze ich nicht keine Sorge, ich nutze zwar keine englischen namen aber trotzdem Aussagekräftige.
            Ich habe den auskommentierten Text drin gelassen um zu zeigen, was ich probiert habe, gut ich war total auf dem Holzweg^^

            Prepared Statements zu lernen bzw sich mal in das ganze Thema Objektorientiert einzuarbeiten steht auf meiner Liste recht weit oben, für das jetzt hier benötige ich es nicht, da es nur dazu dient Altbestände schneller in eine DB zu schreiben.
            Wird also nie das Internet sehen, selbst die Datenbank ist nur zur Internen Nutzung.

            Kennst du evtl eine gute Seite um mich da einzulesen? Also nur wenn dir spontan eine einfällt, musst nicht extra suchen.

            Nochmals vielen Dank und wünsche noch einen schönen Sonntag.

            Kommentar


            • #7
              Auch wenn der Code aus Fort Knox käme, ich würde ihn auf JEDEN Fall escapen, wenn er in die DB wandern soll.

              Angenommen in der CSV wäre schon Schadcode drin (z. B. durch ein Späßchen eines Kollegen o. ä.), dann nimmst du ihn 1:1 in die DB. You never know.

              Prepared Statements? Hier findest du sicher ein gutes Tutorial.

              Kommentar


              • #8
                Das Handbuch bietet auch ein Erklärung und Einleitung zu prepared statements..

                Kommentar


                • #9
                  Wenn er oder man sich vielleicht vor PDO scheut, wäre in meinen Augen zumindest mysql_real_escape_string() ein besserer Zwischenschritt von dem aktuellen Zustand des Scripts bis hin zu PDO.

                  Kommentar


                  • #10
                    Bitte Forenregeln beachten:

                    Zur Zeit sind viele Threadtitel wie "PHP Problem" , "Session Problem" , "Problem Problem" , "xy Problem" im Umlauf. Dass man ein irgendwie geartetes Problem hat, liegt im Wesen des Forums. Das Wort "Problem" gehört nicht in den Threadtitel, sondern eine kurze Beschreibung des Threadinhalts.
                    Bitte aussagekräftige Threadtitel verwenden
                    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