Toon posts:

[php] poll, cookie setten lukt niet...?!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik ben een poll aan het schrijven in php/mySQL, maare ik kom er niet helemaal uit.

het is de bedoeling de poll te laten zien en als geen cookie isset ook de radio button om te voten.
Maare headers allready send out geven me zware tijd!
Gaat om setcookie in if status, die geeft header problemen...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
 
if ($HTTP_POST_VARS["vote"]){ 
  $sql="Update poll SET votes=(votes+1) WHERE id='$vote'"; 
  mysql_query($sql) or die (mysql_error()); 
  setcookie("$cookie","true",time()+3600);//uurtje... 
  write_poll("n"); 
  } 
else{ 
   if (!Isset($HTTP_COOKIE_VARS["$cookie"])){ 
       write_poll("y"); 
   } 
   else { 
       write_poll("n"); 
   } 
} 
?>



Write_poll($action); functie zit het volgende in om select wel of niet weer te geven:
PHP:
1
2
3
4
5
<?
  if ($action == "y"){ 
echo "<input type=radio name=\"vote\" value=\"$u\" onClick=\"this.form.submit()\">"; 
  } 
?>



Nu doettie het al goed, maare hij geeft nog wel een header error op dat cookie in de if! En set deze ook niet...

Iemand oplossing!????? :r

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

je hebt uitvoer voor je het eea wegschrijft
dat zegt die error

Doet iets met Cloud (MS/IBM)


  • Nielsz
  • Registratie: Maart 2001
  • Niet online
:r :)
Heb je geen lege enters voor je <?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Lezen wat er staat!

Er is al output gestuurd naar de browser, dus de headers zijn al verstuurd. Dus je kan geen headers (cookies oa) meer toevoegen.

mogelijke oplossingen:
- Cookie eerder setten
- Output cachen. www.php.net/ob_start
- Output later naar het scherm toe gooien

Programmer - an organism that turns coffee into software.


Verwijderd

Lezen wat er staat!

Er is al output gestuurd naar de browser, dus de headers zijn al verstuurd.
Ja maar de vraag is WAAR!

heb je includefiles?? die hebben bij nog al eens dergelijke fouten veroorzaakt: dat er nog iets staat na ?> (php afsluiten) in je includefile ofzo

  • Martijn02
  • Registratie: September 2000
  • Laatst online: 15-09 14:25

Martijn02

/* No Comment */

Op donderdag 24 januari 2002 14:37 schreef LuCarD het volgende:
Lezen wat er staat!

Er is al output gestuurd naar de browser, dus de headers zijn al verstuurd. Dus je kan geen headers (cookies oa) meer toevoegen.

mogelijke oplossingen:
- Cookie eerder setten
- Output cachen. www.php.net/ob_start
- Output later naar het scherm toe gooien
IMHO komen de eerste en de laatste oplossing op hetzelfde neer :)

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op donderdag 24 januari 2002 14:41 schreef Martijn02 het volgende:

[..]

IMHO komen de eerste en de laatste oplossing op hetzelfde neer :)
ermmmm.... Ach het is maar hoe je er naar kijkt.... :o

Liever iets te veel gezegd dan te weinig... :+

Programmer - an organism that turns coffee into software.


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op donderdag 24 januari 2002 14:40 schreef Maentor het volgende:

[..]

Ja maar de vraag is WAAR!

heb je includefiles?? die hebben bij nog al eens dergelijke fouten veroorzaakt: dat er nog iets staat na ?> (php afsluiten) in je includefile ofzo
Staat er ook bij :) in dezelfde error melding! :)

En hoe moeten wij nou weten hoe zijn scripts werken???

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
jajaja,

Kweet heus wel wat headers allready send out betekent!
Kvroeg me alleen af of iemand een oplossing heeft.

Dus het zo scrijven dat er geen problemen komen...

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op donderdag 24 januari 2002 14:41 schreef Martijn02 het volgende:

[..]

IMHO komen de eerste en de laatste oplossing op hetzelfde neer :)
Volgens mij de tweed ook wel :)

Verwijderd

Topicstarter
hmmm leuke functies,

Kheb het ff gelezen, maare deze functies had ik nog nooit van gehoord! Kan iemand me misschien wat concreter uitleggen hoe ik deze kan toepassen in imjn poll?

Verwijderd

Topicstarter
Hmm2...

kheb nog ff gekeken naar voorbeeld en rest op php.net,

Maare ik begrijp het niet helemaal hoor, kan iemand mij nog verder helpen?

de verbinding met mySQL wordt gemaakt in het bestand waarin poll wordt geinclude!

Kweet dat het een beetje rommelig geschreven is!

Wie o wie helpt mij, alvast bedankt voor de replies!

