Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: Prosba o pomoc - problem z formularzem

czesc,

chciałbym uzyskac taki efekt: jezeli nie wysle zadnej zmiennej c'x'[], formularz nie zwroci mi g'x'[] czyli jezeli nie ma zdnego c1[] to nie pokaze sie g1[], itd.

z gory dzieki za pomoc.

ponizej kod:

?php
if (count($_POST['x']))
{

foreach ($_POST as $name => $value){

if (is_array($value)){

for ($i = 0; $i < count($value); $i++){

echo $name.'  '.$value[$i].'';

}//koniec for

}//koniec array

}//koniec foreach

}else{

?


form action="index.php" method="post">

Wybierz wersje
input type="hidden" name="g1[]" value="grupa 1" />grupa 1
input type="checkbox" name="c1[]" value="czesc 1.1" />czesc 1.1
input type="checkbox" name="c1[]" value="czesc 1.2" />czesc 1.2
input type="checkbox" name="c1[]" value="czesc 1.3" />czesc 1.3
input type="checkbox" name="c1[]" value="czesc 1.4" />czesc 1.4
input type="checkbox" name="c1[]" value="czesc 1.5" />czesc 1.5
input type="checkbox" name="c1[]" value="czesc 1.6" />czesc 1.6
input type="hidden" name="g2[]" value="grupa 2" />grupa 2
input type="checkbox" name="c2[]" value="czesc 2.1" />czesc 2.1
input type="checkbox" name="c2[]" value="czesc 2.2" />czesc 2.2
input type="hidden" name="g3[]" value="grupa 3" />grupa 3
input type="checkbox" name="c3[]" value="czesc 3.1" />czesc 3.1
input type="checkbox" name="c3[]" value="czesc 3.2" />czesc 3.2
input type="checkbox" name="c3[]" value="czesc 3.3" />czesc 3.3

input type="submit" name="x" value="go">
/form>



?php
}
?

Maciej Szczepański edytował(a) ten post dnia 20.02.09 o godzinie 11:16
Rafal Zalewski

Rafal Zalewski Senior IT Project
Manager / Agile PM®
Practitioner /
Prof...

Temat: Prosba o pomoc - problem z formularzem

Mysle, ze nalezy sie zastanowic czy g1, g2 i g3 w ogole jest potrzebne.

Kilka uwag:
1. Przy g1, g2 i g3 jesli sa uzywane tylko w jednym 'input' nie ma sensu dawac im [].
2. Przy takim kodzie g1, g2 i g3 zawsze beda zainicjalizowane wartoscia bez wzgledu na wartosci 'c' (i jak rozumiem tu jest problem).
3. Rozwiazaniem problemu moze byc w ogole wykasowanie input'ow z g1, g2 i g3 i zwykle sprawdzenie wartosci w tablicy 'c'.
Domyslam sie ze w skrypcie, ktory bedzie wykonany po wyslaniu formularza chcesz wczesniej wiedziec czy np grupa 1 jest aktywna czy nie. Wystarczy sprawdzic czy w tablicy c1 sa jakies dane i jesli tak to wiemy ze jest.

Jesli nie napisalem zrozumiale to napisz a postaram sie wyjasnic dokladniej.Rafal Zalewski edytował(a) ten post dnia 20.02.09 o godzinie 11:45
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: Prosba o pomoc - problem z formularzem

Rafal, dzieki za podjecie tematu, ale chyba zapomnialem o jednej waznej rzeczy, ten formularz jest generowany z bazy. tak wiec raz moze wygladac tak:


Wybierz wersje
input type="hidden" name="g1" value="grupa 1" />grupa 1
input type="checkbox" name="c1[]" value="czesc 1.1" />czesc 1.1
input type="checkbox" name="c1[]" value="czesc 1.2" />czesc 1.2
input type="hidden" name="g2" value="grupa 2" />grupa 2
input type="checkbox" name="c2[]" value="czesc 2.1" />czesc 2.1
input type="hidden" name="g3" value="grupa 3" />grupa 3
input type="checkbox" name="c3[]" value="czesc 3.1" />czesc 3.1


a innym razem tak:

