PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datensatz ändern


se
24.09.2005, 21:21:54
hi,
Ich möchte über ein PHP Script ein Passwort (das Passwort ist nicht md5 codiert, also ein normaler Datensatz) in der Datenbank ändern.
Dazu muss der User ein Forumular ausfüllen. Dieses Formular enthält 3 Felder (eines für das aktuelle Passwort, eines für das neue und eines für die Wiederholung des neuen Passworts). Die Daten werden per Post an das PHP script geschickt.

Es gibt zwar keine Fehlermeldung, aber warscheinlich hab ich mich in der If Schleife verdaddelt und find jetzt den Fehler einfach nicht.

Hier der Code

<?php
$HOST = "localhost";
$USERID = "userid";
$PW = "passwort";
$db_handle = @mysql_connect($HOST,$USERID,$PW)
or die("Die Datenbank ist momentan nicht erreichbar!");
$datenbank = "datenbank";
@mysql_select_db($datenbank,$db_handle);
//Übergebene Variablen
$passwort = $HTTP_POST_VARS["passwort"];
$n_passwort = $HTTP_POST_VARS["n_passwort"];
$ckeck_passwort = $HTTP_POST_VARS["check_passwort"];
$varid = $HTTP_POST_VARS["id"];
//Ende der Übergebenen Variablen
settype($varid,"integer");
$aendern = "UPDATE users SET pwd = '$n_passwort' WHERE userID = '$varid'";
$pwd_abfrage = "SELECT pwd FROM users WHERE userID = '$varid'";
$pwd_request = @mysql_query($pwd_abfrage);
if($n_passwort==$check_passwort) {
if($passwort ==$pwd_request) {
$update = @mysql_query($aendern);
print("Das Passwort wurde erfolgreich geändert!");
}
else {
print("Das von Ihnen eingegebene Alte Passwort ist Inkorrekt!");
}
}
else {
print("Neues Passwort ist nicht identisch mit der Passwort Wiederholung!");
}
mysql_close($db_handle);
?>

xabbuh
24.09.2005, 21:37:16
[QUOTE=se]<?php
$ckeck_passwort = $HTTP_POST_VARS["check_passwort"];
?>

Das müsste hier wohl $check_passwort statt $ckeck_passwort heißen.

se
24.09.2005, 23:03:42
Hast recht, aber komischer weise gehts immernoch nicht... Ich erhalte immer die Meldung "Das von Ihnen eingegebene Alte Passwort ist Inkorrekt!", obwohl das Passwort stimmt.

