webForumDet fria alternativet

lösenordsproblem...

PHP

18 svar · 547 visningar · startad av FunTrix

Medlem sedan okt. 2003118 inlägg
Frågan#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>
Medlem sedan aug. 20002 975 inlägg
#2

Ändra

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

till

if (mysql_num_rows($result) > 0){
Medlem 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...

Medlem 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) {
Medlem 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..

Medlem 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.

Medlem 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...

Medlem sedan aug. 20002 975 inlägg
#8

VIsa hur din kod ser ut nu efter ändringar.

Medlem 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>
Medlem 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.

Medlem 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?

Medlem 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>
Medlem 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...

Medlem sedan aug. 20002 975 inlägg
#14

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

Medlem 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... :/

Medlem 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; 
      }
Medlem 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...

Medlem 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>
Medlem sedan okt. 2003118 inlägg
#19

okej.. tackar så hemskt mkt :)

270 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)