Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Php, JavaScript] Problem z nowymi inputami
gruchanerka
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.02.2012

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


Witam, napisałem kod w którym są 3 inputy chcę aby po kliknięciu buttonu były dodawane kolejne 3 i tak dalej i tak dalej. znalazłem na internecie pewien poradnik ale mi nie wychodzi :/ prosze o pomoc oto skrypt java script:


<script type="text/javascript">
<!--
function dodaj_element(kontener){
var znacznik = document.createElement('input');
znacznik.setAttribute('type', 'text');
znacznik.setAttribute('name', 'plik');
znacznik.className = 'upload';
var kontener = document.getElementById(kontener);
kontener.appendChild(znacznik);
}
//-->
</script>

Oto mój kod PhP:

  1. if (empty($_POST['2'])) {
  2. echo '';
  3. } elseif (isset($_POST['2']) && $_POST['2'] == 1) {
  4. echo 'Wykształcenie <br />
  5. <font color=red>Rok od - do </font> <input type="text" name="yersod1"> - <input type="text" name="yersdo1"><br />
  6. Szkoła: <div id="pliki"><input type="text" name="plik" class="upload" /></div><br /> <div><input type="button" value="Dodaj kolejną szkołę" onclick="java script:dodaj_element(plik)">
  7. </div>';
  8. }

Gdzie tu jest błąd (IMG:style_emoticons/default/questionmark.gif) prosze o pomoc

Ten post edytował gruchanerka 4.02.2012, 19:29:48
Go to the top of the page
+Quote Post
Morfi777
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 1
Dołączył: 5.09.2007

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


appendChild może być do diva, a nie do inputa.
ten kontener to gdzie jest? I bez cudzysłowu to jakby był zmienną.

Błagam cię, mamy 2012, używaj frameworka!!! (np. www.jquery.org)

PS: To nie jest problem php.

Ten post edytował Morfi777 4.02.2012, 19:55:06
Go to the top of the page
+Quote Post
krowal
post
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Zamiast: onclick="java script:dodaj_element(plik)", powinno być: onclick="dodaj_element('pliki'); return false" A jako że masz to wszystko w echo - musisz escapować apostrofy, zrób tak: onclick="dodaj_element(\'pliki\'); return false;"
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Po pierwsze skoro są to elementy o takiej samej nazwie, to powinny być potraktowane jako tablica elementów. Czyli:
[JAVASCRIPT] pobierz, plaintext
  1. var name = 'pliki[]';
  2. znacznik.setAttribute('name', name);
[JAVASCRIPT] pobierz, plaintext

W przeciwnym wypadku do $_POST zostanie przekazany tylko jeden element.

Po drugie nie $_POST['2'], a $_POST['pliki'][0], $_POST['pliki'][1], itd..., w zależności od ilości input-ów. Chyba, że $_POST['2'] to jakieś pole kontrolne, ale w takim przypadku jest to niezgodne ze specyfikacją (X)HTML, bo nazwa (name) elementu input nie może być cyfrą.

@Morfi777: Jest to również problem z PHP, a to o czym pisałeś, to tylko kropla w morzu.

EDIT: Ten argument w funkcji dodaj_element jest raczej niepotrzebny. Zastosuj się również do rady krowala.

Ten post edytował mortus 4.02.2012, 20:05:51
Go to the top of the page
+Quote Post
gruchanerka
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.02.2012

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


dzięki krowal (IMG:style_emoticons/default/smile.gif) naprawdę pomogłeś. a mam jeszcze jedno pytanie jak zrobić żeby nie tylko 1 imput że to tak nazwę się klonował (IMG:style_emoticons/default/biggrin.gif) tylko wszystkie 3 (IMG:style_emoticons/default/smile.gif) i aby dodawało rosnąco nazwę czyli plik1, plik2, plik3 tak samo w pozostałych imputach (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Przeczytaj mój post wyżej. Jest to jedyne słuszne rozwiązanie. Jeśli chodzi o nadawanie różnych nazw kolejnym inputom to po stronie JS nie stanowi to problemu. Problemem będzie jednak odczytanie wartości tych pól po stronie PHP, ponieważ nie bedziesz wiedział, jaką liiczbę pól input przesyła użytkownik. Masz zatem dwa wyjścia:
1. albo to rozwiązanie, które Ci podałem, z banalną pętlą w PHP,
2. albo dynamiczne zmienianie nazw pól po stronie JS i już nie tak banalna pętla w PHP.
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: 23.08.2025 - 02:11