Potřebuji, aby se uživateli zobrazila stránka s anketou (třídní stránka) na nového předsedu stránek. Ale aby se zobrazila pouze jednou a vícekrát už ne. Respektive aby se jednou zobrazila stránka s odkazem na anketu a podruhé již stránka s odkazem na uživatelskou sekci. V DB jsem si vytvořil sloupec "anketa s funkcí enum('0', '1') 0- pokud ještě nehlasoval a 1- pokud již hlasoval. Jaksi mi to stále nefunguje. Co mám udělat?
Děkuji předem za rady
Maikis:-)))
já taky poněkud, ale pokud chápu, tak chceš, aby každý, který má v záznamu 0, viděl anketu, a má-li v záznamu 1, viděl na stejné adrese něco jiného. Což ti nefunguje.
Možná nesprávně updatuješ tabulku v tomhle sloupci - takže zkontroluj, jestli to skutečně je tak, že kdo nehlasoval, má 0 a kdo hlasoval má 1.
A jestli tohle máš správně, tak máš asi špatně podmínku, která pak zjišťuje tuhle hodnotu. Což lze takhle těžko posoudit.
Moment. Jdu to skontrolovat, případně opravit a kdyžtak sem dám kód. Díky:))
Nefunguje:(
<?php include 'http://superbecko.wz.cz/central/grafika.txt';?> \* určuje barvy stránek
<?php
include 'db.php';
$userid = $_REQUEST['id'];
$code = $_REQUEST['code'];
$sql = mysql_query("UPDATE users SET anketa='0' WHERE userid='$userid' AND password='$code'");
$sql_doublecheck = mysql_query("SELECT * FROM users WHERE userid='$userid' AND password='$code' AND anketa='1'");
$doublecheck = mysql_num_rows($sql_doublecheck);
if($doublecheck == 0){
echo "<p><b>Nehlasoval(a) jsi v anketě!</b> Pokračuj <a href='http://superbecko.wz.cz/anketa/anketa.php3'>zde</a>!</p>";
} elseif ($doublecheck > 1) {
echo "<p><b>Jiz jsi hlasoval(a) v anketě!</b>Pokračuj <a href='http://superbecko.wz.cz/main.php></p>";
form();
konec();
}
?>
Já bych to řešil jinak. Jelikož hlasování v anketě stejně potřebuješ vyhodnotit, vytvořil bych tabulku "hlasovani" se sloupci "hlasujici" (user ID hlasujícího) a "volba" (co hlasoval). Něco takového asi stejně máš.
Při zobrazování stránky bych pak projel tuto tabulku a vyhledal, jestli přihlášený už hlasoval.
Obecně nemám rád semafory (stav hlasoval-nehlasoval), které je občas problematické ošetřit. Výše uvedená tabulka je jednak nutná pro vyhodnocení a zároveň se dá využít jao indikátor, kdo už hlasoval.
A jak mám udělat tu stránku? Já ještě s databázema moc neumim takže jak to mam celý udělat? Tabulku vytvořit umim ale zbytek ne.. Jak udělat to, aby to zjistilo jestli hlasoval?
Postupně:
Jakým způsobem chceš sbírat data o hlasování?
Přes formulář..
Tabulka vypadá takto:
CREATE TABLE anketa (
userid int(25) NOT NULL auto_increment,
volba varchar(25) NOT NULL default '',
PRIMARY KEY (userid)
) TYPE=MyISAM COMMENT='Membership Information';
-- je správně?
OK, máš tabulku anketa:
userid - volba
Ta se ti plní záznamy. Jestli chceš zjistit, kdo už hlasoval, prohledáš tabulku. Identifikaci přihlášeného uživatele znáš. Asi v nejake promenne, dopln ji za <promenna prihlaseneho uzivatele>.
Tedy:
$query = "SELECT * FROM anketa WHERE userid = '<promenna prihlaseneho uzivatele>'";
$vysledek = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($vysledek) == 0) {
// Uzivatel jeste nehlasoval, zobraz hlasovaci tabulku s moznosti hlasovat
} else {
// uzivatel uz hlasoval
}
Díky moc! fakt jsi mi pomoh! kde ses naučil dělat stránky tak perfektně? já se to učim -- teďka je to právě rok, kdy jsem začal dělat stránky. ještě musí bejt nahoře session_start(); , že jo?
Jak mam udělat to napojení na databázi? přes stejnej soubor jako všechno ostatní?
Jak mam udělat ten form k tý anketě? aby se to zapsalo do databáze?
Naučil jsem se to sám. Koupil jsem si knihu PHP a MySQL a postupně jsem se to učil. Na druhé straně, ať děláš cokoli, určitě už to někdo dělal před tebou. Na webu je spousta veřejně dostupných skriptů, takže stačí si je stáhnout, podívat se do nich a naučit se to. Ale potom si to napsat sám! Je to dlouhá cesta, ale jinak to stejně nejde.
Jojo, musíš dát session_start();
Pokud už s databází pracuješ, nemusíš se znovu připojovat. Anketa je jen další tabulka ve stejné databázi.
Jinak, k databázi se připojuje:
$connection = mysql_connect($hostname,$username,$password) or die (mysql_error());
Výběr databáze. Na webuzdarma máš k dispozici stejně jen jednu databázi:
$database = mysql_select_db($database,$connection) or die (mysql_error());
To vim:)
a jak udšělat ten form? já ho udělal takhle a nefunguje to..
<?php
function formular() {
?>
<form method="post" action="anketa.php">
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<tr>
<td width="24%" align="left" valign="top">Volit:</td>
<td width="76%"><input name="volba" type="text"></td>
</tr>
</table>
</form>
<?php
session_start();
}
function konec() {
?>
</body>
<?php
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<title>Anketa</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<?php include 'http://superbecko.wz.cz/central/grafika.txt';?>
<?php
session_start();
if (isset($submit)) {
include 'db.php';
// definice proměnných
$userid = $_POST['userid'];
$volba = $_POST['volba'];
$userid = stripslashes($userid);
// kontrola vyplnění údajů
if((!$volba)){
echo '<b>Během hlasování nastaly tyto chyby:</b><br>';
echo '<ul>';
if(!$volba){
echo "<li>Chybí tvá volba!</li>";
}
}
echo '</ul>';
formular();
konec();
exit();
}
// kontrola emailu a jména v DB
echo "</ul>";
formular();
konec();
exit();
}
}
$random_password = password();
$db_password = md5($random_password);
// vlo?ní údajů do DB
$info2 = htmlspecialchars($info);
$sql = mysql_query("INSERT INTO anketa (volba, userid, now())") or die (mysql_error());
if(!$sql){
echo '<p>Při hlasování v anketě se vyskytla neočekávaná chyba.</p>';
} else {
formular();
konec();
}
?>
A co ti konkrétně nefunguje?
Předtím, než se pokusíš zapsat data do databáze, vypiš si je na obrazovku a podívej se, co to dělá.
Píše to že je v tomhle chyba:
function formular()
Nemělo by v těch závorkách něco být? *
Tak ne! tak je chyba v tomhle:
<?php
Všechny tyhle chyby jsem odstranil, ale nefunguje to zapsání do databáze:(
Jak jsem psal výše. Před zápisem do db se podívej, co máš v těch proměnných a vypiš si je na obrazovku.
Vždy, když ti to hodí nějakou chybu, musíš ji uvést! Nikdo nemá křišťálovou kouli, aby na otázku: "mi to nefunguje, co mám dělat?" dokázal poradit.
Jak mam zadat příkaz k uložení userid?
dal jsem tohle a nejde to:
". $_SESSION['userid'] ." = $_POST['userid'];
tohle taky nejde:
$". $_SESSION['userid'] ." = $_POST['userid'];
Co tam mám dát?
Tady je princip práce se session:
http://www.webguru.cz/clanky/view.php?id=23
Jaká je tady chyba?
<?php include 'http://superbecko.wz.cz/central/grafika.txt';?>
NEHLASUJTE!
<?php
include 'db.php';
session_start();
$query = "SELECT * FROM anketa WHERE userid = '<promenna prihlaseneho uzivatele>'";
$vysledek = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($vysledek) == 0) {
function formular()
{
?>
<form method="post" action="anketa.php">
<table width="100%" border="0" cellpadding="4" cellspacing="0">
<tr>
<td width="24%" align="left" valign="top">Volit:</td>
<td width="76%"><input name="volba" type="text"></td>
</tr>
<tr>
<td align="left" valign="top"> </td>
<td><input type="submit" name="submit" value="Hlasovat!"></td>
</tr>
</table>
</form>
<?php
session_start();
}
function konec() {
?>
</body>
<?php
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<title>Anketa</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<?php include 'http://superbecko.wz.cz/central/grafika.txt';?>
<?php
session_start();
if (isset($submit)) {
include 'db.php';
// definice proměnných
". $_SESSION['userid'] ." = $_POST['userid'];
$volba = $_POST['volba'];
$volba = stripslashes($volba);
// kontrola vyplnění údajů
if((!$volba)){
echo '<b>Během hlasování nastaly tyto chyby:</b><br>';
echo '<ul>';
if(!$volba){
echo "<li>Chybí tvá volba!</li>";
}
}
echo '</ul>';
formular();
konec();
exit();
}
// kontrola emailu a jména v DB
echo "</ul>";
formular();
konec();
exit();
}
$info2 = htmlspecialchars($info);
$sql = mysql_query("INSERT INTO anketa (volba, userid, now())") or die (mysql_error());
if(!$sql){
echo '<p>Při hlasování v anketě se vyskytla neočekávaná chyba.</p>';
} else {
formular();
konec();
}
?>
} else {
<a href='http://superbecko.wz.cz/main.php'>Pokračujte zde! Již jste v anketě hlasovali!:)</a>
}
?>