Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ukrywanie pól formularza, nieznana ilość.
Forum PHP.pl > Forum > Przedszkole
kóki
Witam.

Piszę stronę oparta o bazę danych (MySQL). Mam problem, którego obejście jest zapewne banalnie proste, ale samotne rozwiązanie go (z pomocą googli) nie przyniosło oczekiwanych rezultatów, więc piszę tutaj, z nadzieją , że ktoś z dobroci serca pomoże mi znaleźć rozwiązanie.

Problem wygląda następująco. Na podstawie danych pobieranych z bazy danych tworzę formularz (typu checkbox). Chciałbym aby, po zaznaczeniu jednego z pól, pojawiało się ukryte i zablokowane dotychczas pole tekstowe. Problem polega na tym, że nie znam dokładnej ilości pól, bo jest ona zależne od ilości wpisów w bazie danych a przy wykonywaniu operacji pokroju :

  1. <input type="checkbox" name="nazwa" value="wartość" onclick="document.getElementById('identyfikator').style.display = this.checked ? 'none' : 'block'; this.form.elements['nazwa2'].disabled = this.form.elements['nazwa3'].disabled = this.checked" />
  2. <div id="identyfikator">
  3. <input type="text" name="nazwa2" />
  4. <input type="text" name="nazwa3" />
  5. </div>

(zaczerpnięte z http://www.kurshtml.boo.pl/html/pole_wyboru,formularze.html)

musiałbym wymieniać po znaku równości wszystkie blokowane pola tekstowe. Czy da się to obejść? Mam problemy z mieszaniem kody html z kodem php i może istnieje jakieś rozwiązanie, którego po prostu jak na razie nie znam?

Próbowałem zastąpić wszystkie nazwy, nazwą[]. Próbowałem też robić pętlę z iterowaną zmienną $a, zastępując nazwy nazwą[$a]. Zmieniałem też cudzysłowia na \" \" i ' '. Niestety bez oczekiwanych rezultatów.

zegarek84
Cytat(kóki @ 9.08.2010, 18:24:48 ) *
Problem wygląda następująco. Na podstawie danych pobieranych z bazy danych tworzę formularz (typu checkbox). Chciałbym aby, po zaznaczeniu jednego z pól, pojawiało się ukryte i zablokowane dotychczas pole tekstowe. Problem polega na tym, że nie znam dokładnej ilości pól, bo jest ona zależne od ilości wpisów w bazie danych a przy wykonywaniu operacji pokroju :

  1. <input type="checkbox" name="nazwa" value="wartość" onclick="document.getElementById('identyfikator').style.display = this.checked ? 'none' : 'block'; this.form.elements['nazwa2'].disabled = this.form.elements['nazwa3'].disabled = this.checked" />
  2. <div id="identyfikator">
  3. <input type="text" name="nazwa2" />
  4. <input type="text" name="nazwa3" />
  5. </div>

...
Czy da się to obejść? Mam problemy z mieszaniem kody html z kodem php i może istnieje jakieś rozwiązanie, którego po prostu jak na razie nie znam?
...

daj przykład online z dużą liczbą tych nieregularnych inputów - jak wrócę jutro do domu [nie wiem o której] to w ramach przypomnienia napiszę skrypcika w JS [dzisiaj nie dam rady bo mi się imprezka zacznie]... o ile zawsze masz tego div'a ukrytego za każdym checkbox'em to nawet identyfikator nie będzie potrzebny...
beamer
Czemu pętla nie działa?
  1. <input type="checkbox" name="nazwa" value="wartość" onclick="document.getElementById('identyfikator').style.display = this.checked ? 'none' : 'block'; "KOD PHP" this.checked" />
  2. <div id="identyfikator">
  3. <input type="text" name="nazwa2" />
  4. <input type="text" name="nazwa3" />
  5. </div>

  1. <?php for ($a=0;$a<=10;$a++) echo 'this.form.elements[\'nazwa'.$a.'\'].disabled = '; ?>


Czyli:
  1. <input type="checkbox" name="nazwa" value="wartość" onclick="document.getElementById('identyfikator').style.display = this.checked ? 'none' : 'block'; <?php for ($a=0;$a<=10;$a++) echo 'this.form.elements[\'nazwa'.$a.'\'].disabled = '; ?> this.checked" />
  2. <div id="identyfikator">
  3. <input type="text" name="nazwa2" />
  4. <input type="text" name="nazwa3" />
  5. </div>

Próbowałeś tak? Oczywiście a wyliczasz według potrzeb...
matematyk
Spróbuj może czegoś takiego
  1. <script type="text/javascript">
  2. function Pokaz(pf,id)
  3. {
  4. document.getElementById(id).style.display = pf ? 'none' : 'block';
  5. var input = document.getElementById(id).getElementsByTagName('input');
  6. for(i=0;i<input.length;i++)
  7. input[i].disabled = pf;
  8. }
  9. <input type="checkbox" name="nazwa" value="wartość" onclick="Pokaz(this.checked,'identyfikator')" />
  10. <div id="identyfikator">
  11. <input type="text" name="nazwa2" />
  12. <input type="text" name="nazwa3" />
  13. </div>
w wywołaniu onclick w Pokaz drugi element to id bloku jakiego ma dotyczyć, w następnym checkbox-ie podajesz id następnego elementu div.
kóki
beamer, dziękuję, trochę mi pomogłeś. Niestety nadal mam drobne problemy z wkomponowaniem tego w mój skrypt.
  1. <?php
  2. //TUTAJ SPRAWDZAM CZY USER MA UPRAWNIENIA DO WYSłANIA TEGO FORMULARZA
  3. echo "<form action=\"?\" method=\"post\" onsubmit=\"return confirm('Potwierdz')\">";
  4. for($a=0 ; $a<$ilosc_pozycji_w_bazie_danych ; $a++){
  5. echo "<input type=\"checkbox\" name=przykladowa_nazwa[] value=\"$a\" onclick=\"document.getElementById(\'identyfikator\'.$a.'\').style.display = this.checked ? 'block' : 'none'; ";
  6. echo 'this.form.elements[\'nazwa'.$a.'\'].disabled = ';
  7. echo ' this.checked" />';
  8. //W TYM MIEJSCU POBIERAM I WYPISUJĘ DANE Z BAZY DANYCH Z LIMITEM a
  9. echo "<div id=\'identyfikator\'.$a.'\' >";
  10. echo "<input type=\"text\" name=\'nazwa'.$a.'\' />";
  11. echo "</div>";
  12. }
  13. echo "<br><br><input type=submit value=\"wyslij\"/>";
  14. echo "</form>";
  15. ?>

Kiedy zamiast \'identyfikator\'.$a.'\' wpisywałem 'identyfikator' to niby działało, ale chowane i pokazywane było tylko pierwsze z pól tekstowych (pokazywało się ono niezależnie od tego, którą z pozycji wybierałem w formularzu).
Przy \'identyfikator\'.$a.'\' nie jest chowane żadne z pól.

matematyk, na razie nie potrafię się posługiwać JS. Na oko widzę, że jest to język w miarę podobny do c++, ale to raczej nie jest wystarczająca wiedza, bym potrafiłł dostosować Twój kod do własnych potrzeb sad.gif. Tak czy owak dziękuję.

EDIT: Dobra, jeszcze raz dziękuję. Kod jest poprawny. Wystarczyło zmienić \'identyfikator\'.$a.'\' na 'identyfikator$a' oraz \'nazwa'.$a.'\' na 'nazwa$a'. Pozdrawiam smile.gif.
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.