Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][PHP]Problem z odebraniem danych
nikt21
post 14.02.2020, 00:35:21
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.02.2020

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


Cześć,
Mam problem ze skryptem gdy robię include w oknie modal bootstrap. Mam taki sam skrypt na zwykłej stronie i wszystko działa ok jak przenoszę ten sam skrypt do modala to nie działa za cholerę nie wiem dlaczego.


  1. <div class="form-group text-center">
  2. <form action="<?php if (isset($_POST['submit'])){}?>" method="post" enctype="multipart/form-data" name="form1"> <!-- Początek Formularza -->
  3.  
  4. <div class="tagForm text-center"> Tagi:
  5. <div style="padding: 10px;" id="tagList"></div>
  6. <?php
  7. $result = $pdo->prepare("SELECT `name`, `tag_id`, `id_t` FROM `tags` INNER JOIN `films_tags` ON `films_tags`.`tag_id` = `tags`.`id` WHERE `film_id` = '$new_id' ORDER BY name ASC"); // nazwa pliku do usunięcia
  8.  
  9.  
  10.  
  11.  
  12. $result->bindParam(':id', $_GET['id']);
  13. $result->execute();
  14. foreach($result as $watch){
  15.  
  16. $id = $watch['id_t'];
  17. $tag_name = $watch['name'];
  18.  
  19.  
  20.  
  21. echo "<li class=\"tags\" id=\"id_{$id}\"> {$tag_name} <button class=\"deleteTagExsit btn-danger\" id=\"id_{$id}\">X</button></li>";
  22. }
  23.  
  24.  
  25.  
  26.  
  27.  
  28. ?>
  29.  
  30. </ul>
  31. </div><br>
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. </br></br>
  41.  
  42.  
  43.  
  44.  
  45. <!-- Ukryty div dla zmiany czasu -->
  46. <input type="checkbox" onclick="document.getElementById('time').style.display=(this.checked==true)? 'block':'none'" name="time"> <t>Short&nbsp</t>
  47.  
  48. <div class="help-tip">
  49.  
  50. <p> Zwiastun filmu tworzy się automatycznie z 12 min filmu i trwa 15 sekund.</br>
  51. Jeśli chcesz zrobić zwiastun z innej minuty możesz zrobić to zaznaczając pole obok.</br></br></p>
  52.  
  53. </div><br>
  54.  
  55. <div id="time" style="display:none;">
  56. <input id="appt-time" type="time" name="short_time" step="1" value="00:00:00" min="00:00:00" max="05:00:00" >
  57. </div></br></br>
  58.  
  59. <input type="hidden" name="hidden_id" value="<?php echo $new_id; ?>">
  60. <t>Nazwa:</t></br> <input type="text" name="n_name" style="width: 30%;" value="<?php echo $name; ?>"> </br></br>
  61. <t>URL:</t></br> <input type="text" name="n_url" style="width: 30%;"value="<?php echo $url; ?>"> </br></br>
  62. <t>Short:</t></br> <input type="text" name="n_short" style="width: 30%;" value="<?php echo $short; ?>">
  63. </br></br>
  64.  
  65.  
  66.  
  67. <input class="btn btn-default bg-white col-sm-3" type="text" id="tag" placeholder="Tag"/>
  68. <div class="btn btn-default bg-success text-white" id="addTag">Add Tag</div></br>
  69.  
  70. <div style="padding: 10px;" id="tagList"></div>
  71.  
  72. <button type="submit" name="submit" class="btn btn-info">Zapisz</button></br>
  73.  
  74.  
  75.  
  76. </form>
  77. </div></br></br>
  78.  
  79. </div>
  80.  
  81.  
  82. <script>
  83. $(function() {
  84. $( "#tag" ).autocomplete({
  85. source: 'modules/script/query/autocomplete.php'
  86. });
  87. });
  88.  
  89. var id = 0;
  90. $("#addTag").click(function(){
  91. if($("#tag").val() ) {
  92.  
  93. id++;
  94. var li = document.createElement("li");
  95. li.className = "tags";
  96. li.setAttribute("id", id);
  97.  
  98. var i = document.createElement("INPUT");
  99. i.setAttribute("name","multiTag[]");
  100. i.setAttribute("type","hidden");
  101. i.setAttribute("id", id);
  102.  
  103. var tag = document.getElementById('tag').value;
  104.  
  105. li.innerHTML = " " + tag + ' <button class=\"deleteTag btn-danger\" id=\"'+id+'\">X</button>'
  106. i.setAttribute("value", tag);
  107.  
  108. $("#tagList").append(li)
  109. $("#tagList").append(i)
  110. $('#tag').val('');
  111. }});
  112.  
  113. $("#tagList").on('click', 'button.deleteTag', function() {
  114.  
  115. var idDiv = this.id;
  116. $("#"+idDiv).remove()
  117. $(":input[id='"+idDiv+"']").remove();
  118.  
  119. });
  120.  
  121. $("#tagList").on('click', 'button.deleteTagExsit', function() {
  122.  
  123. var del_id = this.id;
  124. var toDel = del_id.replace('id_', '');
  125. $("#id_"+toDel).remove();
  126. $.ajax({
  127. type:'POST',
  128. url:'modules/script/query/delete-tag-watch.php',
  129. data:'delete_id='+toDel
  130. });
  131.  
  132. });
  133. </script>
  134.  
  135.  
  136.  
  137.  
  138. <?php
  139.  
  140. if (isset($_POST['submit']))
  141. {
  142.  
  143. $short_time = $_POST['short_time'];
  144.  
  145. $id = $_POST['hidden_id'];
  146.  
  147. $short_katalog = 'filmy/short/';
  148.  
  149. $n_name = $_POST['n_name'];
  150.  
  151. $n_url = $_POST['n_url'];
  152.  
  153. $n_short = $_POST['n_short'];
  154.  
  155. $delete = "$short_katalog/$id.mp4";
  156.  
  157. $te = $_POST['multiTag'];
  158.  
  159. print_r($te);
  160.  
  161.  
  162. if (empty($_POST['time']))
  163. {
  164.  
  165. }
  166. else
  167. {
  168. // Jeśli checkbox zaznaczony tworzy film z wybranego czasu
  169. if (file_exists($delete)) {
  170. unlink($delete); // usuwanie istniejącego zwiastunu
  171. }
  172. $short_time = exec('ffmpeg -i ' . $url . ' -ss ' . $short_time . ' -t 00:00:15 ' . $short_katalog . '' . $id . '.mp4');
  173.  
  174. }
  175.  
  176.  
  177. $query = $pdo->prepare("UPDATE `films` SET `short`='$short_katalog$id.mp4', `name`='$n_name', `url`= '$n_url', `short`='$n_short' WHERE `id`='$id'"); //zmienna $pdo pochodzi z db/connection.php
  178. $query->execute(); // wykonaj zayptanie do bazy danych
  179.  
  180.  
  181. if(!empty($_POST['multiTag']))
  182. {
  183. foreach ($_POST['multiTag'] as $key=>$tag)
  184. {
  185. $tag = mysqli_real_escape_string($mysqli,$tag);
  186. echo "Tag(s): ".$tag.", ";
  187.  
  188.  
  189. $query = $mysqli->query("SELECT * FROM tags WHERE name like '".$tag."'");
  190.  
  191. while ($row = $query->fetch_array(MYSQLI_ASSOC)) {
  192. $id_tags = $row['id'];
  193.  
  194. }
  195.  
  196.  
  197.  
  198. $upTags = "INSERT INTO films_tags (`id_t`,`film_id`,`tag_id`) VALUES (null, '$id', '$id_tags')";
  199. if ($mysqli->query($upTags) === TRUE) ;
  200. echo $id;
  201.  
  202.  
  203. }
  204. }
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211. } //end of document
  212.  
  213.  
  214.  
  215.  
  216. ?>

