sapzero
Goto Top

Einfügen in Datenbank

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

Content-Key: 109517

Url: https://administrator.de/contentid/109517

Printed on: April 20, 2024 at 03:04 o'clock

Member: Sapzero
Sapzero Feb 19, 2009 at 19:39:24 (UTC)
Goto Top
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.

       $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

Kann mir einer sagen wie ich den Wert, den ich noch in der schleife habe weiter ausserhalb der Schleife nenutzen kann??
Member: Gruentee
Gruentee Feb 19, 2009 at 20:08:20 (UTC)
Goto Top
Hallo!

In Java ist es so, dass Variablen, die innerhalb eines Blockes (z.B. einer while-Schleife) definiert wurden auch nur dort gelten.
Die Lösung ist einfach:
Die Variable test einfach außerhalb der Schleife definieren und ihr dann in der Schleife einen Wert zuweisen.
Zumindest in Java ist die Variable, und damit hier vielleicht ihr Wert, zugänglich.

Vielleicht hilfts.
Member: Biber
Biber Feb 19, 2009 at 20:35:55 (UTC)
Goto Top
Moin Sapzero,

Euch Entwicklern kann man/frau es aber auch nicht Recht machen - der Schnipsel macht doch genau, was Du ihm gesagt hast....

Du hast gesagt:
"Hey, solange mysql_fetch_object() tatsächlich ein Objekt zurückliefert (nämlich einen Datensatz),
solange mach irgendwelche Dönekens mit dem Datensatz inner while-Schleife.
Wenn mysql_fetch_object() KEINEN Datensatz (und somit kein Objekt) zurückliefert, sondern ein flapsiges FALSE,
dann brauchst Du ohne Objekt in der Schleife gar nicht erst was versuchen.
Kann ja eh nix werden."

Wenn aber $test gar kein Objekt ist (sondern nur ein 0815-FALSE-Billichwert),...
> was bitteschön soll denn "echo $test->Erfolg;" anzeigen, um Deinen Erwartungen gerecht zu werden?

Also ich als Code hätte genauso reagiert wie von Dir beschrieben....

P.S.
Kann mir einer sagen wie ich den Wert, den ich noch in der schleife habe weiter ausserhalb der Schleife nenutzen kann??
Jepp, klar.
Speichere/kopiere den Wert "$test->Erfolg" des Datensatzes, den Du hinterher noch brauchst, in einer Variablen (vom "richtigen" Typ),
solange das Objekt $test noch existiert. Also eine Zeile unter der Zeile, in der Du jetzt den Wert "$test->Erfolg" raus-echoest.

Grüße
Biber
Member: Sapzero
Sapzero Feb 19, 2009 at 23:41:05 (UTC)
Goto Top
Hi,
es lag wirklich an der Variable ich hab ne andere genommen die ich zuvor ausserhalb gesetz habe und dann $test->erfolg in die neue variable gespeichert.
Danke für eure Hilfe.

MfG
Sapzero