Christian: SQL-Fehler: Column count doesn't match value count at row 1

Guten Tag,

ich arbeite gerade an einem eigenen Adressbuch um mein gerade erst frisch gelerntes nicht zu verlernen.

Allerdings komme ich nicht weiter. Nach dem Abwesen des Formular kommt folgende Fehlermeldung:

SQL-Fehler: Column count doesn't match value count at row 1

Ich verstehe einfach nicht was der von mir will!

  1. hi,

    SQL-Fehler: Column count doesn't match value count at row 1

    Ich verstehe einfach nicht was der von mir will!

    column(s) = Spalten
    count = Anzahl
    match = passen zu
    value(s) = Wert(e)

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Vielen Dank für die schnelle Antwort.

      Was genau heißt das jetzt?

      1. Hi Christian!

        Was genau heißt das jetzt?

        Die Anzahl der Spalten stimmt nicht mit der Anzahl der Werte, die du in die Daten eintragen möchtest, überein.
        Versuch mal 5 Elefanten in einen Kühlschrank für 4 reinzuquetschen.

        Solltest du weitere Problem haben, wäre ein wenig Code vielleicht nicht schlecht.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Vielen Dank für das tolle Beispiel mit den Elefanten ;-)

          Das Formular:

          <html>
          <head>
                 <link rel="stylesheet" type="text/css" href="css/main.css">
          </head>
          <div align="center">

          <form action="adresseingabe.php" method="POST">
              <body><div class="formHead">Fülle bitte, wenn möglich alle Felder aus!</div>
          <div class="formBody">
          <table border="0">
          <tr><td width="100">Anrede:</td><td width="150"><input size="4" type ="Text" name="anrede" /></td></tr>
          <tr><td>Vorname:</td><td><input size="30" name="vorname" /></td></tr>
          <tr><td>Name:</td><td><input size="30" name="name" /></td></tr>
          <tr><td>Straße:</td><td><input size="30" name="strasse" /></td></tr>
          <tr><td>PLZ/Ort:</td><td><input size="5" name="plzort" /></td></tr>
          <tr><td>Telefon:</td><td><input size="30" name="telefon" /></td></tr>
          <tr><td>Mobil:</td><td><input size="30" name="mobil" /></td></tr>
          <tr><td>E-Mail:</td><td><input size="30" name="email" /></td></tr>
          <tr><td>Verein:</td><td><input size="30" name="vereinsname" /></td></tr>
          <tr><td>Mannschaft:</td><td><input size="30" name="mannschaft" /></td></tr>
          <tr><td>Position:</td><td><input size="5" name="position" /></td></tr>
          <tr><td>Spielklasse:</td><td><input size="30" name="spielklasse" /></td></tr>
          <tr><td>Geb. Datum:</td><td><input size="30" name="geburtstag" /></td></tr>
          <tr><td>ICQ:</td><td><input size="10" name="icq" /></td></tr>

          </table>
          <input type="Submit" value="Abschicken"> <input type="Reset" value="Zurücksetzen">
          </form>
          </body>
          </html>

          Die Eingaben gehen an:

          <?php
           include("db_connect.php");

          $id         =   "NULL";
           $anrede     =   $_POST["anrede"];
           $vorname    =   $_POST["vorname"];
           $name       =   $_POST["name"];
           $strasse    =   $_POST["strasse"];
           $plz        =   $_POST["plzort"];
           $tel        =   $_POST["telefon"];
           $mobil      =   $_POST["mobil"];
           $email      =   $_POST["email"];
                  $verein     =   $_POST["vereinsname"];
                  $mannschaft =   $_POST["mannschaft"];
                  $position   =   $_POST["position"];
                  $spielklasse=   $_POST["spielklasse"];
                  $geburtstag =   $_POST["geburtstag"];
                  $icq        =   $_POST["icq"];

          $sql = "INSERT INTO $tabelle VALUES ('$id','$anrede','$vorname','$name','$strasse','$plz','$tel','$email','$verein','$mannschaft','$position','$spielklasse','$geburtstag','$icq')";

          $ausgabe = "<p>Die Eingabe wurde gespeichert</p>";

          if($sql != "")
            $res = mysql_query($sql) or die("SQL-Fehler: " . mysql_error());
            mysql_close($db);
           echo $ausgabe;
           echo "<p><a href='ausgabe1.php'' target='_top'>Zur Adressansicht</a></p>"
          ?>

          1. hi,

            Das Formular:

            Interessiert überhaupt nicht.

            Die Eingaben gehen an:

            Auch Wurscht.

            $sql = "INSERT INTO $tabelle VALUES ('$id','$anrede','$vorname','$name','$strasse','$plz','$tel','$email','$verein','$mannschaft','$position','$spielklasse','$geburtstag','$icq')";

            Das ist die einzig relevante Zeile*.

            Und die Anzahl VALUES, die du hier angegeben hast, stimmt nicht mit der Anzahl der Spalten in deiner Tabelle überein.

            * Kontrollausgabe des dynamische generierten SQL-Statements sollte im Fehlerfalle natürlich auch nicht fehlen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
          2. Hello,

            $sql = "INSERT INTO $tabelle VALUES ('$id','$anrede','$vorname','$name','$strasse','$plz','$tel','$email','$verein','$mannschaft','$position','$spielklasse','$geburtstag','$icq')";

            Erfahrungsgemäß empfiehlt es sich NICHT auf die Angabe der Spalten zu verzichten, das Problem siehst du - irgendwo fehlt eine Spalte. Spätestens wenn du in 3 Monaten beschließt, dass jemand noch eine Handy-Nummer und daraufhin das Datenmodell änderst gehst du lange auf Fehlersuche.
            Gibt am Besten immer die Spalten an, dann fällt dir auch auf, wenn etwas nicht stimmt - in deinem Fall also etwa
            INSERT INTO table
            (id, anrede, vorname, name, ...)
            VALUES
            (...)

            MfG
            Rouven

            --
            -------------------
            Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
          3. Hallo Christian,

            $anrede     =   $_POST["anrede"];
            $vorname    =   $_POST["vorname"];
            (...)
            $sql = "INSERT INTO $tabelle VALUES ('$id','$anrede','$vorname','$name','$strasse','$plz','$tel','$email','$verein','$mannschaft','$position','$spielklasse','$geburtstag','$icq')";

            Dein eigentliches Problem hast du ja mittlerweile gelöst, ein anderes hast du aber noch. Es heißt XSS. (Tipp: ich gebe als Namen
            ich '); DELETE * FROM tabelle;'
            an. Überleg mal was jetzt passiert ;)

            Grüße aus Freiburg,
            Marian

            --
            Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
            <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
            1. echo $begrüßung;

              Dein eigentliches Problem hast du ja mittlerweile gelöst, ein anderes hast du aber noch. Es heißt XSS. (Tipp: ich gebe als Namen
              ich '); DELETE * FROM tabelle;'
              an. Überleg mal was jetzt passiert ;)

              Nun, das gibt eine Fehlermeldung. Du hast ein schlechtes Beispiel gewählt und ihm außerdem noch einen falschen Namen gegeben. Unter XSS versteht man die Beeinflussung des Browsers durch Einschleusen von clientseitig interpretiertem Code. Du meinst eine SQL-Injection. Und die wird von PHP in der Form abgelehnt, weil es schon seit vielen Versionen pro mysql_query() nur ein Statement ausführen möchte. Um mehrere Statements in einer Query ausführen zu können muss man sich der MySQLi-Extension bedienen und dort auch explizit mysqli_multi_query() verwenden. Nichtsdestotrotz kann man auch mit der Erweiterung nur eines einzelnen Statements noch genug Schaden anrichten.

              P.S. Den Syntax-Fehler im DELETE-Statement erwähne ich mal nicht, es ist eh schon peinlich genug für dich :-)

              echo "$verabschiedung $name";

              1. Hallo dedlfix,

                Nun, das gibt eine Fehlermeldung. Du hast ein schlechtes Beispiel gewählt und ihm außerdem noch einen falschen Namen gegeben.

                Ja, dass es nicht funktioniert wegen der Anzahl der Spalten wusste ich, war aber zu faul mir ein besseres Beispiel auszudenken ;)

                Unter XSS versteht man die Beeinflussung des Browsers durch Einschleusen von clientseitig interpretiertem Code. Du meinst eine SQL-Injection.

                Hm gut, ich hatte das immer als Untergruppe von XSS verstanden.

                Und die wird von PHP in der Form abgelehnt, weil es schon seit vielen Versionen pro mysql_query() nur ein Statement ausführen möchte. Um mehrere Statements in einer Query ausführen zu können muss man sich der MySQLi-Extension bedienen und dort auch explizit mysqli_multi_query() verwenden.

                Das wusste ich nicht.

                Nichtsdestotrotz kann man auch mit der Erweiterung nur eines einzelnen Statements noch genug Schaden anrichten.

                Das wollte ich sagen *g*

                P.S. Den Syntax-Fehler im DELETE-Statement erwähne ich mal nicht, es ist eh schon peinlich genug für dich :-)

                Öh ja, ich hab einfach schnell ein (zugegeben etwas schlechtes) Beispiel gesucht ;-)

                Grüße aus Freiburg,
                Marian

                --
                Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
                <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
        2. Versuch mal 5 Elefanten in einen Kühlschrank für 4 reinzuquetschen.

          Ein bloedes Beispiel! Kann ich mir, ehrlich gesagt, nicht vorstellen... Mein Elefenatenkuehlschrank hat nur Platz fuer 2. Und der is schon _ziemlich_ gross... Es soll noch groessere geben?!?

      2. hi,

        Vielen Dank für die schnelle Antwort.

        Was genau heißt das jetzt?

        Das heisst: Benutze bitte mal dein Hirn.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }