ghanlee
30.11.2003, 22:54:45
Mam ankiete i chciałbym zeby ankietowani wypełniali wszystkie konieczne pola ale w moejj ankiecie są dwa rodzaje pytań i odpowiedzi
- TAK/NIE (zaznaczyc mozna tylko jedna odpowiedz)
- i kilka odpowiedzi do wyboru (mozna zaznaczyc wiecej niż jedna ale trzeba coś zaznaczyć)
Jaki skrypt proponujecie ? Ponizej podaje plik ankieta.php i zliczanie.php
[xml:1:b93c801e6e]
1</font><font size="3">. Czy Pan/i dokonuje zakupów w sklepach internetowych
?</font></strong><br>
<input type=radio name=odp1 value=tak>
Tak <br>
<input type=radio name=odp1 value=nie>
Nie <br>
<strong><font size="3">2. Jezeli nie to z jakich powodow ?</font></strong><br>
<input type=checkbox name=odp2a value=internet>
Brak dostepu do internetu <br>
<input type=checkbox name=odp2b value=zaufanie>
Brak zaufania do internetowego handlu <br>
<input type=checkbox name=odp2c value=dostep>
Brak bezposredniego dostepu do towaru <br>
<input type=checkbox name=odp2d value=platnosci>
Brak zaufania do sposobow platnosci<br>
<input type=checkbox name=odp2e value=obawa>
Obawa przed ujawnieniem danych osobowych<br>
<input type=checkbox name=odp2f value=doswiadczenie>
Brak doswiadczenia <br>
<input type=checkbox name=odp2g value=towary>
Brak interesujących towarow <br>
<input type=checkbox name=odp2h value=stracilem>
Straciłem/am zaufanie do tej formy sprzedaży<br>
Inne jakie ?
<input name=innaodp type=text size=50>
[/xml:1:b93c801e6e]zliczanie.php
[php:1:b93c801e6e]<?php
$file="dane1.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp1)
{
case tak:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[0]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
case nie:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[1]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>
<?
$file="dane2.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp2a)
{
case internet:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[0]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]||$linija[5]||$linija[
]||$linija[7]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>
<?
$file="dane2.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp2b)
{
case zaufanie:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[1]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]||$linija[5]||$linija[
]||$linija[7]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>
<?
$file="dane2.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp2c)
{
case dostep:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[2]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]||$linija[5]||$linija[
]||$linija[7]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>[/php:1:b93c801e6e]
[zmoderowane] <rzseattle>
kod html prosze umieszczac w znacznikach XML a nie php
zombie
1.12.2003, 11:06:36
Jeśli chodzi o input tyou radio, daj przy jednym z nich "selected":
[xml:1:ea823104eb] <input type=radio name=odp1 value=tak selected>
Tak <br>
<input type=radio name=odp1 value=nie>
Nie <br> [/xml:1:ea823104eb]... i z dyńki
Pozostałe checkboxy radziłbym nazwać np. odp2[0], odp2[1] etc... i po wysłaniu sprawdzić przy pomocy foreach, lub each, np.:
[php:1:ea823104eb]<?php
while (list($key) = each($_POST['odp2']))
{
if ($_POST['odp2'][$key] == ""){$alert .="nie wybrano odpowiedzi nr $key";}
}
if (!isset($alert))
{
// ZAPISZ
}
else
{
echo($alert);
}
?>[/php:1:ea823104eb]
ghanlee
2.12.2003, 15:48:57
Zrobilem tak jak mi pokazales ale nic sie nie dzieje
ankieta.php (część kodu ankiety)
3</font><font size="3">. Czy w przyszłości zamierza
Pan/i korzystac z oferty sklepów internetwowych ?<br>
<input type=radio name=odp3 value=tak selected>
</font></strong><font size="3">Tak <strong><br>
<input type=radio name=odp3 value=nie>
</strong>Nie</font>
zliczanie.php
[php:1:beee17c426]<?php
while (list($key) = each($_POST['odp3']))
{
if ($_POST['odp3'][$key] == ""){$alert .="nie wybrano odpowiedzi nr $key";}
}
if (!isset($alert))
{
// ZAPISZ
}
else
{
echo($alert);
}
?>[/php:1:beee17c426]
[php:1:beee17c426]<?php
$file="dane3.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp3)
{
case tak:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[0]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
case nie:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[1]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>[/php:1:beee17c426]
Czy może mi ktos powiedzieć co z tym skryptem jest zle ?
zombie
2.12.2003, 16:01:33
Co do radio, nie musisz go sprawdzać... Musi być poprawny, bo nie da się zostawić pustego pola.
Checkboxy proponowałem nazwać odp2[0] i wtedy sprawdzić całą tabelę przy pomocy [manual:0d3222f3c7]each[/manual:0d3222f3c7]
ghanlee
3.12.2003, 09:43:03
A co powoduje "selected" w innpucie typu radio ? Czy powoduje jego zaznaczenie ? Bo jeżeli tak to tym sposobem bede ankietowanym sugerował odpowiedz.
Chce zrobić coś takiego: mm pytanie - diwe odpowiedzi TAK/NIE>. gdy niz nie zostanie zaznaczone w momęcie oddania glosu pytania w ktore zostały pprawnie zaznaczone sa ukrywane a nie zaznaczone sa widoczne i zarazem widoczny jest komunikat "popraw" itp.
KaMeLeOn
3.12.2003, 09:50:41
Cytat
A co powoduje "selected" w innpucie typu radio ? Czy powoduje jego zaznaczenie ?
Kod
<input type="radio" name="nazwa" value="true" CHECKED>
zombie
3.12.2003, 09:50:48
Cytat
A co powoduje "selected" w innpucie typu radio ? Czy powoduje jego zaznaczenie ?
Rzeczywiście nie selected, tylko checked, przepraszam
Cytat
Chce zrobić coś takiego: mm pytanie - diwe odpowiedzi TAK/NIE>. gdy niz nie zostanie zaznaczone w momęcie oddania glosu pytania w ktore zostały pprawnie zaznaczone sa ukrywane a nie zaznaczone sa widoczne i zarazem widoczny jest komunikat "popraw" itp.
użyj do tego pętli, którą Ci wcześniej opisałem... Jeśli wpis jest poprawny wyświetlasz pole typu hidden, jeśli nie - select. Pętla powinna wyglądać tak:
[php:1:0366d91a7d]<?php
while (list($key, $value) = each($_POST['odp2']))
{
// tu sprawdzanie i wyświetlanie
}
?>[/php:1:0366d91a7d]
ghanlee
3.12.2003, 21:55:08
Z imputy typu "radio" sie udało. ale za Chiny nie moge zrobic tego z checboxami nadal nie wymusza zaznaczenia ktoregokolwiek z pol
moze cos z kodem pochrzanilem. Oto czesc kodu
[php:1:a75099c6df]<?php
while (list($key, $value) = each($_POST['odp2']))
{
// tu sprawdzanie i wyświetlanie
}
$file="dane2.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp2[0])
{
case internet:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[0]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]||$linija[5]||$linija[
]||$linija[7]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>
<?
$file="dane2.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp2[1])
{
case zaufanie:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[1]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]||$linija[5]||$linija[
]||$linija[7]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>
<?
$file="dane2.txt"; // tu wpisz nazwe pliku txt w którym maj1 bya przechowywane dane.
switch($odp2[2])
{
case dostep:
$plik=file($file);
$linija=explode("||", $plik[0]);
$linija[2]++;
$all="$linija[0]||$linija[1]||$linija[2]||$linija[3]||$linija[4]||$linija[5]||$linija[
]||$linija[7]";
$pl=fopen("$file", "r+");
fwrite($pl, $all);
fclose($pl);
break;
}
?>[/php:1:a75099c6df]
zombie
4.12.2003, 08:34:56
[php:1:13ef62b590]<?php
while (list($key, $value) = each($_POST['odp2']))
{
// tu sprawdzanie i wyświetlanie
}
?>[/php:1:13ef62b590]
- to nie wystarczy. musisz w tej pętli sprawdzić, czy wszystkie odp2 mają wartości, np.:
[php:1:13ef62b590]<?php
while (list($key, $value) = each($_POST['odp2']))
{
if ($value == ""){$alert .="nie wybrano odpowiedzi nr $key";}
}
if (!isset($alert)){
// kod zapisu do pliku;
} else {
echo($alert);
}
?>[/php:1:13ef62b590]
Synaps
4.12.2003, 09:19:14
Cytat
[php:1:d55867dced]<?php
while (list($key, $value) = each($_POST['odp2']))
{
if ($value == ""){$alert .="nie wybrano odpowiedzi nr $key";}
}
if (!isset($alert)){
// kod zapisu do pliku;
} else {
echo($alert);
}
?>[/php:1:d55867dced]
Hej, jeśli jeszcze dobrze pamiętam właściwości checkbox'a to kodzik z góry nigdy nie zwroci Ci info ze jakis z checkboxow nie jest 'zaznaczony'.
Z obiektem tego typu (checkbox) jest problem tego typu iż jeżeli nie jest on "checked" to zmienna o nazwie , w tym przypadku np. $odp[2] nie pojawi się powiedzmy w kodzie ( po submicie nie zostanie ona przekazana do skryptu). Jeśli się myle prosze poprawcie mnie.
A tak dodając z własnego doświadczenia , to do nazywnia checkboxow i ich obslugi rowniez uzywam el. tablicy , tylko że asocjacyjnej. Nazwy wygladaj wtedy $checkbox['pyt1'].Wtedy taki kodzik wyglada tak :
[php:1:d55867dced]
foreach($tablica_pytan as $pytanie){
if(empty($_POST['checkbox'][$pytanie])){
$_error.="Prosze o uzupełnienie odp. do pytania ".$pytanie."n";
}
}
echo $_error;
[/php:1:d55867dced]
Mam nadzieje , że to coś pomoże.
Pozdrawiam
zombie
4.12.2003, 09:52:10
Cytat
Hej, jeśli jeszcze dobrze pamiętam właściwości checkbox'a to kodzik z góry nigdy nie zwroci Ci info ze jakis z checkboxow nie jest 'zaznaczony'. Z obiektem tego typu (checkbox) jest problem tego typu iż jeżeli nie jest on "checked" to zmienna o nazwie , w tym przypadku np. $odp[2] nie pojawi się powiedzmy w kodzie ( po submicie nie zostanie ona przekazana do skryptu). Jeśli się myle prosze poprawcie mnie.
absolutna racja. mój błąd. each można więc zastosować tu tylko jeśli wiemy ile checkboxów być powinno, więc:
[php:1:5030f541bd]<?php
if (count($_POST['odp2']) == "5"){ // 5 to liczba wszystkich checkboxów
// kod zapisu do pliku;
} else {
echo("nie wybrano wszystkich pól");
}
?>[/php:1:5030f541bd]
[manual:5030f541bd]each[/manual:5030f541bd] nie ma tu zastosowania
ghanlee
4.12.2003, 10:40:57
Cytat
Cytat
Hej, jeśli jeszcze dobrze pamiętam właściwości checkbox'a to kodzik z góry nigdy nie zwroci Ci info ze jakis z checkboxow nie jest 'zaznaczony'. Z obiektem tego typu (checkbox) jest problem tego typu iż jeżeli nie jest on "checked" to zmienna o nazwie , w tym przypadku np. $odp[2] nie pojawi się powiedzmy w kodzie ( po submicie nie zostanie ona przekazana do skryptu). Jeśli się myle prosze poprawcie mnie.
absolutna racja. mój błąd. each można więc zastosować tu tylko jeśli wiemy ile checkboxów być powinno, więc:
[php:1:f79663e45f]<?php
if (count($_POST['odp2']) == "5"){ // 5 to liczba wszystkich checkboxów
// kod zapisu do pliku;
} else {
echo("nie wybrano wszystkich pól");
}
?>[/php:1:f79663e45f]
[manual:f79663e45f]each[/manual:f79663e45f] nie ma tu zastosowania
Jeszcze nie o to mi chodzilo. Mam 5 checkboxów i w momęcie gdy zaznaczam tylko jednego pojawia sie "Nie wypełniles.....", zaznaczam dwa - to samo. Ale gdy zaznacze wszystkie 5 to dopiero wtedy komunikat znika. A gdy liczbe checkboxów zmienilem na 1 to komunikat "nie wypelniles..." pojawia sie w momęcie zaznaczenia 2 odpowiedzi ale jak zaznaczy tylko jedna to jest OK.
Jest jescze jeden problem a mianowicie w momęcie gdy ankietowany nie zaznaczy wszystkich wymaganych pól (conajmniej jednego) to i tak skrypt zliczajacy zlicza te glosy mimo tego ze zle zaglosował. Ja sobie wyobrazalem to tak ze jak zaglosuje zle to pojawia sie ztrona popraw.php a jak wszystko ok to strona zliczanie.php ktora zliczy prawidlowe glosy.
ghanlee
4.12.2003, 20:44:05
Czy moze mi ktos pomóc ?
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.