Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ukrycie opcji 'wyślij' w formularzu
Forum PHP.pl > Forum > Przedszkole
Galakar
Witam.

Stworzyłem formularz opcji typu radio. Następnie aby zablokować możliwość wielokrotnego głosowania, dodałem w pliku php cookies. Wszystko dobrze działa, jednak natrafiłem na pewien nieoczekiwany problem. Można nacisnąć "Wyślij" bez zaznaczania którejkolwiek z opcji. Wiem, że mógłbym to rozwiązać na różne sposoby.

Opcję "checked" odrzuciłem, gdyż może to być uznane za sugerowanie odpowiedzi. Jeśli dodałbym sprawdzenie w pliku php wykonującym skrypt, to i tak dodałoby się cookies, które uniemożliwiłoby głosowanie. Dlatego postanowiłem spróbować ukryć opcję "Wyślij" w przypadku gdy wszystkie okienka nie zostaną zaznaczone.

Spróbowałem z opcją if, ale niestety coś mi nie wychodzi. Skrypt wygląda następująco:
  1. <?php
  2. //sprawdzenie cookies
  3. if (isset ($_COOKIE["ACF"]))
  4. {
  5. echo '<p class = "col">Już głosowałes. Obecnie cookies sa ustawione na 1 godzine.</p>';
  6. }
  7. //jeśli nie ma cookies przechodzimy dalej
  8. else
  9. {
  10. echo '<table cellspacing = "5" width = "90%">';
  11. echo '<tr>';
  12. echo '<td>Walka 1</td>';
  13. echo '<td>Walka 2</td>';
  14. echo '</tr>';
  15. echo '<tr>';
  16. echo '<td><input type = "radio" name = "vote" value = "Test 1">Test 1';
  17. echo '<input type = "radio" name = "vote" value = "Test 2">Test 2</td>';
  18. echo '<td><input type = "radio" name = "vote1" value = "Test 3">Test 3';
  19. echo '<input type = "radio" name = "vote1" value = "Test 4">Test 4</td>';
  20. echo '</tr>';
  21. echo '</table>';
  22. echo '<center><input type = "submit" value = "Vote"></center>';
  23. }
  24. ?>
nospor
A nie możesz najzwyklej w świecie ustawiać tego cookie dopiero gdy ktoś zaznaczy cokolwiek?
Galakar
Czy nie jest tak, że cookies, muszą znajdować się na samym początku skryptu przed wszystkim innym? Skrypt przetwarzający wygląda następująco:

  1. <?php
  2. $value = 'test';
  3. setcookie("ACF", $value, time()+3600);
  4. ?>


Tutaj znaczniki html, a następnie:

  1. <?php
  2. //pobranie głosu z formy
  3. $vote = $_REQUEST['vote'];
  4. $vote1 = $_REQUEST['vote1'];
  5.  
  6. //zalogowanie w bazie danych
  7. if(!$db = new mysqli ('mysql', 'user', 'hasło', 'nazwa'))
  8. {
  9. echo '<p class="col">Połączenie z bazą danych nieudane</p>';
  10. }
  11.  
  12. //dodanie głosu jeśli formularz został wypełniony
  13. if(!empty($vote))
  14. {
  15. $vote=addslashes($vote);
  16. $zapytanie="update wyniki
  17. set ilosc_glosow = ilosc_glosow + 1
  18. where kandydat = '$vote'";
  19. if(!($wynik=@$db->query($zapytanie)))
  20. {
  21. echo '<p class="col">Nie polaczyles sie</p>';
  22. }
  23. };
nospor
ciacha i jakiegkolwiek inne nagłówki muszą być wysłane nim zostanie wysłane cokolwiek innego do przeglądarki.

Skrypty należy pisać tak, by najpierw była akcja, a dopiero potem wyświetlanie. Jak ktoś pisze inaczej to potem ma takie problemy... Od biedy można zastosować ob_start() na początku skryptu i wówczas teoretycznie nie trzeba się martwić o to, czu ciacho jest na początku czy na końcu.
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.