FunTrixMedlem sedan okt. 2003118 inlägg Tja..!
någon som kan hjälpa mig att reda ut vad som är fel i min byta lösenordskod... direkt när man går in på sidan så står det att lösenordet är bytt och han byter till att man inte har något lösenord...
skriver man i alla information rätt så står det fortfarande att lösenordet är bytt men då gör han inte det... hjälp! :l
<?php
session_start(); // Alltid överst på sidan
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])) {
header("Location: ../index.php");
exit;
}
// ta fram user information.
$user = $_SESSION['sess_user'];
include "../conn.php"; // Databasanslutningen
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
...... massa skit ....
<body>
<?
$pass = md5($_POST['pass']);
$sql = "SELECT * FROM `uploadmembers` WHERE user='{$user}'";
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) == 0){
while ($variable = mysql_fetch_array($result)){
$oldpass = $variable['pass'];
}} else {
$error = 1;
}
If(($_POST['newpass'] == $_POST['newpass2']) && ($_POST['oldpass'] == $oldpass)) {
$sql = "UPDATE uploadmembers SET pass='{$pass}' WHERE user='{$user}'";
$result = mysql_query($sql) or die(mysql_error());
$error = 0;
} else {
If ($_POST['newpass'] <> $_POST['newpass2']) {
$error = 2;
}
If ($_POST['oldpass'] <> $oldpass) {
$error = 3;
}
}
switch($error){
case 0:
echo 'Lösenordet har bytts.';
break;
case 1:
echo 'Du försöker exploita systemet och ladda upp med någon annans användare, fy skäms.';
break;
case 2:
echo 'Ditt nya lösenord överstämmer inte med varandra.';
break;
case 3:
echo 'Ditt gamla lösenord som du angett är fel';
break;
}
?>
</span> </p>
<form name="form1" method="post" action="index.php">
<table width="61%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Byt lösenord </td>
</tr>
<tr>
<td>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> <br>
Ditt gamla lösenord: <br>
<input name="oldpass" type="password" id="oldpass"></td>
</tr>
<tr>
<td>Ditt nya lösenord: </td>
</tr>
<tr>
<td><input name="newpass" type="text" id="newpass"></td>
</tr>
<tr>
<td>Ditt nya lösenord igen: <br>
<input name="newpass2" type="text" id="newpass2"></td>
</tr>
<tr>
<td><input type="submit" name="Submit" value="Byt lösenord"></td>
</tr>
</table></td>
</tr>
</table>
</form>
MatteMedlem sedan aug. 20002 975 inlägg Ändra
if (mysql_num_rows($result) == 0){
till
if (mysql_num_rows($result) > 0){
FunTrixMedlem sedan okt. 2003118 inlägg men då får jag istället upp att ditt gamla lösenord som du har angett är fel...
MatteMedlem sedan aug. 20002 975 inlägg Du har SQL-frågan:
$sql = "SELECT * FROM `uploadmembers` WHERE user='{$user}'";
där $user är lika med $_SESSION['sess_user'].
Längre upp har du en kontroll av att $_SESSION['sess_user'] verkligen finns, annars skicka till index-sidan.
Det enda sätt du skulle kunna finna 0 (noll) rader i din SQL-körning är om du (användaren) blivit raderad från databasen efter inloggning.
Om däremot 0 (noll) rader hittades så kan du inte köra mysql_fetch_array() på resultatet, då det är tomt.
Testa istället att göra så här:
$_POST['oldpass'] = md5($_POST['oldpass']);
$sql = "SELECT pass FROM `uploadmembers` WHERE user='{$user}'";
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) > 0){
$oldpass = mysql_result($result, 0, 'pass');
} else {
$error = 1;
}
if(!isset($error) && $_POST['newpass'] == $_POST['newpass2'] && $_POST['oldpass'] == $oldpass) {
FunTrixMedlem sedan okt. 2003118 inlägg testade att köra med min gamla kod och ta bort user $user = $_SESSION['sess_user'];
det hjälpte inte, får upp att det gamla lösenordet är fel då... jag får samma fel om jag kör din kod..
MatteMedlem sedan aug. 20002 975 inlägg
FunTrix skrev:
testade att köra med min gamla kod och ta bort user $user = $_SESSION['sess_user'];
det hjälpte inte, får upp att det gamla lösenordet är fel då... jag får samma fel om jag kör din kod..
Om du tar bort $user = $_SESSION['sess_user']; bör du få det, ja.
FunTrixMedlem sedan okt. 2003118 inlägg ja men jag har även testat att ha kvar $user = $_SESSION['sess_user']; och lägga in din kod, fick samma utskrift där...
MatteMedlem sedan aug. 20002 975 inlägg VIsa hur din kod ser ut nu efter ändringar.
FunTrixMedlem sedan okt. 2003118 inlägg så här ser hela min kod ut nu:
<?php
session_start(); // Alltid överst på sidan
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])) {
header("Location: ../index.php");
exit;
}
// ta fram id information.
$user = $_SESSION['sess_user'];
include "../conn.php"; // Databasanslutningen
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p><span class="style6">
<?
$_POST['oldpass'] = md5($_POST['oldpass']);
$sql = "SELECT pass FROM `uploadmembers` WHERE user='{$user}'";
$result = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($result) > 0){
$oldpass = mysql_result($result, 0, 'pass');
} else {
$error = 1;
}
if(!isset($error) && $_POST['newpass'] == $_POST['newpass2'] && $_POST['oldpass'] == $oldpass) {
$sql = "UPDATE uploadmembers SET pass='{$pass}' WHERE user='{$user}'";
$result = mysql_query($sql) or die(mysql_error());
$error = 0;
} else {
If ($_POST['newpass'] <> $_POST['newpass2']) {
$error = 2;
}
If ($_POST['oldpass'] <> $oldpass) {
$error = 3;
}
}
switch($error){
case 0:
echo 'Lösenordet har bytts.';
break;
case 1:
echo 'Du försöker exploita systemet och ladda upp med någon annans användare, fy skäms.';
break;
case 2:
echo 'Ditt nya lösenord överstämmer inte med varandra.';
break;
case 3:
echo 'Ditt gamla lösenord som du angett är fel';
break;
}
?>
</span> </p>
<form name="form1" method="post" action="index.php">
<table width="61%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Byt lösenord </td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><br>
Ditt gamla lösenord: <br>
<input name="oldpass" type="password" id="oldpass"></td>
</tr>
<tr>
<td>Ditt nya lösenord: </td>
</tr>
<tr>
<td><input name="newpass" type="text" id="newpass"></td>
</tr>
<tr>
<td>Ditt nya lösenord igen: <br>
<input name="newpass2" type="text" id="newpass2"></td>
</tr>
<tr>
<td><input type="submit" name="Submit" value="Byt lösenord"></td>
</tr>
</table></td>
</tr>
</table>
</form>
</body>
</html>
MatteMedlem sedan aug. 20002 975 inlägg Först.
Är det jag som har missuppfattat något när det gäller att du har MD5() på dina lösenord i databasen ?
Sen ser jag ett fel, med det kan vi ta när jag får svar på frågan.
FunTrixMedlem sedan okt. 2003118 inlägg hmm, jo jag använder md5 krypterade lösenord i min databas...
krypterar han inte lr och vad är det andra felet?
MatteMedlem sedan aug. 20002 975 inlägg Testa så här:
<?php
session_start(); // Alltid överst på sidan
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])) {
header("Location: ../index.php");
exit;
}
include "../conn.php"; // Databasanslutningen
if (isset($_POST['Submit'])) {
$sql = "SELECT COUNT(*) FROM `uploadmembers` WHERE user = '{$_SESSION['sess_user']}' AND pass = MD5('{$_POST['oldpass']}')";
$result = mysql_query($sql);
if (mysql_result($result, 0) == 0) {
$error = 3;
} else {
if ($_POST['newpass'] <> $_POST['newpass2']) {
$error = 2;
} else {
$sql = "UPDATE uploadmembers SET pass = MD5('{$_POST['newpass']}') WHERE user = '{$_SESSION['sess_user']}'";
$result = mysql_query($sql) or die(mysql_error());
$error = 0;
}
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p><span class="style6">
<?
if (isset($error)) {
switch($error){
case 0:
echo 'Lösenordet har bytts.';
break;
case 1:
echo 'Du försöker exploita systemet och ladda upp med någon annans användare, fy skäms.';
break;
case 2:
echo 'Ditt nya lösenord överstämmer inte med varandra.';
break;
case 3:
echo 'Ditt gamla lösenord som du angett är fel';
break;
}
}
?>
</span> </p>
<form name="form1" method="post" action="index.php">
<table width="61%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Byt lösenord </td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><br>
Ditt gamla lösenord: <br>
<input name="oldpass" type="password" id="oldpass"></td>
</tr>
<tr>
<td>Ditt nya lösenord: </td>
</tr>
<tr>
<td><input name="newpass" type="text" id="newpass"></td>
</tr>
<tr>
<td>Ditt nya lösenord igen: <br>
<input name="newpass2" type="text" id="newpass2"></td>
</tr>
<tr>
<td><input type="submit" name="Submit" value="Byt lösenord"></td>
</tr>
</table></td>
</tr>
</table>
</form>
</body>
</html>
FunTrixMedlem sedan okt. 2003118 inlägg tackar... det var ett steg åt rätt riktning iaf, dock finns fortfarande ett problem till och det är när man bara fyller i sitt gamla lösenord och inget på de nya lösenorden så byts lösenordet till ingenting... måste ha en spärr som gör att man inte kan få lösenordet bytt till ingenting...
MatteMedlem sedan aug. 20002 975 inlägg Använd empty() för att kolla $_POST['newpass'].
FunTrixMedlem sedan okt. 2003118 inlägg hmm, ska jag göra så här då?:
$sql = "UPDATE uploadmembers SET pass = MD5('if empty({$_POST['newpass']})'
väldigt osäker på hur det ska se ut i den där raden... :/
MatteMedlem sedan aug. 20002 975 inlägg Du gör något i de här stilen:
if ($_POST['newpass'] <> $_POST['newpass2']) {
$error = 2;
} elseif (empty($_POST['newpass'])) {
$error = 4;
} else {
$sql = "UPDATE uploadmembers SET pass = MD5('{$_POST['newpass']}') WHERE user = '{$_SESSION['sess_user']}'";
$result = mysql_query($sql) or die(mysql_error());
$error = 0;
}
FunTrixMedlem sedan okt. 2003118 inlägg okej... det fungerade, tackar!
då är det bara en sak till som jag funderar över och det är om man kan göra på något sätt så att textboxarna som du skriver in dina lösenord i inte töms om man skriver fel..
utan felmedelandet ska bara komma utan att boxarna töms...
MatteMedlem sedan aug. 20002 975 inlägg Då kan du testa något i den här stilen:
<?php
$oldpass = !empty($error) ? $_POST['oldpass'] : '';
$newpass = !empty($error) ? $_POST['newpass'] : '';
$newpass2 = !empty($error) ? $_POST['newpass2'] : '';
?>
<tr>
<td><br>
Ditt gamla lösenord: <br>
<input name="oldpass" type="password" id="oldpass" value="<?php echo $oldpass ?>" /></td>
</tr>
<tr>
<td>Ditt nya lösenord: </td>
</tr>
<tr>
<td><input name="newpass" type="text" id="newpass" value="<?php echo $newpass ?>" /></td>
</tr>
<tr>
<td>Ditt nya lösenord igen: <br>
<input name="newpass2" type="text" id="newpass2" value="<?php echo $newpass2 ?>" /></td>
</tr>
FunTrixMedlem sedan okt. 2003118 inlägg okej.. tackar så hemskt mkt :)