Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP]Bootrstrap Modal w okienku i pętla
Forum PHP.pl > Forum > Przedszkole
timeo
Witajcie... Niestety muszę się do Was uśmiechnąć, gdyż nie mogę sobie poradzić. W pętli mam okna modalne bootstrap (kilka) które są odpowiedzialne za inne funkcje (przesyłane do bazy danych). Problem polega na tym że w ramach jednego zapytania w oknie modalnym zapisuje w bazie informacje dotyczące wszystkich wylistowanych ticketów. Co zrobić, żeby przypisywało tylko do jednego wybranego?

  1. <?php
  2. case 'wnaprawie':
  3.  
  4. $stmt = $db->query('SELECT * FROM mobidoktor WHERE status = "W Naprawie" ');
  5. foreach ($stmt as $row)
  6. {
  7. ?>
  8. <br>
  9. <div class = "row">
  10. <div class="col-lg-12">
  11. <?php
  12. $dataprzeterminowania=$row['Przyjecie'];
  13. $status=$row['Status'];
  14. $datadzisiaj= date('Y-m-d H:i:s', strtotime('- 4 day'));
  15. $data = date("Y-m-d H:i:s");
  16. $dataroznica=((strtotime($datadzisiaj)-strtotime($dataprzeterminowania))/(60*60*24));
  17. if($dataprzeterminowania<=$datadzisiaj AND $status<>"Zamknięte")
  18. {
  19. echo '<div class="panel panel-danger">';
  20. }
  21. else
  22. {
  23. echo '<div class="panel panel-success">';
  24. }
  25. ?>
  26. <div class="panel-heading">
  27. <div class="col-md-2">
  28. <a href="?content=ticket&ticket=<?php echo $row['ticket']; ?>"> <?php echo $row['ticket']; ?></a></div>
  29. <div class="col-md-4"><b>Klient: </b><?php echo $row['klient']; ?></div>
  30. <div class="col-md-4"><b>Telefon: </b><?php echo $row['model3']. " ".$row['brand2']. " ". $row['Kolor'];?></div>
  31. <div class="col-md-2"><?php echo "Po terminie " . number_format(($dataroznica), 0)." dni"; ?></div>
  32.  
  33. </div>
  34.  
  35. <div class="panel-body">
  36. <p>
  37. <div class="col-md-2"><b>Przyjęto: </b><br><?php echo $row['Przyjecie']; ?></div>
  38. <div class="col-md-2"><b>Imei: </b><br><?php echo $row['imei']; ?></div>
  39. <div class="col-md-2"><b>Serwisant: </b><br><?php echo $row['Ktorobil']; ?></div>
  40. <div class="col-md-2"><b>Opakowanie: </b><?php echo $row['Opakowanie']; ?><br><b>Ładowarka: </b><?php echo $row['Ladowarka'];?></div>
  41.  
  42. <div class="col-md-2"><b> </b><br></div>
  43. <div class="col-md-2"><b>Rodzaj: </b><br><?php echo $row['rodzaj']; ?></div>
  44. <hr style="width: 95%; ">
  45.  
  46.  
  47. }
  48. $ticket = $row['ticket'];
  49. ?>
  50. </center></div>
  51. <center>
  52. <div class="col-md-12"><br></div>
  53.  
  54.  
  55. <button data-toggle="modal" data-target="#modalPort<?php echo $ticket;?>" class="btn btn-success">Przyjmij Naprawę</button>
  56. <button data-toggle="modal" data-target="#modalPort2<?php echo $ticket;?>" class="btn btn-success">Wyślij Zlecenie</button>
  57. <button data-toggle="modal" data-target="#modalPort3<?php echo $ticket;?>" class="btn btn-success">Zmień Status</button>
  58.  
  59. </center>
  60. <?php } ?>
  61. <!--Przyjmij Naprawę -->
  62.  
  63. <div class="modal fade" id="modalPort<?php echo $ticket;?>" tabindex="-1" role="dialog" aria-labelledby="portfolioModallabel" aria-hidden="true">
  64. <div class="modal-dialog">
  65. <div class="modal-content">
  66. <div class="modal-header">
  67. <h4 class="modal-title" id="portfolioModallabel"><?php echo $ticket; ?></h4>
  68. </div>
  69. <div class="modal-body text-center">
  70.  
  71. <p class="line-height-small">
  72.  
  73.  
  74. <div class="col-md-12">
  75.  
  76.  
  77. <?php
  78. $data = date("Y-m-d H:i:s");
  79. $przyjecie = $db -> prepare("UPDATE mobidoktor SET Status= :status, Ktorobil= :user WHERE `ticket` = :ticket");
  80. $przyjecie -> bindValue(':ticket', $ticket, PDO::PARAM_STR);
  81. $przyjecie -> bindValue(':status', "W Naprawie", PDO::PARAM_STR);
  82. $przyjecie ->bindValue(':user', $range3, PDO::PARAM_STR);
  83.  
  84. $zmianastatusu = $db->prepare("INSERT INTO zmianastatusow SET ticket = :ticket, data = :data, status = :status, user= :user" );
  85. $zmianastatusu ->bindValue(':ticket', $ticket, PDO::PARAM_INT);
  86. $zmianastatusu ->bindValue(':status', "W Naprawie", PDO::PARAM_STR);
  87. $zmianastatusu ->bindValue(':user', $range3, PDO::PARAM_STR);
  88. $zmianastatusu ->bindValue(':data', $data, PDO::PARAM_INT);
  89. $zmianastatusu ->execute();
  90. $przyjecie ->execute(); ?>
  91. Drogi <br><b> <?php echo $range3; ?><br></b>Poprawnie przypisałeś zlecenie numer <br><b> <?php echo $ticket; ?><br></b><br> Dane zaktualizowane<br> Możesz zamknąć okno<br><br>
  92.  
  93.  
  94. </div>
  95. </p>
  96. </div>
  97. <div class="modal-footer">
  98. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103.  
  104.  
  105.  
  106.  
  107. <!--Wysłanie -->
  108.  
  109.  
  110.  
  111.  
  112. <div class="modal fade" id="modalPort2<?php echo $ticket;?>" tabindex="-1" role="dialog" aria-labelledby="portfolioModallabel" aria-hidden="true">
  113. <div class="modal-dialog modal-lg">
  114. <div class="modal-content">
  115. <div class="modal-header">
  116. <h4 class="modal-title" id="portfolioModallabel"><?php echo $row['ticket']; ?></h4>
  117. </div>
  118. <div class="modal-body text-center">
  119. <img class="img-responsive center-block" src="<?php echo $thumbpath; ?>" sizes="100vw" srcset="<?php echo $smallpath; ?> 500w, <?php echo $mediumpath; ?> 1000w, <?php echo $largepath; ?> 1500w" alt="Portfolio Site">
  120. <p class="line-height-small">
  121.  
  122.  
  123.  
  124.  
  125. </p>
  126. </div>
  127. <div class="modal-footer">
  128. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133.  
  134. <!--Zmień Status -->
  135.  
  136.  
  137.  
  138. <div class="modal fade" id="modalPort3<?php echo $ticket;?>" tabindex="-1" role="dialog" aria-labelledby="portfolioModallabel" aria-hidden="true">
  139. <div class="modal-dialog">
  140. <div class="modal-content">
  141. <div class="modal-header">
  142. <h4 class="modal-title" id="portfolioModallabel"><?php echo $row['ticket']; ?></h4>
  143. </div>
  144. <div class="modal-body text-center">
  145.  
  146. <p class="line-height-small">
  147.  
  148. <div class="col-md-12">
  149.  
  150. <form method="POST" action="">
  151. <?php
  152.  
  153. $stmt = $db->prepare('SELECT * FROM mobidoktor WHERE ticket = :ticket');
  154. $stmt->bindValue(':ticket', $row['ticket'], PDO::PARAM_INT);
  155. $stmt->execute();
  156. $row4 = $stmt->fetch();?>
  157.  
  158. <div class="col-md-2"><?php echo '#'.'<B>'.$row4['ticket'].'</B>'; ?></div>
  159. <div class="col-md-2"><b>Telefon: </b><?php echo $row4['model3']. " ".$row4['brand2']. " ". $row4['Kolor'];?></div>
  160. <div class="col-md-2"><b>Klient: </b><?php echo $row4['klient']; ?></div>
  161. </div>
  162. <div class="col-md-12">
  163. Zmień status naprawy i powiadom odpowiednie osoby:
  164. <select name="status" id="status" required="required">
  165. <option value="">W trakcie naprawy</option>
  166. <option value="W Naprawie">W trakcie naprawy</option>
  167. <option value="Naprawa zakończona">Naprawa zakończona</option>
  168. <option value="Oczekuje na części">Oczekuje na część</option>
  169. <option value="W Naprawie">Część Dotarła .. W trakcie naprawy</option>
  170. <option value="Uszkodzenie w transporcie">Uszkodzenie w transporcie - Oczekuje na dezycje</option>
  171. </select><br>
  172.  
  173. <br>Uwagi do zamówienia:<br><input type="textarea" name="uwagidoserwisu" id="uwagidoserwisu" ><br>
  174. <input value="<?php echo $ticket; ?>" type="hidden" name="ticketzmiana" id="ticketzmiana" >
  175.  
  176. <br>
  177. <input type="submit" id="add" name="add" value="Zmień serwis">
  178. </form>
  179. </center>
  180.  
  181.  
  182.  
  183. <?php
  184. if(isset($_POST['status']))
  185. {
  186. $data = date("Y-m-d H:i:s");
  187. $przyjecie = $db -> prepare("UPDATE mobidoktor SET Status= :status WHERE `ticket` = :ticket");
  188. $przyjecie -> bindValue(':ticket', $_POST['ticketzmiana'], PDO::PARAM_STR);
  189. $przyjecie -> bindValue(':status', $_POST['status'], PDO::PARAM_STR);
  190.  
  191. $zmianastatusu = $db->prepare("INSERT INTO zmianastatusow SET user = :user, ticket = :ticket, data = :data, status = :status, uwagidostatusu = :uwagidoserwisu " );
  192. $zmianastatusu ->bindValue(':ticket', $_POST['ticketzmiana'], PDO::PARAM_INT);
  193. $zmianastatusu ->bindValue(':status', $_POST['status'], PDO::PARAM_STR);
  194. $zmianastatusu ->bindValue(':user', $range3, PDO::PARAM_STR);
  195. $zmianastatusu ->bindValue(':uwagidoserwisu', $_POST['uwagidoserwisu'], PDO::PARAM_STR);
  196. $zmianastatusu ->bindValue(':data', $data, PDO::PARAM_INT);
  197. $zmianastatusu ->execute();
  198.  
  199. $przyjecie ->execute();
  200. echo '<h2>'.'Dane zaktualizowane'.'</h2>';
  201. var_dump($_POST);
  202. }?>
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211. </div>
  212. </p>
  213. </div>
  214. <div class="modal-footer">
  215. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  216. </div>
  217. </div>
  218. </div>
  219. </div>
  220.  
  221.  
  222.  
  223.  
  224. </p>
  225. </div>
  226. </div>
  227. </div>
  228. </div>
  229. <?php
  230. }
  231.  
  232.  
  233.  
  234. break;