Skrypt ajax tworzy ukryty input "<input name="multiTag[]" type="hidden" id="1" value="test">" (sprawdzone w konsoli) ale jak chce odebrać dane to twierdzi że nic nie ma... ktoś wie o co chodzi lub jak to naprawić? bo nie mam już pomysłów co jest nie tak....
Go to the top of the page
+Quote Post
nospor
post 14.02.2020, 11:29:19
Post #2





Grupa: Moderatorzy
Postów: 35 095
Pomógł: 5876
Dołączył: 27.12.2004




Po pierwsze: oddziel kod od generowania html od kodu logiki (baza itp). Teraz masz sieczke jakas, ktora wkladasz w modala.
Po drugie:
patrzyles co ci idzie postem
print_r($_POST);
?
Po trzecie: nie masz przypadkiem tego modala jeszczew jakims FORM i tym samym masz FORM W FORM? Takie cos nie bedzie dzialac
Po czwarte: i zakladam ze nie mowisz o sytuacje gdzie slesz tego forma AJAXem bo jedyny AJAX wysylajacy dane postem to ten co wysyla tylko jedno pole


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

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"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
nikt21
post 15.02.2020, 00:30:33
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.02.2020

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


1. podzieliłem php od html
2. postem idą wszystkie inputy które są wpisane ręcznie
3. nie mam forma w formie jeśli by tak było nie dostawał bym w post nazwy, url, short
4. skrypt tworzy ukryty input z nazwą multitag:

  1. <li class="tags" id="1"> test <button class="deleteTag btn-danger" id="1">X</button></li>
  2. <input name="multiTag[]" type="hidden" id="1" value="test">


Nie wiem dlaczego w modalu jest taki problem żeby przesłać input który został stworzony przez skrypt. Nie powinno być problemu ponieważ input pojawia się w kodzie...
Ktoś ma może jakiś pomysł? bo sam już jestem głupi...
Go to the top of the page
+Quote Post
nospor
post 15.02.2020, 08:29:34
Post #4





Grupa: Moderatorzy
Postów: 35 095
Pomógł: 5876
Dołączył: 27.12.2004