Wybierz wersje
input type="hidden" name="g1" value="grupa 1" />grupa 1
input type="checkbox" name="c1[]" value="czesc 1.1" />czesc 1.1
input type="checkbox" name="c1[]" value="czesc 1.2" />czesc 1.2
input type="hidden" name="g4" value="grupa 4" />grupa 4
input type="checkbox" name="c4[]" value="czesc 4.1" />czesc 4.1
input type="hidden" name="g8" value="grupa 8" />grupa 8
input type="checkbox" name="c8[]" value="czesc 8.1" />czesc 8.1
input type="checkbox" name="c8[]" value="czesc 8.2" />czesc 8.2
input type="checkbox" name="c8[]" value="czesc 8.3" />czesc 8.3


grup i podgrup moze byc nieskonczenie wiele.

poza tym nie wiem jak dokonac sprawdzenia wartosci w tablicy...
Rafal Zalewski

Rafal Zalewski Senior IT Project
Manager / Agile PM®
Practitioner /
Prof...

Temat: Prosba o pomoc - problem z formularzem

Czy tablica jest pusta mozna sprawdzic albo funkcja is_null() albo przyrownac do NULL ($tab===NULL). Na php.net mozna przeczytac ze w praktyce okazuje sie ze is_null jest wolniejsze wiec optymalniej korzystac z drugiej opcji.

Rozwiazanie Twojego problemu:


<?php

function sprawdz_grupe($nazwa) {
echo "sprawdzam $nazwa<br>";
if ( $_POST[$nazwa]===NULL )
echo 'grupa nieaktywna<br>';
else {
echo 'grupa aktywna<br>';
foreach ( $_POST[$nazwa] as $val ) {
echo $val.'<br>';
}
}
echo '<br><br>';
}

sprawdz_grupe('c1');
sprawdz_grupe('c2');
sprawdz_grupe('c3');

?>

<form action="index.php" method="post">

Wybierz wersje<br>

<input type="checkbox" name="c1[]" value="czesc 1.1" />czesc 1.1<br>
<input type="checkbox" name="c1[]" value="czesc 1.2" />czesc 1.2<br>
<input type="checkbox" name="c1[]" value="czesc 1.3" />czesc 1.3<br>
<input type="checkbox" name="c1[]" value="czesc 1.4" />czesc 1.4<br>
<input type="checkbox" name="c1[]" value="czesc 1.5" />czesc 1.5<br>
<input type="checkbox" name="c1[]" value="czesc 1.6" />czesc 1.6<br>
<input type="checkbox" name="c2[]" value="czesc 2.1" />czesc 2.1<br>
<input type="checkbox" name="c2[]" value="czesc 2.2" />czesc 2.2<br>
<input type="checkbox" name="c3[]" value="czesc 3.1" />czesc 3.1<br>
<input type="checkbox" name="c3[]" value="czesc 3.2" />czesc 3.2<br>
<input type="checkbox" name="c3[]" value="czesc 3.3" />czesc 3.3<br>
<input type="submit" name="x" value="go"><br>

</form>


Sprawdzic mozna pod http://negative.pl/maciek_test/index.php
Plik zostawie na koncie na kilka godzin.

Pozostaje kwestia jak odczytac ilosc wygenerowanych grup. Nie znam dokladnie strony wiec to chyba wszystko co moge pomoc. Mysle ze problem mozna rozwiazac optymalniej ale skupiajac sie tylko na tym co napisales skrypt powinien zdac egzamin.

p.s czy tu zawsze taki problem z wklejaniem kodu? wszystkie < recznie musialem zmienic.Rafal Zalewski edytował(a) ten post dnia 20.02.09 o godzinie 12:56
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: Prosba o pomoc - problem z formularzem

Extra, tylko...

1) co sie stanie jesli formularz mam w pliku index.php a plik z wynikami nazywa sie wyniki.php?


form action="wynki.php" method="post">


do pliku pobieram dane c1, c2, c3 z bazy i wrzucam tutaj


sprawdz_grupe('c1');
sprawdz_grupe('c2');
sprawdz_grupe('c3');


jak wczytam do index.php c1,c4,c7,c9 a w wyniki.php bede mial sztywno c1,c2,c3 to nie zadziala

2) jak zamiast:

echo 'grupa aktywna';

przypisać tam nazwę grupy z input hidden?Maciej Szczepański edytował(a) ten post dnia 20.02.09 o godzinie 13:18
Rafal Zalewski

