Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Ankieta i cookies
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam, mam problem, otóż wplotłem w swój skrypt inny skrypt.
Nie wiem czy jest wszystko dobrze.
Prosiłbym o sprawdzenie i poprawienie jak można, bądź powiedzenie co jest źle, z góry bardzo dziękuję.

Oto skrypt:
ankieta.php
  1. <?php
  2.  
  3. include("config.php");
  4. mysql_query('SET CHARSET LATIN2');
  5.  
  6. $query = mysql_query ("SELECT * FROM ankieta_pytanie;");
  7. while ($row = mysql_fetch_array ($query)) {
  8. echo '<tr><td background="data/r2.gif"><table width="85%" border="0" align="center" cellpadding="2" cellspacing="2"><tr><td align="center" class="tekst3"><strong>'.$row[1].'</strong></td></tr>';
  9. }
  10.  
  11.  
  12. $query = mysql_query ("SELECT * FROM ankieta ORDER by id;");
  13. echo '<form action="zaglosuj.php" method="get" target="okienko">';
  14. while ($row = mysql_fetch_array ($query)) {
  15. echo '<tr><td><table width="85%" border="0" align="center" cellpadding="2" cellspacing="2"><tr><td width="21%" align="center"><input type="radio" name="odp" value="'.$row[1].'"></td><td width="79%" class="tekst4">'.$row[1].'</td></tr></table></td></tr>';
  16. }
  17.  
  18. echo "<tr><td align="center"><button type="submit" onclick="okienko()">OK</button></td></table></td></tr></form>";
  19.  
  20. ?>


zaglosuj.php
  1. <html>
  2. <head>
  3. <?php 
  4. include("config.php");
  5. $query = mysql_query ("SELECT * FROM config;");
  6. $row = mysql_fetch_array ($query);
  7. echo '<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  8. <meta http-equiv="Content-Language" content="pl">
  9. <meta name="keywords" content="'.$row[2].'">
  10. <meta name="description" content="'.$row[3].'">
  11. <meta name="reply-to" content="'.$row[4].'">
  12.  <title>'.$row[1].'</title>
  13.  <link rel="stylesheet" href="data/style.css" type="text/css">';
  14. ?>
  15. </head>
  16.  
  17. <body background="data/tlo.gif">
  18.  
  19.  
  20. <?php
  21.  
  22. include("config.php");
  23. mysql_query('SET CHARSET LATIN2');
  24.  
  25. $key="ankieta".$_GET['odp'];
  26.  
  27. if(isset($_COOKIE[$key]))
  28. {
  29. $komunikat = "<strong><span class="tekst2">Nie możesz głosować 2 razy w tej samą ankietę !!<br /><br />(w przeciągu 24 godzin)</span></strong>";
  30. }
  31. else
  32. {
  33.  
  34. if ($odp) {
  35. $odp = $_GET['odp'];
  36. $query = "UPDATE ankieta SET glosy=glosy+1 WHERE name='$odp';";
  37. $wynik = mysql_query ($query);
  38. echo '<table align="center" valign="middle"><tr><td><center><br><br><br><br><br><br><br><br><br><br><strong><span class="tekst2">Głos oddano poprawnie!</strong></span></center></td></tr></table>';
  39. }
  40.  
  41.  
  42.  
  43. $name = "ankieta".$_GET['odp'];
  44. $wartosc = "glosowano";
  45. $czas = time()+86400;
  46. $domena = "http://195.136.66.242/pilka/index.php";
  47.  
  48. setcookie($name, $wartosc, $czas, "/", $domena, 0);
  49. }
  50.  
  51. echo "$komunikat";
  52.  
  53. ?>
  54.  
  55. </body>
  56. </html>


Oto struktura bazy danych:
  1. --
  2. -- Struktura tabeli dla `ankieta`
  3. --
  4.  
  5. CREATE TABLE `ankieta` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `name` text NOT NULL,
  8. `question_id` int(11) NOT NULL,
  9. `glosy` int(11) NOT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


  1. --
  2. -- Struktura tabeli dla `ankieta_pytanie`
  3. --
  4.  
  5. CREATE TABLE `ankieta_pytanie` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `question` text NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


