goldjunge2007: Habe Probleme mit insert

Hi,
ich suche schon eine Weile aber ich komme einfach nicht darauf wieso dieses Script nicht funktioniert.
Fehlermeldungen gibt es keine mehr aber der Datensatz wird nicht angelegt.

function user_anlegen($u_name, $u_pass, $u_mail, $firma)
{
 $limit = strtotime("+7 day");
 $sqlab = "insert users(UserName, UserPass, UserMail, Firma, limit)";
 $sqlab .= "values ('" . $u_name . "', MD5('" . $u_pass . "'), '" . $u_mail . "', '" . $firma . "', " . $limit . ")";

mysql_query($sqlab);
}

Besten Dank!

  1. Mahlzeit goldjunge2007,

    ich suche schon eine Weile aber ich komme einfach nicht darauf wieso dieses Script nicht funktioniert.
    Fehlermeldungen gibt es keine mehr aber der Datensatz wird nicht angelegt.

    Fehlermeldungen gibt es wahrscheinlich deshalb nicht, weil Du sie unterdrückst und andererseits überhaupt nicht überprüfst, ob die Abfrage erfolgreich wahr. Warum dieses Skript nicht funktioniert, ist nämlich sehr klar.

    function user_anlegen($u_name, $u_pass, $u_mail, $firma)
    {
    $limit = strtotime("+7 day");
    $sqlab = "insert users(UserName, UserPass, UserMail, Firma, limit)";
    $sqlab .= "values ('" . $u_name . "', MD5('" . $u_pass . "'), '" . $u_mail . "', '" . $firma . "', " . $limit . ")";

    mysql_query($sqlab);
    }

    Darüber hinaus solltest Du die Werte, die Du einträgst, kontextsensitiv behandeln: Stichwort "SQL Injection".

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Wenn ich ehrlich bin hat mir das nicht weitergeholfen...
      Ich bin noch Anfänger wo liegt denn der Fehler?
      Das INTO steht in meinem PHP-MySQL-Buch nicht drin...
      Es einzufügen hat auch nicht geholfen...

    2. Hallo EKKi,

      Fehlermeldungen gibt es wahrscheinlich deshalb nicht, weil Du sie unterdrückst und andererseits überhaupt nicht überprüfst, ob die Abfrage erfolgreich wahr. Warum dieses Skript nicht funktioniert, ist nämlich sehr klar.

      möchtest Du nicht auch noch http://dev.mysql.com/doc/refman/5.1/de/reserved-words.html empfehlen?

      function user_anlegen($u_name, $u_pass, $u_mail, $firma)
      {
      $limit = strtotime("+7 day");
      $sqlab = "insert users(UserName, UserPass, UserMail, Firma, limit)";
      $sqlab .= "values ('" . $u_name . "', MD5('" . $u_pass . "'), '" . $u_mail . "', '" . $firma . "', " . $limit . ")";

      Hier ein kleines

      echo $sqlab;

      zur Debugausgabe würden dem OP fehlenden Whitespace (kann, muss aber nicht ein Leerzeichen sein) aufzeigen - und ein bestimmtes reserviertes Wort wäre zwingend zu quotieren, wie dedlfix sagte.

      Darüber hinaus solltest Du die Werte, die Du einträgst, kontextsensitiv behandeln: Stichwort "SQL Injection".

      Da sind wir uns fast einig, außer dass ich einem Anfänger nahelege, sich gar nicht mehr erst mit (den weit verbreiteten und dokumentierten) mysql_*-Sachen herumzuschlagen, sondern gleich mit mysqli anzufangen.

      Freundliche Grüße

      Vinzenz

    3. echo $begrüßung;

      Fehlermeldungen gibt es keine mehr aber der Datensatz wird nicht angelegt.
      Fehlermeldungen gibt es wahrscheinlich deshalb nicht, weil Du sie unterdrückst

      Eher nicht, denn damit unterdrückt man nur PHP-Fehler, die treten meist nur als Folgefehler auf, was in dem Fall nicht der Fall sein wird. MySQL-Fehler müssen nach ihrem Auftreten - was die mysql_*-Funktionen durch ihren Rückgabewert signalisieren - mit der Funktion mysql_error() abgefragt werden.

      Warum dieses Skript nicht funktioniert, ist nämlich sehr klar.

      Ich hätte ja zum einen auf eine freigegebene Version verlinkt (5.1 ist immer noch nicht für den Produktiveinsatz freigegeben) andererseits auf das Kapitel Reserved Words, denn die INSERT-Syntax scheint mir soweit in Ordnung zu sein.

      function user_anlegen($u_name, $u_pass, $u_mail, $firma)
      {
      $limit = strtotime("+7 day");
      $sqlab = "insert users(UserName, UserPass, UserMail, Firma, limit)";
      $sqlab .= "values ('" . $u_name . "', MD5('" . $u_pass . "'), '" . $u_mail . "', '" . $firma . "', " . $limit . ")";

      mysql_query($sqlab);
      }

      Darüber hinaus solltest Du die Werte, die Du einträgst, kontextsensitiv behandeln: Stichwort "SQL Injection".

      Und die Funktion sprintf() ansehen, damit kann man das Statement (meiner Meinung nach) übersichtlicher zusammenbauen.

      $sqlab = sprintf("INSERT users (UserName, UserPass, UserMail, Firma, limit) " .
        "VALUES ('%s', MD5('%s'), '%s', '%s', %s)",
        mysql_real_escape_string($u_name),
        mysql_real_escape_string($u_pass),
        mysql_real_escape_string($u_mail),
        mysql_real_escape_string($firma),
        $limit);

      Außerdem sollte man Zeitangaben in Datenbank-eigenen Feldtypen speichern. Man kann dann auch gleich MySQL-Funktionen dafür verwenden, hier: NOW + INTERVAL 7 DAY

      ... "VALUES ('%s', MD5('%s'), '%s', '%s', NOW + INTERVAL 7 DAY)", ...
        // und das $limit am Ende weglassen.

      echo "$verabschiedung $name";