Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Php, JavaScript] Problem z nowymi inputami
Forum PHP.pl > Forum > PHP
gruchanerka
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 questionmark.gif prosze o pomoc
Morfi777
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.
krowal
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;"
mortus
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.
gruchanerka
dzięki krowal smile.gif naprawdę pomogłeś. a mam jeszcze jedno pytanie jak zrobić żeby nie tylko 1 imput że to tak nazwę się klonował biggrin.gif tylko wszystkie 3 smile.gif i aby dodawało rosnąco nazwę czyli plik1, plik2, plik3 tak samo w pozostałych imputach smile.gif
mortus
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.
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.