Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Oddawanie głosu raz dziennie przez usera
Forum PHP.pl > Forum > Przedszkole
adams1692
Witam,

Mam pewien kod lecz nie wiem jak go zmodyfikować. Jest to skrypt głosowania na zawodników i chodzi mi o to żeby każdy zarejestrowany użytkownik strony mógł oddać jeden głos na każdego zawodnika a jeżeli zagłosuje na danego zawodnika to pojawia się komunikat zagłosowałeś już dziś na tego zawodnika. Podaję poniżej kod:

  1. $result = dbquery("SELECT id, nazwa, ostatni, zolta, czerwona, info, klub, zdjecie, pozycja, dataurodzenia, miejsce, wzrost, waga, zamieszkanie, pseudonim FROM sklad WHERE id='".$_GET['id']."'");
  2. $data = mysql_fetch_array($result);
  3.  
  4. opentable($data['nazwa']);
  5.  
  6. echo "<table align='center' cellpadding='0' cellspacing='0'>
  7. <tr>
  8. <td valign='middle'><center><img src='/zawodnicy/".$data['zdjecie']."'></center></td>
  9. <td valign='middle'>
  10.  
  11.  
  12. <table height='160' cellspacing='0' rules='rows'>
  13. <tr bgcolor='#f0f0f0'>
  14. <td width='200'><font size='2'><b>Imię i nazwisko:</b></font></td>
  15. <td width='200'><font size='2'><b>".$data['nazwa']."</b></font></td>
  16. </tr>
  17. <tr bgcolor='#d0d0d0'>
  18. <td width='200'><font size='2'><b>Data urodzenia:</b></font></td>
  19. <td width='200'><font size='2'><b>".$data['dataurodzenia']."</b></font></td>
  20. </tr>
  21. <tr bgcolor='#f0f0f0'>
  22. <td width='200'><font size='2'><b>Miejsce urodzenia:</b></font></td>
  23. <td width='200'><img src='/images/polska.png'> <font size='2'><b>".$data['miejsce']."</b></font></td>
  24. </tr>
  25. <tr bgcolor='#d0d0d0'>
  26. <td width='200'><font size='2'><b>Wzrost:</b></font></td>
  27. <td width='200'><font size='2'><b>".$data['wzrost']." cm</b></font></td>
  28. </tr>
  29. <tr bgcolor='#f0f0f0'>
  30. <td width='200'><font size='2'><b>Waga:</b></font></td>
  31. <td width='200'><font size='2'><b>".$data['waga']." kg</b></font></td>
  32. </tr>
  33. <tr bgcolor='#d0d0d0'>
  34. <td width='200'><font size='2'><b>Miejsce zamieszkania:</b></font></td>
  35. <td width='200'><img src='/images/polska.png'> <font size='2'><b>".$data['zamieszkanie']."</b></font></td>
  36. </tr>
  37. <tr bgcolor='#f0f0f0'>
  38. <td width='200'><font size='2'><b>Pseudonim:</b></font></td>
  39. <td width='200'><font size='2'><b>".$data['pseudonim']."</b></font></td>
  40. </tr>
  41. <tr bgcolor='#d0d0d0'>
  42. <td width='200'><font size='2'><b>Poprzedni klub:</b></font></td>
  43. <td width='200'><font size='2'><b>".$data['klub']."</b></font></td>
  44. </tr>
  45. </table>
  46.  
  47.  
  48. </td>
  49. </tr>
  50. </table><br>
  51. <center><a href='/infusions/custom_contact/contact.php' target='blank'><b><font size='2'><font color='red'>UZUPEŁNIJ DANE O ZAWODNIKU</font></font></b></a></center><br />";
  52.  
  53.  
  54. closetable();
  55.  
  56. <?php
  57. if (!defined("IN_FUSION")) { die("Access Denied"); }
  58.  
  59.  
  60. if(isset($_POST['ocen'])){ // sprawdzamy czy kliknięto na przycisk do wysyłania formularza.
  61.  
  62.  
  63. if(!empty($nazwa) and !empty($ocena) and !empty($user)){ // sprawdzamy czy zostały wypełnione wszystkie pola
  64.  
  65.  
  66. $zapytanie = "INSERT INTO oceny SET nazwa='$nazwa', ocena='$ocena', user='$user'";
  67. $wykonaj = mysql_query($zapytanie); // dodajemy rekord do bazy
  68.  
  69. if($wykonaj == 'TRUE'){
  70.  
  71. echo '<table cellpadding="0" width="100%" bgcolor="#d4d4d4"><tr><td><center><b>Oceniono!</b></center></td></tr></table>'; // wyświetlamy komunikat o poprawnym dodaniu rekordu do bazy
  72.  
  73. }
  74.  
  75. } else {
  76.  
  77. echo '<table cellpadding="0" width="100%" bgcolor="#d4d4d4"><tr><td><center><b>Nie wypełniłeś wszystkich pól!</b></center></td></tr></table>'; // wyświetlamy komunikat o błędnym wypełnieniu formularza
  78.  
  79. }
  80.  
  81. }
  82.  
  83. ?>
  84. <?php
  85. global $userdata;
  86.  
  87. $result1 = dbquery("SELECT nazwa, AVG(ocena) as srednia, COUNT(nazwa) as ilosc FROM oceny WHERE nazwa='".$data['nazwa']."'");
  88. $data1 = mysql_fetch_assoc($result1);
  89.  
  90. echo "<center><font size='2'><b>Ocena zawodnika:</b></font><div class='oceny'><center><font class='font_oceny'><strong>".number_format($data1['srednia'], 2, ".", "")."</strong></font></center></div><font size='2'>Oddanych głosów: <b>".$data1['ilosc']."</b></font></center>";
  91. ?>
  92. <br />
  93.  
  94. <?php
  95. if (iMEMBER) {
  96. echo "<form method='POST' action='/zawodnik.php?id=".$data['id']."'>
  97.  
  98. <input name='nazwa' type='hidden' value='".$data['nazwa']."'>
  99. <input name='user' type='hidden' value='".$userdata['user_name']."'>
  100.  
  101.  
  102. <center><font size='2'><b>Oceń zawodnika:</b></font> <select name='ocena' class='textbox'>
  103. <option>1</option>
  104. <option>2</option>
  105. <option>3</option>
  106. <option>4</option>
  107. <option>5</option>
  108. <option>6</option>
  109. <option>7</option>
  110. <option>8</option>
  111. <option>9</option>
  112. <option>10</option>
  113. </select>
  114.  
  115. <input class='button' type='submit' name='ocen' value='Oceń'>
  116. </form></center>";
  117. } else {
  118. 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>";
  119. }
  120.  
  121. ?>


