Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]Problem z odebraniem danych
Forum PHP.pl > Forum > Przedszkole
nikt21
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....
nospor
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
nikt21
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...
nospor
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?

trueblue
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.
nikt21
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?
nospor
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
nikt21
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 ?
nospor
ad1) Wszystkim od lat dziala tylko tobie jednemu nie a co oznacza ze nikomu nie dziala.... hm, a moze poprostu masz cos zle jak ci sie mowi od samego poczatku?

Mowilem ci juz: w edit_films ma nie byc zadnej logiki. Ewentualnie te twoje inputy i to wszystko. Ale rob jak uwazasz
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.