mysql varchar geht nicht

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

  • mysql varchar geht nicht

    Hallo,

    Habe derzeit folgendes Problem.
    Ich will daten in eine mysql-datenbank schreiben, doch kann ich nur zahlen einschreiben solbald ich irgendein Text schreibe kommt folgende Fehlermeldung:
    [COLOR=Red]Unknown column 'test' in 'field list'[/COLOR]

    Da ich ein bisschen am herumprobieren was habe ich dieses script soweit zurückgebaut das ich nur title in die Tabelle schreiben will.

    Die Tabelle ist so aufgebaut:

    CREATE TABLE IF NOT EXISTS `gb` (
    `id` int(32) NOT NULL auto_increment,
    `title` varchar(255) NOT NULL,
    `text` text NOT NULL,
    `time` int(32) NOT NULL,
    `name` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


    Hier das Script:
    [COLOR=Red]
    [/COLOR]
    PHP-Code:
    if($_POST["title"] != "")
    {

            
    $sql_insert 'INSERT INTO gb SET title='.$_POST["title"];
            
    $query $db->query$sql_insert );
                
                if(
    false == $query)
                {
                    
                    echo 
    "Konnte nicht erstellt werden.".$db->error;
                    
                } else {
                    
                    echo 
    "Wurde erfolgreich erstellt";
                    
                }
                


    Ich habe leider keine Ahnung mehr. Wie gesagt dies ist nur dann wenn ich Text in die Tabelle schreiben will wenn ich Zahlen eingebe dann geht dies.

    danke für eure Antwort.

    gruß
    Dominik

  • #2
    Zitat von matt_dominik Beitrag anzeigen
    Wie gesagt dies ist nur dann wenn ich Text in die Tabelle schreiben will wenn ich Zahlen eingebe dann geht dies.
    Wenn du in einem PHP-Script Text oder Zahlen verwendest, dann notierst du die doch auch auf zwei verschiedene Arten - bringt dich das nicht mal ansatzweise zum nachdenken, dass das in SQL ähnlich sein könnte ...?

    MySQL :: MySQL 5.1 Reference Manual :: 8.1.1 Strings
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Dein Script ist anfällig für gefährliche SQL-Injections.

      Kommentar


      • #4
        Wenn du in einem PHP-Script Text oder Zahlen verwendest, dann notierst du die doch auch auf zwei verschiedene Arten - bringt dich das nicht mal ansatzweise zum nachdenken, dass das in SQL ähnlich sein könnte ...?
        ja klar, danke habs nun gleich einmal gefunden.
        Naja programmiere ja auch nicht gerade am besten hier und mal wieder.

        wegen sql-injection ich überprüfe gleich _POST, _GET, _SESSION, _COOKIE

        PHP-Code:
        $_GET =     secure($_GET);
        $_POST =    secure($_POST);
        $_SESSION secure($_SESSION);
        $_COOKIE =  secure($_COOKIE); 
        in der secure-funktion ist dann alles drin wo überprüft wird.

        Danke für die Antworten.

        Kommentar


        • #5
          Zitat von matt_dominik Beitrag anzeigen
          ja klar, danke habs nun gleich einmal gefunden.
          Naja programmiere ja auch nicht gerade am besten hier und mal wieder.

          wegen sql-injection ich überprüfe gleich _POST, _GET, _SESSION, _COOKIE

          PHP-Code:
          $_GET =     secure($_GET);
          $_POST =    secure($_POST);
          $_SESSION secure($_SESSION);
          $_COOKIE =  secure($_COOKIE); 
          in der secure-funktion ist dann alles drin wo überprüft wird.
          Das ist der falsche Weg. Du sollst nicht überprüfen, sondern die Daten richtig maskieren. Und das kannst du nur direkt beim Query machen. Das hat auch nichts mit $_GET, $_POST, usw. zu tun. Benutzerdaten können auch aus anderen Variablen und Datenquellen kommen.

          Kommentar


          • #6
            Zitat von matt_dominik Beitrag anzeigen

            Hier das Script:
            [COLOR=Red]
            [/COLOR]
            PHP-Code:
            if($_POST["title"] != "")
            {

                    
            $sql_insert 'INSERT INTO gb SET title='.$_POST["title"];
                    
            $query $db->query$sql_insert );
                        
                        if(
            false == $query)
                        {
                            
                            echo 
            "Konnte nicht erstellt werden.".$db->error;
                            
                        } else {
                            
                            echo 
            "Wurde erfolgreich erstellt";
                            
                        }
                        

            Hallo,

            wenn dein Script ^^ so Aussieht, kann das auch nicht funktionieren.
            MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.4 INSERT
            guck dir mal ein, wie ein INSERT Query aussehen muß!

            VG
            gourmet

            Kommentar


            • #7
              PHP-Code:
              $sql_insert "INSERT INTO gb SET title='" $_POST['title'] . "'"

              Kommentar


              • #8
                Zitat von sili Beitrag anzeigen
                PHP-Code:
                $sql_insert "INSERT INTO gb SET title='" $_POST['title'] . "'"
                Netter Versuch, aber falsch. Es fehlt die Maskierung der Daten (was ich hier schon erwähnt habe).

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Netter Versuch, aber falsch. Es fehlt die Maskierung der Daten (was ich hier schon erwähnt habe).
                  Falsch nicht. Aber unschön (wie du ja schon erwähnt hast).

                  Kommentar


                  • #10
                    Zitat von sili Beitrag anzeigen
                    Falsch nicht. Aber unschön (wie du ja schon erwähnt hast).
                    Nein, es ist ein sehr schwerer Fehler. Es sind zwar nur ein paar Zeichen Code, aber die Auswirkungen sind fatal.

                    Jeder, der halbwegs die Grundlagen beherrscht, darf solche Fehler nicht machen.
                    Zuletzt geändert von h3ll; 04.10.2010, 19:37.

                    Kommentar


                    • #11
                      [COLOR=#000000][COLOR=#0000CC]

                      [/COLOR][/COLOR]
                      PHP-Code:
                      $sql_insert "INSERT INTO gb SET title='" .mysql_real_escape_string($_POST['title']). "'"
                      ich glaube so wäre es richtig und wenn ich es nun richtig verstanden habe zahlen besser mit
                      PHP-Code:
                      $id=intval($id); 
                      sichern.

                      Kommentar


                      • #12
                        das $id = intval ($id) ist für dein PHP selbst - wenn die Zahl aber aus einer Eingabe stammt, würde ich selbst diese mit mysql_real_escape_string speichern - und in Quotes in die Datenbank speichern - nur für den Fall, dass jemand dort versucht ne SQL injection anzusetzen ...

                        Alternativ müsstest du nach dem intval halt prüfen ob

                        $id=0 nun aus Eingabe "0" entstanden ist oder weil dort Buchstaben oder andere Zeichen eingegeben wurden, die sich dann nicht in eine Zahl konvertieren lassen. Wobei man imme etwas aufpassen muss auf die "Eigenintelligenz" von PHP, bei der automatischen Typkonvertierung ("0123" könnte auch als Oktal-Zahl aufgefasst werden und wäre dann was anderes als Dezimal 123)
                        [font=Verdana]
                        Wer LESEN kann, ist klar im Vorteil!
                        [/font]

                        Kommentar


                        • #13
                          Zitat von eagle275 Beitrag anzeigen
                          das $id = intval ($id) ist für dein PHP selbst - wenn die Zahl aber aus einer Eingabe stammt, würde ich selbst diese mit mysql_real_escape_string speichern - und in Quotes in die Datenbank speichern - nur für den Fall, dass jemand dort versucht ne SQL injection anzusetzen ...

                          Alternativ müsstest du nach dem intval halt prüfen ob

                          $id=0 nun aus Eingabe "0" entstanden ist oder weil dort Buchstaben oder andere Zeichen eingegeben wurden, die sich dann nicht in eine Zahl konvertieren lassen. Wobei man imme etwas aufpassen muss auf die "Eigenintelligenz" von PHP, bei der automatischen Typkonvertierung ("0123" könnte auch als Oktal-Zahl aufgefasst werden und wäre dann was anderes als Dezimal 123)
                          Prüfen musst du so oder so. Auch MySQL hat eine schwache Typisierung und wandelt Strings automatisch in einen Integer um.

                          Kommentar

                          Lädt...
                          X