source:
PHP:
1
2
3
<?
//dan niet....
?>

Verwijderd

Topicstarter
Ksnap het nog niet helemaal hoor, maare ik heb er ff dit van gemaakt?

Misschien kunnen jullie me nog een beetje in de richting helpen...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
function callback($buffer) {
$vote_on ="<tr><td class=\"polltext\" align=\"center\" width=\"32\"><input type=\"radio\" name=\"vote\" value=\"1\" onClick=\"this.form.submit()\"></td></tr>";
$vote_off="<tr></tr>";

 //replace vote_on with vote_off
 return (ereg_replace("$vote_on", "$vote_off", $buffer));
}
ob_start("callback");
//this the buffer!

write_poll();

ob_end_flush();
?>

  • intoxicated
  • Registratie: Januari 2001
  • Niet online

intoxicated

Haaaai :w | ALT-S

Op donderdag 24 januari 2002 14:33 schreef loaded het volgende:
Write_poll($action); functie zit het volgende in om select wel of niet weer te geven:
PHP:
1
2
3
4
5
<?
  if ($action == "y"){ 
echo "<input type=radio name=\"vote\" value=\"$u\" onClick=\"this.form.submit()\">"; 
  } 
?>
Natuurlijk is dit best een leuk script, maar houd er even rekening mee, dat het niet echt veilig is tegen mensen die moedwillig je poll willen verknallen. Je houdt er een simpel denkend scholiertje natuurlijk wel mee tegen, maar denk nou niet dat mensen die een poll echt willen verneuken constant handmatig het form gaan submitten. Check daarom ook bij het processen van de submit eventjes of je cookie toevallig al bestaat.

Edit: Of hou op je server een tabelletje bij van de IP's die al hebben gestemd, en check daar even op.

"Anyone who does not agree with me is mentally sick, and should be shot I'm afraid to say."
- Pastor Richards @ VCPR


Verwijderd

Zo moeilijk moet dit volgens mij toch niet zijn (of snap ik het helemaal verkeerd) het lijkt mij gewoon het handigste als je pas een cookie neerzet als er iets gesubmit is (dus als er gevoted is) en dan hoef je in de pagina waar de radiobuttons neer wil zetten alleen maar de variabele (dus de cookie) uit te lezen. Heeft ie een waarde, dan is er al gestemd --> nix laten zien, anders alles laten zien.
Succes

Verwijderd

Topicstarter
Op donderdag 24 januari 2002 19:31 schreef bramvrzt het volgende:

[..]

Natuurlijk is dit best een leuk script, maar houd er even rekening mee, dat het niet echt veilig is tegen mensen die moedwillig je poll willen verknallen. Je houdt er een simpel denkend scholiertje natuurlijk wel mee tegen, maar denk nou niet dat mensen die een poll echt willen verneuken constant handmatig het form gaan submitten. Check daarom ook bij het processen van de submit eventjes of je cookie toevallig al bestaat.

Edit: Of hou op je server een tabelletje bij van de IP's die al hebben gestemd, en check daar even op.
vandaar dat ik het ook met een functie heb gedaan!
function write_poll($action){
if ($action="y"){
}
}

Dit is wat anders als: poll.php?action=y hoor!
Enne hoe wil jij dan die functie manipuleren?

Maare het gaat niet om die functie maar om de vraagstelling hoe ik het zonder headers send out kan bereiken...

Verwijderd

Topicstarter
Op donderdag 24 januari 2002 19:31 schreef doniek het volgende:
Zo moeilijk moet dit volgens mij toch niet zijn (of snap ik het helemaal verkeerd) het lijkt mij gewoon het handigste als je pas een cookie neerzet als er iets gesubmit is (dus als er gevoted is) en dan hoef je in de pagina waar de radiobuttons neer wil zetten alleen maar de variabele (dus de cookie) uit te lezen. Heeft ie een waarde, dan is er al gestemd --> nix laten zien, anders alles laten zien.
Succes
Ja ik ben er al me halve dag aan kwijt, enne kheb veel moeilijkere dingen geschreven, maare ik kom er niet uit!
Als jij kan helpen hoor ik het graag!
Want ik kom er niet uit!

Verwijderd

Stap 1:
Maak de poll zodat er gestemd kan worden (dus met radiobuttons).
Stap 2:
Maak de poll zodat er niet gestemd kan worden (dus zonder radiobuttons).
Stap 3:
Kies een naam voor je cookie (neem hier even de naam: heeftGestemd).
Satp 4:
Schrijf een scriptje waarin gekeken wordt of de inhoud van de cookie gelijk is aan 1 -->
PHP:
1
2
3
4
5
6
7
8
<?
if ($heeftGestemd == 1) {
    // hier je code uit stap 2
}
else {
    // hier je code uit stap 1
}
?>