woxala123
  1.  
  2. SELECT * FROM mobidoktor WHERE ticket = :ticket' LIMIT 1
  3.  

Może tak?
timeo
Nie o to chodzi. Chcę aby wylistowane były wszystkie "tickety" ale zapytanie szło tylko do 1. Ograniczenie LIMIT powoduje pokazanie jedego rekordu z bazy, a nie o to mi chodziło.
woxala123
  1.  
  2. SELECT * FROM mobidoktor WHERE ticket = :$ticket'



  1.  
  2. $update = ("UPDATE mobidoktor SET statue = ? WHERE id = ?");
  3. $statement = $this->db-> prepare($update);
  4. $statement->execute([$statue, $ticket]);
timeo
Bez bindowania? Nie przejdzie nie działa i nie funkcjonuje
  1. Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':$ticket' at line 1 in D:\xampp\htdocs\mobidoktor3\index.php:627 Stack trace: #0 D:\xampp\htdocs\mobidoktor3\index.php(627): PDOStatement->execute() #1 {main} thrown in D:\xampp\htdocs\mobidoktor3\index.php on line 627


Nadal nic nie działa. To nie to - blokuje całą stronę. Nie listują się naprawy.

Dziękuję Ci za pomoc ale w moim przypadku to niestety nie działa i w ogóle nie wiem jak to zaimplementować w mój kod.

