sapzero
Goto Top

Datenbank eweitern

Hi,
ich komme mit etwas nicht weiter undzwar habe ich eine Datenbank erstellt, welche die Atribute |UserID, Vorname, Nachname, Passwort, Username| hat.
In Userid, Vorname und Nachname steht was drinne und in passwort und Username nichts (NULL).
Jetzt will ich die ersten drei buchstaben von den Vornamen und Nachnamen nehmen und per Updatebefehl in den Usernamen einfügen

Beispiel: UserID VName NName Passwort Username
... Hans Mustermann ... MusHan

Dies habe ich so gelösst aber funktioniert jedoch noch nicht.
$user = mysql_query("SELECT UserID, concat(left(3,Nname),left(3,Vname)) AS Username FROM tbluser WHERE Username = NULL");  
echo mysql_error();
$a =  mysql_fetch_assoc($user);
        $a["Username"];  
echo "-----".$a["Username"]."-------";  
	
	while($a =  mysql_fetch_assoc($user))
	{
		$b = $a["Username"];  
		mysql_query("UPDATE tbluser SET Username = $b WHERE UserID = ");  
	}	

Ich hoffe jemand kann mir da weiter helfen

MfG
Sapzero

Content-Key: 109305

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

Printed on: April 26, 2024 at 18:04 o'clock

Member: Dani
Dani Feb 17, 2009 at 21:20:49 (UTC)
Goto Top
Hi,
ich würde es mal so probieren:
<?php

$sql="SELECT UserID, concat(left(3,Nname),left(3,Vname)) AS Username FROM tbluser WHERE Username = NULL;";  
$result = mysql_query($sql) OR die ("Fehler bei der SQL Abfrage:<br/ >" . mysql_error());  
$row=mysql_fetch_object($result);

echo "-----".$row->Username."-------";  

$sql="UPDATE tbluser SET Username = ".$row->Username." WHERE UserID = ".$row->UserID.";";  
mysql_query($sql) OR die ("Fehler bei der SQL Abfrage:<br/ >" . mysql_error());  
?>
Natürlich ungetestet....


Grüße,
Dani
Member: filippg
filippg Feb 17, 2009 at 21:59:13 (UTC)
Goto Top
Hallo,