Rafal Zalewski Senior IT Project
Manager / Agile PM®
Practitioner /
Prof...

Temat: Prosba o pomoc - problem z formularzem

1. zeby rozdzielic na 2 pliki (zrobilbym tak na poczatku ale dales przyklad z 1 plikiem wiec myslalem ze taki jest plan):
- <form action="wyniki.php" method="post">
- caly kod w php wrzucic do pliku wyniki.php a reszte czyli form zostawic w index.php

problem z iloscia grup mozna rozwiazac w taki sposob, zeby przekazywac ta informacje w jakims input typu hidden. czyli przy generowaniu pliku z bazy dodac do forma linijke np:
<input type="hidden" name="ilosc_grup" value="6">
to 6 tylko oczywiscie przyklad. prawidlowa wartosc powinna byc wygenerowana podczas tworzenia index.php
majac ta informacje mozna wtedy w wyniki.php wywolywac tylko odpowiednia ilosc razy funkcje sprawdz_grupe.

wylacznie dla informacji:
samo wywolanie funkcji sprawdz_grupe dla grupy ktora nie istnieje nie popsuje skryptu. tzn jesli na sztywno wywolasz ja dla od c1 do c100 to powinno zadzialac tak jak powinno.
moja uwaga jest tylko taka zeby nie pisac tak skryptow! jest to wysoce nieoptymalne rozwiazanie i mozna je wykorzystac tylko w drodze sprawdzenia czy dany pomysl dziala. prawidlowe rozwiazanie to opcja ktora opisalem wyzej.

2. przy generowaniu index.php zrobilbym
<input type="hidden" name="c1_name" value="nazwa_dla_g1">
np
<input type="hidden" name="c1_name" value="kwiaty" />
a potem w wyniki php zamiast
echo 'grupa aktywna';
dac
echo 'grupa aktywna o nazwie "'.$_POST[$nazwa.'_name'].'"
<br>';

zaktualizowalem plik na koncie (tylko odnosnie nazw). sprawdz.Rafal Zalewski edytował(a) ten post dnia 20.02.09 o godzinie 14:00
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: Prosba o pomoc - problem z formularzem

ja splodzilem cos takiego

INDEX.PHP

form action="wyniki.php" method="post">

p>Wybierz wersje/p>

input type="hidden" name="c1_name" value="grupa 1">grupa 1
input type="hidden" name="sprawdz[]" value="c1">
input type="checkbox" name="c1[]" value="czesc_1.1" />czesc 1.1
input type="checkbox" name="c1[]" value="czesc_1.2" />czesc 1.2
input type="checkbox" name="c1[]" value="czesc_1.3" />czesc 1.3
input type="checkbox" name="c1[]" value="czesc_1.4" />czesc 1.4
input type="checkbox" name="c1[]" value="czesc_1.5" />czesc 1.5
input type="checkbox" name="c1[]" value="czesc_1.6" />czesc 1.6

input type="hidden" name="c2_name" value="grupa 2">grupa 2
input type="hidden" name="sprawdz[]" value="c2">
input type="checkbox" name="c2[]" value="czesc 2.1" />czesc 2.1
input type="checkbox" name="c2[]" value="czesc 2.2" />czesc 2.2

input type="hidden" name="c3_name" value="grupa 3">grupa 3
input type="hidden" name="sprawdz[]" value="c3">
input type="checkbox" name="c3[]" value="czesc 3.1" />czesc 3.1
input type="checkbox" name="c3[]" value="czesc 3.2" />czesc 3.2
input type="checkbox" name="c3[]" value="czesc 3.3" />czesc 3.3

input type="hidden" name="c4_name" value="grupa 4">grupa 4
input type="hidden" name="sprawdz[]" value="c4">
input type="checkbox" name="c4[]" value="czesc 4.1" />czesc 4.1
input type="checkbox" name="c4[]" value="czesc 4.2" />czesc 4.2
input type="checkbox" name="c4[]" value="czesc 4.3" />czesc 4.3

input type="submit" name="x" value="go">
/form>


WYNIKI.PHP


