Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z checkbox-em
Forum PHP.pl > Forum > PHP
tomuś
Proszę o pomoc bo bolą mnie juz oczy 8O
Funkcja pobiera z bazy mysql dane i wyświetla w postaci checkbox.
Kod wyglada następująco:

[php:1:4fadcf8484]<?php
function zaznacz_opcje($tabela, $kolumna_id, $kolumna_wyswietl, $dod_kolumna)
{
//ten kawałek teraz nie działa
// utowrzenie zmiennej kontrolnej do prawidlowego zaznaczeniapozycji na liscie wyboru
//$zaznacz[$_POST["$kolumna_id".'_'."$dod_kolumna"]]='checked';
//zapytanie do bazy danych
$zapytanie=mysql_query("select * from $tabela");
//funkcja zwracjaaca liczbe znalezionych wierszy (z wytlumionym bledem)
@$ile_znal=mysql_num_rows($zapytanie);
//jesli nic nie znajdzie nie tworzy listy i zwraca napis "blad"
if($ile_znal==0)
print 'blad';
else
{
//wypisuje kolejno pola
for($i=1; $i<=$ile_znal; $i++)
{
//funkcja zwracajaca wiersz z wyniku "zapytania"
$wiersz=mysql_fetch_array($zapytanie);
print '<input type="checkbox" name="'."$kolumna_id".'_'."$dod_kolumna".'[]'."" value="$wiersz[$kolumna_id]" $zaznacz[$i] > $wiersz[$kolumna_wyswietl]<br>n";
}
}
}
?>[/php:1:4fadcf8484]
Funkcja znajduje się w formularzu na stronie, dane przekazywane są POST-em do kolejnago formularza, który sprawdza poprawność wszystkich danych, jeśli coś jest nie tak wyświetla komunikat i tworzy ponownie poprzedni formularz. Mój problem polega na tym że nie jestem w stanie zmusić tej funkcji by wyświetlała wcześniej zaznaczone pola (z poprzedniego formularza) w formularzu wyświetlanym po sprawdzeniu danych. (jak umieścić checked?).
Wcześniet tzn. przed dodaniem [] do name="..[]" checkbox-a zapamiętywało jedynie ostatnia pozycje. Tezaz nie wiem jak to ugryść .

No niech ktoś sie wreszcie zlituje i pomoże jak to zrobić. :?:
splatch
[php:1:555334b8f8]<?php
if($ile_znal==0)
print 'blad';
else
{
//wypisuje kolejno pola
for($i=1; $i<=$ile_znal; $i++)
{
//funkcja zwracajaca wiersz z wyniku "zapytania"
$wiersz=mysql_fetch_array($zapytanie);
$spr = $wiersz['checked'] == 1 ? "checked=checked" : "";
print '<input type="checkbox"
name="'."$kolumna_id".'_'."$dod_kolumna".'[]'.""
value="$wiersz[$kolumna_id]" $spr>
$wiersz[$kolumna_wyswietl]<br>n";
}
}
}
?>[/php:1:555334b8f8]

Wystarczy, że zmienisz nazwę kolumny z $wiersz['checked'] na np. $wiersz['zaznacz'] i będzie dobrze.
tomuś
Działa, ale nie tak jak bym oczekiwał. Zaznacza mi zawsze pierwszą opcję, a ja potrzebuje by "przechowało" zaznaczenie do następnej strony. Czyli jest checkbox (pusty), ja sobie go zaznaczam, wysyłam formularz (POST-em), skrypt sprawdza co jest w nim źle (oczywiście chodzi o inne pola) i wyświetla ponownie ten sam formularz, w którym chciałbym by zaznaczone były te same pola co stronę wcześniej.
rmn
[php:1:b06f140477]<?php
<?php
if($ile_znal==0)
print 'blad';
else
{
//wypisuje kolejno pola
for($i=1; $i<=$ile_znal; $i++)
{
//funkcja zwracajaca wiersz z wyniku "zapytania"
$wiersz=mysql_fetch_array($zapytanie);

$spr =$_POST[$kolumna_id."_".$dod_kolumna."[]"] == 1 ? "checked=checked" : "";
print '<input type="checkbox"
name="'."$kolumna_id".'_'."$dod_kolumna".'[]'.""
value="$wiersz[$kolumna_id]" $spr>
$wiersz[$kolumna_wyswietl]<br>n";
}
}
}
?>[/php:1:b06f140477]
?>
zalew
[php:1:e53ba2a6e6]<?php
for ($i=0; $i<count($_POST['boxy']); $i++) {
echo "<input type="checkbox" name="boxy[]" value="cokolwiek"";
if (isset($_POST['boxy'][$i])) echo " checked ";
echo ">";
}
}
?>[/php:1:e53ba2a6e6]
o takie cos ci chodzi czy zle zrozumialem?
tomuś
To już przerobiłem i faktycznie działa, ale zwraca tylko ostatnia z zaznaczonych pozycji.
Dzięki za odpowiedzi. Znalazłem rozwiązanie, wyglada to tak:

[php:1:d3399433ed]<?php
// kontrola istnienia tablicy
if (isset ($_POST["$kolumna_id".'_'."$dod_kolumna"]))
{
// tworzenie tablicy pomocniczej
unset($zaznacz);
$zaznacz=array();
foreach ($_POST["$kolumna_id".'_'."$dod_kolumna"] as $wartosc)
{
//przypisuje do odpowiedniego elementu tablicy wartość='checked'
$zaznacz["$wartosc"]='checked';
}
}
//zapytanie do bazy danych
$zapytanie=mysql_query("select * from $tabela");
//funkcja zwracjaaca liczbe znalezionych wierszy (z wytlumionym bledem)
@$ile_znal=mysql_num_rows($zapytanie);
//jesli nic nie znajdzie nie tworzy listy i zwraca napis "blad"
if($ile_znal==0)
print 'blad';
else
{
//wypisuje kolejno pola
for($i=1; $i<=$ile_znal; $i++)
{
//funkcja zwracajaca wiersz z wyniku "zapytania"
$wiersz=mysql_fetch_array($zapytanie);
print '<input type="checkbox" name="'."$kolumna_id".'_'."$dod_kolumna".'[]'."" value="$wiersz[$kolumna_id]" $zaznacz[$i] > $wiersz[$kolumna_wyswietl]<br>n";
}
}

?>[/php:1:d3399433ed]

Chodziło o foreach, który prawidłowo wyświetla tablicę[].
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.