Passwortänderung

smyle

Erfahrenes Mitglied
Hallo wieder einmal :D
Ich habe wie immer ein Problem mit PHP und mysql.
Ich habe functionen geschrieben für die Passwort änderung.
Leider weis ich nicht wie man functionen anwendet.
Ich habe es mit einem Echo versucht, aber leider hat es nicht so funktioniert wie ich dachte.
Wie wendet man selbsterstellten funktionen an?

Hier meine Funktionen:

function check_user($logname)
{
$abfrage = "SELECT id_login FROM login WHERE `Nickname` = '$logname'";
mysql_query($abfrage);
return $userID['id_login'];

if($logname == "") echo("Bitte Benutzername eingeben");
}

function check_pw($passw, $logname)
{
$abfrage= "SELECT Password FROM login WHERE `Nickname` = '$logname'";
mysql_query($abfrage);
return "Password";

if($logname == "") echo("Bitte Passwort eingeben");

}

function change_pw($pw_neu, $pw_wiederholung, $userID)
{
if($pw_neu == $pw_wiederholung) //Sind beide eingegebene Passwörter gleich? JA-> Weiter Nein-> Meldung
{
$abfrage= "UPDATE login SET Password =MD5 WHERE id_login = ('".$userID."')";
mysql_query($abfrage);
}
else echo("Das neue Passwort ist falsch");
}

function logout()
{
//
}

Hier noch der rest meines PHP Codes:

$logname = $_POST['login'];
$passw = $_POST['password'];
$pw_neu = $_POST['PW2'];
$pw_wiederholung = $_POST['PW3'];

//Weiter ? (Funktionen einfügen/benutzen)

Und hier noch den HTML Teil:

<html>
<head>
</head>
<body>

<table>
<form method="post">
<tr>
<td>Benutzername eingeben:</td>
<td><input type="text" name="login" maxlength="30" /></td>
</tr>
<tr>
<td>Passwort eingeben:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Neues Passwort eingeben:</td>
<td><input type="password" name="PW2" /></td>
</tr>
<tr>
<td>Neues Passwort erneut eingeben:</td>
<td><input type="password" name="PW3" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="aendern" value="Ändern"> <input type="reset" name="reset" value="Inhalt löschen"> </td>
</tr>
</form>
</table>
</body>
</html>

Nun, wie verwende ich die Funktionen? wie muss ich weiter fahren? Ich bin föllig hilflos :(
Bitte helft mir...

Küsschen ;)

PS: ich habe schon mit hilfe der http://de.php.net aber leider habe ich immernoch nicht verstanden :(
 
Hi,

Du nimmst den Namen der Funktion, hängst in Klammern die notwendigen Parameter drann und rufst die Funktion auf.

PHP:
function Name_der_Funktion (Parameter1, Paramater2) {
    // Die Funktion selber
}

Jetzt hast Du irgendwo anderen PHP Code und da schreibst Du dann

PHP:
echo "Hier wird die Funktion gleich aufgerufen!";

Name_der_Funktion("Hallo", "Ich bin die Funktion");

echo "und hier geht es in Anschschluß daran weiter."


Oder schau Dir das Beispiel an, dann verstehst Du wie es gemeint ist:

http://de2.php.net/manual/de/functions.arguments.php

Gruß Thomas
 
Ich habe functionen geschrieben [...]
Leider weis ich nicht wie man functionen anwendet.
Das wird ja immer lustiger hier. :D

Du musst lediglich prüfen, ob dein Formular abgesendet wurde und wenn ja, deine Funktionen anwenden.

Das könnte zum Beispiel so aussehen:
PHP:
if ( isset( $_POST['aendern'] ) ) {
  if ( empty(  $_POST['password'] ) ) {
    // das erste passwortfeld ist leer
  }
  elseif ( empty(  $_POST['PW'] ) ) {
    // das zweite passwortfeld ist leer
  }
  else {
    change_pw( $_POST['password'], $_POST['PW'] );
  }
}

Allerdings sind deine Funktionen nicht sonderlich durchdacht.

Ich gehe davon aus, du willst erst mit
PHP:
check_user( $_POST['login'] );
die ID des Users auslesen und diese dann an check_pw übergeben, richtig?

Das ist jedoch grob fahrlässig, da man als Name einfach "max" eingeben könnte, auch wenn das nicht der eigene Nick ist. Existiert dieser User, wird sein Passwort geändert, ohne das dieser davon weiss.
Das solltest du nochmal überdenken. ;)

Ich denke als Grundlage sollte das erstmal ausreichen, um dich ein paar Schritte weiter zu bringen.

*edit*
Und was ich eben noch sehe:

