Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Ukrywanie pól formularza, nieznana ilość.
kóki
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 9.08.2010

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


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.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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...

Ten post edytował zegarek84 9.08.2010, 20:22:23
Go to the top of the page
+Quote Post
beamer
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 4
Dołączył: 31.07.2010

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


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...

Ten post edytował beamer 10.08.2010, 02:24:57
Go to the top of the page
+Quote Post
matematyk
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 1
Dołączył: 27.01.2009

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


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.

Ten post edytował matematyk 10.08.2010, 03:59:18
Go to the top of the page
+Quote Post
kóki
post
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 9.08.2010

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) .

Ten post edytował kóki 10.08.2010, 15:39:00
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: 26.09.2025 - 00:00