W innym temacie niedawno tworzyles wiele divow w petli z tym samym ID i cie wszystko psulo. Potem to poprawiles. Nie mniej jednak zmierzam do tego, czy przypadkiem ten temat to nie kontynuacja tamtego? I masz wiele tych modali ale ze ty tworzysz w nich znowu te same ID to twoj INPUT dodaje sie tylko do pierwszego modala?



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

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"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 15.02.2020, 10:17:05
Post #5





Grupa: Zarejestrowani
Postów: 5 701
Pomógł: 1562
Dołączył: 11.03.2014

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


Nawet w tym kodzie powtarzasz id:
  1. <li class="tags" id="1"> test <button class="deleteTag btn-danger" id="1">X</button></li>
  2. <input name="multiTag[]" type="hidden" id="1" value="test">


Są też dwa elementy o id=tagList.


--------------------
Go to the top of the page
+Quote Post
nikt21
post 15.02.2020, 22:10:25
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.02.2020

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


Już wiem w czym problem.... facepalmxd.gif facepalmxd.gif facepalmxd.gif facepalmxd.gif

Strona wyświetla button edycji

  1.  
  2. echo"
  3.  
  4. <tr>
  5.  
  6. <td><div class='text-white'>$id</div></td>
  7.  
  8. <td><a class='nav-link text-white' href=index.php?v=watch&id=$id>$name</a></td>
  9.  
  10. <td>
  11. <a href='index.php?v=delete_films&id=$id' class='btn btn-warning' data-toggle='modal' data-target='#edit_$id''>Edytuj</a>
  12. </td>
  13.  
  14. <div class='modal fade' id='edit_$id' tabindex='-1' role='dialog' aria-labelledby='exampleModalCenterTitle' aria-hidden='true' >
  15. <div class='modal-dialog modal-dialog-centered modal-lg' role='document'>
  16. <div class='modal-content' style='background-color:#336666;'>
  17. <div class='modal-header'>
  18. <h5 class='modal-title' id='exampleModalLongTitle'><t>Edytuj</t></h5>
  19. <button type='button' class='close' data-dismiss='modal' aria-label='Close'>
  20. <span aria-hidden='true'>&times;</span>
  21. </button>
  22. </div>
  23. <div class='modal-body'>
  24. ";?>
  25.  
  26. <?php
  27. include 'edit_films.php';
  28.  
  29.  
  30. </div>
  31. <div class='modal-footer'>
  32. <button type='button' class='btn btn-success' data-dismiss='modal'>Anuluj</button>
  33.  
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39.  
  40. <td>
  41.  
  42. ......
  43.  
  44. ?>


Nie wolno tak robić tzn. "?> i znów zaczynać <?php jeśli już to powinno użyć się kontentacji. Wiem również że wkładanie całego modala w echo jest bez sensu, może mi ktoś ewentualnie wyjaśnić w jaki sposób mogę wywołać modala o konkretnym id? Dokładnie chodzi mi że do id jest przypisany nr id pola edycji w jaki sposób mam wywołać konkretny nr id po za polem echo tzn jeśli przeniosę modal po za pętle to skąd skrypt ma wiedzieć że ma być wywołany modal o id 4? lub 6?
Go to the top of the page
+Quote Post
nospor
post Wczoraj, 20:18
Post #7





Grupa: Moderatorzy
Postów: 35 095
Pomógł: 5876
Dołączył: 27.12.2004




To sie robi normalnie na dwa sposoby

1) Podobnie jak masz teraz, ze dla kazdego ID generujesz modal o danym ID. Tylko ze nie wszystko w jednym kodzie, ale kod modal masz np. w jakims pliku i go includujesz. Wyglada to przejrzyscie poprostu
2) Masz jeden modal poza petla na wszystkie rekordy ale bez tresci. Tresc modala wypelniasz dopiero po kliknieciu w dany produkt. No ale przy tej metodzie musisz w js czy html data- trzymac wszystkie niezbedne wartosci rekordu

Opcja nr1 jest najprostsza

I wywal z petli to
include 'edit_films.php';

przeciez to ma byc odpalane tylko raz po wyslaniu edycji a nie milion razy dla kazdego rekordu. No chyba ze trzymasz tam co innego niz mysle


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

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"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
nikt21
post Wczoraj, 23:07
Post #8





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 12.02.2020

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


1. Nie może być tak jak teraz ponieważ w modalu załączam plik "edit_films.php" w którym są wszystkie pola input + logika itp itd, problem w tym że jeśli robię to w echo to nie wysyła prawidłowo forma (sprawdzałem źródło strony) i zaczyna się form i od razu się kończy nie wiedzieć czemu (sprawdzałem kod i jest wszystko ok.) mimo że w kodzie strony wszystkie pola input są po za form to wysyłają się prawidłowo po za polem input z ajax

2. Wyciągnąłem modala po za echo i wszystko działa jak należy. I tutaj pojawia się problem czy może ktoś mi wyjaśnić w jaki sposób pobrać id button z echo?
Chodzi o to że nie wiem w jaki sposób przekazać id button z echo do id w modalu. może ktoś zna jakiś prosty sckrypt lub coś podobnego ?
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: 17.02.2020 - 02:55