Diese Funktion
PHP:
function check_user($logname)
{
$abfrage = "SELECT id_login FROM login WHERE `Nickname` = '$logname'";
mysql_query($abfrage);
return $userID['id_login'];

if($logname == "") echo("Bitte Benutzername eingeben");
}
wird so nicht funktionieren - zumindest nicht so, wie du dir das vorstellst.

Du musst natürlich überprüfen, ob mysql_query() auch erfolgreich ausgeführt wird und nur dann die ID zurück geben.
So, wie es jetzt ist, wird auch die If-Abfrage nie zutreffen, da Anweisungen nach einem "return" nicht mehr abgearbeitet werden.
 
Zuletzt bearbeitet:
Hmmm...
Dake für die Hilfe.

Ich komme zwar immer noch nicht so gut nach aber immerhin verstehe ich nun mehr als vorher :D

Ich werde das ganze nochmals bearbeiten.
Mal schauen ob es dan funktioniert.

Falls nicht, melde ich mich natürlich wieder :D
 
So, wie es jetzt ist, wird auch die If-Abfrage nie zutreffen, da Anweisungen nach einem "return" nicht mehr abgearbeitet werden.

Wie kann ich das umgehen?
Ich habe den code nochmals bearbeitet, aber nun habe ich nach dem return wieder ein if, und es funktioniert nicht:(

Da der neue Code:

PHP:
//Varaibeln
$user = $_POST['login'];
$pw1 = $_POST['password'];
$pw2 = $_POST['PW2'];
$pw3 = $_POST['PW3'];
$senden = $_POST['aendern'];


//Passwort MD5 Verschlüsseln

$pw1 =md5($pw1);

Benutzernamen vergleichen:

PHP:
  if(!isset($user))
    {    
      echo ("Sie haben kein Benutzername eingegeben!");
    } 
  else 
   {     
 
	 $where = "`Nickname` LIKE '".$user."' ";
	// echo $where;
	// echo " <br>";
 	$sql_news = "SELECT id_login FROM login WHERE $where";
 	$result_news     = mysql_query($sql_news) OR die(mysql_error()); 
 
 	if(mysql_num_rows($result_news)) 
	 {            
   		while($userID = mysql_fetch_assoc($result_news))
 	    {
		//  echo $userID['id_login'];
		//  echo "<br>";
		 // echo $row['Nickname'];
		  
		  return $userID['id_login'];

Kontrolle altes Passwort:

PHP:
		 			  if(!isset($pw1))
  						  {    
      						echo ("Sie haben das Passwort nicht eingegeben!");
    					  } 
  						else 
  						{     
 
	 						$where = "`Id_login` LIKE '".$userID."' AND `Password` LIKE '".$pw1."' ";
							echo $where;
							echo " <br>";
 							$sql_news = "SELECT Password FROM login WHERE $where";
 							$result_news     = mysql_query($sql_news) OR die(mysql_error()); 
 
 							if(mysql_num_rows($result_news)) 
	 						{            
   								while($pwalt = mysql_fetch_assoc($result_news))
 	    							{
		  							echo $pwalt['Password'];
		  							echo "<br>";
		 // echo $row['Nickname'];
		  
		  							return $pwalt['Password'];
									 }
		 					}
		 				 }
		 }
     }
	 
   }

Weiter bin ich leider noch nicht gekommen.


Da ich schon dabei bin, hätte ich neben bei noch eine andere frage:
Wenn ich statt Post, Cooke nehmen würde, würde es cookes erstellen?
Denn wenn das so wäre, könnte man dem Benutzer sein Passwort speichern lassen, so das er es nicht immer wieder eingeben müsste. Oder?

PS: Ich muss noch sagen, ich bin sehr Dankbar das ihr mir helfen könnt, ich würde sonst verrückt werden.. :(

LG
 
Ich hab versucht mir nen Überblick zu verschaffen über dein Code, bin aber gescheitert. Könntest du bitte dein Code im ganzen mal hier posten?
Weil so Sachen wie:
PHP:
  // echo $row['Nickname']; 
           
          return $userID['id_login'];
versteh ich nicht ganz. Wo soll das dann hin gehen das return?

Und zu:
Wenn ich statt Post, Cooke nehmen würde, würde es cookes erstellen?
Denn wenn das so wäre, könnte man dem Benutzer sein Passwort speichern lassen, so das er es nicht immer wieder eingeben müsste. Oder?
ist zu sagen, dass wenn du Cookies setzt es möglich ist, dass der User nur einmal das PW eingeben muss. Jedoch musst du zum einloggen weiterhin Post oder Get nehmen. Zum Thema Cookie, kannste ja mal das hier lesen.
 
Zuletzt bearbeitet:
return $userID['id_login'];

Hmmm, es scheint so als hätte ich das returne falsch eingesetzt.

Im meinem code, unter Benutzernamen vergleichen, habe ich nach der ID des Benutzer gefragt aus meiner Datenbank, dieser sollte dan mit einem return in die variabel $userID gespeichert werden.

Habe ich es denn falsch benutzt?
Oder wie würdes du das machen?

PS: Das Kommentierte wie // echo $row['Nickname']; habe ich vergessen hersuzunehmen, diese brauche ich, in meinem Code nicht. sry
 
Return ist für Funktionen da, die ein Wert zurückgeben sollen. Um einen Wert in einer Variabel zu speichern reicht ein simples =.
Also so ungefähr:
PHP:
$uID=$userID['id_login'];
 
Zuletzt bearbeitet:
Das ist jedoch grob fahrlässig, da man als Name einfach "max" eingeben könnte, auch wenn das nicht der eigene Nick ist. Existiert dieser User, wird sein Passwort geändert, ohne das dieser davon weiss.

Ich habe nun mein code bearbeitet.
Jedoch habe ich das eine Problem trotzdem...
Die Passwörter werden geändert, obwohl das Anmeldepasswort falsch eingegeben wurde. Wiso ist das so?

Das zweite ist: Die echos die ich in meinem Code habe werden nicht ausgegeben.
Ich bekomme immer eine leere Seite :(

V3.php
PHP:
//Varaibeln
$user = $_POST['login'];
$pw1 = $_POST['password'];
$pw2 = $_POST['PW2'];
$pw3 = $_POST['PW3'];



//Passwort MD5 Verschlüsseln
$pw1 =md5($pw1);
$pw2 =md5($pw2);
$pw3 =md5($pw3);

//Benutzernamen und Passwort vergleichen
  if(!isset($user) || !isset($pw1))
    {    
      echo ("Sie haben kein Benutzername oder kein Passwort eingegeben!");
	} 
  else 
   {    
   //Benutzer kontrolle 
	$where = "`Nickname` LIKE '".$user."'";
 	$sql_news = "SELECT `Id_login` FROM login WHERE $where";
 	$result_news     = mysql_query($sql_news) OR die(mysql_error()); 
 	 
 	if( mysql_num_rows($result_news)) 
	 {           
   		while( $userID = mysql_fetch_assoc($result_news))
 	    {
		 $IDuser =  $userID['Id_login'];
	
		  //Passwort kontrolle
	$where2 = "`Id_login` LIKE '".$IDuser."'";
	$sql_news2 = " SELECT `Password` FROM login WHERE $where2";
	$result_news2     = mysql_query($sql_news2) OR die(mysql_error());
	
	if(mysql_num_rows($result_news2)) 
	
	{           
   		while($userPW = mysql_fetch_assoc($result_news2))
 	    {
		 			 
		 $PWuser =  $userPW['Password'];
		 
		   if(!isset($PWuser) == !isset($pw1))
		   {
		
				//Passwordwiedeholung vergleichen
				if(!isset($pw2) == !isset($pw3) ||  !isset($pw2) != "" || !isset($pw3) != "")
				 {
				   $where3 = "`Id_login` LIKE '".$IDuser."'";
				   $sql_news3 = " UPDATE login SET `Password` = '".$pw2."' WHERE $where3";
				   $result_news3 = mysql_query($sql_news3) OR die(mysql_error());

		
				   
				 }
				else
				 {
				   echo ("Das neue Passwort ist falsch!");
				 }
			  }
			  else 
			    {
				  echo("Das Anmeldepasswort ist falsch!");
				}
		 }
	}
	

	
		 }
     }
	 
   }


HTML.HTML
HTML:
<html>
<head>
</head>
<body>

<table>
<form method="post" action="V3.php">
  <tr>
    <td>Benutzername eingeben:</td>
	<td><input type="text" name="login" maxlength="30" /></td>
  </tr>
  <tr>
    <td>Passwort eingeben:</td>
	<td><input type="password" name="password" /></td>
  </tr>
  <tr>
    <td>Neues Passwort eingeben:</td>
	<td><input type="password" name="PW2" /></td>
  </tr>
    <tr>
    <td>Neues Passwort erneut eingeben:</td>
	<td><input type="password" name="PW3" /></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" name="aendern" value="Ändern"> <input type="reset" name="reset" value="Inhalt löschen"> </td>
  </tr>
</form>
</table>
</body>
</html>

Hoffe Ihr könnt mir wieder helfen.
 
Zurück