Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem chyba z ciasteczkami
Forum PHP.pl > Forum > Przedszkole
Gamoń
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.
Sephirus
Funkcja setcookie przyjmuje nieco więcej parametrów - zapoznaj się z nią smile.gif

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


pobieram parametry first name i $row ?
czy to masz na myśli ?
Sephirus
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())
camikazee
Chodzi mu o czas życia ciastka, czyli trzeci parametr. Jeżeli go nie określisz, ciastko ginie po zamknięciu przeglądarki.
Gamoń
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.
Sephirus
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.
Gamoń
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');
?>
camikazee
Tą małpę usunąłeś => "@mysql_query ($query);"?
Druga sprawa wklej zapytanie do PHPMYADMINa.
Gamoń
Dzięki camikazee za opd. Zwraca zero rekordów nie rozumiem czemu.
camikazee
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')"?
Gamoń
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
camikazee
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.
Gamoń
No zakodowane hasło w bazie to ciąg liter i cyfr moje hasło to "1" jak je można porównać ?
camikazee
W phpMyAdminie w SQL wpisujesz po prostu "SELECT PASSWORD('1');" Powinno zwrócić zakodowane hasło w postaci "*E6CC90B878B948C35E92B003C792C46C58C4AF40", porównaj je.
Gamoń
To dziwne bo cokolwiek bym nie wpisał w SELECT PASSWORD(''); zawsze pisze 0 rekordów i podaje zakodowane hasło.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.