cookie en function combi werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Cmug

cmug

27/10/2006 13:45:00
Quote Anchor link
Het onderstaande script werkt wel, maar de COOKIE wordt NIET geplaats. Als ik de function header en footer weg haal werkt het wel. Hoe kan ik dit oplossen? Ik weet dat de setcookie helemaal aan het begin moet, maar hoe krijg ik deze daar?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
//  versie 25 oktober 2006
// Error rapporting E_ALL voor in de testfase ,daarna op  0 zetten voor online productie

error_reporting(E_ALL);
// error_reporting(0);

// Hier de default html opmaak/kop voor alle pagina's

function enquete_head()
         {

         header("Expires: Sun, 11 Apr 1999 08:00:00 GMT");
         header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
         header("Cache-Control: no-store, no-cache, must-revalidate");
         header("Cache-Control: pre-check=0, post-check=0", FALSE);
         header("Pragma: no-cache");
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>mini_onderzoek</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 12px;
font-color: black;
background-color:#66FFCC;
margin-top: 15px;
}

input {
font-family: Arial, sans-serif;
font-size: 12px;
width: 300px;
}

.inputsmall {
font-family: Arial, sans-serif;
font-size: 12px;
width: 160px;
}

select {
font-family: Arial, sans-serif;
font-size: 12px;
width: 310px;
}

textarea {
font-family: Arial, sans-serif;
font-size: 12px;
width: 310px;
height: 60px;
}
.style1 {color: #770000}
</style>
</head>

<body>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// dit is de  uitlog knop via logout.php gaat die gewoon weer naar de start van de webpage
echo "
    <form action='logout.php' method='post'>
    <input type='submit' name='submit' value='Dit scherm sluiten' class='inputsmall' > </form>"
;
?>


<table border=0 width=650>
<tr>
<td valign="top" width=50>&nbsp;

</td>
<td width="650" valign="top">

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
}
function
enquete_foot()
{

?>

</td>
</tr>
</table>
<!--
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo "door CM, basis v/h script is uit boek van S.Terryn " . date("Y") . " groetjes..."; ?>
-->
</body>
</html>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
}
//   Einde default html opmaak/kop voor alle pagina's


//*******************************************************
// Hier begint het script


function vragen_mini_onderzoek ($submit="", $antwoord="", $gestemd="")
{

 
$submit=$_POST["submit"];
$antwoord=$_POST["antwoord"];
$gestemd=$HTTP_COOKIE_VARS["gestemd"];

if (isset($submit)) { setcookie("gestemd","ja",time()+60); }

echo "<h2> Mini onderzoek, doe mee !</h2>\n";
echo "<h3><i> Vraag: Dit soort enquetes zijn erg stom. </i></h3>\n";
echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">\n";

// dit is de tabel met de knopjes
echo "<table width=\"500\"
       border=\"0\"
       cellpadding=\"0\"
       align=\"left\"
       bgColor=\"\">"
;
echo "<tr>";
echo "<td width=\"200\" align=\"left\" valign=\"middle\">";
echo "Mee eens";
echo "</td>";
echo "<td width=\"200\" align=\"left\" valign=\"middle\">";
echo "<input type=\"radio\" name=\"antwoord\" value=\"0\">\n";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td width=\"200\" align=\"left\" valign=\"middle\">";
echo "Mee oneens";
echo "</td>";
echo "<td width=\"200\" align=\"left\" valign=\"middle\">";
echo "<input type=\"radio\" name=\"antwoord\" value=\"1\">\n";
echo "</td>";
echo "</tr>";
echo "<tr>";
echo "<td width=\"200\" align=\"left\" valign=\"middle\">";
echo "Geen mening";
echo "</td>";
echo "<td width=\"200\" align=\"left\" valign=\"middle\">";
echo "<input type=\"radio\" name=\"antwoord\" value=\"2\">\n";
echo "</td>";
echo "</tr>";
echo "</table><br>";
echo "<p>&nbsp;</p>";// einde van de tabel

echo "<br><br>\n";
if (empty($submit) && empty($gestemd) && empty($HTTP_COOKIE_VARS["gestemd"])) {
    echo "<input name=\"submit\" type=\"submit\" value=\"Stem uitbrengen\"  class='inputsmall'  \n";
echo "<br>";

}
else {
        echo "<font color=\"#FF0000\" size=\"+1\">Bedankt voor je stem !</font><br><br>";
        if (isset($submit) && isset($antwoord) && empty($HTTP_COOKIE_VARS["gestemd"]))
         {

        $result="mini_onderzoek_result.txt";
        $pointer=fopen($result,"r+");
        $peiling=fread($pointer,filesize($result));
        $peiling=trim($peiling);
        $peiling=explode(",",$peiling);
        $peiling[$_POST["antwoord"]]++;
        $peiling=$peiling[0] . "," . $peiling[1] . "," . $peiling[2];
        rewind($pointer);
        fputs($pointer,$peiling);
        fclose($pointer);
        echo "</form> <br>";

echo "<p>[ <a href=\"mini_onderzoek_uitslag.php\">Bekijk de resultaten van de peiling</a>]</p><br>\n";  // test knop kan later weg
// dit is de  info knop mbt de uitslag van het mini onderzoek

echo "<form action=\"mini_onderzoek_uitslag.php\" method=\"post\">\n";
echo "<input name=\"submit\" type=\"submit\" value=\"Uitslag mini onderzoek\"  class='inputsmall' \n";
 echo "</form> <br>";
}
}
}


//  Genereer nu de header voor de paginas
enquete_head();
vragen_mini_onderzoek ();
 //    Genereer nu de footer voor de paginas
enquete_foot();
?>
 
PHP hulp

PHP hulp

26/04/2024 09:58:01
 
Frank -

Frank -

27/10/2006 13:50:00
Quote Anchor link
Waar heb je dit opgedoken? $HTTP_COOKIE_VARS["gestemd"] stamt nog af van de oude Romeinen (of zelfs de Grieken) en hoort vandaag de dag te zijn $_COOKIE["gestemd"].

Met
$submit=$_POST["submit"];
$antwoord=$_POST["antwoord"];
$gestemd=$HTTP_COOKIE_VARS["gestemd"];
Maak je het jezelf erg moeilijk, nu weet je in de rest van het script niet meer waar de gegevens vandaan komen. Dit is vragen om veiligheidsproblemen. Zolang je niets hebt veranderd aan de inhoud van een variabele, gebruik je de originele naam.
 
Simon

Simon

27/10/2006 13:52:00
Quote Anchor link
Het is.. zeg maar.. een oud gejat script?
 
Cmug

cmug

27/10/2006 14:01:00
Quote Anchor link
Ik heb gewoon een beginners boekje gekocht: Php 5 door S. Terryn, Daar heb ik de basis van het script uit gehaald, dat noem ik niet gejat!. En voorin staat uitgave 2006 en denk dan als beginner dat dit recente script methode omvat. Misschien is de schrijver van Romeinse afkomst? Veiligheid is overigens geen hot isue is slechts fun mini enquete.
 
Simon

Simon

27/10/2006 14:03:00
Quote Anchor link
Sorry, was niet bedoeld je aan te vallen. Maar php5?, volgens mij heeft frank gelijk als hij zegt dat HTTP_COOKIE_VARS nogal oud is.
 
Frank -

Frank -

27/10/2006 14:10:00
Quote Anchor link
Quote:
Veiligheid is overigens geen hot isue is slechts fun mini enquete.
Daar gaan we weer... Iedere programmeur hoort te beginnen met het besef dat alles draait om veiligheid. En foutafhandeling. Dat is de basis van ieder goed systeem. Wanneer je nu al begint te roepen dat dit er niet toe doet, zul je (ook later) nooit in staat zijn om een goed systeem te maken. Je krijgt een instelling van 'Oh ja, ik zou eigenlijk nog iets aan veiligheid moeten doen, komt morgen wel...'. En dan weet je het wel, dat komt nooit meer!
 
Cmug

cmug