Stap 5:
Maak een php-pagina waarop de stemming wordt verwerkt, dus het updaten van de database.
Zet in deze pagina ook:
PHP:
1
2
3
<?
setCookie("heeftGestemd","1",de levensduur);
?>

Hier staat meer info over cookies
Je kunt hier bijvoorbeeld ook gelijk redirecten naar de vorige pagina, doe dit wel met javascript, anders werkt je cookie niet :) -->
code:
1
window.location="naam van je pagina";

Stap 6:
Zorg dat je formulier uit stap 1 als action de naam van de pagina uit stap 5 heeft.

Als het goed is moet het nu werken, ik hoop dat je er iets aan hebt, en als je er de ballen van snapt, dan moet je het maar laten weten, dan licht ik een stap nog wel ff verder toe.
Succes

Verwijderd

Topicstarter
Nou ik weet het echt niet meer hoor!

ik heb geprobeerd en geprobeerd, maare kwordt helemaal gek van dit ding! Misschien kunnen jullie ff kijken naar deze versie die doet het vrij aardig, maar set alleen geen cookie?!

Khoop dat iemand ff de moeite kan nemen om me te helpen!
Kweet dat het een hele lap text is... :?

Hier moet gewoon een logische oplossing voor zijn!
Maare ik zie het niet meer door de code heen...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?
//variables:
$cookie = "poll";
$css    = "style.css";
//line 10, 13 headers allready send out?!

include ("config.inc.php");
verbind();

function write_poll($action){
//totals
$query = "SELECT SUM(votes) as total FROM poll";
$rescr =mysql_query($query) or die (mysql_error());
$total = mysql_result($rescr, 0, 'total');
//poll
echo "<link href=\"$css\" rel=stylesheet type=text/css>";
echo "<form action=\"$PHP_SELF\" method=\"POST\"><table border=0 ><tr><td class=\"head\" colspan=\"3\">";
//get latest entry
$sql = "SELECT Max(id) as id FROM poll";
$resc = mysql_query($sql) or die (mysql_error());
$record = mysql_fetch_object($resc);
$maxid   = $record->id;
$sql= "Select * from poll WHERE id='$maxid'";
$resc = mysql_query($sql) or die (mysql_error());
$record = mysql_fetch_object($resc);
$session = addslashes($record->session);
$sess    = stripslashes($session);
echo "<p align=\"left\">$sess</p></td></tr>";
$sql="Select * from poll WHERE session='$session' order by ID";
  $resc = mysql_query($sql) or die (mysql_error());
    while ($record = mysql_fetch_object($resc)) {
       $q = $record->question;
       $v = $record->votes;
       $u = $record->id;
        if ($v!=0){
          $p = round(($v/$total)*100,1);
          $p = "$p %";
        }
        else {
         $p = "0%";
        }
echo "<tr><td class=\"votetext\" colspan=\"3\"><b>$q</b> (votes:$v)</td></tr><tr>";
echo "<td class=\"votetext\" align=\"center\" width=\"32\">";
  if ($action == "y"){
echo "<input type=radio name=\"vote\" value=\"$u\" onClick=\"this.form.submit()\">";
  }
echo "</td><td class=\"text\" width=\"73\"><table align=center border=0 cellspacing=0 cellpadding=1 width=\"80%\" height=\"10\"><tr>";
echo "<td class=\"votebarout\">";
echo "<table align=left border=0 cellspacing=0 cellpadding=0 width=\"$p\" height=\"100%\"><tr>";
echo "<td class=\"votebarin\">";
echo "<div class=\"votespace\">&amp;nbsp;</div></td></tr>";
echo "</table></td></tr>";
echo "</table></td><td class=\"text\">$p</td></tr>";
  }
echo "<tr><td class=\"text\" colspan=\"3\">total votes: $total</td></tr>";
echo "</table>";
echo "</form>";
}
//check if cookie is NOT set!
if(!Isset($HTTP_COOKIE_VARS["$cookie"])){
  if ($HTTP_POST_VARS["vote"]){
    $sql="Update poll SET votes=(votes+1) WHERE id='$vote'";
      mysql_query($sql) or die (mysql_error());
      setcookie("$cookie","true",time()+3600);//((3600*24)*14)); //14 days!
      ob_start(write_poll("n"));
  }
  else {
   write_poll("y");
  }
}
else {
 //if cookie IS set!
  write_poll("n");
}
?>

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op vrijdag 25 januari 2002 01:29 schreef loaded het volgende:
Nou ik weet het echt niet meer hoor!

ik heb geprobeerd en geprobeerd, maare kwordt helemaal gek van dit ding! Misschien kunnen jullie ff kijken naar deze versie die doet het vrij aardig, maar set alleen geen cookie?!

