mysql varchar geht nicht

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Originally posted by matt_dominik View Post
    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.

    Comment


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

      Comment


      • #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.

        Comment


        • #5
          Originally posted by matt_dominik View Post
          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.

          Comment


          • #6
            Originally posted by matt_dominik View Post

            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

            Comment


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

              Comment


              • #8
                Originally posted by sili View Post
                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).

                Comment


                • #9
                  Originally posted by h3ll View Post
                  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).

                  Comment


                  • #10
                    Originally posted by sili View Post
                    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.
                    Last edited by h3ll; 04-10-2010, 19:37.

                    Comment


                    • #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.

                      Comment


                      • #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]

                        Comment


                        • #13
                          Originally posted by eagle275 View Post
                          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.

                          Comment

                          Working...
                          X