Oddawanie głosu raz dziennie.
|
adams1692 |
Dodany dnia 24.06.2013 22:47:05
|
Początkujący
Postów: 105 Ostrzeżeń: 2
v7.02.07 Data rejestracji: 05.12.2008 17:27
|
Witam,
Mam taki kod: <?php
if(isset($_POST['ocen'])){ // sprawdzamy czy kliknięto na przycisk do wysyłania formularza.
if(!empty($nazwa) and !empty($ocena) and !empty($user)){ // sprawdzamy czy zostały wypełnione wszystkie pola
$zapytanie = "INSERT INTO oceny SET nazwa='$nazwa', ocena='$ocena', user='$user'";
$wykonaj = mysql_query($zapytanie); // dodajemy rekord do bazy
if($wykonaj == 'TRUE'){
echo '<center><strong>Oceniono!</strong></center>'; // wyświetlamy komunikat o poprawnym dodaniu rekordu do bazy
}
} else {
echo '<center><strong>Nie wypełniłeś wszystkich pól!</strong></center>'; // wyświetlamy komunikat o błędnym wypełnieniu formularza
}
}
?>
<?php
global $userdata;
$result1 = dbquery("SELECT page_id, page_title FROM fusionda41f_custom_pages WHERE page_id='".$_GET['page_id']."'");
$data1 = mysql_fetch_assoc($result1);
$result = dbquery("SELECT nazwa, AVG(ocena) as srednia FROM oceny WHERE nazwa='".$data1['page_title']."'");
$data = mysql_fetch_assoc($result);
echo "<center><font size='2'><b>Ocena zawodnika: ".number_format($data['srednia'], 2, ".", "")."</b></font></center>"
?>
<br />
<?php
if (iMEMBER) {
echo "<form method='POST' action='/viewpage.php?page_id=".$data1['page_id']."'>
<input name='nazwa' type='hidden' value='".$data1['page_title']."'>
<input name='user' type='hidden' value='".$userdata['user_name']."'>
<center><font size='2'><b>Oceń zawodnika:</b></font> <select name='ocena' class='textbox'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class='button' type='submit' name='ocen' value='Oceń'>
</form></center>";
} else {
echo "<strong><center><font size='2'><b>Głosowanie tylko dla zarejestrowanych!<br><a href='http://mglks.pl/login.php' target='_blank'>Zaloguj się</a> lub <a href='http://mglks.pl/register.php' target='_bank'>zarejestruj</a>.</b></font></strong>";
}
?>
I chodzi mi o to żeby po przesłaniu do bazy danych nazwy użytkownika mógł on zagłosować tylko raz dziennie na danego zawodnika ponieważ ten kod jest przypisany do 29 zawodników. Widzę to tak że przycisk wyślij będzie zablokowany a poniżej będzie komunikat: Już dzisiaj oddałeś głos na tego zawodnika. Czy może mi ktoś pomóc?
PW od moderatora:
- Przeniesienie tematu - bogdan 25.06.2013 10:17
|
|
|
|
Wścibski Gość |
Dodany dnia 22.12.2024 19:33:53
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
Piotrroger |
Dodany dnia 25.06.2013 19:29:26
|
Bywalec
Postów: 998 Pomógł: 19
v7.02.03 Data rejestracji: 27.04.2006 18:29
|
Dwie możliwości:
1. Ciasteczka (mało bezpieczne - wystarczy usunąć ciasteczko, żeby zagłosować ponownie, ale stosunkowo najprostsze do wykonania).
2. Zapisywanie IP w bazie (bardziej bezpieczne - ale też nie w 100%, wymaga utworzenia pola w bazie danych).
Polecam numer pierwszy.
<?php
if(isset($_POST['ocen'])){ // sprawdzamy czy kliknięto na przycisk do wysyłania formularza.
if(!empty($nazwa) and !empty($ocena) and !empty($user)){ // sprawdzamy czy zostały wypełnione wszystkie pola
$zapytanie = "INSERT INTO oceny SET nazwa='$nazwa', ocena='$ocena', user='$user'";
$wykonaj = mysql_query($zapytanie); // dodajemy rekord do bazy
if($wykonaj == 'TRUE'){
echo '<center><strong>Oceniono!</strong></center>'; // wyświetlamy komunikat o poprawnym dodaniu rekordu do bazy
setcookie('oddano_glos', '1', time()+3600*24); // dodaje cookies na 24h
}
} else {
echo '<center><strong>Nie wypełniłeś wszystkich pól!</strong></center>'; // wyświetlamy komunikat o błędnym wypełnieniu formularza
}
}
?>
<?php
global $userdata;
$result1 = dbquery("SELECT page_id, page_title FROM fusionda41f_custom_pages WHERE page_id='".$_GET['page_id']."'");
$data1 = mysql_fetch_assoc($result1);
$result = dbquery("SELECT nazwa, AVG(ocena) as srednia FROM oceny WHERE nazwa='".$data1['page_title']."'");
$data = mysql_fetch_assoc($result);
echo "<center><font size='2'><b>Ocena zawodnika: ".number_format($data['srednia'], 2, ".", "")."</b></font></center>"
?>
<br />
<?php
if (iMEMBER) {
echo "<form method='POST' action='/viewpage.php?page_id=".$data1['page_id']."'>
<input name='nazwa' type='hidden' value='".$data1['page_title']."'>
<input name='user' type='hidden' value='".$userdata['user_name']."'>
<center><font size='2'><b>Oceń zawodnika:</b></font> <select name='ocena' class='textbox'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
";
if(isset($_COOKIE['oddano_glos'])) // sprawdza czy cookies istnieje
echo "<input class='button' type='submit' name='ocen' value='Dziś oceniałeś!'>";
else echo "<input class='button' type='submit' name='ocen' value='Oceń'>";
echo "
</form></center>";
} else {
echo "<strong><center><font size='2'><b>Głosowanie tylko dla zarejestrowanych!<br><a href='http://mglks.pl/login.php' target='_blank'>Zaloguj się</a> lub <a href='http://mglks.pl/register.php' target='_bank'>zarejestruj</a>.</b></font></strong>";
}
?>
Tak na szybko - nie wiem czy działa - nie testowałem, a dodatkowo dawno już nie kodziłem.
|
|
|
|
adams1692 |
Dodany dnia 26.06.2013 16:23:31
|
Początkujący
Postów: 105 Ostrzeżeń: 2
v7.02.07 Data rejestracji: 05.12.2008 17:27
|
Niestety nie działa można głosować cały czas.
|
|
|
|
hoopak |
Dodany dnia 26.06.2013 16:32:54
|
Bywalec
Postów: 639 Pomógł: 21
v7.02.04 Data rejestracji: 05.02.2008 21:16
|
Pojawiają się jakieś komunikaty, błędy? |
|
|
|
adams1692 |
Dodany dnia 26.06.2013 16:39:31
|
Początkujący
Postów: 105 Ostrzeżeń: 2
v7.02.07 Data rejestracji: 05.12.2008 17:27
|
Teraz po części działa, zmodyfikowałem ten kod: if(isset($_COOKIE['oddano_glos'])) { // sprawdza czy cookies istnieje
echo "<input class='button' type='submit' name='ocen' value='Dziś oceniałeś!' disabled>";
} else {
echo "<input class='button' type='submit' name='ocen' value='Oceń'>";
}
Lecz pisałem że ten kod jest przypisany do 29 zawodników i chodzi o to żeby można było głosować na każdego raz dziennie a jak zagłosuję teraz na jednego to już na kolejnego nie mogę. Zawodnicy zapisują się w tabeli "nazwa".
A może jest możliwość zrobienia tego tak żeby ciasteczka działały na konkretnego użytkownika? Ponieważ w tym formularzu przesyłam też nazwę użytkownika.
|
|
|
|
Creeper |
Dodany dnia 26.06.2013 18:50:39
|
Początkujący
Postów: 290 Pomógł: 45
v7.02.06 Data rejestracji: 24.10.2011 14:51
|
Można zrobić to na zasadzie dodatkowego pola w bazie z datą. Stwórz pole poprzez takie zapytanie:
<?php
$result = mysql_result("ALTER TABLE oceny ADD data INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER user");
?>
Teraz użyj kodu w takiej formie (mogą być błędy, nie miałem jak przetestować):
<?php
if(isset($_POST['ocen'])){ // sprawdzamy czy kliknięto na przycisk do wysyłania formularza.
if(!empty($nazwa) and !empty($ocena) and !empty($user)){ // sprawdzamy czy zostały wypełnione wszystkie pola
if (date("j", mysql_result(mysql_query("SELECT data FROM oceny WHERE ocena='$ocena' AND user='$user' ORDER BY data DESC LIMIT 1"), 0)) != date("j", time())) {
$zapytanie = "INSERT INTO oceny SET nazwa='$nazwa', ocena='$ocena', user='$user', data='".time()."'";
$wykonaj = mysql_query($zapytanie); // dodajemy rekord do bazy
if($wykonaj == 'TRUE'){
echo '<center><strong>Oceniono!</strong></center>'; // wyświetlamy komunikat o poprawnym dodaniu rekordu do bazy
}
} else {
echo "Oddałeś już głos na tego zawodnika!";
}
} else {
echo '<center><strong>Nie wypełniłeś wszystkich pól!</strong></center>'; // wyświetlamy komunikat o błędnym wypełnieniu formularza
}
}
?>
<?php
global $userdata;
$result1 = dbquery("SELECT page_id, page_title FROM fusionda41f_custom_pages WHERE page_id='".$_GET['page_id']."'");
$data1 = mysql_fetch_assoc($result1);
$result = dbquery("SELECT nazwa, AVG(ocena) as srednia FROM oceny WHERE nazwa='".$data1['page_title']."'");
$data = mysql_fetch_assoc($result);
echo "<center><font size='2'><b>Ocena zawodnika: ".number_format($data['srednia'], 2, ".", "")."</b></font></center>"
?>
<br />
<?php
if (iMEMBER) {
echo "<form method='POST' action='/viewpage.php?page_id=".$data1['page_id']."'>
<input name='nazwa' type='hidden' value='".$data1['page_title']."'>
<input name='user' type='hidden' value='".$userdata['user_name']."'>
<center><font size='2'><b>Oceń zawodnika:</b></font> <select name='ocena' class='textbox'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class='button' type='submit' name='ocen' value='Oceń'>
</form></center>";
} else {
echo "<strong><center><font size='2'><b>Głosowanie tylko dla zarejestrowanych!<br><a href='http://mglks.pl/login.php' target='_blank'>Zaloguj się</a> lub <a href='http://mglks.pl/register.php' target='_bank'>zarejestruj</a>.</b></font></strong>";
}
?>
Dodałem taką linijkę:
if (date("j", mysql_result(mysql_query("SELECT data FROM oceny WHERE ocena='$ocena' AND user='$user' ORDER BY data DESC LIMIT 1"), 0)) != date("j", time())) {
Pobiera ona ostatnio dodany wpis i sprawdza, czy aktualny dzień jest równy temu pobranemu z bazy. |
|
|
|
adams1692 |
Dodany dnia 26.06.2013 20:53:42
|
Początkujący
Postów: 105 Ostrzeżeń: 2
v7.02.07 Data rejestracji: 05.12.2008 17:27
|
Niestety tabela data pobiera takie wartości: 1372272701, można oddawać głosy cały czas.
|
|
|
|
kefirek |
Dodany dnia 30.06.2013 21:43:36
|
Zaawansowany
Postów: 1191 Pomógł: 418 Ostrzeżeń: 1
v6.00.xxx Data rejestracji: 06.04.2008 21:59
|
adams1692 napisał(a):
Niestety tabela data pobiera takie wartości: 1372272701, można oddawać głosy cały czas.
Jak masz już w bazie datę to zobacz może tak
<?php
$result1 = dbquery("SELECT page_id, page_title FROM fusionda41f_custom_pages WHERE page_id='" . $_GET['page_id'] . "'");
$data1 = mysql_fetch_assoc($result1);
$result = dbquery("SELECT nazwa, AVG(ocena) as srednia FROM oceny WHERE nazwa='" . $data1['page_title'] . "'");
$data = mysql_fetch_assoc($result);
echo "<center><font size='2'><b>Ocena zawodnika: ".number_format($data['srednia'], 2, ".", "")."</b></font></center>";
if (iMEMBER) {
if (isset($_POST['ocen'])) {
if (!empty($_POST['nazwa']) and !empty($_POST['ocena'])) {
// sprawdzamy czy juz oddano glos
$rows = mysql_result("SELECT COUNT(*) FROM oceny WHERE nazwa='" . $_POST['nazwa'] . "' AND user='" . $userdata['user_name'] . "' AND DATE(FROM_UNIXTIME(data))=CURDATE()", 0);
if ($rows) {
echo "Oddałeś już dziś głos na tego zawodnika!";
} else {
$wykonaj = mysql_query("INSERT INTO oceny SET nazwa='" . $_POST['nazwa'] . "', ocena='" . $_POST['ocena'] . "', user='" . $userdata['user_name'] . "', data='" . time() . "'");
echo '<center><strong>Oceniono!</strong></center>';
}
} else {
echo '<center><strong>Nie wypełniłeś wszystkich pól!</strong></center>'; // wyświetlamy komunikat o błędnym wypełnieniu formularza
}
} else {
// formularz
echo "<form method='POST' action='/viewpage.php?page_id=" . $data1['page_id'] . "'>
<input name='nazwa' type='hidden' value='" . $data1['page_title'] . "'>
<center><font size='2'><b>Oceń zawodnika:</b></font> <select name='ocena' class='textbox'>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
<input class='button' type='submit' name='ocen' value='Oceń'>
</form></center>";
}
} else {
echo "<strong><center><font size='2'><b>Głosowanie tylko dla zarejestrowanych!<br><a href='http://mglks.pl/login.php' target='_blank'>Zaloguj się</a> lub <a href='http://mglks.pl/register.php' target='_bank'>zarejestruj</a>.</b></font></strong>";
}
?>
|
|
|
|
adams1692 |
Dodany dnia 10.08.2013 15:14:11
|
Początkujący
Postów: 105 Ostrzeżeń: 2
v7.02.07 Data rejestracji: 05.12.2008 17:27
|
kefirek, nie działa po zagłosowaniu wywala taki błąd: mysql_result(): supplied argument is not a valid MySQL result resource Linia: 21 dodatkowo po zagłosowaniu znika przycisk wyślij ale jak tylko odświeżę stronę to można głosować dalej. Ktoś ma jakiś pomysł jeszcze?
Edytowane przez adams1692 dnia 10.08.2013 16:54:11
|
|
|