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-ID: 109305

Url: https://administrator.de/forum/datenbank-eweitern-109305.html

Ausgedruckt am: 23.12.2024 um 14:12 Uhr

Dani
Dani 17.02.2009 um 22:20:49 Uhr
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
filippg
filippg 17.02.2009 um 22:59:13 Uhr
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
Sapzero
Sapzero 17.02.2009 um 23:01:49 Uhr
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?
Sapzero
Sapzero 17.02.2009 um 23:04:32 Uhr
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.
Dani
Dani 17.02.2009 um 23:09:51 Uhr
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());   
Sapzero
Sapzero 17.02.2009 um 23:18:47 Uhr
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?
Sapzero
Sapzero 17.02.2009 um 23:21:47 Uhr
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????
godlie
godlie 18.02.2009 um 07:32:12 Uhr
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 />;
}
Sapzero
Sapzero 18.02.2009 um 17:20:37 Uhr
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.
Dani
Dani 18.02.2009 um 19:02:50 Uhr
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
filippg
filippg 18.02.2009 um 19:25:45 Uhr
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
Sapzero
Sapzero 19.02.2009 um 15:24:49 Uhr
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