27/10/2006 14:21:00
Quote Anchor link
Ok Frank, geef even wat voor mij meer 'tastbare' tips voor de veiligheid. Jouw zin: " gebruik je de originele naam." snap ik bv niet.
Cookie probleem lijk ik overigens nu zelf opgelost te hebben door enquete_head in de functie vragen_mini_onderzoek te plaatsten! zo dus:
function vragen_mini_onderzoek ($submit="", $antwoord="", $gestemd="") {
if (isset($submit)) { setcookie("gestemd","ja",time()+60); }
enquete_head () ;
echo "<h2> Mini onderzoek, doe mee !</h2>\n";
echo "<h3><i> Vraag: Dit soort enquetes zijn erg stom. </i></h3>\n";
echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">\n";
// dit is de tabel met de knopjes
etc etc
 
Frank -

Frank -

27/10/2006 14:31:00
Quote Anchor link
Voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? $submit=$_POST["submit"]; ?>

$submit is een alias van het origineel $_POST["submit"]. Echter, zolang je niets hebt veranderd aan de inhoud van $_POST["submit"], dan is het zinloos om een copy aan te maken. Er is toch niets mis met het origineel?

In dit geval gaat het om $_POST["submit"], wat gewoon een button is en niets voorstelt, maar met $antwoord weet jij niet of je hier al iets van beveiliging of controle op hebt uitgevoerd. Je zult dan dus alsnog moeten controleren of $antwoord gelijk is aan $_POST["antwoord"]. En dat is zinloos. Had je geen kopie gemaakt, dan had je in 1x kunnen zien dat $_POST["antwoord"] onbewerkte data is, afkomstig uit een formulier en verzonden met een POST. Dat is dus zeker 100x duidelijker. Dit maakt in een lullig scriptje van 100 regeltjes misschien niet veel uit, maar met een uitgebreide applicatie waar je met meerdere mensen aan werkt, maakt dit een verschil van dag en nacht.

Opmerking: $_SERVER[PHP_SELF] is fout, dit moet zijn $_SERVER['PHP_SELF'], dus met quotes. Check ook even de html-broncode of het er dan wel goed staat.
 
Cmug

cmug

27/10/2006 15:38:00
Quote Anchor link
thanx voor de tips ik heb het nu m.i. goed draaiende. Overigens met veiligheid is niet zo heel erg belangrijk bedoelde ik het volgende: Als ik in mijn browser het tab-blad 'cookies_verwijderen' open zet kan ik een enquete als bovenstaande zo vaak invullen als ik wil. Maar dat is m.i. ook de eigenschap van cookies, en is zeker niet bedoelt voor serieus werk.
Even voor de volledigheid ,voor wie het nog zou willen nalezen even het script zoals ie nu is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
function vragen_mini_onderzoek () {
if (isset($_POST["submit"])) { setcookie("gestemd","ja",time()+60); }
enquete_head () ;
echo "<h2> Mini onderzoek, doe mee !</h2>\n";
echo "<h3><i> De Vragen. </i></h3>\n";
// etc vragen knopjes
if (empty($_POST["submit"]) && empty($_COOKIE["gestemd"]) && empty($_POST["antwoord"])) {
echo "<input name=\"submit\" type=\"submit\" value=\"Stem uitbrengen\"  class='inputsmall'  \n";
echo "<br>";
}
else {
        echo "<font color=\"#FF0000\" size=\"+1\">Bedankt voor je stem !</font><br><br>";
        if (isset($_POST["submit"]) && isset($_POST["antwoord"]) && empty($_COOKIE["gestemd"]))
         {

        $result="mini_onderzoek_result.txt";
        $pointer=fopen($result,"r+");
        $peiling=fread($pointer,filesize($result));
        $peiling=trim($peiling);
        $peiling=explode(",",$peiling);
        $peiling[$_POST["antwoord"]]++;
        $peiling=$peiling[0] . "," . $peiling[1] . "," . $peiling[2];
        rewind($pointer);
        fputs($pointer,$peiling);
        fclose($pointer);
        echo "</form> <br>";
}
}

echo "<p>[ <a href=\"mini_onderzoek_uitslag.php\">Bekijk de resultaten van de peiling</a>]</p><br>\n";  // test knop kan later weg
enquete_foot();
}

vragen_mini_onderzoek ();
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.