eT` Posted February 5, 2010 Report Share Posted February 5, 2010 Tātad šodien atklāju lielu kļūdu savā webā, bet nezinu, kas pie vainas. ā login f-ja strādā FF, bet IE un Chrome un visticamāk arī Opera nestrādā. login f-ja: if(isset($_GET["action"]) && $_GET["action"] == "login") { if(isset($_POST["name"]) && isset($_POST["pass"]) && $_POST["name"] != "" && $_POST["pass"] != "") { $user1 = html(strtolower($_POST["name"])); $user = str_replace(" ","_",$user1); $parole = md5($_POST["pass"].'yeyeyeyeye'); $k = mysql_query("SELECT * FROM filmu_useri WHERE username='$user' AND password='$parole'"); $f = mysql_fetch_array($k); $stat = $f["status"]; $idl = $f["username"]; if(mysql_num_rows($k) == 1) { if($stat != "0") { $_SESSION['admins'] = $stat; } mysql_query("UPDATE filmu_useri SET online='Y' WHERE username='$idl'"); setcookie('id', $idl); echo "<script language='JavaScript'>window.location='".$_SERVER['HTTP_REFERER']."';</script>"; } else { $error = "Nepareizs e-pasts un/vai parole!"; } } else { echo "<script language='JavaScript'>window.location='".$_SERVER['HTTP_REFERER']."';</script>"; } } Quote Link to comment Share on other sites More sharing options...
Pentiums Posted February 5, 2010 Report Share Posted February 5, 2010 iedod arī html formu Quote Link to comment Share on other sites More sharing options...
2easy Posted February 5, 2010 Report Share Posted February 5, 2010 (edited) tas labi, ka nepateici priekšā, kāda ir tā lielā kļūda. būs interesantāk minēt ^^ taisi redirektu uzreiz ar header('Location: url'); nevis 4erz ž (sry džavaskriptu :D) vsp kas tieši nestrādā? un kāda izskatās html() funkcija? btw mūsdienās js script tagu raksta <script type="text/javascript"> nevis <script language='Javascript'> aa un vēl viens zame4anie: HTTP_REFERER var nebūt. labāk iepriekšējo adresi padot login formai via $_GET: redirect-url=... vai vnk url=... un pēc veiksmīga logina redirektot pēc šī parametra, nevis HTTP_REFERER Edited February 5, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
eT` Posted February 5, 2010 Author Report Share Posted February 5, 2010 (edited) manā gadījumā HTTP_REFERER vienmēr būs, jo cilvēks dodas filmam.lv nevis filmam.lv/header.php?action=login tādējādi pēc ?action=login viņu pārmet uz filmam.lv :) ok, uztaisīšu caur header. tamm caur header man uz FF strādā bet uz IE un Chrome nestrādā :( html f-ja ( zinu tev nepatiks, jo tiek sadirsti lietotāja dati un varot iztikt tikai ar htmlspecialchars ) function html($text) { $text = htmlentities(stripslashes(trim($text))); $text = str_replace("'"," ",$text); $text = str_replace(";"," ",$text); $text = str_replace("$"," ",$text); $text = str_replace("@","[at]",$text); return $text; } PHP daļa: if(isset($_GET["action"]) && $_GET["action"] == "login") { if(isset($_POST["name"]) && isset($_POST["pass"]) && $_POST["name"] != "" && $_POST["pass"] != "") { $user1 = html(strtolower($_POST["name"])); $user = str_replace(" ","_",$user1); $parole = md5($_POST["pass"].'yeyeyeeyeyeye'); $k = mysql_query("SELECT * FROM filmu_useri WHERE username='$user' AND password='$parole'"); $f = mysql_fetch_array($k); $stat = $f["status"]; $idl = $f["username"]; if(mysql_num_rows($k) == 1) { if($stat != "0") { $_SESSION['admins'] = $stat; } mysql_query("UPDATE filmu_useri SET online='Y' WHERE username='$idl'"); setcookie('id', $idl); header('Location: http://filmam.lv'); } else { header('Location: http://filmam.lv'); } } else { header('Location: http://filmam.lv'); } } un HTML daļa <form action="http://filmam.lv/header.php?action=login" method="post"> <table width="90%" align="center"> <tr> <td>Lietotājvārds</td> <td><input type="text" name="name" class="search" /></td> </tr> <tr> <td>Parole</td> <td><input type="password" name="pass" class="search" /></td> </tr> <tr> <td></td> <td><input type="submit" class="button" value="Ielogoties!" /></td> </tr> <tr> <td colspan="2" align="center"><a href="http://filmam.lv/index.php?lapa=signup">Reģistrēties</a> | <a href="http://filmam.lv/index.php?lapa=recover&action=recover">Aizmirsi paroli?</a></td> </tr> </table> </form> Edited February 5, 2010 by eT` Quote Link to comment Share on other sites More sharing options...
2easy Posted February 5, 2010 Report Share Posted February 5, 2010 paskaidro sīkāk vārdu "nestrādā" Quote Link to comment Share on other sites More sharing options...
eT` Posted February 5, 2010 Author Report Share Posted February 5, 2010 nu tātad caur IE un Chrome ievadu paroli, bet pārlādējoties lapai atkal rādās login forma. bet jārādās menu, jo ir uzlikts if(isset($_COOKIE["id"])) { //menu } else { //logins } Quote Link to comment Share on other sites More sharing options...
2easy Posted February 5, 2010 Report Share Posted February 5, 2010 (edited) mb vnk ir izslēgti cookie? EDIT: nevajag glabāt id parastajos cookie. tiklīdz tev ir sesija, tā saglabā id iekš $_SESSION['id']. tas arī nozīmēs, ka useris ir ielogojies. un tā pārbaudīt ir daudz ieteicamāk Edited February 5, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
eT` Posted February 5, 2010 Author Report Share Posted February 5, 2010 (edited) Cookies ir ieslēgti. :( EDIT: pārliku, ka menu pārbauda sesiju un loginā pievienoju $_SESSION["user"] = $idl; uz FF strādā bet uz IE un Chrome nestrādā ( nerāda menu pēc ielogošanās ) EDIT2: mēģināju caur IE reģistrēt jaunu useri un ielogoties. viss izdevās. varbūt vaina bija tur, ka mēģin''aju ielogoties vienā acc no 2 pārlūkiem ( vienā iepriekš izlogojoties ) Edited February 5, 2010 by eT` Quote Link to comment Share on other sites More sharing options...
2easy Posted February 5, 2010 Report Share Posted February 5, 2010 (edited) anyway testē atsevišķi cookie uz tiem browseriem, kur kkas neiet, kamēr tiec skaidrībā, kas tur strādā un kas nestrādā. priekš debug var uztaisīt vnkāršāku piemēru bez pilnas login funkcionalitātes. tb testēt pa daļām taču labāk izmantot $_SESSION, jo pēc session_start() starp klientu un serveri jau pastāvīgi ceļo kūkijs "session id" (nosaukumi var būt ļoti dažādi), pēc kura arī tiek atpazīts konkrētais useris. tāpēc tiklīdz tur pieglabā arī $_SESSINO['id'] (šī info visu laiku glabājas tikai uz servera. apkārt ceļo tikai automātiski uzģenerētais "session id") tad ir arī skaidrs, ka šis useris ir ielogojies un var rādīt menu EDIT: neizalsīju tavus EDITus :D hmm, pamēģini nodzēst cache & cookies visiem browseriem un "liec jaunu bildi iekšā" ;) ja vēl nesanāk, tad testē atsevišķi, kā posta sākumā teicu kā arī debugam noder print_r($_COOKIE); print_r($_SESSION); Edited February 5, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
eT` Posted February 5, 2010 Author Report Share Posted February 5, 2010 jāmm es arī izdomāju, ka sesijas labāk :) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.