function sprawdz_grupe($nazwa) {



if ( $_POST[$nazwa]===NULL ){
//echo 'grupa nieaktywna';

}else{
echo $_POST[$nazwa.'_name'].'';
foreach ( $_POST[$nazwa] as $val ){
echo $val.'';
}
}
echo '';
}


if(count($_POST['sprawdz'])){

foreach ($_POST as $name => $value){

if (is_array($value)){

sprawdz_grupe(''.$name.'');


}//koniec array

}//koniec foreach

}


Niby ok, tylko masz moze pomysl jak usunąc te c1, c2,c3,c4 na gorze przy wywoływaniu wyniki.php?

Ogolnie dokladnie o cos takiego mi chodzilo, wszedzie gdzie jest c1 wrzuce sobie zmienna z bazy no i powinno dzialac, przynajmniej mam taka nadzieje
Rafal Zalewski

Rafal Zalewski Senior IT Project
Manager / Agile PM®
Practitioner /
Prof...

Temat: Prosba o pomoc - problem z formularzem

z sprawdz[] jest to rozwiazanie chociaz ja obstawialbym przy wysylaniu tylko informacji o ilosci grup. przy kilku, kilkunastu grupach duzej roznicy to faktycznie nie zrobi ale gdyby bylo duzo wiecej to troche szkoda wysylac kilkadziesiat linijek ze sprawdz[] zamiast jednej z 'ilosc_grup'.

sprecyzuj ktore c1,c2,c3 u gory.
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: Prosba o pomoc - problem z formularzem

1) sprobuj odpalic sobie moj kod u siebie, po kliknieciu w formularz przykladowy wynik wyglada nastepujaca:


c1
c2
c3
c4
grupa 1
czesc_1.2
czesc_1.3
czesc_1.4
grupa 2
czesc 2.1
czesc 2.2
grupa 4
czesc 4.1
czesc 4.2
czesc 4.3


mam na mysli usuniecie c1, c2, c3, c4 na samej gorze.

2) w zadnym wypadku nie upieram sie przy swojej wersji, to Ty tutaj jestes guru tak wiec jesli ilosc_grup jest lepszym rozwiazaniem to wierze ze tak jest.

napisz prosze tylko jak to zrobic. dodaje sobie inputa gdzies na koncu

input type="hidden" name="ilosc_grup" value="6"

skad wiem ile jest "value"? probowalem cos podzialac z funkcja count() ale cos mi nie idzieMaciej Szczepański edytował(a) ten post dnia 20.02.09 o godzinie 15:55
Rafal Zalewski

Rafal Zalewski Senior IT Project
Manager / Agile PM®
Practitioner /
Prof...

Temat: Prosba o pomoc - problem z formularzem

pojawiajace sie c1,c2 to wynik wlasnie dodania inputow ze sprawdz[].
rozwiazania sa 2:
1. przy zalozeniu ze utrzymujemy inputy ze sprawdz[], nalezaloby zmienic kod. funkcja sprawdz_grupe zostaje bez zmian natomiast dalej powinno pojsc tak:

foreach ($_POST['sprawdz'] as $name) {
sprawdz_grupe($name);
}

przy czym nalezy sie upewnic ze w formie przy inputach ze sprawdz[] jako value maja wlasnie wystepowac nazwy c1, c2 itd. czyli wg schematu jaki robisz do tej pory.
2. wyrzucasz sprawdz[] a dodajesz inputa z 'ilosc_grup'. nie jest to nic skomplikowanego ale zeby Ci pomoc to musialbym zobaczyc skrypt ktory generuje index.php. jesli znajduja sie tam hasla lub loginy do laczenia z baza to nie zapomnij ich oczywiscie usunac przed umieszczeniem posta. zawsze tez mozesz mi go wrzucic na priv'a w ramach bezpieczenstwa.
Maciej Szczepański

Maciej Szczepański www, marketing,
reklama

Temat: Prosba o pomoc - problem z formularzem

Ok wszystko dziala, wielkie dzieki za pomoc.
Rafal Zalewski

Rafal Zalewski Senior IT Project
Manager / Agile PM®
Practitioner /
Prof...

Temat: Prosba o pomoc - problem z formularzem

Ciesze sie, ze moglem pomoc. Powodzenia.

Następna dyskusja:

Awaria prosba o pomoc - Pil...




Wyślij zaproszenie do