17. april 2009 - 20:51Der er
42 kommentarer og 1 løsning
MD5 på karakterende ÆØÅ fejler.....
Hej eksperter
Jeg har oprettet en database med phpMyAdmin via one.com.
Når jeg logger ind er flg. tegnsæt valgt: Danish(utf-8)
På startsiden forefindes forskelligt info og nogle ting kan vælges, bl.a. MySQL forbindelses-sammenkøring som jeg har valgt til: utf8_unicode_ci.
Desuden står MySQL Tegnsæt: UTF-8 Unicode (utf8)
Jeg har herefter oprettet en tabel med to rækker: brugernavn og adgangskode. På adgangskoden anvendes MD5. Dette fejler dog når karaktererne ÆØÅ indgår. Kollation er valgt til utf8_unicode_ci for alle rækker.
Er der nogen kan kan fortælle mig hvad jeg gør forkert eller om ÆØÅ bare ikke understøttes i MD5 funktionen?????
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
//Create connection to MySQL $con = mysql_connect($dbhost,$dbuser,$dbpass);
//Evaluate if connection to database was established or not if (!$con) die('Could not connect: ' . mysql_error()); else echo "Connection established"; ?> <br/><br/> <?php // Get data from form $user = mysql_real_escape_string((get_magic_quotes_gpc() ? stripslashes($_POST["username"]) : $_POST["username"])); $password = md5($_POST["password"]);
//select table mysql_select_db($dbuser, $con);
//Search the database for a User with corresponding password $checkuser = mysql_query("SELECT * FROM Logins WHERE username='$user' AND Password = '$password'");
//Get the number of matches......1 or 0 since username is primary key the value can't exceed 1 $username_exist = mysql_num_rows($checkuser);
if($username_exist > 0) echo "User info confirmed by administartor....";
else echo "Username or password incorrect"; mysql_close($con); ?>
MySQL Tegnsæt: UTF-8 Unicode (utf8) MySQL forbindelses-sammenkøring: utf8_danish_ci
I min tabel er kollationen i alle rækker sat til utf8_danish_ci.
Alle mine filer er lavet vha notepad++ hvor encoding er sat til utf8.
Er det lige meget om mine data er indtastet direkte via PhpMyAdmin?
Lige et ekstra spørgsmål ang. sessions. Jeg laver en session_start() i starten af mit script før html tags. Efter verifikation af brugeren bruger jeg flg kode:
$_SESSION['loggedin'] = true; // store the user in the session
echo "User has been verified by administrator....";
//Create connection to MySQL $con = mysql_connect($dbhost,$dbuser,$dbpass);
//Evaluate if connection to database was established or not if (!$con) die('Could not connect: ' . mysql_error()); else echo "Connection established"; ?> </br></br> <?php // Get data from form $user = mysql_real_escape_string((get_magic_quotes_gpc() ? stripslashes($_POST["username"]) : $_POST["username"])); $password = md5($_POST["password"]);
//select table mysql_select_db($dbuser, $con);
//Search the database for a User with corresponding password $checkuser = mysql_query("SELECT * FROM Logins WHERE username='$user' AND Password = '$password'");
$username_exist = mysql_num_rows($checkuser);
if($username_exist > 0) { $_SESSION['loggedin'] = true; // store the user in the session
echo "User has been verified by administrator....";
Efter jeg har sat $_SESSION['loggedin'] = 1 har jeg forsøgt flg:
echo "<pre>"; print_r($_SESSION); echo "</pre>";
hvorefter flg som forventet skrives ud
Array ( [loggedin] => 1 )
Gør jeg det samme på index.php efter redirection skrives
Array ( )
For mig at se beviser dette at det er redirectionen der er noget galt med. Er der noget der skal gøres for at jeg har session variable tilrådighed på andre sider?
Neej det er underligt. Det skal ikke gøres manuelt. Det andet skulle sagtens være muligt. SESSIONS er jo netop til for at man kan fange dem på flere sider, uden man skal have variabler i URL eller noget.
Det kan være der sker en fejl i din redirect. Du har den nede i dit body-element, hvilket er forkert. Den skal være i din header.
Din struktur i koden er forkert. Du bliver nødt til at rykke det op i headersektionen. Hvis du rykker din PHP op imellem <head></head> og så laver echo "User has been verified by administrator...."; om til $message = "User has been verified by administrator...."; og echo "Username or password incorrect"; om til $message = "Username or password incorrect"; og echo'er den nede i dit body-element istedet, hvordan går det så?
Altså bare med echo $message;
Håber ïndlægget var forståeligt. Hehe.. Ellers må jeg prøve at vise det bedre :)
//Create connection to MySQL $con = mysql_connect($dbhost,$dbuser,$dbpass);
//Evaluate if connection to database was established or not if (!$con) die('Could not connect: ' . mysql_error()); else echo "Connection established";
// Get data from form $user = mysql_real_escape_string((get_magic_quotes_gpc() ? stripslashes($_POST["username"]) : $_POST["username"]));
$password = md5($_POST["password"]);
//select table mysql_select_db($dbuser, $con);
//Search the database for a User with corresponding password $checkuser = mysql_query("SELECT * FROM Logins WHERE username='$user' AND Password = '$password'");
$username_exist = mysql_num_rows($checkuser);
if($username_exist > 0) { $_SESSION['loggedin'] = 1; // store the user in the session
$message = "User has been verified by administrator....";
Jeg er lidt i tvivl ang strukturen på siden. Har du nogle links til hvordan man bør bygge det op?? Jeg bruger selv mest http://www.php.net/ til inspiration
Og hvordan afvikles koden? Jeg er mest vant til C++ hvor man kan sige at koden afvikles oppe fra og ned, og derfor gav for mig ikke så meget mening at bruge "echo" efter man har redirectet:-)
Så skal jeg poste dig en udsnit af hvordan jeg selv plejer at gøre.
Det er lidt forskelligt hvad man kan gøre, men den måde du gør det på her, er egentligt fin nok. Normalt når jeg selv laver sådan noget, så laver jeg validering i login filen. Altså det hele i 1 fil, istedet for den sender dig til en anden fil, for at sende dig videre til en tredie. Men det er jo en smagssag.
Koden afvikles på samme måde som C++ og det meste andet. Det læses også oppe fra som en bog. Og afvikles i den rækkefølge.
Du kan sagtens have en echo længere nede. Hvis den nu ikke sender dig videre (hvis login er forkert fx), så skal den jo skrive noget dernede. Og, hvis du bliver redirectet, så tager det jo lige lidt tid, så den skriver en besked om at det er i orden.
Men vi er enige om når du logger ind, at hvis det korrekt login, så skriver den User has been verified by administrator... og redirecter dig kort efter ikke? Og hvis login er forkert, skriver den Username or password incorrect?
Jeg er sgu i tvivl her. Kan ikke se hvor fejlen ligger. Ved ikke om jeg har stirret mig blind på det eller hvad efterhånden, så må lægge mit hovede i blød.
Hvis du prøver at fjerne dit metatag der videresender en gang, og skriver echo $_SESSION['loggedin']; nede under echo $message;, kan den så vise SESSIONEN på den side? Bare for at teste en gang.. Ellers kunne det godt tyde på, at den slet ikke bliver sat.
Til dit spørgsmål: "......Men vi er enige om når du logger ind, at hvis det korrekt login, så skriver den User has been verified by administrator... og redirecter dig kort efter ikke? Og hvis login er forkert, skriver den Username or password incorrect?....."
Ja det er korrekt.
Og ved echo $_SESSION['loggedin']; unde echo $message; udskrives 1... hvilket jo er korrekt.....
Okay, så problemerne ligger ikke med at oprette SESSIONEN. Den eksisterer. Well, du skriver at den ikke kan vise den på login siden. Altså den side med formen? For der ser det ikke ud til at du har en session_start();. Prøv at smide en ind der.
Jeg synes virkelig det er underligt for når jeg søger på nettet er det nøjagtig lige sådan jeg gør. Kan jeg mangle noget opsætning eller noget, eller kan det være encodningen eller måden jeg gemmer på??? bruger www.one.com som webhotel.....
Det synes jeg jo umiddelbart ikke kan have noget med det at gøre.
Du har allerede en php.ini fil. Men den behøver du ikke rode i. Lad RG (Register Globals) være til off. Det bør den altid være, da det er et sikkershedsmodul. At sætte den til on svækker nogle ting væsentligt. Du kan sagtens lave det du ønsker med den til off.
Måden du gemmer på er også fin. Og encoding'en skulle ikke have noget at sige nej.
Prøv at skifte
<form action="validation1.php" method="post">
ud med
<form method="post" action="validation1.php">
Men tvivler nu også på at det har noget at sige. Det begynder at blive svært, så nu er det bare lidt skud i tågen, udfra hvad jeg plejer at gøre anderledes.
Du kan også prøve at smide ob_end_flush(); op under din session_start;, men kan ikke helt huske hvordan den funktion virker, så det kan være der skal mere til end det.
Det kan være nogle andre ved mere omkring dette, som vil joine os i tråden her. :)
Jeg tror vi er på et stadie nu, hvor du må prøve at oprette 2 nye filer. 1 hvor du bare gemmer en SESSION. Og 1 hvor du udskriver den. Virker det overhovedet? Bare som en test.
Det tror jeg ikke. SESSION bliver jo sat, før der redirectes. Prøv at fjern din redirect. Og så klik dig manuelt ind på den side som den burde have redirectet til, og så se om det virker :)
Yeah, det er et baggrundsbillede jeg har sat ind i en <td>. Dejlig nem måde at gøre det på i virkeligheden.
Synes godt om
Ny brugerNybegynder
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.