W formularzu przesyłam imię i nazwisko zawodnika jako "nazwa" oraz ukrytą nazwę usera jako user_name pewnie trzeba będzie jeszcze dodać datę ale to już czekam na jakąś pomoc.

Z góry dziękuję.
valkirek
Dodaj w bazie pole z data i sprawdzaj czy głosował dzisiaj
adams1692
Powiem szczerze że nawet nie wiem ja się za to zabrać. Proszę o pomoc.
pedro84
Cytat(adams1692 @ 16.09.2013, 21:14:26 ) *
Powiem szczerze że nawet nie wiem ja się za to zabrać. Proszę o pomoc.

Ale z czym mamy Ci pomóc jak nie znasz podstaw? Zleć to komuś za browara i po kłopocie.
kujol
Porównujesz aktualną datę z datą dodania ostatniego głosu. Ale jeśli nie potrafisz podstaw to w tym dziale nie znajdziesz kogoś kto ci to napiszę wink.gif.
adams1692
No dobra daliście mi do myślenia trochę pokombinowałem i mam takie coś:
  1. <?php
  2.  
  3. $result = dbquery("SELECT id, nazwa, ostatni, zolta, czerwona, info, klub, zdjecie, pozycja, dataurodzenia, miejsce, wzrost, waga, zamieszkanie, pseudonim FROM sklad WHERE id='".$_GET['id']."'");
  4. $data = mysql_fetch_array($result);
  5.  
  6. echo "<table align='center' cellpadding='0' cellspacing='0'>
  7. <tr>
  8. <td valign='middle'><center><img src='/zawodnicy/".$data['zdjecie']."'></center></td>
  9. <td valign='middle'>
  10.  
  11.  
  12. <table height='160' cellspacing='0' rules='rows'>
  13. <tr bgcolor='#f0f0f0'>
  14. <td width='200'><font size='2'><b>Imię i nazwisko:</b></font></td>
  15. <td width='200'><font size='2'><b>".$data['nazwa']."</b></font></td>
  16. </tr>
  17. <tr bgcolor='#d0d0d0'>
  18. <td width='200'><font size='2'><b>Data urodzenia:</b></font></td>
  19. <td width='200'><font size='2'><b>".$data['dataurodzenia']."</b></font></td>
  20. </tr>
  21. <tr bgcolor='#f0f0f0'>
  22. <td width='200'><font size='2'><b>Miejsce urodzenia:</b></font></td>
  23. <td width='200'><img src='/images/polska.png'> <font size='2'><b>".$data['miejsce']."</b></font></td>
  24. </tr>
  25. <tr bgcolor='#d0d0d0'>
  26. <td width='200'><font size='2'><b>Wzrost:</b></font></td>
  27. <td width='200'><font size='2'><b>".$data['wzrost']." cm</b></font></td>
  28. </tr>
  29. <tr bgcolor='#f0f0f0'>
  30. <td width='200'><font size='2'><b>Waga:</b></font></td>
  31. <td width='200'><font size='2'><b>".$data['waga']." kg</b></font></td>
  32. </tr>
  33. <tr bgcolor='#d0d0d0'>
  34. <td width='200'><font size='2'><b>Miejsce zamieszkania:</b></font></td>
  35. <td width='200'><img src='/images/polska.png'> <font size='2'><b>".$data['zamieszkanie']."</b></font></td>
  36. </tr>
  37. <tr bgcolor='#f0f0f0'>
  38. <td width='200'><font size='2'><b>Pseudonim:</b></font></td>
  39. <td width='200'><font size='2'><b>".$data['pseudonim']."</b></font></td>
  40. </tr>
  41. <tr bgcolor='#d0d0d0'>
  42. <td width='200'><font size='2'><b>Poprzedni klub:</b></font></td>
  43. <td width='200'><font size='2'><b>".$data['klub']."</b></font></td>
  44. </tr>
  45. </table>
  46.  
  47.  
  48. </td>
  49. </tr>
  50. </table><br>
  51. <center><a href='/infusions/custom_contact/contact.php' target='blank'><b><font size='2'><font color='red'>UZUPEŁNIJ DANE O ZAWODNIKU</font></font></b></a></center><br />";
  52.  
  53.  
  54.  
  55. if(isset($_POST['ocen'])){ // sprawdzamy czy kliknięto na przycisk do wysyłania formularza.
  56.  
  57.  
  58. if(!empty($nazwa) and !empty($ocena) and !empty($user)){ // sprawdzamy czy zostały wypełnione wszystkie pola
  59.  
  60. $rows = dbquery("SELECT COUNT(*) FROM oceny WHERE nazwa='".$_POST['nazwa']."' AND user='".$userdata['user_name']."' AND date='".date("d.m.Y")."'", 0);
  61.  
  62. if ($rows) {
  63.  
  64. echo "Oddałeś już dziś głos na tego zawodnika!";
  65.  
  66. // wyświetlamy komunikat o błędnym wypełnieniu formularza
  67.  
  68.  
  69. } else {
  70.  
  71. $zapytanie = "INSERT INTO oceny SET nazwa='$nazwa', ocena='$ocena', user='$user', date='".date("d.m.Y")."'";
  72. $wykonaj = mysql_query($zapytanie); // dodajemy rekord do bazy
  73.  
  74.  
  75. echo '<table cellpadding="0" width="100%" bgcolor="#d4d4d4"><tr><td><center><b>Oceniono!</b></center></td></tr></table>';
  76. }
  77. } else {
  78.  
  79. echo '<table cellpadding="0" width="100%" bgcolor="#d4d4d4"><tr><td><center><b>Nie wypełniłeś wszystkich pól!</b></center></td></tr></table>';
  80.  
  81. }
  82.  
  83. }
  84.  
  85. global $userdata;
  86.  
  87. $result1 = dbquery("SELECT nazwa, AVG(ocena) as srednia, COUNT(nazwa) as ilosc FROM oceny WHERE nazwa='".$data['nazwa']."'");
  88. $data1 = mysql_fetch_assoc($result1);
  89.  
  90. echo "<center><font size='2'><b>Ocena zawodnika:</b></font><div class='oceny'><center><font class='font_oceny'><strong>".number_format($data1['srednia'], 2, ".", "")."</strong></font></center></div><font size='2'>Oddanych głosów: <b>".$data1['ilosc']."</b></font></center><br />";
  91.  
  92.  
  93.  
  94. if (iMEMBER) {
  95. echo "<form method='POST' action='/viewpage.php?page_id=267&id=".$data['id']."'>
  96.  
  97. <input name='nazwa' type='hidden' value='".$data['nazwa']."'>
  98. <input name='user' type='hidden' value='".$userdata['user_name']."'>
  99. <input name='date' type='hidden' value='".date("d.m.Y")."'>
  100.  
  101.  
  102. <center><font size='2'><b>Oceń zawodnika:</b></font> <select name='ocena' class='textbox'>
  103. <option>1</option>
  104. <option>2</option>
  105. <option>3</option>
  106. <option>4</option>
  107. <option>5</option>
  108. <option>6</option>
  109. <option>7</option>
  110. <option>8</option>
  111. <option>9</option>
  112. <option>10</option>
  113. </select>
  114.  
  115. <input class='button' type='submit' name='ocen' value='Oceń'>
  116. </form></center>";
  117. } else {
  118. 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>";
  119. }
  120.  
  121. ?>