Cytat(woxala123 @ 17.02.2017, 12:22:00 ) *
  1.  
  2. SELECT * FROM mobidoktor WHERE ticket = :$ticket'



  1.  
  2. $update = ("UPDATE mobidoktor SET statue = ? WHERE id = ?");
  3. $statement = $this->db-> prepare($update);
  4. $statement->execute([$statue, $ticket]);



Ogólnie Pierwsza linia nie działa bo ciągle wywala błąd. Drugiej opcji nie umiem wykorztsac w moim przypadku.
viking
Nie ticket = :$ticket tylko ticket = :ticket
Bindowanie tu masz w execute, możesz przecież przepisać po swojemu.
timeo
Cytat(viking @ 17.02.2017, 13:29:04 ) *
Nie ticket = :$ticket tylko ticket = :ticket
Bindowanie tu masz w execute, możesz przecież przepisać po swojemu.

ticket = :ticket mam cały czas. Bindowanie mam po swojemu.
  1. f(isset($_POST['status']))
  2. {
  3. $data = date("Y-m-d H:i:s");
  4.  
  5. $przyjecie = $db -> prepare("UPDATE mobidoktor SET Status= :status WHERE `ticket` = :ticket");
  6. $przyjecie -> bindValue(':ticket', $_POST['ticketzmiana'], PDO::PARAM_STR);
  7. $przyjecie -> bindValue(':status', $_POST['status'], PDO::PARAM_STR);
  8. $przyjecie ->execute();
  9.  
  10. $zmianastatusu = $db->prepare("INSERT INTO zmianastatusow SET user = :user, ticket = :ticket, data = :data, status = :status, uwagidostatusu = :uwagidoserwisu " );
  11. $zmianastatusu ->bindValue(':ticket', $_POST['ticketzmiana'], PDO::PARAM_INT);
  12. $zmianastatusu ->bindValue(':status', $_POST['status'], PDO::PARAM_STR);
  13. $zmianastatusu ->bindValue(':user', $range3, PDO::PARAM_STR);
  14. $zmianastatusu ->bindValue(':uwagidoserwisu', $_POST['uwagidoserwisu'], PDO::PARAM_STR);
  15. $zmianastatusu ->bindValue(':data', $data, PDO::PARAM_INT);
  16. $zmianastatusu ->execute();
  17.  
  18. }?>


