Sap: Problem mit einfügen HILFE!!!

Hi,
ich hab ein neues Problem und zwar fügt er in die datenbank immer nach dem aktualisieren neue Datensätze obwohl er das net soll.
Im Quellcode hab ich alles nähere beschrieben und auch den fehler erklärt hoffentlich kann mir einer Helfen.

  
// User Tabelle anlegen  
  mysql_query("CREATE TABLE IF NOT EXISTS tbluser (  
  UserID INT(1) NOT NULL auto_increment,  
  Nname varchar(30) character set latin1 collate latin1_general_ci NOT NULL,  
  Vname varchar(20) character set latin1 collate latin1_general_ci NOT NULL,  
  Passwort char(32),  
  Username char(7),  
  PRIMARY KEY (UserID))");  
	  
// Erfolg Tabelle anlegen in der gespeichert werden soll, wenn die User  
   Tabelle GEUPDATED wurde  
  mysql_query("CREATE TABLE IF NOT EXISTS tblerfolg (  
  ErfolgID INT(1) NOT NULL,  
  Erfolg INT(1),  
  PRIMARY KEY (ErfolgID))");  
	  
// Hier wird in die Tabelle Erfolg bei der Spalte Erfolg 0 eingetragen,  
   weil amanfang noch nichts GEUPDATED wurde und somit kein ERFOLG stattfand  
 mysql_query("INSERT INTO tblerfolg VALUES(1,0)");  
	  
// Hier  wird geguckt, ob in der Tabelle erfolg eine 0 für nicht GEUPDATED  
   steht oder eine 1 für GEUPDATED und anschließend der Wert in die  
   Variable test gespeichert.  
 $test = 0;  
 $erfolggucken = mysql_query ("SELECT * FROM tblerfolg");  
 //$test = mysql_fetch_object($erfolggucken);  
 while($test = mysql_fetch_object($erfolggucken))  
 {  
  echo $test->Erfolg."<br />";  
 }  
	  
// Hier wird geguckt, ob die variable test auf 0 steht für noch nicht  
   GEUPDATED. Wenn sie auf 1 ist soll sie es nicht machen und wenn es auf 0  
   steht sol es das nachführende code ausführen.  
// --->Hier ist auch der Fehler ich weis net wie ich das beheben kann.  
       Obohl in der test variable 1 steht nach dem ersten ausführen wir  
       trotzdem das nachfolgende ausgeführt.WIESO????  
   if($test->Erfolg == 0 )  
   {  
    //Hier wird ein user in die Tabelle user aufgenommen  
     mysql_query("INSERT INTO tbluser (Nname, Vname) VALUES('Hans', 'Mustermann')");  
	  
// Hier wird nachdem in die Tabelle user etwas eingefügt wurde, die tabelle  
   erfolg GEUPDATED damit sie beim nächsten mal nicht hier wieder rein  
   kommt, weil der INSERT befehl schon ausgeführt wurde.  
     mysql_query("UPDATE tblerfolg SET Erfolg = 1");  
  }  
  
  
// Hier wird der Username für den User festgelegt, der aus den ersten  3  
   Buchstaben des Vor und -Nachnamens besteht  
// Funktioniert ohne Probleme jetzt.  
  $sql = "SELECT UserID, concat(left(Nname,3),left(Vname,3)) AS Username  
  FROM tbluser WHERE Username is NULL;";  
  $result = mysql_query($sql) OR die ("Fehler bei der SQL Abfrage:<br/ >" . mysql_error());  
	  
  while($row = mysql_fetch_object($result))  
  {  
    $updateSQL = "UPDATE tbluser SET Username='$row->Username', Passwort = 1234 WHERE UserID = $row->UserID";  
    if(mysql_query($updateSQL))  
     echo " Success: UserID: $row->UserID | Username: $row->Username <br />";  
     else  
     echo "Fehler bei UserID: $row->UserID | Username: $row->Username <br />";	  
  }  

