Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z ankieta
Forum PHP.pl > Forum > PHP
zaix
Witam.
Wiem, że tematów odnośnie ankiet było już bardzo dużo, ale jakoś w żadnym nie znalazłem podpowiedzi do swojego problemu.
Problem pewnie dal zdecydowanej większosci użytkowników forum jest bardzo błachy, jednak dla mnie początkującego w tej dzieninie (czyt. zielony jak trawka na wiosne;)) jest dość znaczący. Ale do rzeczy:
- mam napisać ankietę w pracy no i jednym z wymogów jest, żeby każde pytanie było na osobnej stronie. nie wiem jak zrobić, żeby poprzez naciśnięcie przycisku "dalej" przechodziło się do następnego pytania, a jednocześnie zpisywała się odpowiedź.-
- jak można zabezpieczyć ankietę przed wielokrotnym głosowaniem, jeżeli na jednym stanowisku bedzie pracować kilku użytkowników, a ankieta ma być anonimowa. Znalezione na forum podpowiedzi blokuja stanowisko więc traci to troche sens.
Z góry dzięki wszystkim za zainteresowanie i pomoc.
Pozdrawiam
zaix
webdice
Poczytaj o sesjach.
mrok
przechodzenie na nastepna strone mozesz obejsc przy pomocy js i manipulacji wyswietlaniem elementów (najlepiej calych blokow obj.style.display='none') po kliknieciu w przycisk.
Cotter
Jeżeli chodzi o oddzielne strony dla pytań to polecam lekturę manuala php dotyczącą zmiennych sesyjnych:
sesje

Najprościej można to zrobić tworząc skrypt, który patrzy na jakie pytania zostały już udzielone odpowiedzi i wyświetla następne pytanie. Odpowiedzi są zapisywane w zmiennych sesyjnych, a po wypełnieniu całego formularza w bazie danych lub w innym bardziej trwałym miejscu.

Jeżeli chodzi o zabezpieczenie formularza to nie istnieje stu procentowo pewne rozwiązanie. Jeżeli na dodatek chcesz umożliwiać wypełnianie go na jednym komuterze anonimowo to musisz pożegnać się z takim zabezpieczeniem. Po prostu nie da się sprawdzić kto siedzi przy komputerze nie używając kont użytkowników.
zaix
Znaczy będą zmieniali się zalogowani użytkownicy. Tylko nie wiem czy ciasteczka zablokuja mi użytkownika czy stanowisko, ale w sumie jest to do przetestowania.

Pojawil mi sie natomias inny "problem". pierwsze pytanie bedzie okreslalo grupe do jakiej nalezy wypelniajacy, np: a) duzy b)sredni c)maly. na podstawie wyboru jednej z odpowiedzi mam zliczac pozostale dla kazdej grupy osobno. domyslam sie ze powinienemzrobic to przez ustawienie zmiennej na te odpowiedzi i potem wedlug niej sumowac. Ale jak? bede wdzieczny za podpowiedzi.
Pozdrawiam

Kod
Witam.
Mam taki sobie skrypt: [code]
<body>

     <form method=post action="ankieta_ankieta_koniec_tak.php">
    
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie -1- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>Skąd jesteś?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos1" value="europa" >  europa</font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos1" value="azja" > azja </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos1" value="afryka" > afryka </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                    <input type="radio" name="glos1" value="ameryka" > ameryka </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos1" value="australia" > australia </font></p></th>
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie
                          -2- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>Lubisz swoj kraj?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos2" value="bardzo" >  bardzo </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos2" value="nie bardzo" > nie bardzo </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos2" value="troche" > troche </font></p></th>
                 <th width="694" height="34" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                    <input type="radio" name="glos2" value="malo" > malo </font></p></th>
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie -3- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>a inne kraje?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos3" value="bardzo" >  bardzo</font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos3" value="nie bardzo" > niebardzo </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos3" value="troche" > troche </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                    <input type="radio" name="glos3" value="malo" > malo </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos3" value="wcale" > wcale </font></p></th>
         <th width="694" height="20" align="center" valign="top" class="style44" scope=col><input type="submit" value="Zapisz głosy">  
    </form>
</table>
</body>
</html>

i problem moj problem polega na tym ze nie dzialaja mi cookies. Probowalem je ustawic na mnostwo sposobow ale nic. jeden z nich to:
Kod
<?
if ($_COOKIE["sonda"]<>"1")
{
$czyglosowac="mozna"; // można dodać głos
// ustaw ciasteczko; czas życia - 24 godziny
setcookie("sonda","1",time()+24*3600);
}
else
$czyglosowac="niemozna";
?>

Kod
<?
if ($czyglosowac=="mozna")
echo "<p>pytaniap>";
else
echo "<p>Głosy już zostały oddany!</p>";
?>

