Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Umieszczanie cookie, dlaczego nie działa?
Forum PHP.pl > Forum > Przedszkole
Tomek58
Witam!
Głowię się nad tym już dłuższy czas i nie mogę rozwiązać tego problemu. Mam skrypt z formularzem, który powinien zapisać po wysłaniu formularza cookie, lecz wyskakuje błąd.

Oto kod skryptu:
Cytat
<?PHP
if(!isset($_POST['login'])) {
echo "<CENTER><form action=\"index.php\" method=\"post\">
Login: <input type=\"text\" name=\"login\" size=\"20\" style=\"border-style: groove; border-color: #FFFFFF\" />
<BR>Hasło: <input type=\"password\" name=\"haslo\" size=\"20\" style=\"border-style: groove; border-color: #FFFFFF\" /></br>
<BR><BR><input type=\"submit\" value=\"Zaloguj\" style=\"border-style: groove; border-color: #FFFFFF\" />
</form></CENTER>"; }
elseif ($login2 === $login & $haslo2 === $haslo) {
setcookie("tomek58", $_POST[login], time() + 10 * 60);
echo 'Zalogowany'; }

?>


A to błąd:
Cytat
Warning: Cannot modify header information - headers already sent by (output started at D:\Serwer\index.php:17) in D:\Serwer\index.php on line 51


Czytałem gdzieś że cookie ma być wysłane przed wszystkimi innymi danymi, które zostają wysłane do przeglądarki, ale w ten sposób nie da się zrobić systemu logowania opartego o cookie. Chcę aby po wysłaniu formularza zapisało sie ciasteczko z nazwą wprowadzonego loginu.
Maxik
Muszi być przed wszystkim, daj sobie jakiegoś hiddena, na początku sprawdzaj czy ustawiony i wtedy ustawiaj ciacho.
Tomek58
Więc dodałem hiddena:

Cytat
<?PHP
if(!isset($_POST['login'])) {
echo "<CENTER><form action=\"index.php\" method=\"post\">
Login: <input type=\"text\" name=\"login\" size=\"20\" style=\"border-style: groove; border-color: #FFFFFF\" />
<BR>Hasło: <input type=\"password\" name=\"haslo\" size=\"20\" style=\"border-style: groove; border-color: #FFFFFF\" /></br>
<BR><input type=\"hidden\" name=\"tak\" value=\"tak\" />
<BR><BR><input type=\"submit\" value=\"Zaloguj\" style=\"border-style: groove; border-color: #FFFFFF\" />
</form></CENTER>"; }

elseif ($login2 === $login & $haslo2 === $haslo) {
echo 'Zalogowany'; }

if ($_POST['login'] != 0) {
setcookie("tomek58", $_POST[login], time() + 10 * 60); }

?>


I wydaje mi się że wysłało ciastko, bo nie wyskoczył błąd. Więc w czym tkwił wcześniejszy problem? blinksmiley.gif
Maxik
Wyświetlałeś coś przed ustawieniem ciastka.
Tomek58
Jednak nadal nie działa :/ Błąd się nie pokazywał, ponieważ nie był spełniony warunek: if ($_POST['login'] != 0)

Gdy go zmieniłem na: if (0 === 0), czyli warunek był spełniony błąd znowu się pokazał.
Maxik
$_POST['login'] zamiast $_POST[login]
Tomek58
No tak, powinny być '', ale nie w tym tkwi błąd, bo jeśli zmienię tą zmienną na zwykły tekst, to także wyskakuje błąd sad.gif.
nexis
Staraj się używać poprawnego kodu XHTML oraz kolorować składnię na forum, aby inni chętniej czytali twoje posty. Ponadto warto korzystać z sesji i na przykład takiego rozwiązania:
  1. <?php
  2. if (isset($_POST['user'], $_POST['pass'])) {
  3.   if ($_POST['user'] == 'abc' && $_POST['pass'] == 'def') {
  4.      $_SESSION['user'] = $_POST['user'];
  5.      header('location:' . $_SERVER['PHP_SELF']);
  6.      exit;
  7.   }
  8. }
  9. ?>
  10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  11. <html>
  12.   <head>
  13.      <meta http-equiv="content-type" content="text/html; charset=utf-8">
  14.      <title>Logowanie</title>
  15.   </head>
  16.   <body>
  17.      <div id="logowanie">
  18. <?php
  19. if (isset($_SESSION['user'])) {
  20.   echo 'Zalogowany jako: ' . $_SESSION['user'];
  21. } else {
  22. ?>
  23.         <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
  24.            <dl>
  25.               <dt>Nazwa użytkownika:</dt>
  26.               <dd><input type="text" name="user" /></dd>
  27.               <dt>Hasło:</dt>
  28.               <dd><input type="password" name="pass" /></dd>
  29.               <dd><input type="submit" value="zaloguj" /></dd>
  30.            </dl>
  31.         </form>
  32. <?php } ?>
  33.      </div>
  34.   </body>
  35. </html>
_VBService_
Aby uniknąć błędu :
Cytat
Warning: Cannot modify header information - headers already sent by (output started at D:\Serwer\index.php:xx) in D:\Serwer\index.php on line xx


używaj funkcji php do buforowania wyjścia strony, służy do tego plecenie ob_start i ob_end_flush np:

Kod
<?php
ob_start();
session_start();

... twój kod np : ....
require_once('class/login.class.php');

.....

echo 'Cos tam';

ob_end_flush();
?>


uważaj też jak u używasz edytora do pisania kodu php (ja korzystam z Notepad++ v5.0.3), który zapisuje pliki w kodowaniu UTF-8 ustaw sobie zapis plików wtedy na
UTF-8 bez BOM thumbsupsmileyanim.gif
Ociu
@Tomek58: Zacznij używać odpowiedniego bbCode i popraw swoje posty.Zamiast używać znacznika php używasz cytatów.... Następne takie posty skończą się to ostrzeżeniem.
Tomek58
Dzięki! Opcja _VBService_ zadziałała.

PS. Ociu ok smile.gif. Temat do zamknięcia.
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.