Z góry dziękuje za poprawienie smile.gif


EDIT:
Taki error mi wywala:
Kod
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\pilka\zaglosuj.php:3) in C:\AppServ\www\pilka\zaglosuj.php on line 48
kossa
cookies musisz przekazywać na początku strony, nim cokoliwek zostanie przesłane do przeglądarki, stąd ten błąd

Łukasz
in5ane
no i umiescilem to w tym pierwszym pliku prezd przeslaniem i lipa :/ nadal jest ten blad
kossa
Cytat
$name = "ankieta".$_GET['odp'];
$wartosc = "glosowano";
$czas = time()+86400;
$domena = "http://195.136.66.242/pilka/index.php";

setcookie($name, $wartosc, $czas, "/", $domena, 0);


to Twój kod i on odpowiada za wysłanie cookie - to musi być na początku

Łukasz
in5ane
no i wzialem to na poczatek i nadal jest
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\pilka\zaglosuj.php:3) in C:\AppServ\www\pilka\zaglosuj.php on line 22
PiratNowegoPokolenia
Cytat
<html>
<head>
<?php
include("config.php");
$query = mysql_query ("SELECT * FROM config;");

wysłałeś dane już z <html><head> ... Jeszcze przed tym to musisz dać
in5ane
aha. no i nie ma juz bledy ale jak teraz zrobic zeby to blokowalo?

teraz ten skrypt wyglada tak:
  1. <?php ob_start(); 
  2. setcookie('ankieta', '$odp', time()+86400, '/', '195.136.66.242/pilka/', '0');
  3. ?>
  4.  
  5. <html>
  6. <head>
  7. <?php 
  8. include("config.php");
  9. $query = mysql_query ("SELECT * FROM config;");
  10. $row = mysql_fetch_array ($query);
  11. echo '<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  12. <meta http-equiv="Content-Language" content="pl">
  13. <meta name="keywords" content="'.$row[2].'">
  14. <meta name="description" content="'.$row[3].'">
  15. <meta name="reply-to" content="'.$row[4].'">
  16.  <title>'.$row[1].'</title>
  17.  <link rel="stylesheet" href="data/style.css" type="text/css">';
  18. ?>
  19. </head>
  20.  
  21. <body background="data/tlo.gif">
  22.  
  23.  
  24. <?php
  25.  
  26. include("config.php");
  27. mysql_query('SET CHARSET LATIN2');
  28.  
  29. if(isset($_COOKIE[ankieta]))
  30. {
  31. echo '<strong><span class="tekst2">Nie możesz głosować 2 razy w tej samą ankietę !!<br><br>(w przeciągu 24 godzin)</span></strong>';
  32. } else {
  33. $odp = $_GET['odp'];
  34. $query = "UPDATE ankieta SET glosy=glosy+1 WHERE name='$odp';";
  35. $wynik = mysql_query ($query);
  36. echo '<table align="center" valign="middle"><tr><td><center><br><br><br><br><br><br><br><br><br><br><strong><span class="tekst2">Głos oddano poprawnie!</strong></span></center></td></tr></table>';
  37. }
  38.  
  39.  
  40. ?>
  41.  
  42. </body>
  43. </html>
  44. <?php ob_end_flush(); ?>
PiratNowegoPokolenia
setcookie() nie dawaj na początku tylko po zapisaniu głosu ... no i sprawdzaj wogóle czy query został poprawnie wykonany ( nie wykluczaj możliwości że takiego głosu nie ma w formularzu ...
Cytat
aha. no i nie ma juz bledy ale jak teraz zrobic zeby to blokowalo?

przecież ci to już blokuje możliwość głosowania
in5ane
no i dalem to po dodaniu glosu, w tym else ale i tak nadal moge glosowac ile chce.
Kicok
Bo źle to ciastko wysyłasz:
  1. <?php
  2. setcookie('ankieta', $odp, time()+86400, '/pilka/', '195.136.66.242');
  3. ?>

W ogóle z dwóch ostatnich parametrów możesz zrezygnować.


setcookie" title="Zobacz w manualu PHP" target="_manual
in5ane
jeeeest smile.gif

teraz dziala, dziekuje smile.gif
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.