Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][JavaScript]Pobieranie wartości z dynamicznego inputa
Puchatek320
post 24.03.2020, 01:26:39
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


Cześć,

Tworzę inputa z treścią przez js

<input name="js_test[]" class="db" type="hidden" id="1" value="mail">
<input name="js_test[]" class="db" type="hidden" id="1" value="test">
<input name="js_test[]" class="db" type="hidden" id="1" value="maks">
<input name="js_test[]" class="db" type="hidden" id="1" value="bartek">

i teraz chciałbym pobrać wszystkie wartości z tych inputów za pomocą ajax i wysłać do skryptu php

  1. if(!empty($_POST['js_test']))
  2. {
  3. foreach ($_POST['js_test'] as $key=>$test_js)
  4. {
  5. $test_js = mysqli_real_escape_string($mysqli,$test_js);
  6.  
  7.  
  8. $query = $mysqli->query("SELECT * FROM test WHERE name like '".$test_js."'");
  9.  
  10. while ($row = $query->fetch_array(MYSQLI_ASSOC)) {
  11. $id_test = $row['id'];
  12. }
  13.  
  14. $upTags = "INSERT INTO films_tags (`id_t`,`imie_id`,`nazwa_id`) VALUES (null, '$id', '$id_test')";
  15. if ($mysqli->query($upTags) === TRUE) ;
  16. }
  17. }


Normalnie ze zwykłego inputa pobieram to tak
var n_short = document.getElementById("n_short").value;

Tutaj próbuje

var multiTag = document.getElementsByName("js_test[]");
i pojawia się
NodeList
TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.

I tutaj pojawia się pytanie jak mógłbym to przesłać ajaxem? tak żebym nie musiał modyfikować skryptu php o ile to możliwe.



Ten post edytował Puchatek320 24.03.2020, 01:53:53
Go to the top of the page
+Quote Post
trueblue
post 24.03.2020, 07:21:25
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Metoda getElementsByName zwraca listę węzłów (tablicę), więc musisz iterować po niej, aby zostać się do każdego elementu po kolei.


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 24.03.2020, 16:04:53
Post #3





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


Ajaxem nie mozna przesłać całej tablicy array tak żeby to obrobić później w php?
Go to the top of the page
+Quote Post
nospor
post 24.03.2020, 16:10:18
Post #4





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Mozna, ale masz przeslac tablice wartosci z inputow a nie tablice inputow. Temu zrob jak ci powiedziano

I juz tak na marginesie
if ($mysqli->query($upTags) === TRUE) ;
po co dajesz tam IF ktory totalnie nic nie robi?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 24.03.2020, 16:11:26
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Można.
Wysyłasz ciąg zmiennych: js_test[]=mail&js_test[]=test&js_test[]=maks, itd.


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 24.03.2020, 17:33:27
Post #6





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


okey, iteruje po nodelist problem w tym że dalej nie wiem jak pobrać z nich value i zapisać do array tak żeby to przesłać ajaxem?

for (var i = 0; i < multiTag.length; i++) {
console.log(multiTag[i]);

}
Go to the top of the page
+Quote Post
trueblue
post 24.03.2020, 18:13:34
Post #7





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Skoro multiTag[i] to konkretny element, to wartość jest pod value:
multiTag[i].value
Na podstawie tych wartości tworzysz ciąg jak pokazałem Ci wyżej (podstawiając tam te wartości). Taki query string wysyłasz jako zmienne GET lub POST.


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 24.03.2020, 18:37:20
Post #8





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


Nie robię tego w prawidłowy sposób ?
zamiast value konsola pokazuje

NodeList(3) [ input#1, input#2, input#3 ]

  1. var multiTag = document.getElementsByName("js_test[]");
  2.  
  3. for (var i = 0; i < multiTag.values(); i++) {
  4. console.log(multiTag[i].value);
  5. var do_wyslania = multiTag[i].value
  6. }
  7. var odebrane = do_wyslania;


Go to the top of the page
+Quote Post
trueblue
post 24.03.2020, 18:41:16
Post #9





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A nie dostrzegasz różnicy jak budowałeś wcześniej pętlę, a jak obecnie?


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 24.03.2020, 19:04:50
Post #10





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


No tak...

Pytanie jak przypisać całą tablicę do zmiennej do_wysłania?

  1. for (var i = 0; i < multiTag.length; i++) {
  2. console.log(multiTag[i].value);
  3. var do_wyslania = [multiTag[i].value,]
  4. }
  5. console.log(do_wyslania);


ponieważ jeśli użyję zmiennej do_wysłania po za pętlą to wyświetla ostatni wynik co jest normalne i nie wiem jak to obejść żeby w tej zmiennej zamiast już wszystkie wyniki
Go to the top of the page
+Quote Post
trueblue
post 24.03.2020, 19:06:04
Post #11





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Wartości do tabeli dodaje się metodą push: https://developer.mozilla.org/pl/docs/Web/J...ekty/Array/push


--------------------
Go to the top of the page
+Quote Post
viking
post 24.03.2020, 19:08:04
Post #12





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


A jeszcze lepiej
https://developer.mozilla.org/en-US/docs/Web/API/FormData


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 24.03.2020, 20:17:41
Post #13





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


Skorzystałem z pushed ale zamiast dodawać to tworzy nową tablicę za każdym razem.

pushed = multiTag.push(do_wyslania,);
Go to the top of the page
+Quote Post
trueblue
post 24.03.2020, 20:58:16
Post #14





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Tablicę deklarujesz przed pętlą, w pętli wstawiasz do tablicy wartość każdego input z pomocą metody push.


--------------------
Go to the top of the page
+Quote Post
Puchatek320
post 25.03.2020, 00:37:33
Post #15





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 4.11.2019

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


Dziękuje!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 19:58