Jednak coś nie działa więc teraz proszę Was o pomoc. Pozdrawiam
pedro84
Co to znaczy, że "coś nie działa"?

BTW. SqlInjection się kłania.
adams1692
Po wciśnięciu przycisku wyślij bez względu na to czy wcześniej glosowalem na danego zawodnika wyświetla się że głos został oddany.
pedro84
Zobacz sobie co zawiera zmienna $rows.
adams1692
Ale co tam jest źle? Bo nie wiem podpowiedz mi proszę.
kropamk
kolega pedro84 dobrze Ci radzi, ja bym też tam poszukał błędu tzn może nie tyle co błędu ale to co przechowuje ta zmienna a z tego co wiem chcesz sprawdzić czy istnieje w tej tabeli użytkownik z data dzisiejsza a tego nie robisz
Szamano
Jeśli chcesz aby użytkownik mógł oddać głos raz dziennie musisz dodać kolumnę np czas (int) w bazie i przy INSERCIE dać czas = time()+ 86400 następnie sprawdzasz przy kolejnej próbie oddania głosu czy czas z bazy jest większy od time() jeśli nie robisz INSERTA. Poczytaj o SQL Injection .
kropamk
po co kombinować z time ?

nie wystarczy drobna modyfikacja
  1. $rows = mysql_query("SELECT * FROM oceny WHERE nazwa='" . $_POST['nazwa'] . "' AND user='" . $userdata['user_name'] . "' AND date='" . date("d.m.Y") . "'");
  2.  
  3. if (mysql_num_rows($rows) > 0) {
  4.  
  5. echo "Oddałeś już dziś głos na tego zawodnika!";
  6.  
  7. // wyświetlamy komunikat o błędnym wypełnieniu formularza
  8. } ...
markonix
Trzeba się zdecydować czy mowa o 24h czy o danym dniu.
Jeżeli te drugie to w przeciągu minuty o północy jest w stanie oddać 2 głosy co jest raczej niewskazane.
adams1692
kropamk, o to mi chodziło działa tak jak chciałem dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.