Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Pobrane id z url metodą get podczas wys. formularza znika
Forum PHP.pl > Forum > PHP
sinke
Hej,
mam następujący problem...
chce dodać dane do bazy danych, ale potrzebuje id. I id jest przekazywane przez get z url i ulr wygląda tak:
Kod
http:[...]/poke_yoke_form_1.php?id=4

I jest ok, bo jest pobierane przez get id i kiedy daje do echo to się wyświetla. Natomiast kiedy wpisuje dodatkowe dane i daje przycisk "dodaj" (wysyłam formularz) to wszystko znika i zapytanie do bazy nie działa. Mam podobnie w innym kodzie i wszystko działa ok. Zapytania są dobrze napisane, bo sprawdzałam w bazie. Potrzebuje wiedzieć, w którym miejscu mam coś źle, albo czemu tak się dzieje?


Poniżej kod:
  1. <?php
  2. include_once('header.html');
  3.  
  4. if(isset($_GET['id']) && (is_numeric($_GET['id'])) )
  5. {
  6. $id = $_GET['id'];
  7. }
  8. elseif (isset($_POST['id']) && (is_numeric($_POST['id'])) )
  9. {
  10. $id = $_POST['id'];
  11. }
  12. else {
  13. echo "BŁĄD Z ID!";
  14. }
  15.  
  16. echo $id;
  17. echo "POST:". $id;
  18. include_once('db_rys.inc.php');
  19.  
  20.  
  21. if (isset($_POST['submitted']))
  22. {
  23.  
  24. $q3 = "SELECT nazwa_rys FROM rysunek WHERE id_rys = $id" ;
  25. echo $q3;
  26. $r3 = mysqli_query ($link, $q3);
  27. $num3 = @mysqli_num_rows($r3);
  28. print_r($num3);
  29.  
  30. if ($num3 == 1)
  31. {
  32. while ($row = mysqli_fetch_array($r3, MYSQL_ASSOC) )
  33. {
  34. $name = $row['nazwa_rys'];
  35. }
  36.  
  37. $q = "INSERT INTO poke_yoke ('nazwa_rys', 'nazwa_art', 'kolory_art' ) VALUES ( '$name', '$nazwa_art', '$kolory_art' )";
  38. echo $q;
  39. $r = mysqli_query($link, $q);
  40.  
  41. print_r($r);
  42.  
  43. if($r)
  44. {
  45. echo "<p>Artykuł dodano poprawnie.</>";
  46.  
  47.  
  48. }
  49. else {
  50. echo "<p>Wystapił blad.</p>";
  51. echo '<p>' . mysqli_error($link) . '<br/>Zapytanie: ' . $q . '</p>';
  52.  
  53. }
  54.  
  55.  
  56. }
  57. else
  58. {
  59. echo "Błąd nie wyszukano nazwy rysunka na podstawie id. ";
  60. }
  61.  
  62. }
  63.  
  64.  
  65. ?>
  66.  
  67. <h3>Dodaj nowy artykuł:</h3>
  68.  
  69. <form method="post" action="poke_yoke_form_1.php" role="form" >
  70.  
  71. <div class="form-group">
  72. <label for="nazwa_art" class="pull-left">Nazwa artykułu do rysunku o nazie: <?php echo $name; ?></label>
  73. <input type="text" name="nazwa_art" class="form-control" id="nazwa_art" placeholder="Nazwa art" value="<?php if(isset($_POST['nazwa_art'])) echo $_POST['nazwa_art']; ?>">
  74.  
  75. </div>
  76.  
  77. <div class="form-group">
  78. <label for="kolory_art" class="pull-left">Podaj kolory odzielając je przecinkiem:</label>
  79. <input type="text" name="kolory_art" class="form-control" id="kolory_art" placeholder="Kolory" value="<?php if(isset($_POST['kolory_art'])) echo $_POST['kolory_art']; ?>" >
  80.  
  81. </div>
  82.  
  83. <div class="buttons">
  84.  
  85. <!-- <input type="button" value="wróć" onclick="location.href='http://zamowienie.aleksandralysko.pl/wszystkie_zamowienia_zam.php'" > -->
  86. <input type="submit" name="submit" value="Dodaj artykuł" />
  87. <input type="hidden" name="submitted" value="TRUE" />
  88. </div>
  89.  
  90.  
  91. </form>
  92.  
  93. <?php
  94. mysqli_close($link);
  95. ?>
  96.  


