Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z checkbox-em
tomuś
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.03.2004

Ostrzeżenie: (0%)
-----


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ć. :?:
Go to the top of the page
+Quote Post
splatch
post
Post #2





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


[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.
Go to the top of the page
+Quote Post
tomuś
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
rmn
post
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 19.02.2004
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


[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]
?>
Go to the top of the page
+Quote Post
zalew
post
Post #5





Grupa: Zarejestrowani
Postów: 407
Pomógł: 0
Dołączył: 24.10.2002
Skąd: warszawa

Ostrzeżenie: (0%)
-----


[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?
Go to the top of the page
+Quote Post
tomuś
post
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 17.03.2004

Ostrzeżenie: (0%)
-----


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ę[].
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 17:12