Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Umieszczanie cookie, dlaczego nie działa?
Tomek58
post 12.10.2008, 19:51:51
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


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.


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
Maxik
post 12.10.2008, 19:58:04
Post #2





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


Muszi być przed wszystkim, daj sobie jakiegoś hiddena, na początku sprawdzaj czy ustawiony i wtedy ustawiaj ciacho.


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
Tomek58
post 12.10.2008, 20:05:20
Post #3





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


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


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
Maxik
post 12.10.2008, 20:06:24
Post #4





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


Wyświetlałeś coś przed ustawieniem ciastka.


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
Tomek58
post 12.10.2008, 20:12:58
Post #5





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


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ł.

Ten post edytował Tomek58 12.10.2008, 20:15:32


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
Maxik
post 12.10.2008, 20:15:37
Post #6





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


$_POST['login'] zamiast $_POST[login]


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
Tomek58
post 12.10.2008, 20:19:27
Post #7





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


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.


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

Go to the top of the page
+Quote Post
nexis
post 12.10.2008, 20:38:47
Post #8





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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>


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
_VBService_
post 12.10.2008, 21:36:40
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 2
Dołączył: 12.10.2008

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


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

Ten post edytował _VBService_ 12.10.2008, 22:04:15


--------------------
Ja sem dočasně nepřítomný! Být či nebýt? Toto je otázka!
Go to the top of the page
+Quote Post
Ociu
post 12.10.2008, 22:25:09
Post #10





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




@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.
Go to the top of the page
+Quote Post
Tomek58
post 15.10.2008, 15:55:16
Post #11





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 30.08.2007

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


Dzięki! Opcja _VBService_ zadziałała.

PS. Ociu ok smile.gif. Temat do zamknięcia.


--------------------
Procesor: 2,4 GHz
Dysk: 180 GB
Ramy: 1538 MB
Grafika: GeForce 256 MB

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 Wersja Lo-Fi Aktualny czas: 15.06.2025 - 09:51