Khoop dat iemand ff de moeite kan nemen om me te helpen!
Kweet dat het een hele lap text is... :?

Hier moet gewoon een logische oplossing voor zijn!
Maare ik zie het niet meer door de code heen...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?
ob_start(); // <!--------- KIJK HIER ------!>
//variables:
$cookie = "poll";
$css    = "style.css";
//line 10, 13 headers allready send out?!

include ("config.inc.php");
verbind();

function write_poll($action){
//totals
$query = "SELECT SUM(votes) as total FROM poll";
$rescr =mysql_query($query) or die (mysql_error());
$total = mysql_result($rescr, 0, 'total');
//poll
echo "<link href=\"$css\" rel=stylesheet type=text/css>";
echo "<form action=\"$PHP_SELF\" method=\"POST\"><table border=0 ><tr><td class=\"head\" colspan=\"3\">";
//get latest entry
$sql = "SELECT Max(id) as id FROM poll";
$resc = mysql_query($sql) or die (mysql_error());
$record = mysql_fetch_object($resc);
$maxid   = $record->id;
$sql= "Select * from poll WHERE id='$maxid'";
$resc = mysql_query($sql) or die (mysql_error());
$record = mysql_fetch_object($resc);
$session = addslashes($record->session);
$sess    = stripslashes($session);
echo "<p align=\"left\">$sess</p></td></tr>";
$sql="Select * from poll WHERE session='$session' order by ID";
  $resc = mysql_query($sql) or die (mysql_error());
    while ($record = mysql_fetch_object($resc)) {
       $q = $record->question;
       $v = $record->votes;
       $u = $record->id;
        if ($v!=0){
          $p = round(($v/$total)*100,1);
          $p = "$p %";
        }
        else {
         $p = "0%";
        }
echo "<tr><td class=\"votetext\" colspan=\"3\"><b>$q</b> (votes:$v)</td></tr><tr>";
echo "<td class=\"votetext\" align=\"center\" width=\"32\">";
  if ($action == "y"){
echo "<input type=radio name=\"vote\" value=\"$u\" onClick=\"this.form.submit()\">";
  }
echo "</td><td class=\"text\" width=\"73\"><table align=center border=0 cellspacing=0 cellpadding=1 width=\"80%\" height=\"10\"><tr>";
echo "<td class=\"votebarout\">";
echo "<table align=left border=0 cellspacing=0 cellpadding=0 width=\"$p\" height=\"100%\"><tr>";
echo "<td class=\"votebarin\">";
echo "<div class=\"votespace\">&amp;amp;nbsp;</div></td></tr>";
echo "</table></td></tr>";
echo "</table></td><td class=\"text\">$p</td></tr>";
  }
echo "<tr><td class=\"text\" colspan=\"3\">total votes: $total</td></tr>";
echo "</table>";
echo "</form>";
}
//check if cookie is NOT set!
if(!Isset($HTTP_COOKIE_VARS["$cookie"])){
  if ($HTTP_POST_VARS["vote"]){
    $sql="Update poll SET votes=(votes+1) WHERE id='$vote'";
      mysql_query($sql) or die (mysql_error());
      setcookie("$cookie","true",time()+3600);//((3600*24)*14)); //14 days!
      ob_start(write_poll("n"));
  }
  else {
   write_poll("y");
  }
}
else {
 //if cookie IS set!
  write_poll("n");
}
?>

HTH

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
PHP:
1
2
3
<?
ob_start(); // <!--------- KIJK HIER ------!>
?>
Volgens mij is ob_stert niet het enig wat er dan mist als ik het goed heb gelezen op php.net!

HTH ????

khoor het wel!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

http://www.php.net/manual/en/ref.outcontrol.php

Example:
PHP:
1
2
3
4
5
6
7
<?
ob_start();          // ENABLE OUTPUTBUFFERING
echo "Hello\n";       // GEEF OUTPUT
setcookie ("cookiename", "cookiedata"); // VERSTUUR EEN HEADER

ob_end_flush();        // FORCEER EEN FLUSH, EN STOP OUTPUT BUFFERING.
?>

ob_end_flush is optioneel. Aan het eind van een script wordt altijd de Output geflusht naar de standard output (browser dit geval)

HTH (Hope This Helps) :)

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
hmmmmzzzz....

He ik heb besloten dat alleen voor ingelogde members de mogelijkheid to stemmen is.
Dus i.p.v. cookies heb ik alles in mySQL gedaan en dat werkt een stuk makkelijker!

bedankt i.i.g. voor het meedenken...

als je script wil om er een cookie based version van te maken lees ik het straks wel, tzou leuk zijn, maare niet helemaal voor mij weggelegd geloof ik, hahahah

mzzl....
Pagina: 1