Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem chyba z ciasteczkami
Gamoń
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


Witam, mam taki kod:

Kod
  if ($u && $p)
  {
  $query = "SELECT user_id, first_name FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  $result = @mysql_query ($query);
  $row = mysql_fetch_array ($result, MYSQL_NUM);
  
    if ($row)
    {
    setcookie ('first_name', $row[1]);
    setcookie ('user_id', $row[0]);
    header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/zalogowany.php");
    exit();
    }
    else
    {
    $message = 'Wprowadzona przez ciebie nazwa użytkownika i hasło nie zgadzają się z naszymi danymi';
    }


Co jest z nim źle że nie pobiera mi cisteczek podczas logowania i wyskakuje "suchy" komunikat o nieistniejących danych
które są pwrowadzone do bazy.
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Funkcja setcookie przyjmuje nieco więcej parametrów - zapoznaj się z nią smile.gif

setcookie


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Gamoń
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


Cześć, to zrobiłęm zgdonie z przykładem
Kod
setcookie("TestCookie", $value);


pobieram parametry first name i $row ?
czy to masz na myśli ?
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Proponuje dodać ważność ciasteczek oraz ścieżkę:

  1. setcookie("TestCookie", $value, time()+600, '/');


3 argument to czas życia ciasteczka w sekundach od 1970 roku... jeśli tego nie ustawiasz to cookie będzie zapisane do zamknięcia przeglądarki ale to może nie działać wszędzie dobrze - lepiej podac jakiś czas - ja podałem na przykład 10 minut.

4 argument to ścieżka - jeśli chcesz mieć globalnie ciasteczko na całej stronie (a w tym przypadku chyba raczej tak) to daj na główny folder czyli '/'.

EDIT: Pokaż jeszcze kod gdzie odczytujesz dane z ciasteczek

A w ogóle to lepiej uruchomić sesje i korzystać z sesji do trzymania info o zalogowanym userze (zapoznaj się z $_SESSION i session_start())

Ten post edytował Sephirus 28.03.2012, 08:20:21


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
camikazee
post
Post #5





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


Chodzi mu o czas życia ciastka, czyli trzeci parametr. Jeżeli go nie określisz, ciastko ginie po zamknięciu przeglądarki.


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
Gamoń
post
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


Dziękuje, ale to nie pomogło problem chyba polega na tym że nie pobiera mi wartości z bazy o które prosze w poleceniu SQL
dlatego wyrażenie warunkowe podaje mi komunikat że nie wpisałem nic w pola wejściowe.
A dane które chcę pobrać są w bazie więc nie wiem.
Go to the top of the page
+Quote Post
Sephirus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


A no to trzeba było tak od razu...

Przede wszystkim zamiast:

  1. $result = @mysql_query ($query);


Daj:

  1. $result = mysql_query ($query);
  2. if(!$result) die(mysql_error());


i zobacz co Ci wyświetla.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Gamoń
post
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


Nic, ta sama reakcja pozwole sobie wrzucić cały kod może dojrzysz coś czego ja nie widze.

Kod
<?php
  if (isset($_POST['submit']))
  {
  require_once ('../mysql_connect.php');
  function escape_data($data)
  {
    global $dbc;
    if (ini_get('magic_quotes_gpc'))
    {
    $data = stripslashes($data);
    }
    return mysql_real_escape_string($data, $dbc);
  }
  $message = NULL;
  if (empty($_POST['username']))
  {
  $u = FALSE;
  $message .= 'Zapomniałeś wpisać swój nick';
  }
  else
  {
  $u = escape_data($_POST['username']);
  }
  if (empty($_POST['password']))
  {
  $p = FALSE;
  $message .= 'Zapomniałeś wprowadzić hasło';
  }
  else
  {
  $p = escape_data($_POST['password']);
  }
  if ($u && $p)
  {
  $query = "SELECT user_id, first_name FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  $result = @mysql_query ($query);
  $row = mysql_fetch_array ($result, MYSQL_NUM);
  
    if ($row)
    {
    setcookie ('first_name', $row[1], time()+600, '/');
    setcookie ('user_id', $row[0], time()+600, '/');
    header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/zalogowany.php");
    exit();
    }
    else
    {
    $message = 'Wprowadzona przez ciebie nazwa użytkownika i hasło nie zgadzają się z naszymi danymi';
    }
  mysql_close();
  }
  else
  {
  $message .= 'Błąd! Spróbuj jeszcze raz';
  }
  }
  $page_title = 'Logowanie';
  include ('./s/g.inc');
  if (isset($message))
  {
  echo $message;
  }
?>
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <fieldset>
    <legend> Wprowadz dane : </legend>
    Nazwa użytkownika : <input type="text name="username" size="10" maxlength="20" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" />
    Hasło : <input type="password" name="password" size="20" maxlength="20" />
  </fieldset>
  <div align="left"><input type="submit" name="submit" value="Zaloguj" /></div>
  </form>
<?php
  include ('./s/d.inc');
?>


Ten post edytował Gamoń 28.03.2012, 09:10:33
Go to the top of the page
+Quote Post
camikazee
post
Post #9





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


Tą małpę usunąłeś => "@mysql_query ($query);"?
Druga sprawa wklej zapytanie do PHPMYADMINa.


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
Gamoń
post
Post #10





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


Dzięki camikazee za opd. Zwraca zero rekordów nie rozumiem czemu.
Go to the top of the page
+Quote Post
camikazee
post
Post #11





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


Zwraca 0, bo dane wejściowe nie zostają znalezione. Na moje powinno być:
  1. "SELECT user_id, first_name FROM users WHERE username='".$u."' AND password=PASSWORD(".$p.")";


Ale w zapytaniu w phpMyAdminie podstawiasz oczywiście w takiej formie "SELECT user_id, first_name FROM users WHERE username='nazwa_usera' AND password=PASSWORD('moje_haslo')"?


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
Gamoń
post
Post #12





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


Tak w myadminie podaje wartości nie zmienne ale daje zwraca 0 rekordów
nazwy kolumn się zgadzają wartości są wprowadzone więc nie wiem
Go to the top of the page
+Quote Post
camikazee
post
Post #13





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


A hasło w bazie jest zakodowanym odpowiednikiem hasła, które podajesz i czy porównywałeś jak wygląda hasło po zakodowaniu. Tak by wykluczyć, że nie są różne.


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
Gamoń
post
Post #14





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


No zakodowane hasło w bazie to ciąg liter i cyfr moje hasło to "1" jak je można porównać ?
Go to the top of the page
+Quote Post
camikazee
post
Post #15





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

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


W phpMyAdminie w SQL wpisujesz po prostu "SELECT PASSWORD('1');" Powinno zwrócić zakodowane hasło w postaci "*E6CC90B878B948C35E92B003C792C46C58C4AF40", porównaj je.


--------------------
www.fachoweuslugi.pl | www.zlec-usluge.pl | www.pokazsie.pl
Go to the top of the page
+Quote Post
Gamoń
post
Post #16





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 23.03.2012

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


To dziwne bo cokolwiek bym nie wpisał w SELECT PASSWORD(''); zawsze pisze 0 rekordów i podaje zakodowane hasło.

Ten post edytował Gamoń 28.03.2012, 10:28:00
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: 20.08.2025 - 13:49