Christoph: SQL Update

Hi,

unten findet ihr ein kleines Login Script...Mein Problem ist das ich bei jedem Aufruf die Zeit und den Tag in der DB UPDATEN möchte, muss ich dafür die ganze DB nochmal durch ne WHILE schleife laufen lassen?

Seht einfach mal selber(weit unten):

function login() {

global $user,$passwort,$table,$db,$logid,$clientid,$pass,$name,$vorname,$land,$strasse,$plz,$stadt,$tele,$email,$hp, $zeit,$tag;

if(empty($logid) or empty($passwort) or $logid== "" or $passwort==""){
     echo "<p><br /><strong>Falsche Angaben!!</strong></p>";}

else{
        mysql_connect("localhost","$user","$pass");
     mysql_select_db("$db");
     $result = mysql_query("SELECT * FROM $table WHERE clientid = '$logid' AND pass = '$passwort'");

while($row = mysql_fetch_array($result)){
           echo "
           <p><br />Willkommen im <strong>:: Kundenbereich ::</strong> $row[vorname] $row[name] hier haben Sie die                  möglichkeit Ihren Projektstatus abzufragen und diverse Einstellungen vorzunehmen.<br />Ihr letzter Login war am $row[tag] um $row[zeit].<br /><br />
           </p>";
          }

$newzeit=gmdate("H:i:s");
        $newtag=gmdate("d.m.Y");

#########Hier is der Fehler denke ich##############################
        $result="UPDATE $table SET tag = '$newzeit' AND zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'";

mysql_close();
 }
}

Danke für eure Hilfe

Gruss
Chris

  1. Hallo Chris,

    #########Hier is der Fehler denke ich##############################

    Das denke ich auch.

    $result="UPDATE $table SET tag = '$newzeit' AND zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'";

    Die Syntax lautet "UPDATE table SET field='value' [WHERE-definition]"

    AND ist eine logische Verknüpfung, die hat hier IMHO nix zu suchen, bei UPDATE wird durch ein Komma "verknüpft".

    Also muss dein Befehl lauten: "UPDATE $table SET tag = '$newzeit', zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'";

    Berichtigt mich, wenn ich falsch liege...

    HTH

    Grüße aus Darmstadt,
    Benjamin

    1. Hi,

      hab mir jetzt aus euren beiden Lösungen eine ganze gebastelt:

      $result = mysql_query("UPDATE $table SET tag = '$newzeit', zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'");

      das klappt...

      bin euch dankbar...

      Grüsse aus Eckernförde

      Chris

      1. Hi,

        zu früh gefreut ;-(

        nu speichert er mir zwar die Zeit ab aber gibt mir die alte Zeit nicht aus sondern gleich die neue, wie kann das wenn ich doch schon vorher die alte Zeit ausgebe und die neue erst dannach UPDATE ?

        Hier das Script:

        mysql_connect("localhost","$user","$pass");
             mysql_select_db("$db");
             $result = mysql_query("SELECT * FROM $table WHERE clientid = '$logid' AND pass = '$passwort'");

        #############Hier die Ausgabe ##################################

        while($row = mysql_fetch_array($result)){
                   echo "
                   <p><br />Willkommen im <strong>:: Kundenbereich ::</strong> $row[vorname] $row[name] hier haben Sie die                  möglichkeit Ihren Projektstatus abzufragen und diverse Einstellungen vorzunehmen.<br />Ihr letzter Login war am $row[tag] um $row[zeit].<br /><br />
                   </p>";
                  }
        ############Hier erst das Update################################
                $newzeit=gmdate("H:i:s");
                $newtag=gmdate("d.m.Y");
                ##Hier is der Fehler
                $result = mysql_query("UPDATE $table SET tag = '$newzeit', zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'");

        mysql_close();
         }
        }

        Danke für eure Hilfe...

        Chris

        1. Hallo Chris,

          zu früh gefreut ;-(
          nu speichert er mir zwar die Zeit ab aber gibt mir die alte Zeit nicht aus sondern gleich die neue, wie kann das wenn ich doch schon vorher die alte Zeit ausgebe und die neue erst dannach UPDATE ?

          Hm, bei mir funktioniert das so wie es sein sollte ...

          echo "
                     <p><br />Willkommen im <strong>:: Kundenbereich ::</strong> $row[vorname] $row[name] hier haben Sie die                  möglichkeit Ihren Projektstatus abzufragen und diverse Einstellungen vorzunehmen.<br />Ihr letzter Login war am $row[tag] um $row[zeit].<br /><br />

          Hinweise:
          Array-Variablen in double-quoted-Strings mit ${Array[index]} kennzeichnen
          In assoziativen Arrays mit Strings als Schlüssel, den Schlüssel in Hochkomma setzen

          Ihr letzter Login war am ${row['tag']} um ${row['zeit']} ...

          ############Hier erst das Update################################
                  $newzeit=gmdate("H:i:s");
                  $newtag=gmdate("d.m.Y");
                  ##Hier is der Fehler
                  $result = mysql_query("UPDATE $table SET tag = '$newzeit', zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'");

          Mein Code auch nicht vorbildlich, ich weiß ;-)

          Ermittle Tag und Uhrzeit

          $sql = "SELECT * FROM Test WHERE logid = '1';";
          $result = mysql_query($sql) or die('Abfrage ging daneben');
          $daten = mysql_fetch_array($result) or die('Keine Daten');
          echo "Tag: ", $daten['tag'], " Zeit: ", $daten['zeit'], "<br>\n";

          Neue Werte

          $neuzeit =gmdate("H:i:s");
          $neutag  =gmdate("d.m.Y");

          Abspeichern

          $sql = "UPDATE Test SET tag = $neutag, zeit = $neuzeit WHERE logid = '1';";
          $result = mysql_query($sql) or die('Abfrage 2 ging daneben');

          Gruss,

          Vinzenz

  2. Hallo Chris,

    unten findet ihr ein kleines Login Script...Mein Problem ist das ich bei jedem Aufruf die Zeit und den Tag in der DB UPDATEN möchte, muss ich dafür die ganze DB nochmal durch ne WHILE schleife laufen lassen?

    ...

    mysql_connect("localhost","$user","$pass");
         mysql_select_db("$db");
         $result = mysql_query("SELECT * FROM $table WHERE clientid = '$logid' AND pass = '$passwort'");

    ...

    $newzeit=gmdate("H:i:s");
            $newtag=gmdate("d.m.Y");

    Warum gmdate?
    Warum speicherst Du nicht einfach einen einzigen Wert in einem DATETIME-Feld und konvertierst beim Auslesen?

    #########Hier is der Fehler denke ich##############################
            $result="UPDATE $table SET tag = '$newzeit' AND zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'";

    Klar hast Du da einen Fehler! Auch eine UPDATE-Anweisung muss MySQL ausführen, d.h.
    $result = mysql_query("UPDATE $table SET tag = '$newzeit' AND zeit = '$newtag' WHERE clientid = '$logid' AND pass = '$passwort'");

    Eine Frage noch am Rand:
    Dein Kunde hat sich erfolgreich angemeldet, die Variable $logid enthält die richtige clientid, die nur ein einziges mal existiert, richtig?
    Warum prüfst Du das Passwort erneut ab?

    Gruss,

    Vinzenz

    1. Hallo Chris,

      Eine Frage noch am Rand:
      Dein Kunde hat sich erfolgreich angemeldet, die Variable $logid enthält die richtige clientid, die nur ein einziges mal existiert, richtig?
      Warum prüfst Du das Passwort erneut ab?

      Gute frage, sieht besser aus ;-)

      Gruss
      Chris