MfG
Sapzero

  1. Nach langem Probieren hab ich den Fehler gefunden aber schaff es einfach net zu beheben.
    Der Fehler liegt am $test. In der while schleife enthält die variable $test ein Wert, jedoch wenn ich diesen ausserhalb der schleife ausgebe ist sie aufeinmal leer.

    <code>
    $erfolggucken = mysql_query ("SELECT * FROM tblerfolg");
    while($test = mysql_fetch_object($erfolggucken))
    {
      echo $test->Erfolg."<br />";       // <--------- enthält ein Wert (1)
      $test = $test->Erfolg;             // <--------- enthält ein Wert (1)
    }

    echo $test->Erfolg;          // <--------- enthält kein Wertmehr ist leer
    echo $test;                  // <--------- enthält kein Wertmehr ist leer
    </code>

    Kann mir einer sagen wie ich den Wert, den ich noch in der schleife habe weiter ausserhalb der Schleife nenutzen kann??

    1. @@Sap:

      while($test = mysql_fetch_object($erfolggucken))

      Die while-Schleife wird also wann (bei welchem Wert von $test) abgebrochen?

      echo $test->Erfolg;          // <--------- enthält kein Wertmehr ist leer

      Überrascht dich das?

      Kann mir einer sagen wie ich den Wert, den ich noch in der schleife habe weiter ausserhalb der Schleife nenutzen kann??

      $test nicht innerhalb der Schleife überschreiben?

      Live long and prosper,
      Gunnar

      --
      Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    2. <code>
      $erfolggucken = mysql_query ("SELECT * FROM tblerfolg");
      while($test = mysql_fetch_object($erfolggucken))
      {
        echo $test->Erfolg."<br />";       // <--------- enthält ein Wert (1)
        $test = $test->Erfolg;             // <--------- enthält ein Wert (1)
      }

      echo $test->Erfolg;          // <--------- enthält kein Wertmehr ist leer
      echo $test;                  // <--------- enthält kein Wertmehr ist leer
      </code>

      Hi,
      was passiert denn wenn Du die Variable $test in der letzten Reihe mal umbenennst, und dann die umbenannte Variable ausgeben lässt? Weiß nicht genau ob es was bringt, aber so wie ich es sehe überschreibst du das Array $test was welches Du in der while initialisierst, innerhalb der Schleife wieder, und ich könnte mir vorstellen das er beim nächsten Schleifendurchlauf versucht $test auszulesen, welches aber nur noch eine variable ist, und dementsprechend kein Index Erfolg enthält.

      Hoffe Du verstehst ansatzweise was ich meine.

      Gruß
      Wizard

    3. echo $begrüßung;

      echo $test->Erfolg;          // <--------- enthält kein Wertmehr ist leer
      echo $test;                  // <--------- enthält kein Wertmehr ist leer

      Leer im PHP-Sinne kann in Wirklichkeit verschiedene Werte sein. Verwende für Kontrollausgaben besser var_dump() statt echo, das informiert genauer. Außerdem empfiehlt es sich immer noch, beim Entwickeln das error_reporting auf E_ALL zu stellen, damit Zugriffe auf nicht Vorhandenes, wie der Eigenschaft Erfolg, wenn $test kein Objekt ist, als Notice-Meldung angezeigt werden.

      echo "$verabschiedung $name";

  2. echo $begrüßung;

    mysql_query("INSERT INTO tblerfolg VALUES(1,0)");

    Es ist besser, die Spaltennamen explizit anzugeben, damit die Werte nicht nur per Zufall sondern gezielt ihre richtigen Felder eingetragen werden. Der Zufallsfall kann dann versagen, wenn du das Tabellenlayout änderst und eins der INSERTS anzupassen vergisst.

    while($test = mysql_fetch_object($erfolggucken))

    Wenn du nur einen Datensatz abfragen willst, brauchst du dafür keine Schleife. Dann ist auch $test nicht hinterher false, denn das ist das übliche Verhalten von mysql_fetch_object(), wenn man es zum Fetchen schickt aber nichts mehr vorhanden ist.

    $sql = "SELECT UserID, concat(left(Nname,3),left(Vname,3)) AS Username
      FROM tbluser WHERE Username is NULL;";
        $updateSQL = "UPDATE tbluser SET Username='$row->Username', Passwort = 1234 WHERE UserID = $row->UserID";

    Da hab ich dir doch neulich schon empfohlen ein Statement draus zu machen. UPDATE kann auch berechnete Werte in die Spalten schreiben. Das DBMS kann die Änderungen in einem Rutsch erledigen und muss nicht viele UPDATE-Statemets einzeln abarbeiten inkusive dem Overhead, sie jeweils zum DBMS zu transportieren.

    UPDATE tbluser SET Username = CONCAT(LEFT(Nname, 3), LEFT(Vname, 3)), Passwort = 1234 WHERE Username IS NULL

    if(mysql_query($updateSQL))

    Jedes SQL-Statement kann schiefgehen, auch wenn es im Labor tausendmal fehlerfrei funktioniert hat. Frag immer den Erfolgsstatus ab und führe die nachfolgenden Schritte nur in Abhängigkeit vom Erfolg des vorhergehenden aus. Ansonsten kommen nur noch mehr (Folge-)Fehler zusammen.

    echo "$verabschiedung $name";