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>
Annonceindlæg fra Cornerstones
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 ..... ?>
Men ellers, kik efter din brug af ' og ; F.eks. if ('$oldpass'=='$res["password"]');
<?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>
Slettet bruger
05. maj 2010 - 23:30
#4
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.
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
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...
Slettet bruger
06. maj 2010 - 07:37
#8
Prøv at bare skrive "Hej" uden noget somhelst andet på siden. Derefter <?php echo "Hej"; ?>
skal jeg slette alt koden og så kun sætte det ind ? Hvad skulle det hjælpe ?
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.
ved "hej" skriver den hej... ved <? echo 'hej'; ?> skriver den hej... Så hvad så nu ?
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>
Ingen der har cracket problemmet i denne endnu ? :/
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...
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
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>
Slettet bruger
08. maj 2010 - 00:49
#18
Svar
Vi tilbyder markedets bedste kurser inden for webudvikling