Avatar billede jkn83 Praktikant
05. maj 2010 - 23:06 Der er 17 kommentarer og
1 løsning

Ny kode til bruger, MD5 via mysql

Har lavet et script der gerne skulle kunne få brugerne til at skifte password hvis dette skulle være ønsket, men når jeg går ind på siden, viser den intet... Kan ikke lokalisere fejlen, så håber en af jer kan.

Bruger id er gemt i session, som bruges i scriptet.

Koden ser sådan ud:

<?php
session_start();
include 'connect.php';

if($_GET["doChange"])
{
    $newpass = $_POST["newPassword"];
    $newpass2 = $_POST["newPassword2"];
    $oldpass = md5($_POST["oldPassword"];
    $getUser = mysql_query("SELECT * FROM users WHERE user_id='$_SESSION[userid]'")or die(mysql_error());
    $res = mysql_fetch_assoc($getUser);
    if ('$oldpass'=='$res["password"]');
    {
        while ('$newpass'=='$newpass2');
        {
            $newPass = md5($_POST["newPassword"];
            mysql_query("UPDATE users SET password='$newPass' WHERE id='$_SESSION[userid]'");
        }
    }
}
if($_SESSION["userid"])
{
?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title></title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body bgcolor="#4d4a37">
    <div id="main">
<?php
    echo '
    <form method="POST" action="changepass.php?doChange=do">
    <table width="100%">
    <tr><td>Gammel kode:</td><td> <input type="text" name="oldPassword" size="20"> </td></tr>
    <tr><td>Ny kode:</td><td> <input type="password" name="newPassword" size="20"> </td></tr>
    <tr><td>Ny kode igen:</td><td> <input type="password" name="newPassword2" size="20"> </td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="Skift kode" name="submit"></td></tr>
    </table> 
    </form>
    ';
}
else
echo 'Du er ikke logget ind!';
}
?>
</div>
</body>
</html>
Avatar billede showsource Seniormester
05. maj 2010 - 23:16 #1
Et tip:

<?php

// Show all errors, except for notices
ini_set('error_reporting', E_ALL & ~E_NOTICE | E_STRICT);


session_start();
include 'connect.php';

// resten af din fil .....



?>
Avatar billede showsource Seniormester
05. maj 2010 - 23:17 #2
Men ellers, kik efter din brug af ' og ;

F.eks.

if ('$oldpass'=='$res["password"]');
Avatar billede DGudiksen Nybegynder
05. maj 2010 - 23:21 #3

<?php
session_start();
include 'connect.php';

if($_GET["doChange"])
{
    $newpass = $_POST["newPassword"];
    $newpass2 = $_POST["newPassword2"];
    $oldpass = md5($_POST["oldPassword"];
    $getUser = mysql_query("SELECT * FROM users WHERE user_id='$_SESSION[userid]'")or die(mysql_error());
    $res = mysql_fetch_assoc($getUser);
    if ('$oldpass' == '$res["password"]')
    {
        if ('$newpass' == '$newpass2')
        {
            $newPass = md5($_POST["newPassword"];
            mysql_query("UPDATE users SET password='$newPass' WHERE id='$_SESSION[userid]'");
        }
    }
}
if($_SESSION["userid"])
{
?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title></title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body bgcolor="#4d4a37">
    <div id="main">
<?php
    echo '
    <form method="POST" action="changepass.php?doChange=do">
    <table width="100%">
    <tr><td>Gammel kode:</td><td> <input type="text" name="oldPassword" size="20"> </td></tr>
    <tr><td>Ny kode:</td><td> <input type="password" name="newPassword" size="20"> </td></tr>
    <tr><td>Ny kode igen:</td><td> <input type="password" name="newPassword2" size="20"> </td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="Skift kode" name="submit"></td></tr>
    </table>
    </form>
    ';
}
else
{
echo 'Du er ikke logget ind!';
}
?>
</div>
</body>
</html>
Avatar billede Slettet bruger
05. maj 2010 - 23:30 #4
Avatar billede DGudiksen Nybegynder
05. maj 2010 - 23:33 #5
kan også se at du ved din mysql update brugere WHERE id = hvor du i din SELECT bruger user_id du må lige bestemme dig for hvilken en der er rigtig.
Avatar billede Slettet bruger
05. maj 2010 - 23:36 #6
Ja der mangler parenteser og mindre plinger og semi-koloner :D Men han er i den rigtige retning :D
Avatar billede jkn83 Praktikant
06. maj 2010 - 06:53 #7
Hehe ja der er vist et par fejl :D men forsøger da ;)

showsource: forsøgte med den der skulle melde hvilke fejl der var, og siden er stadig blank :/

Kiggede også på if ('$oldpass'=='$res["password"]'); og fjernede '' og ; stadig uden held

Så lidt på løsningsforslaget hvor DGudiksen havde brugt if i stedet for while, og rettet et par andre ; til. stadig intet.

Kiggede også på Zeska's løsning, hvor user_id blandt andet var rettet :D men desværre stadig intet :/

Og igen som DGudiksen sagde, var der en fejl her også...

---------------------------

Men... lad os lige tage problemmet igen, så snart jeg går ind på changepass.php sker der INTET... Den er jo slet ikke kommet til if($_GET["doChange"]) endnu... Den vil ikke engang vise mig echo med formen når jeg har en session der ligger der med userid.

Tror i ikke det er der problemmet ligger ?

Der bliver oprettet en $_session["userid"] og før vi kan komme til if($_GET["doChange"]) skal vi jo have sendt noget info til den via formen nederst i koden. Men når siden loades, er der intet at se :/ Ingen form, ingen fejl meddelelser, intet...
Avatar billede Slettet bruger
06. maj 2010 - 07:37 #8
Prøv at bare skrive "Hej" uden noget somhelst andet på siden.
Derefter <?php echo "Hej"; ?>
Avatar billede jkn83 Praktikant
06. maj 2010 - 07:52 #9
skal jeg slette alt koden og så kun sætte det ind ? Hvad skulle det hjælpe ?
Avatar billede Slettet bruger
06. maj 2010 - 08:31 #10
Se om den kan vise simple ting. Se om den kan køre php kode. Du kunne være kommet til at slette .php eller ikke havde startet web-serveren.
Avatar billede jkn83 Praktikant
06. maj 2010 - 18:05 #11
ved "hej" skriver den hej...
ved <? echo 'hej'; ?> skriver den hej...

Så hvad så nu ?
Avatar billede jkn83 Praktikant
06. maj 2010 - 19:00 #12
ok sad lige og eksperimenterede lidt...

Hvis jeg skriver koden som neden under, viser den formen... jeg koden som er fjernet i toppen, ELLER else { echo 'tekst'; } i bunden, viser den det ikke...

<?php

session_start();

if($_SESSION["userid"])
{
echo '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title></title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body bgcolor="#4d4a37">
    <div id="main">
    <form method="POST" action="changepass.php?doChange=do">
    <table width="100%">
    <tr><td>Gammel kode:</td><td> <input type="text" name="oldPassword" size="20"> </td></tr>
    <tr><td>Ny kode:</td><td> <input type="password" name="newPassword" size="20"> </td></tr>
    <tr><td>Ny kode igen:</td><td> <input type="password" name="newPassword2" size="20"> </td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="Skift kode" name="submit"></td></tr>
    </table> 
    </form>
';
}
?>
</div>
</body>
</html>
Avatar billede jkn83 Praktikant
07. maj 2010 - 07:48 #13
Ingen der har cracket problemmet i denne endnu ? :/
Avatar billede jkn83 Praktikant
07. maj 2010 - 08:58 #14
Jeg ved ikke om det vil være en god ide... Men man kunne vel splitte koden, så man har formen der sender til en anden fil der laver en tjek om den får et GET... måske det virker ? Ville bare mene "sikkerheden" er lidt lavere på den, men kan godt være det bare er mig...

Altså hvor ens changepass.php ser sådan ud hvor de viser formen:

<?php

session_start();

if($_SESSION["userid"])
{
echo '
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
    <html>
    <head>
    <title></title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body bgcolor="#4d4a37">
    <div id="main">
    <form method="POST" action="changepassnow.php?doChange=do">
    <table width="100%">
    <tr><td>Gammel kode:</td><td> <input type="text" name="oldPassword" size="20"> </td></tr>
    <tr><td>Ny kode:</td><td> <input type="password" name="newPassword" size="20"> </td></tr>
    <tr><td>Ny kode igen:</td><td> <input type="password" name="newPassword2" size="20"> </td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="Skift kode" name="submit"></td></tr>
    </table> 
    </form>
';
}
?>
</div>
</body>
</html>


Og så en anden fil... eksempelvis changepassnow.php kan se sådan ud:

<?php

session_start();
include('connect.php');

if($_GET["doChange"])
{
    $newpass = $_POST["newPassword"];
    $newpass2 = $_POST["newPassword2"];
    $oldpass = md5($_POST["oldPassword"];
    $userID= $_SESSION['userid'];
    $getUser = mysql_query("SELECT password FROM users WHERE user_id='$userID'") or die(mysql_error());
    $res = mysql_fetch_assoc($getUser);
    if ($oldpass == $res["password"])
    {
        if ('$newpass' == '$newpass2')
        {
            $newPass = md5($newpass);
            mysql_query("UPDATE users SET password='$newPass' WHERE user_id='$userID'") or die(mysql_error());;
        }
    }
}
?>


Sætter det lige på en prøve og melder tilbage...
Avatar billede jkn83 Praktikant
07. maj 2010 - 09:00 #15
hmm nej :/ funkede ikke
Avatar billede Slettet bruger
07. maj 2010 - 13:57 #16
Hvis du har lyst kan jeg tage et kik over teamviewer.

Bare send en besked til min bruger her på Eksperten.dk
Avatar billede jkn83 Praktikant
08. maj 2010 - 00:48 #17
Koden der blev løsningen, og som kom fra Zeska... Er følgende... Point uddelt ;)

<?php

    session_start();
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title></title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
</head>
<body bgcolor="#4d4a37">
    <div id="main">
   
<?php

    include('connect.php');

    if(isset($_POST["changePass"]))
    {
        $newpass = $_POST['newPassword'];
        $newpass2 = $_POST['newPassword2'];
        $oldpass = md5($_POST['oldPassword']);
        $user_id = $_SESSION['userid'];
       
        $getUser = mysql_query("SELECT password FROM users WHERE user_id='$user_id' LIMIT 1") or die(mysql_error());
        $res = mysql_fetch_assoc($getUser);
       
        if($oldpass == $res['password'])
        {
            if($newpass == $newpass2)
            {
                $newPass = md5($newpass);
               
                mysql_query("UPDATE users SET password='$newPass' WHERE user_id='$user_id' LIMIT 1") or die(mysql_error());
                echo 'Password ændret!';
            }
        }
       
        mysql_close();
       
    }
   
    if(isset($_SESSION["userid"]))
    {

        echo '
            <form method="post" action="' . $_SERVER['php_self'] . '">
                <table width="100%">
                    <tr>
                        <td>Gammel kode:</td><td><input type="text" name="oldPassword" size="20"></td>
                    </tr>
                    <tr>
                        <td>Ny kode:</td><td><input type="password" name="newPassword" size="20"></td>
                    </tr>
                    <tr>
                        <td>Ny kode igen:</td><td><input type="password" name="newPassword2" size="20"></td>
                    </tr>
                    <tr>
                        <td colspan="2" align="center"><input type="submit" value="Skift kode" name="changePass"></td>
                    </tr>
                </table>
            </form>
        ';
    }
    else
    {

        echo 'Du er ikke logget ind!';
   
    }
?>
    </div>
</body>
</html>
Avatar billede Slettet bruger
08. maj 2010 - 00:49 #18
Svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester