Autor | Zpráva | ||
---|---|---|---|
kulhanek21 Profil |
Udělal jsem si takovou malou anketku. Chtěl jsem tam jednoduchou ochranu proti násobnému hlasování pomocí cookie, ale cookie to nechce zapsat. Kde je problém? Vždycky to umře na "Chybě", a cookie to nezapíše. (Nejsem programátor.) ;-)
<?php include "config.php"; mysql_query("SET NAMES 'cp1250'"); if ($_POST['search']=="search") { $id=$_POST['id']; if( empty($_POST['id'])) { echo "Prázdný dotazník!"; } if (isset($_COOKIE['Tuat'])) { echo '<p>Již jste jednou hlasoval!</p>'; } else { setcookie("Tuat", $_POST['ChangeTuat'], time() + 31536000) or die('<p>Chyba</p>'); $addsite=mysql_query("UPDATE anketa_hlasy SET hlas = hlas + 1 WHERE id = $id"); echo ("Váš hlas byl přijat!"); } } ?> |
||
DoubleThink Profil * |
#2 · Zasláno: 3. 3. 2009, 09:45:20
Return Values
If output exists prior to calling this function, setcookie() will fail and return FALSE. If setcookie() successfully runs, it will return TRUE. This does not indicate whether the user accepted the cookie. Pravděpodobně fci setcookie předchází nějaký výstup - například prázdný řádek v config.php. |
||
Anonymní Profil * |
#3 · Zasláno: 3. 3. 2009, 10:21:39
Config mám takový docela standardní, tam by snad neměla být chyba:
<? mysql_query("SET NAMES 'cp1250'"); $username =""; $password =""; $databasename =""; $host ="127.0.0.1"; mysql_connect($host, $username, $password) or die("Nepodarilo se pripojit k databázi"); mysql_select_db("$databasename") or die("Nepodarilo se pripojit k databázi"); ?> Celá stránka i s formulářem vypadá takhle: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <TITLE>tuat WEB</TITLE> <meta http-equiv="Content-Language" content="cs" /> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" /> <meta name="description" lang="cs" content="tuat WEB" /> <meta name="keywords" lang="cs" content="" /> <style type="text/css"> <!-- a:link {color: #ffffff;} a:visited {color: #ffffff;} a:active {color: #ffffff;} a:hover {color: #000000;} --> </style> </head> <body bgcolor="#d6ebcc"> <div style="background-color:#d6ebcc"> <div style="font-size: 15px;"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td align="left" valign="top"> <form action="nick-id.php" method="post" name="search"> <input name="search" type="hidden" value="search"> Navrhuji nick: <input type="text" name="nick" size="30"> <input type="image" src="odeslat1.jpg"> </form> </td> <td width="20">   </td> <td align="left" valign="bottom"> <form action="nick2-id.php" method="post" name="search"> <input name="search" type="hidden" value="search"> Hlasuji pro nick: <input type="text" name="id" size="30" value="Zde zadejte id..." onclick="this.value='';"> <input type="image" src="odeslat1.jpg"> </form> </td> </tr> </table><br> <?php include "config.php"; mysql_query("SET NAMES 'cp1250'"); if ($_POST['search']=="search") { $id=$_POST['id']; if( empty($_POST['id'])) { echo "Jako byste se snažil odeslat prázdný dotazník... Proč? ;-)"; } if (isset($_COOKIE['Tuat'])) { echo '<p>Již jste v této anketě jednou hlasoval!</p>'; } else { setcookie("Tuat", $_POST['ChangeTuat'], time() + 31536000) or die('<p>Chyba</p>'); $addsite=mysql_query("UPDATE anketa_hlasy SET hlas = hlas + 1 WHERE id = $id"); echo ("Váš hlas byl přijat! Nick s identifikačním číslem '<b>$id</b>' vám děkuje. ;-)"); } } ?><br><br> <table border="0" cellpadding="1" cellspacing="1"> <tr> <td width="100" bgcolor="#add698" align="center"> <b>Id</b> </td> <td width="200" bgcolor="#b7d5a8" align="center"> <b>Název</b> </td> <td width="100" bgcolor="#add698" align="center"> <b>Hlasy</b> </td> </tr> </table> <table border="0" cellpadding="1" cellspacing="1"> <tr> <td width="100" bgcolor="#add698" align="left"> <a href="nick-id.php">Seřadit</a></td> <td width="200" bgcolor="#b7d5a8" align="left"> <a href="nick-nick.php">Seřadit</a> </td> <td width="100" bgcolor="#add698" align="left"> <a href="nick-hlas.php">Seřadit</a> </td> </tr> </table> <?php include "table-id.php"; ?> </div> </div> </body> Link je zde: http://tuat-web.info/zajimavosti/nick/nick-id.php Měla to být taková malá anketka o nejvtipnější nick... ;-) |
||
Chamurappi Profil |
#4 · Zasláno: 3. 3. 2009, 10:25:52 · Upravil/a: Chamurappi
Reaguji na kulhanka21:
Řekl bych, že volání funkce setcookie u tebe předchází nějaký výstup. Třeba všechno to, co máš před „<?php …“. |
||
SwimX Profil |
#5 · Zasláno: 3. 3. 2009, 10:31:11
Anonymní
řešením budiž: <form action="nick-id.php" method="post" name="search"> místo toho dej nějaký soubor, a do něj dej jenom php |
||
kulhanek21 Profil |
#6 · Zasláno: 3. 3. 2009, 12:50:58
zajímavé... tímhle způsobem to sice projde přes hlášku "chyba", odhlasuje to a zapíše hlas+1 do tabulky, ale kukynu to stejně nezapíše... takže se dá volit znova...
|
||
kulhanek21 Profil |
#7 · Zasláno: 3. 3. 2009, 14:59:36
už je to snad dobrý (abych to nezakřikl) ;-) ta myšlenka swimxe byla správná, musí se to dát do jiného souboru (jenom php)... ale já tam měl chybku v tom zápisu cookie, proto to nefungovalo... :-)
|
||
Joker Profil |
#8 · Zasláno: 3. 3. 2009, 15:03:27
kulhanek21
usí se to dát do jiného souboru (jenom php) Nemusí, akorát se to musí správně naprogramovat :) |
||
SwimX Profil |
#9 · Zasláno: 3. 3. 2009, 15:07:56 · Upravil/a: SwimX
Joker
„Nemusí, akorát se to musí správně naprogramovat :)“ ano, ale takle je to i přehlednější kulhanek21 správně naprogramovat je asi toto: <?php if(isset($_POST['submit'])){ celé tvoje php }else{ ?> formular <?php }?> edit: napsal jsem to obráceně než jsem si to představoval :) |
||
kulhanek21 Profil |
#10 · Zasláno: 4. 3. 2009, 13:17:12
add) správně naprogramovat - to je samozřejmě ta úplně nejlepší varianta... ;-)
|
||
Časová prodleva: 14 let
|
0