xabbuh
24.09.2005, 23:34:12
<?php
$pwd_abfrage = "SELECT pwd FROM users WHERE userID = '$varid'";
$pwd_request = @mysql_query($pwd_abfrage);
if($n_passwort==$check_passwort) {
if($passwort ==$pwd_request) {
?>


Ich verweise hier mal auf die typischen Fehlerquellen in SQL (http://www.selfphp.de/forum/showthread.php?p=46958#post46958) von feuervogel:
3. Ich habe auch gesehen, dass einige "Neulinge", wenn der Wert genau einer Zelle ausgelesen wird, erwarten, dass der Inhalt der Zelle direkt der Rückgabewert der sql-Abfrage ist. Dem ist nicht so.


$sql = "SELECT feldname FROM tabelle WHERE id = 3";
$qry = mysql_query( $sql );


nun gibt

echo $qry;

nicht den Inhalt der Zelle feldname in der Zeile wo id = 3 ist aus.

es muss auch hier so aussehen:

$sql = "SELECT feldname FROM tabelle WHERE id = 3";
$qry = mysql_query( $sql );

$result = mysql_fetch_array( $qry );
echo $result[ 'feldname' ];


Du musst also das Passwort erst noch in ein Array einlesen:
<?php
$pwd_abfrage = "SELECT pwd FROM users WHERE userID = '$varid'";
$pwd_request = mysql_fetch_assoc(mysql_query($pwd_abfrage));
$pwd_request = $pwd_request['pwd'];
if($n_passwort==$check_passwort) {
if($passwort ==$pwd_request) {
?>

se
25.09.2005, 00:15:51
Danke erstmal für deine Hilfe. Hab den Code eingefügt, aber leider hat sich immernoch nichts geändert. Es kommt weiterhin noch die Meldung "Das von Ihnen eingegebene Alte Passwort ist Inkorrekt!"

feuervogel
25.09.2005, 02:32:34
Danke erstmal für deine Hilfe. Hab den Code eingefügt, aber leider hat sich immernoch nichts geändert. Es kommt weiterhin noch die Meldung "Das von Ihnen eingegebene Alte Passwort ist Inkorrekt!"

kannst du jetzt bitte noch mal den aktuellen code zeigen?

se
25.09.2005, 12:45:18
Jetzt sieht der Code so aus:

$HOST = "localhost";
$USERID = "username";
$PW = "passwort";
$db_handle = @mysql_connect($HOST,$USERID,$PW)
or die("Die Datenbank ist momentan nicht erreichbar!");
$datenbank = "datenbank";
@mysql_select_db($datenbank,$db_handle);
//Übergebene Variablen
$passwort = $HTTP_POST_VARS["passwort"];
$n_passwort = $HTTP_POST_VARS["n_passwort"];
$check_passwort = $HTTP_POST_VARS["check_passwort"];
$varid = $HTTP_POST_VARS["id"];
//Ende der Übergebenen Variablen
settype($varid,"integer");
$aendern = "UPDATE users SET pwd = '$n_passwort' WHERE userID = '$varid'";
$pwd_abfrage = "SELECT pwd FROM users WHERE userID = '$varid'";
$pwd_request = mysql_fetch_assoc(mysql_query($pwd_abfrage));
$pwd_request = $pwd_request['pwd'];
if($n_passwort==$check_passwort) {
if($passwort ==$pwd_request) {
$update = @mysql_query($aendern);
print("Das Passwort wurde erfolgreich geändert!");
}
else {
print("Das von Ihnen eingegebene Alte Passwort ist Inkorrekt!");
}
}
else {
print("Neues Passwort ist nicht identisch mit der Passwort Wiederholung!");
}
mysql_close($db_handle);
?>

Und es wird auch bei korrektem Passwort der else Bereich der If Schleife ausgegeben. ("Das von Ihnen eingegebene Alte Passwort ist Inkorrekt!")

xabbuh
25.09.2005, 13:19:53
Lass dir $passwort und $pwd_request mal ausgeben. Sind die beiden Werte überhaupt identisch? Möglicherweise befinden sich noch Leerzeichen vor und nach dem eigentlichen Passwort.

se
25.09.2005, 13:26:07
Hast recht. $passwort gibt das PAsswort aus die Variable $pwd_request ist allerdings leer...

Aber die haben wir oben doch mit den daten aus mysql_fetch gefüllt...
<?php
$pwd_abfrage = "SELECT pwd FROM users WHERE userID = '$varid'";
$pwd_request = mysql_fetch_assoc(mysql_query($pwd_abfrage));
$pwd_request = $pwd_request['pwd'];
if($n_passwort==$check_passwort) {
if($passwort ==$pwd_request) {
?>

xabbuh
25.09.2005, 13:43:32
Schlägt die Abfrage vielleicht fehl oder hat $varid nicht den richtigen Wert?

<?php
$sql = "SELECT
pwd
FROM
users
WHERE
userID = '$varid'";
$result = mysql_query($sql) or die(mysql_error());
print $sql;
?>


Erhälst du so irgendwelche Ausgaben, die dir weiterhelfen? Wie sieht beispielsweise die Ausgabe von $sql aus?

se
25.09.2005, 13:47:26
SELECT pwd FROM users WHERE userID = '0'

Also wird die ID nicht richtig übergeben, wenn ich das richtig verstehe. Ich lasse die id aber im vorherigen Formular in einem nicht beschreibbaren Textfeld ausgeben und dort stimmt die ID

se
25.09.2005, 13:51:49
Ich hab grad den Fehler gefunden. Das Textfeld war nicht auf hidden gesetzt. Jetzt gehts!!! Danke für deine Hilfe.