Tylko okno modal wysyła zapytania w pętli do wszystkich wylistowanych numerów ticketów.
var_dump pokazuje tylko ze $_POST jest tylko dla danego jednego ticketu w którym akurat kliknę okno modalne. Dlaczego zaczytuje mi do bazy do wszystkich ticketów. Może jest jakaś opcja do podejrzenia gdzie pętla wysyła zmiany do wszystkich ticketów.
viking
A ten kod działa prawidłowo? Bo np tutaj :
}
$ticket = $row['ticket'];
?>

Masz jakiś kod php normalnie wstawiony w html bez przetwarzania.
timeo
Działa jak najbardziej. Wszystko jest ok. Tylko to wysyłanie do bazy jest męczące.
A to wrzuciłem bo mi było do unikalnych bootsrapow potrzebne.
}
$ticket = $row['ticket'];
?>
viking
Tylko jeśli ten kod tak obecnie wygląda to nigdzie nie ma zmiennej $ticket, bo jak mówiłem, jest osadzone w HTML bez przetwarzania. W związku z czym warunek dla zapytania się nie wykonuje.
timeo
A jednak się wykonuje bo z $_POST dostaje

array(4) { ["status"]=> string(19) "Naprawa zakończona" ["uwagidoserwisu"]=> string(0) "" ["ticketzmiana"]=> string(4) "7323" ["add"]=> string(13) "Zmień serwis" }
viking
Czyli jaki jest problem teraz? Bo tablica pokazuje dane jednego rekordu do modyfikacji, z konkretnym id.
timeo
Na przykład to, że wysyła ponad kilkanaście razy (czyli tyle ile jest na stronie wylistowanych ticketów) zapytań do bazy.
Wstawiam link do zdjęcia.
viking
Co pojawia się w konsoli przeglądarki jak klikasz Zmień serwis?
timeo
Viking - serdecznie dziękuję za pomoc. Poradziłem sobie inaczej. Klikam w odnośnik do ticketu i tam mam wszystkie opcje do jednego ticketu i nie zapętlone, więc nie będę za bardzo wchodził w rozbudowę tego case.
Dzięki
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.