Po przeładowaniu strony takie komunikaty mi wyskakują;
Kod
BŁĄD Z ID!SELECT nazwa_rys FROM rysunek WHERE id_rys =
Błąd nie wyszukano nazwy rysunka na podstawie id.
kartin
Jeśli użyjesz tego formularza w kodzie to id nie jest w żaden sposób przesyłane. Możesz dodać sobie w formularzu:
  1. <input type="hidden" name="id" value="......">

W momencie gdy nie masz id i wyświetlasz komunikat BŁĄD Z ID! nie powinnaś wykonywać kodu w liniach 21-62. Jaki jest sens wykonywania tego?

  1. while ($row = mysqli_fetch_array($r3, MYSQL_ASSOC) )
  2. {
  3. $name = $row['nazwa_rys'];
  4. }
W jakim celu jest użyta pętla?

  1. $q = "INSERT INTO poke_yoke ('nazwa_rys', 'nazwa_art', 'kolory_art' ) VALUES ( '$name', '$nazwa_art', '$kolory_art' )";
Masz błąd w zapytaniu, a nawet 6 tego samego rodzaju.
adbacz
Nie pokazuje sie,ponieważ nie jest z tym formularzem wysyłana ta wartość. Ty ją masz tylko na tej stronie, ale jej nie wysyłasz. Musisz dodać to pole jako HIDDEN do formularza i będzie działać:

  1. <input type="hidden" name="id" value="<?php echo $id; ?>" />
sinke
@adbacz, @kartin dzięki podziałało z hidden input i id działa.

@kartin
Pętle usunęłam, bo rzeczywiście była zbędna smile.gif
Natomiast w tym zapytaniu chyba Ci chodziło, że błędem były te apostrofy, tylko użyłam ich po to, bo te trzy zmienne muszą byc w cudzysłowach, ponieważ są w nich _ i , i jak je wpisuje bez apostrofów w bazie to jest błąd więc usunęłam apostrofy z pierwszej części zapytania, przy zmiennych zostawiłam i wszystko działa. smile.gif

Jeszcze raz dzięki, za szybką dopowiedz i pomoc smile.gif!
kartin
Chodziło o apostrofy, ale w nazwach pól a nie w dodawanych wartościach.
  1. INSERT INTO poke_yoke ('nazwa_rys', 'nazwa_art', 'kolory_art' )
sinke
Mam jeszcze jeszcze jeden problem(nawet trochę podobny smile.gif), chodzi mi, ze gdy update'uje stronę i mam w <form> method=post i action = ta sama strona, to wszystko działa okej, tzn. dodawaj mi się pola do tabelki i do bazy danych.
Ale jak daje w action inną stronę (bo nie chce, żeby można było przez przypadek wysłać ten formularz ponownie) to nie dodawanie do bazy danych nie działa i nie wiem czemu? Pewnie coś znowu przeoczyłam...
Liczę na Waszą pomoc.
Chciałabym tez spróbować html i php oddzielić, żeby w dwóch osobnych plikach to było, ale nie mam pomysłu i nie wiem czy w tym przypadku się da?

