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 *
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 *
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">
&nbsp
</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
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
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
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
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
kulhanek21
usí se to dát do jiného souboru (jenom php)
Nemusí, akorát se to musí správně naprogramovat :)
SwimX
Profil
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
add) správně naprogramovat - to je samozřejmě ta úplně nejlepší varianta... ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: