PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : php & mysql: komisches problem


Kinman
2004-09-02, 12:19:02
Hi, ich habe bei php und mysql ein seltsames Problem. Hier mal der Code:


$db = mysql_connect("localhost","kinman","*******");

$res = mysql_db_query("kinman", "SELECT * FROM tas_members WHERE nick = '$c_nick'");
$num = mysql_num_rows($res);

mysql_query ("UPDATE tas_members SET password = '$pass' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET email = '$email' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET icq = '$icq' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET name = '$name' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET birthday = '$birthday' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET gender = '$gender' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET country = '$country' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET homepage = '$homepage' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET weapons = '$weapons' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET maps = '$maps' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET gamemodes = '$gamemodes' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET motto = '$motto' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET siwts = '$siwts' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET character = '$character' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET teamfunctions = '$teamfunctions' WHERE nick = '$c_nick'");

mysql_close($db);



echo ("Profile changed. $character");


Mein Prob: Es werden alle Felder bis auf siwts und character geändert. Bei der Ausgabe unten wird auch das Eingegebene ausgegeben. Jedoch wird es nicht in die Datenbank übernommen, wie alle anderen Felder. In der Datenbank sind es Textfelder, so wie vieles andere auch.

Ich weiß mir hier nicht mehr zu helfen. Vllt. hat jemand von euch eine Idee.

Danke, mfg Kinman

HellHorse
2004-09-02, 13:26:11
Ist CHARACTER nicht ein SQL keyword?
(Zumindest laut MySQL Doku ist es nicht, in der PostgreS Doku ist es allerdings)
Hast du irgend einen Log Output?

Kinman
2004-09-02, 13:40:02
dasist mal zum testen, thx