die Konstruktion " AS Username [...] WHERE Username [...]" ist eher unglücklich. Nimm "AS Kuerzel". Weiterhin habe ich die PHP-Evalulationsregeln nicht mehr klar im Gedächtnis, aber ich vermute mal, in "mysql_query("UPDATE tbluser SET Username = $b WHERE [...]" wertet er $b nicht aus, also liebe "mysql_query("UPDATE tbluser SET Username = "+$b+" WHERE[...]". Und es ist immer sehr empfehlenswert, bei einer WHERE-Klausel auch einen entsprechend qualifizierenden Wert mit anzugeben, also "WHERE UserID = " + $a["UserID"]. Und ganz großartig ist es auch, wenn man nicht einfach postet "funktioniert jedoch noch nicht" sondern beschreibt, worin sich der Fehler äußert, und was man zu seiner Feststellung schon alles unternommen hat.

Gruß

Filipp
Member: Sapzero
Sapzero Feb 17, 2009 at 22:01:49 (UTC)
Goto Top
Danke für deine Antwort.
Ich habs Probiert da kommt dann das hier

Fehler bei der SQL Abfrage:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE UserID =' at line 1

Wo könnte den der Fehler liegen?
Member: Sapzero
Sapzero Feb 17, 2009 at 22:04:32 (UTC)
Goto Top
Ich habe schon vieles probiert jedoch liegt nicht das Problem daran das ein Fehler auftaucht. Das Problem ist das es nichts macht und die Tabelle nicht verändert wird und wie gesagt es auch kein fehler anzeigt.
Member: Dani
Dani Feb 17, 2009 at 22:09:51 (UTC)
Goto Top
Ah...folgende Zeile:
#
$sql="UPDATE tbluser SET Username = '".$row->Username."' WHERE UserID = '".$row->UserID."';";  
mysql_query($sql) OR die ("Fehler bei der SQL Abfrage:<br/ >" . mysql_error());   
Member: Sapzero
Sapzero Feb 17, 2009 at 22:18:47 (UTC)
Goto Top
Ja der Fehler ist weg doch der macht immer noch nicht das was ich will in Username steht immer noch NULL.
Eigentlich macht er genau das wie von meinem Quellcode. Aber ich glaube schon sehr nah an der richtigen Lösung dran wo könnte wohl der fehler liegen?
Member: Sapzero
Sapzero Feb 17, 2009 at 22:21:47 (UTC)
Goto Top
<?php

$sql="SELECT UserID, concat(left(3,Nname),left(3,Vname)) AS Username FROM tbluser WHERE Username = NULL;";  
$result = mysql_query($sql) OR die ("Fehler bei der SQL Abfrage:<br/ >" . mysql_error());  
$row=mysql_fetch_object($result);

echo "-----".$row->Username."-------";  
er müsste doch hier schon bei echo "-----".$row->Username."-------"; etwas ausgeben, jedoch tut er dies net kann der Fehler vllt dann im SELECt liegen????
Member: godlie
godlie Feb 18, 2009 at 06:32:12 (UTC)
Goto Top
Dann mach das ganze doch mal "Zeilenweise":


$sql="SELECT UserID, concat(left(3,Nname),left(3,Vname)) AS Username FROM tbluser WHERE Username = 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' 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 />;
}
Member: Sapzero
Sapzero Feb 18, 2009 at 16:20:37 (UTC)
Goto Top
Ich hab das mal versucht aber es klappt net. Ich hab bemerkt das er garnicht in die while schleife kommt es muss also schon vorher ein Fehler liegen. Wenn ich in die while schleife eine einfache Ausgabe mache, wie echo "hallo"; gibt er nichts aus also kann nur schon vorher der Fehler liegen.
Member: Dani
Dani Feb 18, 2009 at 18:02:50 (UTC)
Goto Top
Hi,
probier es mal so:
<?php

$sql="SELECT UserID, concat(left(3,Nname),left(3,Vname)) AS Nick FROM tbluser WHERE Username = 'NULL';";  
$result = mysql_query($sql) OR die ("Fehler bei der SQL Abfrage:<br/ >" . mysql_error());  
$row=mysql_fetch_object($result);

echo "-----".$row->Nick."-------";  
Falls immer noch nichts ausgegeben worden ist, füge noch ein "echo $sql" hinzu und nimm diesen Befehl und führe ihn direkt im phpMyAdmin aus.


Grüße,
Dani
Member: filippg
filippg Feb 18, 2009 at 18:25:45 (UTC)
Goto Top
Hallo,

ja, das kann sein. Vergleiche mit den herkömmlichen Vergleichsoperatoren auf NULL sind immer etwas schwierig (auch wenn sie Zugelassen sind, http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html). Ersetzte "= NULL" durch "IS NULL". Und stell vorher nochmal sicher, dass das Feld tatsächlich den Wert Null hat und nicht ein leerer String ist. Zumindest ist die Ursache, wenn die While-Schleife nicht betreten, dass kein Ergebnis in $result ist.
In phpMyAdmin kann man auch SQL-Querys direkt gegen die DB fahren und damit sowas einfach austesten.

Gruß

Filipp
Member: Sapzero
Sapzero Feb 19, 2009 at 14:24:49 (UTC)
Goto Top
Hi,
vielen Dank. Es funktioniert nun. Es lag zum einem am = NULL und da war noch ein fehler im concat.

// Falsch
$sql="SELECT UserID, concat(left(3,Nname),left(3,Vname)) AS Nick FROM tbluser WHERE Username = 'NULL';";  

//Richtig
$sql="SELECT UserID, concat(left(Nname,3),left(Vname,3)) AS Nick FROM tbluser WHERE Username is NULL;";  

MfG
Sapzero