webForumDet fria alternativet

lösenordsproblem...

18 svar · 547 visningar · startad av FunTrix

FunTrixMedlem sedan okt. 2003118 inlägg
#1

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&ouml;senord </td>
                                        </tr>
                                        <tr>
                                          <td>
                                            <table width="100%"  border="0" cellspacing="0" cellpadding="0">
                                              <tr>
                                                <td> <br>
              Ditt gamla l&ouml;senord: <br>
              <input name="oldpass" type="password" id="oldpass"></td>
                                              </tr>
                                              <tr>
                                                <td>Ditt nya l&ouml;senord: </td>
                                              </tr>
                                              <tr>
                                                <td><input name="newpass" type="text" id="newpass"></td>
                                              </tr>
                                              <tr>
                                                <td>Ditt nya l&ouml;senord igen: <br>
                                                  <input name="newpass2" type="text" id="newpass2"></td>
                                              </tr>
                                              <tr>
                                                <td><input type="submit" name="Submit" value="Byt l&ouml;senord"></td>
                                              </tr>
                                          </table></td>
                                        </tr>
                                      </table>
                                    </form>
MatteMedlem sedan aug. 20002 975 inlägg
#2

Ändra

if (mysql_num_rows($result) == 0){

till

if (mysql_num_rows($result) > 0){
FunTrixMedlem sedan okt. 2003118 inlägg
#3

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
#4

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
#5

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
#6

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
#7

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
#8

VIsa hur din kod ser ut nu efter ändringar.

FunTrixMedlem sedan okt. 2003118 inlägg
#9

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&ouml;senordet har bytts.';
    break;
  case 1:
    echo 'Du f&ouml;rs&ouml;ker exploita systemet och ladda upp med n&aring;gon annans anv&auml;ndare, fy sk&auml;ms.';
    break;
  case 2:
    echo 'Ditt nya l&ouml;senord &ouml;verst&auml;mmer inte med varandra.';
    break;
  case 3:
    echo 'Ditt gamla l&ouml;senord som du angett &auml;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&ouml;senord </td>
    </tr>
    <tr>
      <td><table width="100%"  border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td><br>
            Ditt gamla l&ouml;senord: <br>
            <input name="oldpass" type="password" id="oldpass"></td>
        </tr>
        <tr>
          <td>Ditt nya l&ouml;senord: </td>
        </tr>
        <tr>
          <td><input name="newpass" type="text" id="newpass"></td>
        </tr>
        <tr>
          <td>Ditt nya l&ouml;senord igen: <br>
                <input name="newpass2" type="text" id="newpass2"></td>
        </tr>
        <tr>
          <td><input type="submit" name="Submit" value="Byt l&ouml;senord"></td>
        </tr>
      </table></td>
    </tr>
  </table>
</form>
</body>
</html>
MatteMedlem sedan aug. 20002 975 inlägg
#10

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
#11

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
#12

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&ouml;senordet har bytts.'; 
       break; 
     case 1: 
       echo 'Du f&ouml;rs&ouml;ker exploita systemet och ladda upp med n&aring;gon annans anv&auml;ndare, fy sk&auml;ms.'; 
       break; 
     case 2: 
       echo 'Ditt nya l&ouml;senord &ouml;verst&auml;mmer inte med varandra.'; 
       break; 
     case 3: 
       echo 'Ditt gamla l&ouml;senord som du angett &auml;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&ouml;senord </td> 
    </tr> 
    <tr> 
      <td><table width="100%"  border="0" cellspacing="0" cellpadding="0"> 
        <tr> 
          <td><br> 
            Ditt gamla l&ouml;senord: <br> 
            <input name="oldpass" type="password" id="oldpass"></td> 
        </tr> 
        <tr> 
          <td>Ditt nya l&ouml;senord: </td> 
        </tr> 
        <tr> 
          <td><input name="newpass" type="text" id="newpass"></td> 
        </tr> 
        <tr> 
          <td>Ditt nya l&ouml;senord igen: <br> 
                <input name="newpass2" type="text" id="newpass2"></td> 
        </tr> 
        <tr> 
          <td><input type="submit" name="Submit" value="Byt l&ouml;senord"></td> 
        </tr> 
      </table></td> 
    </tr> 
  </table> 
</form> 
</body> 
</html>
FunTrixMedlem sedan okt. 2003118 inlägg
#13

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
#14

Använd empty() för att kolla $_POST['newpass'].

FunTrixMedlem sedan okt. 2003118 inlägg
#15

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
#16

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
#17

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
#18

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&ouml;senord: <br> 
            <input name="oldpass" type="password" id="oldpass" value="<?php echo $oldpass ?>" /></td> 
        </tr> 
        <tr> 
          <td>Ditt nya l&ouml;senord: </td> 
        </tr> 
        <tr> 
          <td><input name="newpass" type="text" id="newpass" value="<?php echo $newpass ?>" /></td> 
        </tr> 
        <tr> 
          <td>Ditt nya l&ouml;senord igen: <br> 
                <input name="newpass2" type="text" id="newpass2" value="<?php echo $newpass2 ?>" /></td> 
        </tr>
FunTrixMedlem sedan okt. 2003118 inlägg
#19

okej.. tackar så hemskt mkt :)

140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)