Judith: MySQL und ich zu blöd!?

Moin, Forum

mein erstes Login-Script laeuft. Tataa!

Aber:

wenn ich jetzt die Testtabelle ("users") mit zwei Felder (username, password) durch die mit phpMyAdmin erstellte Tabelle mit mehreren Feldern ("anbieter") ersetzen moechte, funktioniert's nicht:

Und ich habe nur

"INSERT INTO users VALUES ('$username', '$password')"

in

"INSERT INTO anbieter VALUES ('$username', '$password')"

geaendert. Nix weiter.

Beide Tabellen liegen in der selben Datenbank und sind auch mit keinen Rechten verbunden. Auch das Formular besteht momentan rudimentaet aus den zwei Eingabefeldern. Und auch beide Tabellenfelder ("username" und "password" sind in beiden Tabellen vorhanden, wobei eben weitere Tabellenfelder in "anbieter" existieren. Allerdings werden nur die beiden im Formular abgefragt. Wie gesagt: Nur "users" durch "anbieter" ersetzt und schon geht nueschts mehr.

Weiss jemand, wo ich dumme Goere was falsch gemacht haben koennte?

Liebe Gruesse.
Die Judith

  1. Hallo Judith,

    [...]

    "INSERT INTO anbieter VALUES ('$username', '$password')"

    [...] Und auch beide Tabellenfelder ("username" und "password" sind in beiden Tabellen vorhanden, wobei eben weitere Tabellenfelder in "anbieter" existieren. Allerdings werden nur die beiden im Formular abgefragt. Wie gesagt: Nur "users" durch "anbieter" ersetzt und schon geht nueschts mehr.

    Weiss jemand, wo ich dumme Goere was falsch gemacht haben koennte?

    Lass Dir mal die Fehlermeldungen von MySQL in dem von Dir verwendeten Clientprogramm ausgeben, bzw. gib diese Anweisung (natürlich mit sinnvollen Werten ;) direkt in phpMyAdmin ein. Dann bekommst Du gesagt, was Du flachs gemacht hast. :)

    Gruß Alex

    --
    >> Dass in eine if Schleife zu packen schafft mein 10 jähriges Patenkind. [...]
    > Mhhh, wenn man if in Schleifen packt, muss man sich auch nicht wundern, wenn die Patenkinder verwöhnte Luder werden. [...]
    [TomIRL und Tom in ?t=64084&m=364291]
    ss:) zu:} ls:} fo:| de:[ va:| ch:| sh:( n4:& rl:° br:& js:| ie:| fl:| mo:}
  2. Hello,

    wenn ich jetzt die Testtabelle ("users") mit zwei Felder (username, password) durch die mit phpMyAdmin erstellte Tabelle mit mehreren Feldern ("anbieter") ersetzen moechte, funktioniert's nicht:

    Und ich habe nur

    Tabelle "users" hat zwei Felder, da passen dann also auch zwei Values dazu. Die Angabe der Feldnamen für die Zuordnung _darf_ entfallen.

    "INSERT INTO users VALUES ('$username', '$password')"

    Tabelle "anbieter" hat deiner Aussage nach mehr als zwei Spalten. Wenn man nun versucht, einen unvollständigen Datansatz einzufügen, weigert sich MySQL, da es keine Verantwortung für die Zuordnung der Datenwerte zu den Spalten übernimmt. Die hat die ProgrammiererIn!

    "INSERT INTO anbieter VALUES ('$username', '$password')"

    Nun kannst Du schreiben:

    http://www.mysql.de/doc/de/HANDLER.html

    "INSERT INTO anbieter (username, password) VALUES ('$username', '$password')"

    oder

    "INSERT INTO anbieter set
        username = '$username',
        password = '$password'"

    Und wenn Du es noch besser machen willst, dann schreibst Du:

    $sql= "INSERT INTO anbieter set ".
          "username = '".mysql_escape_string($username)"', ".
          "password = '".mysql_escape_string($password)"'";

    http://de2.php.net/manual/de/function.mysql-escape-string.php

    Ggf. musst Du vorher die von PHP automatisch ergänzten Backslashes wieder entfernen. Das geht am einfachsten gleich mit einer rekursiven Funktion:

    #-----------------------------------------------
    function strip($_data)
    {
      if (!get_magic_quotes_gpc())
      {
        return $_data;
      }

    if (is_array($_data))
      {
        foreach($_data as $key => $val)
        {
          $data[$key] = strip($val);
        }
      }
      else
      {
        $_data = stripslashes($_data);
      }
      return $_data;
    }
    #-----------------------------------------------

    $_POST = strip($_POST);

    #===============================================

    Die Funktion prüft, ob auf dem Server die magic_quotes_gpc eingeschaltet sind http://de2.php.net/manual/de/function.get-magic-quotes-gpc.php und sollte dies der Fall sein (das ist default), dann entfernt sie die Backslashes wieder aus allen Post-Variablen. Die Postparamter können dabei als beliebige Array-Strukturen angelegt worden sein.

    Nun _muss_ man aber auf jeden fall selber für Sicherheit bei der Datenübergabe an die DB sorgen und die zur DB passende Escape-Funktion verwenden. Für MySQL heißt sie eben mysql_(real_)escape_string().

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen