Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problem z logowaniem, Proste logowanie - skomplikowany problem
specialized
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 17.11.2007

Ostrzeżenie: (0%)
-----


  1. <?php
  2. if (isset($_POST['submit'])) {
  3. require_once('mysql_connect.php');
  4.  
  5. function escape_data ($data) {
  6. global $dbh;
  7. if (ini_get('magic_quotes_gpc')) {
  8. $data = stripslashes($data);
  9. }
  10. return mysql_real_escape_string($data, $dbh);
  11. }
  12.  
  13. $message = NULL;
  14.  
  15. if (strlen($_POST['username']) == 0) {
  16. $u = FALSE;
  17. $message .= '<p>Wprowadz nazwe uzytkownika</p>';
  18. } else {
  19. $u = escape_data ($_POST['username']);
  20. }
  21.  
  22. if (strlen($_POST['password']) == 0) {
  23. $p = FALSE;
  24. $message .= '<p>Nie podales hasla !</p>';
  25. } else {
  26. $p = escape_data ($_POST['password']);
  27. }
  28.  //Podejrzewam że problem zaczyna się tutaj, ale tylko podejrzewam
  29. if (isset($u) && isset($p)) {
  30. $query = "SELECT user_id, first_name FROM users WHERE username='$u' && password=PASSWORD('$p')";
  31. $result = mysql_query ($query);
  32. $row = mysql_fetch_array ($result, MYSQL_NUM);
  33.  
  34. if (isset($row)) {
  35. setcookie ('first_name', $row[1]);
  36. setcookie ('user_id', $row[0]);
  37. header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/zalogowany.php");
  38. exit();
  39. } else {
  40. $message .= '<p>Wprowadzona przez Ciebie nazwa uzytkownika i haslo nie sa poprawne</p>';
  41. }
  42. } else {
  43. //Empty
  44. }
  45. }
  46.  
  47. $page_title = 'Logowanie';
  48. include ('includes/naglowek.inc');
  49.  
  50. if (isset($message)) {
  51. echo $message;
  52. }
  53. ?>
  54.  
  55. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  56. <fieldset><legend>Zaloguj sie</legend>
  57. <p><b>Nick:</b> <input type="text" name="username" size="15" maxlength="20"
  58. value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" /></p>
  59.  
  60. <p><b>Haslo:</b> <input type="password" name="password" size="15" maxlength="64" /></p>
  61.  
  62. <div align="center"><input type="submit" name="submit" value="Zaloguj sie" /></div>
  63.  
  64. </fieldset>
  65. </form>
  66.  
  67. <?php 
  68. include ('includes/stopka.inc');
  69. ?>


i jeszcze plik zalogowany.php

  1. <?php 
  2. if (isset($_COOKIE['first_name'])) {
  3. header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/index.php");
  4. exit();
  5. }
  6.  
  7. $page_title = 'Zalogowany !';
  8. include ('includes/naglowek.inc');
  9.  
  10. echo "<p>{$_COOKIE['first_name']} jestes zalogowany !</p>";
  11.  
  12. include ('includes/stopka.inc');
  13. ?>



Nie mam pojęcia co tutaj może być nie tak, siedziałem nad tym 2 godziny i nic nie wymyśliłem.
Problem polega na tym, że po wprowadzeniu poprawnego hasła i loginu zostaje przekierowany na index.php, ale nie ma tam wyświetlanego żadnego cookie, natomiast gdy nic nie wprowadzę w pola użytkownik i hasło zostaje przekierowany na zalogowany.php i wyświetla się tam "jestes zalogowany !"

PS: Plik requirowany (mysql_connect.php) na pewno jest poprawny, a pliki includowane naglowek.inc i stopka.inc zawierają sam html, więc nie wpływają na działanie skryptu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
dadexix
post
Post #2





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


wstaw to zamiast lini od 15 do 36
  1. <?php
  2. if (empty($_POST['username'])) {
  3. $message .= '<p>Wprowadz nazwe uzytkownika</p>';
  4. } else {
  5. $u = $_POST['username'];
  6. }
  7.  
  8. if (empty($_POST['password'])) {
  9. $message .= '<p>Nie podales hasla !</p>';
  10. } else {
  11. $p = $_POST['password'];
  12. }
  13.  //Podejrzewam że problem zaczyna się tutaj, ale tylko podejrzewam
  14. if (isset($u) && isset($p)) {
  15. $query = "SELECT user_id, first_name, username FROM users WHERE username='$u' && password=PASSWORD('$p')";
  16. $result = mysql_query ($query);
  17. $row = mysql_fetch_array ($result, MYSQL_NUM);
  18.  
  19. if ($row[2] = $u) {
  20. setcookie ('first_name', $row[1]);
  21. setcookie ('user_id', $row[0]);
  22. ?>


Tu było pare błędów głównie z isset np. sprawdzałeś "isset($row);" ale row zawsze jest zdefiniowane...(będzie puste ale będzie) i potem zawsze przekierowywuje do zalogowany.php(bo row zawsze jest zdefiniowane)... potem zalogowany.php jeśli wpiszesz good hasło przekierowywuje do index.php(wtedy co je wpisujesz) a jeśli wpiszesz złe hasło to skrypt pokaze że jesteś zalogowany(bo co innego :?: ) ale nie przekieruje(bo cookie jest puste)

Również miałeś błąd - sprawdzałeś czy $u jest zdefiniowane ale nawet jeśli będzie puste pole to $u będzie zdefiniowane - będzi miał wartość FALSE ale zawsze jakaś jest to wartość.... tak samo z p


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
specialized
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 17.11.2007

Ostrzeżenie: (0%)
-----


a jeśli wpiszesz złe hasło to skrypt pokaze że jesteś zalogowany(bo co innego :?: )

Chyba to powinien to wyświetlić :
<?} else {
$message .= '<p>Wprowadzona przez Ciebie nazwa uzytkownika i haslo nie sa poprawne</p>';
}?>

A ten skrypt nie powinien przekierować (po wprowadzeniu poprawnego hasła i usera) na index.php i tam wyświetlić:
<?
echo "<p>{$_COOKIE['first_name']} jestes zalogowany !</p>"; ?
?>

PS: Jest tam funkcja escape_data, a w tym co wkleiłeś nie wykorzystujesz jej, tzn. że nie jest ona potrzebna ?

Ten post edytował specialized 18.11.2007, 12:17:05
Go to the top of the page
+Quote Post
dadexix
post
Post #4





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


Cytat
a jeśli wpiszesz złe hasło to skrypt pokaze że jesteś zalogowany(bo co innego :?: )

Chyba to powinien to wyświetlić :
<?} else {
$message .= '<p>Wprowadzona przez Ciebie nazwa uzytkownika i haslo nie sa poprawne</p>';
}?>

Funkcja else zostaje "włączona" tylko jeśli warunek w if jest nie spełniony... a Ty miałeś zawsze spełniony warunek

Cytat
A ten skrypt nie powinien przekierować (po wprowadzeniu poprawnego hasła i usera) na index.php i tam wyświetlić:
<?
echo "<p>{$_COOKIE['first_name']} jestes zalogowany !</p>"; ?
?>

Nie.. ten skryypt przekierowywuje na zalogowany.php a zalagowany.php w mgnieniu oka przekierowywuje na index.php(nie zdąża nawet wyświetlić "jesteś zalogowany")

Cytat
PS: Jest tam funkcja escape_data, a w tym co wkleiłeś nie wykorzystujesz jej, tzn. że nie jest ona potrzebna ?

jak na moje oko nie jest potrzebna.... sprawdz bez niej najwyrzej dodasz.. tylko czemu jej nie ma w manualu php...

Ten post edytował dadexix 18.11.2007, 12:35:36


--------------------
"Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...]
Grins: mów normalnie do mnie a nie po polsku
Ja: normalnie to znaczy jak?
Grins: No w PHP... inaczej mój parser ledwo kuma:)
Go to the top of the page
+Quote Post
specialized
post
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 17.11.2007

Ostrzeżenie: (0%)
-----


Cytat
jak na moje oko nie jest potrzebna.... sprawdz bez niej najwyrzej dodasz.. tylko czemu jej nie ma w manualu php...


I cytat książki
Cytat
Funkcja escape_data() pobiera daną informacje , przepuszcza ją przez funkcję mysql_real_escape_string() i zwraca wynik . Jeżeli dane przeszły już przez mechanizm Magic Quotes (jeżeli ini_get('magic_quotes_gpc') ma wartość TRUE), najpierw są z nich usuwane ukośniki , tak aby w końcowym łańcuchu nie było ich za dużo.


A w manualu php tej funkcji nie będzie na pewno, ponieważ tworzę ją sam.

Z resztą nie ważne i tak pewnie przyszłości nie będzie mi potrzebna ta funkcja.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:52