Kod poniżej:
  1.  
  2. <?php
  3. include_once('header.html');
  4.  
  5. if(isset($_GET['id']) && (is_numeric($_GET['id'])) )
  6. {
  7. $id = $_GET['id'];
  8. }
  9. elseif (isset($_POST['id']) && (is_numeric($_POST['id'])) )
  10. {
  11. $id = $_POST['id'];
  12. }
  13. else {
  14. echo "BŁĄD Z ID!";
  15. }
  16.  
  17. include_once('db_rys.inc.php');
  18.  
  19. $q1 = "SELECT * FROM rysunek WHERE id_rys = $id";
  20. $r1 = mysqli_query ($link, $q1);
  21. $num1 = @mysqli_num_rows($r1);
  22.  
  23. if ($num1 > 0)
  24. {
  25. while ($row = mysqli_fetch_array($r1, MYSQL_ASSOC) )
  26. {
  27. $num_py_m = $row['ile_py'];
  28. $nazwa_rys = $row['nazwa_rys'];
  29.  
  30.  
  31. echo '<div class="row">
  32. <h2>Nazwa RYSUNKU: '.$nazwa_rys.'</h2>
  33. <form method="post" action="poke_yoke_pokaz.php?id='.$id.'" role="form" >
  34. <div class="table-responsive">
  35. <table class="table table-bordered">
  36. <tr>
  37. <th>Nr ID:</th>
  38. <th>Nazwa artykułu:</th>
  39. <th>Kolory w artykule:</th>';
  40.  
  41. for ($i=1; $i <= $num_py_m; $i++)
  42. {
  43. echo '<th class="text-center">'. $i.'</th>';
  44. }
  45.  
  46. echo '</tr>';
  47.  
  48. $nazwa_rys = $row['nazwa_rys'];
  49. $q2 = "SELECT * FROM poke_yoke WHERE nazwa_rys = '$nazwa_rys' ORDER BY id_py ASC ";
  50. $r2 = mysqli_query ($link, $q2);
  51. $num2 = @mysqli_num_rows($r2);
  52. $num_py = $num_py_m + 3;
  53.  
  54. if ($num2 > 0)
  55. {
  56. while ($row2 = mysqli_fetch_array($r2, MYSQL_NUM) )
  57. {
  58. $id_py = $row2[0];
  59. echo '<tr>
  60. <td>' .$row2[0]. '</td> <!-- id_py -->
  61. <td>' .$row2[2]. '</td> <!-- nazwa_art -->
  62. <td>' .$row2[3]. '</td>';
  63.  
  64. if(empty($row2[4]))
  65. {
  66. for ($i=4; $i <= $num_py; $i++)
  67. {
  68. echo '<td class="text-center '. $row2[$i] .'">
  69. <div class="form-group">';
  70.  
  71. $kolory = $row2[3];
  72. $tab_kolory = ( explode( ',', $kolory ) );
  73. array_unshift($tab_kolory, "x");
  74.  
  75. echo '<select name="kolor_py_'.$i.'" class="form-control">';
  76.  
  77. foreach ($tab_kolory as $kolor )
  78. {
  79. echo '<option value="'. $kolor .'">'. $kolor .'</option>';
  80. }
  81.  
  82. echo '</select>
  83. </div>
  84. </td>';
  85.  
  86. $select_kolor[$i] = $_POST['kolor_py_'.$i.''];
  87.  
  88. }
  89. }
  90. else
  91. {
  92. for ($i=4; $i <= $num_py; $i++)
  93. {
  94. $kolor_klasy = $row2[$i];
  95. if ($kolor_klasy == "C" || $kolor_klasy == "M" || $kolor_klasy == "Y" || $kolor_klasy == "K" || $kolor_klasy == "x" )
  96. {
  97. echo '<td class="text-center '. $kolor_klasy .'">'. $kolor_klasy .'</td>';
  98. }
  99. else
  100. {
  101. echo '<td class="text-center pantone">'. $kolor_klasy .'</td>';
  102. }
  103. }
  104. }
  105. } //while
  106. echo '</tr>
  107. </table>
  108. </div>';
  109. $num_py_m; //ilosc pokey-yoke
  110.  
  111. $k = 4;
  112. for ($j=1; $j <= 30 ; $j++)
  113. {
  114. ${'select_py'.$j} = $select_kolor[$k];
  115. $k++;
  116. }
  117.  
  118. echo '<input type="hidden" name="id_py" value="'.$id_py.'" />
  119. <input type="hidden" name="id" value="'.$id.'" />
  120. <div class="buttons">
  121. <input type="submit" name="submit" value="SPRAWDŹ" />
  122. <input type="hidden" name="submitted" value="TRUE" />
  123. </div>
  124. </form>';
  125. if (isset($_POST['submitted'])) {
  126. $q3 = "UPDATE poke_yoke SET
  127. py_1='$select_py1',
  128. py_2='$select_py2',
  129. py_3='$select_py3',
  130. py_4='$select_py4',
  131. py_5='$select_py5',
  132. py_6='$select_py6',
  133. py_7='$select_py7',
  134. py_8='$select_py8',
  135. py_9='$select_py9',
  136. py_10='$select_py10',
  137. py_11='$select_py11',
  138. py_12='$select_py12',
  139. py_13='$select_py13',
  140. py_14='$select_py14',
  141. py_15='$select_py15',
  142. py_16='$select_py16',
  143. py_17='$select_py17',
  144. py_18='$select_py18',
  145. py_19='$select_py19',
  146. py_20='$select_py20',
  147. py_21='$select_py21',
  148. py_22='$select_py22',
  149. py_23='$select_py23',
  150. py_24='$select_py24',
  151. py_25='$select_py25',
  152. py_26='$select_py26',
  153. py_27='$select_py27',
  154. py_28='$select_py28',
  155. py_29='$select_py29',
  156. py_30='$select_py30' WHERE id_py = $id_py";
  157. echo $q3;
  158. $r3 = mysqli_query($link, $q3);
  159.  
  160. if($r3)
  161. {
  162. echo "<p>Dziękujemy za dodanie zamowienia. Zamówienie zostało dodano poprawnie.</p>";
  163. header('refresh: 1;');
  164.  
  165. }
  166. else
  167. {
  168. echo "<p>Wystapił blad.</p>";
  169. echo '<p>' . mysqli_error($link) . '<br/>Zapytanie: ' . $q3 . '</p>';
  170. }
  171. }
  172. }
  173. else
  174. {
  175. echo '<p>BAZA POKE-YOKE: Nie ma nazwy takiego rysunku w bazie. <a class="btn btn-default" href="dodaj_rys.php">Dodaj nowy</a></p>';
  176. }
  177. }//while
  178. } //if ($num1 > 0)
  179. else
  180. {
  181. echo '<p>BŁĄD!</p>';
  182. }
  183.  
  184. mysqli_free_result($r1);
  185. mysqli_free_result($r2);
  186. mysqli_close($link);
  187.  
  188. include_once('footer.html');
  189. ?>
kartin
Cytat(sinke @ 26.07.2014, 22:19:49 ) *
Ale jak daje w action inną stronę (bo nie chce, żeby można było przez przypadek wysłać ten formularz ponownie) to nie dodawanie do bazy danych nie działa i nie wiem czemu? Pewnie coś znowu przeoczyłam...
Jeśli w action dajesz adres strony/skryptu w którym nie ma dodawania to nie może dodać do bazy.

Pomysł oddzielenia logiki aplikacji od warstwy prezentacji jest zdecydowanie bardzo dobry. W tym jak i każdym innym przypadku da się to zrobić.

  1. $q3 = "UPDATE poke_yoke SET
  2. py_1='$select_py1',
  3. py_2='$select_py2',
  4. py_3='$select_py3',
  5. ...
  6. py_28='$select_py28',
  7. py_29='$select_py29',
  8. py_30='$select_py30' WHERE id_py = $id_py";
To już jest prawdziwe przegięcie. Zdecydowanie powinnaś sobie poczytać coś o projektowaniu baz danych, postaciach normalnych itp.
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.