Za wszelką pomoc w ustawieniu ciasteczek wielkie dzieki.
pozdrawiam

[/code]

troche malo czytelny ten pierwszy kod wiec jeszce raz go wkleje i sorki za zbedne generowanie postow.
Kod
<body>

     <form method=post action="ankieta_ankieta_koniec_tak.php">
    
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie -1- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>Skąd jesteś?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos1" value="europa" >  europa</font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos1" value="azja" > azja </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos1" value="afryka" > afryka </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                    <input type="radio" name="glos1" value="ameryka" > ameryka </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos1" value="australia" > australia </font></p></th>
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie
                          -2- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>Lubisz swoj kraj?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos2" value="bardzo" >  bardzo </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos2" value="nie bardzo" > nie bardzo </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos2" value="troche" > troche </font></p></th>
                 <th width="694" height="34" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                    <input type="radio" name="glos2" value="malo" > malo </font></p></th>
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie -3- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>a inne kraje?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos3" value="bardzo" >  bardzo</font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos3" value="nie bardzo" > niebardzo </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos3" value="troche" > troche </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                    <input type="radio" name="glos3" value="malo" > malo </font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos3" value="wcale" > wcale </font></p></th>
         <th width="694" height="20" align="center" valign="top" class="style44" scope=col><input type="submit" value="Zapisz głosy">  
    </form>
</table>
</body>
</html>

pytania wyciete z tabelki stad te <th></th>
pozdrawiam
dzem__
nie baw sie cookies, tylko zmienna $_SESSION
Pilsener
Informacje pomiędzy formularzami przekazujesz:

Kod
$pytanie2 = $_POST['pytanie2'];

echo '<input type="hidden" name="pytanie2" value="'.$pytanie2.'" />';
- i leci sobie dalej, do następnego etapu

A najlepiej zlepiaj z tego tablicę i użyj separatora lub serializacji:

Kod
echo '<input type="hidden" name="odpowiedzi" value="TAK||NIE||NIE||TAK||NIE" />';
- doklejasz po prostu kolejną odpowiedź ankiety, potem wystarczy explode i masz elegancką tablicę z odpowiedziami.

Z zabezpieczeniem gorzej, każde stanowisko pracy ma własne IP lub nazwę? Jeśli tak, to musisz zrobić tablicę:

IP||Liczba ankiet do wysłania

Po wysłaniu i dodaniu ankiety do bazy zapisujesz IP - jeśli będą np. 3 to blokujesz przyjmowanie ankiet z tego IP.

Możesz też stworzyć prosty panel logowania, gdzie trzeba podać nazwę stanowiska i hasło - dla każdego stanowiska przypada określona liczba ankiet, które można z niego wysłać guitar.gif
zaix
Niestety czasowy brak czasu nie pozwala mi na zagłębienie się bardziej w lekturę dlatego znów proszę o pomoc.
Dla fragmentu skryptu:
Kod
<body>

     <form method=post action="ankieta_ankieta_koniec_tak.php">
    
                  <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p><font size="4"> <b>Pytanie -1- </b></font></p></th>
                 <th width="694" height="10" align="left" valign="top" class="style44" scope=col><p  style="text-indent:1cm";><font size="4"><i>Skąd jesteś?</i></font> </p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos1" value="1" >  europa</font></p></th>
                 <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                         <input type="radio" name="glos1" value="2" > azja </font></p></th>
                <th width="694" height="30" align="left" valign="middle" class="style44" scope=col><p style="text-indent:2cm";> <font size="4">
                      <input type="radio" name="glos1" value="3" > afryka </font></p></th>


stworzyłem kod który ma mi zapisać dane do bazy:

Kod
<?
$odp=$HTTP_POST_VARS['glos1'];
$polaczenie=mysql_connect('localhost','root');
mysql_select_db('ankieta', $polaczenie);
$rezultat=mysql_query('SELECT odp' .$odp. 'from ankieta', $polaczenie);
$wartosc=mysql_fetch_array($rezultat);
$liczba=$wartosc['odp' .$odp];
$liczba=$liczba+1;
  $sql=mysql_query('UPDATE ankieta SET odp' .$odp.'='.$liczba, $polaczenie);
  echo 'Dodano głos!'
mysql_close ('$polaczenie');
?>


gdzie baza wygląda mniej wiecej tak:

mysql> create database ankieta;
mysql> create table ankieta (odp1 int, odp2 int, odp3 int);
mysql> insert into ankieta (odp1,odp2,odp3) values (0,0,0);

Niestety nie działa mi to.
Jeżeli można jakieś podpowiedzi, tudzież alternatywne rozwiązania.

Jest jeszcze jeden problem nad którym próbuje kombinować troche...
bo wszystko ładnie, ale mam tam jedno pytanie, a w ankiecie 20...
Co w takim przypadku...

Z góy dziękli i pozdrawiam
zaix
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.