Nein, namen ändern hat nichts gebracht :(

littlejam
2004-09-02, 15:03:56
mysql_query ("UPDATE tas_members SET siwts = \"$siwts\" WHERE nick = \"$c_nick\"");

Probiers mal damit, am besten auch die anderen Zeilen so ändern. IMO wird alles zwischen ' ' nicht von PHP interpretiert. Mit \" maskierst du ein " damit es im String steht, aber in PHP keine Probleme macht.

Außerdem kannst du dein Query noch optimieren:

mysql_query("UPDATE tas_members set password = \"$pass\", email = \"$email\", ... where nick = \"$c_nick\"");

Das tuts auch und du machst nur eine einzige Datenbankabfrage.

Gruß

clm[k1]
2004-09-02, 15:23:51
IMO wird alles zwischen ' ' nicht von PHP interpretiert.
Gruß

Falls du darauf anspielst, das die variablen innerhalb der ' ' nicht erkannt werden, dann liegst du falsch!!
Ich meine, bei mir gehts doch auch wenn variablen in hochkommatas stehen...


Aber anderer vorschlag: mach doch mal ein


if(mysql_error() != "") die("FEHLER: ".mysql_error());


nach jeder anfrage, dann weiste zumindestens wenn irgendwo ein fehler auftritt!

gruß
clm[k1]

littlejam
2004-09-02, 15:39:11
@clm[k1] Ziemlich harscher Ton :smile:, die 2 !! tun mit jetzt noch in den Ohren weh.
Womöglich liegt es an der Version von PHP.
Probier mal bitte das:
<?
$temp = "test";
echo "$temp<br>";
echo '$temp';
?>

ergibt bei mir:
test
$temp

SuSE Linux mit Apache2 und PHP 4.3

*edit
Mein Fehler :rolleyes:
echo "'$temp'"; ergibt dann 'test', ok.

Gruß

clm[k1]
2004-09-02, 15:47:30
@clm[k1] Ziemlich harscher Ton :smile:, die 2 !! tun mit jetzt noch in den Ohren weh.
Womöglich liegt es an der Version von PHP.
Probier mal bitte das:
<?
$temp = "test";
echo "$temp<br>";
echo '$temp';
?>

ergibt bei mir:
test
$temp

SuSE Linux mit Apache2 und PHP 4.3

*edit
Mein Fehler :rolleyes:
echo "'$temp'"; ergibt dann 'test', ok.

Gruß

sorry, für den harrschen ton. *friedenpfeiferüberreich* :smile:

wie gesagt, ich hab mit den hochkommatas keine probleme, aber ein versuch isses sicher wert.

wobei man natürlich sagen muss das das abfangen von fehlern (in dem fall am besten mit dem abfragen von mysql_error()) immer eine gute idee ist.
man kann ja die query-anweisung in eine extra-variable speichern, und diese dann bei einem fehler mit ausgeben...

gruß
clm[k1]

Captain America
2004-09-02, 15:54:12
Hi, ich habe bei php und mysql ein seltsames Problem. Hier mal der Code:


$db = mysql_connect("localhost","kinman","*******");

$res = mysql_db_query("kinman", "SELECT * FROM tas_members WHERE nick = '$c_nick'");
$num = mysql_num_rows($res);

mysql_query ("UPDATE tas_members SET password = '$pass' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET email = '$email' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET icq = '$icq' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET name = '$name' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET birthday = '$birthday' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET gender = '$gender' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET country = '$country' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET homepage = '$homepage' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET weapons = '$weapons' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET maps = '$maps' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET gamemodes = '$gamemodes' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET motto = '$motto' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET siwts = '$siwts' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET character = '$character' WHERE nick = '$c_nick'");
mysql_query ("UPDATE tas_members SET teamfunctions = '$teamfunctions' WHERE nick = '$c_nick'");

mysql_close($db);



echo ("Profile changed. $character");


Mein Prob: Es werden alle Felder bis auf siwts und character geändert. Bei der Ausgabe unten wird auch das Eingegebene ausgegeben. Jedoch wird es nicht in die Datenbank übernommen, wie alle anderen Felder. In der Datenbank sind es Textfelder, so wie vieles andere auch.

Ich weiß mir hier nicht mehr zu helfen. Vllt. hat jemand von euch eine Idee.

Danke, mfg Kinman "Character" ist ein MySQL-Schlüsselwort, Password ist ein Funktionsname. Falls du unbedingt die namen behalten willst, dann musst du sie in ` setzen. Beispiel:

UPDATE tas_members SET `password` = '$pass', email = '$email', `character` = '$character' WHERE nick = '$c_nick';

Eine weiter Fehlerquelle könnte sein, dass die Variablen von dir ' enthalten. Damit zerschiessen sie dir dein SQL-Statement. Falls dein PHP nicht automatisch Slashes hinzufügt, ist das hier eine Lösung:

mysql_query("UPDATE tas_members SET `password` = '" . mysql_escape_string($pass) . "', `email` = '" . mysql_escape_string($email) . "', `character` = '" . mysql_escape_string($character) . "' WHERE nick = '" . mysql_escape_string($c_nick) . "');"

Gib mal deine Statements mit echo() aus und schau sie dir genau an (Syntax-Check, Paarweise Anführungszeichen, Kommata, etc.). Es hilft auch dieses Statements die du per Echo ausgibts in phpMyAdmin o.ä. Tool zu prüfen.

Du solltest im Übrigen nicht mehrere Update-Statements für EINE Operation benutzen. Update lockt die Tabelle, so dass sie u.U. nicht für Select zur Verfügung steht. Wenn du mehrere Felder und / oder Zeilen update willst, die alle von der selben WHERE-Klausel bedient werden können, fasse sie wie oben zusammen.

Weiterführende Infos: http://de3.php.net/manual/de/function.mysql-escape-string.php

Kinman
2004-09-02, 17:09:34
danke soweit ich werd mit den " und ' mal herumprobieren. Was ich jedoch nicht versteh ist das es mit allen anderen funktioniert und ich glaub net das siwts in mysql vorkommt.

In diesen Feldern stehen auch nur ein Wort ;)

mfg Kinman

EDIT: mit \" statt ' funzt es auch net

Kinman
2004-09-02, 18:04:06
jetzt hab ichs wieder aufs alte umgeschrieben, besser gesagt kopiert und es geht...
komisch....
hauptsache es geht

Danke nochmal, mfg Kinman