Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Nie przekazują się zmienne z POST
Forum PHP.pl > Forum > Przedszkole
suchy1
Cześć,

Pisze plugin do Wordpressa i mam problem. Nie działa mi przekazywanie zmiennych wprowadzonych przez użytkownika. Jeżeli wyrzucę z mojego kodu operatory IF i Switch to zaczyna działać. Mam tu na myśli funkcję, która znajduje się na samym dole.

  1. function ow_display_user() {
  2. wp_enqueue_script('jquery-ui-datepicker');
  3. wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');
  4.  
  5. global $wpdb;
  6. $results = $wpdb->get_results ("SELECT adres FROM wp_ow_adres;");
  7. ?>
  8. <h2>Odczyt wodomierzy</h2>
  9. <form method="post" action="">
  10. <table>
  11. <tbody>
  12. <tr>
  13. <th><label for="Adres">Adres zamieszkania</label></th>
  14. <td><select id="adres" name="adres">
  15. <option value="">Wybierz swój adres</option>
  16. <?php
  17. foreach ( $results as $result ) {
  18. echo '<option>'.$result->adres.'</option>';
  19. }
  20. ?>
  21. </select></td>
  22. </tr>
  23. <input type="submit" name="submit" value="Wybierz" />
  24. </tbody>
  25. </table>
  26. </form>
  27. <?php
  28. $adres = $_POST["adres"];
  29. global $wpdb;
  30. if (isset($_POST['submit'])){
  31. $spr_liczbe_wodo = $wpdb->get_var("select liczba_wodomierzy from wp_ow_adres where adres='$adres'");
  32. switch ($spr_liczbe_wodo) {
  33. case 1:
  34. ?>
  35. <form name="adres_form" method="post" action="">
  36. <table>
  37. <tbody>
  38. <tr>
  39. <td>Adres zamieszkania:</td>
  40. <td><?php echo $adres;?></td>
  41. </tr>
  42. <tr>
  43. <td>Stan wodomierza:</td>
  44. <td><input type="text" name="stan_wodomierza" /></td>
  45. </tr>
  46. <tr>
  47. <td>Data odczytu:</td>
  48. <td><input type="text" name="data_odczytu" id="datepicker" /></td>
  49. </tr>
  50. <tr>
  51. <td>Kod lokalu:</td>
  52. <td><input type="text" name="kod_lokalu" /></td>
  53. </tr>
  54. <tr>
  55. <td></td>
  56. <td><input type="submit" name="submit" value="Zapisz" /></td>
  57. </tr>
  58. </tbody>
  59. </table>
  60. </form>
  61. <?php
  62. break;
  63. case 2:
  64. ?>
  65. <form name="adres_form" method="post" action="">
  66. <table>
  67. <tbody>
  68. <tr>
  69. <td>Adres zamieszkania:</td>
  70. <td><?php echo $adres;?></td>
  71. </tr>
  72. <tr>
  73. <td>Woda ciepła:</td>
  74. <td><input type="text" name="woda_ciepla" /></td>
  75. </tr>
  76. <tr>
  77. <td>Woda zimna:</td>
  78. <td><input type="text" name="woda_zimna" /></td>
  79. </tr>
  80. <tr>
  81. <td>Data odczytu:</td>
  82. <td><input type="text" name="data_odczytu" id="datepicker" /></td>
  83. </tr>
  84. <tr>
  85. <td>Kod lokalu:</td>
  86. <td><input type="text" name="kod_lokalu" /></td>
  87. </tr>
  88. <tr>
  89. <td></td>
  90. <td><input type="submit" name="submit" value="Zapisz" /></td>
  91. </tr>
  92. </tbody>
  93. </table>
  94. </form>
  95. <?php
  96. break;
  97. case 4:
  98. ?>
  99. <form method="POST" action="">
  100. <table>
  101. <tbody>
  102. <tr>
  103. <td>Adres zamieszkania:</td>
  104. <td><?php echo $adres;?></td>
  105. </tr>
  106. <tr>
  107. <td>Woda ciepła (kuchnia):</td>
  108. <td><input type="text" name="woda_ciepla_kuchnia" /></td>
  109. </tr>
  110. <tr>
  111. <td>Woda ciepła (łazienka):</td>
  112. <td><input type="text" name="woda_ciepla_lazienka" /></td>
  113. </tr>
  114. <tr>
  115. <td>Woda zimna (kuchnia):</td>
  116. <td><input type="text" name="woda_zimna_kuchnia" /></td>
  117. </tr>
  118. <tr>
  119. <td>Woda zimna (łazienka):</td>
  120. <td><input type="text" name="woda_zimna_lazienka" /></td>
  121. </tr>
  122. <tr>
  123. <td>Data odczytu:</td>
  124. <td><input type="text" name="data_odczytu" id="datepicker" /></td>
  125. </tr>
  126. <tr>
  127. <td>Kod lokalu:</td>
  128. <td><input type="text" name="kod_lokalu" /></td>
  129. </tr>
  130. <tr>
  131. <td></td>
  132. <td><input type="submit" name="submit" value="Zapisz" /></td>
  133. </tr>
  134. </tbody>
  135. </table>
  136. </form>
  137. <?php
  138. if (isset($_POST['submit'])){
  139. global $wpdb;
  140. $kod_lokalu = $_POST['kod_lokalu'];
  141. $spr_kod_lokalu = $wpdb->get_var("select kod_lokalu from wp_ow_adres where adres='. $adres .'");
  142. if ($spr_kod_lokalu == $kod_lokalu) {
  143. $kod_lokalu = $_POST['data_odczytu'];
  144. $woda_ciepla_kuchnia = $_POST['woda_ciepla_kuchnia'];
  145. $woda_ciepla_lazienka = $_POST['woda_ciepla_lazienka'];
  146. $woda_zimna_kuchnia = $_POST['woda_zimna_kuchnia'];
  147. $woda_zimna_lazienka = $_POST['woda_zimna_lazienka'];
  148. $data_odczytu = '0000-00-00 00:00:00';
  149.  
  150. $data = array(
  151. 'id' => '',
  152. 'adres' => $adres,
  153. 'data_odczytu' => $data_odczytu,
  154. 'woda_ciepla_kuchnia' => $woda_ciepla_kuchnia,
  155. 'woda_ciepla_lazienka' => $woda_ciepla_lazienka,
  156. 'woda_zimna_kuchnia' => $woda_zimna_kuchnia,
  157. 'woda_zimna_lazienka' => $woda_zimna_lazienka,
  158. );
  159.  
  160. $wpdb->insert(`wp_ow_odczyty`, $data);
  161. }
  162. }
  163. break;
  164. }
  165.  
  166. }
  167. }


--edycja

Mam wrażenie jakby formularze się sumowały. Jeżeli to jest możliwe.
fate
  1. $spr_liczbe_wodo = $wpdb->get_var("select liczba_wodomierzy from wp_ow_adres where adres='$adres'");


tutaj kropek wydaje sie brakowac
suchy1
Jeżeli dodam kropki kolo $adres to nie działa. Wrzucam jeszcze raz kod w mniejszej formie. Obecnie 'woda_ciepla_kuchnia' => $woda_ciepla_kuchnia, zawsze przyjmuje wartość 0 niezależnie od tego co użytkownik wprowadzi.

  1. function ow_display_user() {
  2. wp_enqueue_script('jquery-ui-datepicker');
  3. wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');
  4.  
  5. global $wpdb;
  6. $results = $wpdb->get_results ("SELECT adres FROM wp_ow_adres;");
  7. ?>
  8. <form method="post" action="">
  9. <table>
  10. <tbody>
  11. <tr>
  12. <th><label for="Adres">Adres zamieszkania</label></th>
  13. <td><select id="adres" name="adres">
  14. <option value="">Wybierz swój adres</option>
  15. <?php
  16. foreach ( $results as $result ) {
  17. echo '<option>'.$result->adres.'</option>';
  18. }
  19. ?>
  20. </select></td>
  21. </tr>
  22. <tr>
  23. <td><input type="submit" name="submit" value="Wybierz" />
  24.  
  25. <td>
  26.  
  27. </tr>
  28. </tbody>
  29. </table>
  30. </form>
  31. <?php
  32. $adres = $_POST["adres"];
  33. $woda_ciepla_kuchnia = $_POST['woda_ciepla_kuchnia'];
  34. if (isset($_POST['submit'])){
  35. $spr_liczbe_wodo = $wpdb->get_var("select liczba_wodomierzy from wp_ow_adres where adres='$adres'");
  36.  
  37. if ($spr_liczbe_wodo == 4) {
  38.  
  39. echo '<form method="post" action="">';
  40. echo ' <table>';
  41. echo ' <tbody>';
  42. echo ' <tr>';
  43. echo ' <td>Adres zamieszkania:</td>';
  44. echo ' <td>'. $adres .'</td>';
  45. echo ' </tr>';
  46. echo ' <tr>';
  47. echo ' <td>Woda ciepła (kuchnia):</td>';
  48. echo ' <td><input type="text" id="woda_ciepla_kuchnia" name="woda_ciepla_kuchnia" /></td>';
  49. echo ' </tr> ';
  50. echo ' <tr>';
  51. echo ' <td></td>';
  52. echo ' <td><input type="submit" id="submit" name="submit" value="Zapisz" /></td>';
  53. echo ' </tr>';
  54. echo ' </tbody>';
  55. echo ' </table>';
  56. echo ' </form>';
  57.  
  58. (isset($_POST['submit']));
  59. $woda_ciepla_kuchnia = $_POST['woda_ciepla_kuchnia'];
  60. $data_odczytu = '0013-00-00 22:00:00';
  61.  
  62. $data = array(
  63. 'id' => '',
  64. 'adres' => 'dasd',
  65. 'data_odczytu' => $data_odczytu,
  66. 'woda_ciepla_kuchnia' => $woda_ciepla_kuchnia,
  67.  
  68. );
  69.  
  70. $wpdb->insert(wp_ow_odczyty, (array)$data);
  71.  
  72. }
  73.  
  74. }
  75.  
  76. }
mar1aczi
Jak wspomniał fate. Wykonaj zapytanie z linii 35 np. w phpmyadminie i sprawdź wynik.
Dodatkowo http://codex.wordpress.org/Debugging_in_WordPress twoim przyjacielem wink.gif
suchy1
Wynik jest prawidłowy. System wchodzi w tego IF i prezentuje formularz. Jeżeli wybiore inny adres to nie prezentuje formularza więc to jest ok - moim zdaniem bo działa. Po uruchomieniu DEBUG w WP mam tylko kilka NOTICE do zmiennych, które nie zostały zdefiniowane.
bostaf
Cytat(suchy1 @ 30.12.2013, 11:24:26 ) *
Obecnie 'woda_ciepla_kuchnia' => $woda_ciepla_kuchnia, zawsze przyjmuje wartość 0 niezależnie od tego co użytkownik wprowadzi.

Tylko woda_ciepla_kuchnia jest 0? Pozostałe dane przyjmują dane z formularza?

Sprawdź te NOTICEy - czy jeden z nich dotyczy $_POST['woda_ciepla_kuchnia']? Czy odpowiada linii 33 z Twojego ostatniego listingu?
suchy1
Nie mogę wejść do ostatniego IF, jakby isset nie działał prawidłowo. Jeżeli go usunę to dodaje się wpis do bazy. Oczywiście z zerową wartością bo insert leci do bazy w momencie wyświetlenie formularza.

--edycja

Mam tylko jeden NOTICE dotyczący $adres = $_POST["adres"]; a nie powinno być także dla $_POST['woda_ciepla_kuchnia'] questionmark.gif
bostaf
Teraz zauważyłem w Twoim pierwszym listingu, że po podaniu i wysłaniu adresu, wyświetlą się dwa formularze, i oba z przyciskiem o nazwie "submit". Dobrze myślę, że ten pierwszy - z rozwijalną listą adresów zamieszkania - zawsze się wyświetla? Spróbuj na początek dać unikalne nazwy wszystkim formularzom i wszystkim przyciskom submit. Zobacz co się dzieje i daj znać.
Tuż pod od linią
  1. <h2>Odczyt wodomierzy</h2>

dodaj
  1. <pre style="text-align: left;">
  2. <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') var_dump($_POST);
  3. </pre>

i przeanalizuj co tam drukuje.
Dla pewności pytam: ten pierwszy listing w Twoim pierwszym poście to pełny listing funkcji ow_display_user()?
fate
<option value="">Wybierz swój adres</option>

$_POST adres jest puste bo optiony nie maja zadnego value tylko tekst opisujacy.
suchy1
Dziękuje wszystkim za dotychczasowa pomoc. Cała funkcja:

  1. function ow_display_user() {
  2. ?>
  3. <pre style="text-align: left;">
  4. <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') var_dump($_POST); ?>
  5. </pre>
  6. <?
  7. wp_enqueue_script('jquery-ui-datepicker');
  8. wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');
  9.  
  10. global $wpdb;
  11. $results = $wpdb->get_results ("SELECT adres FROM wp_ow_adres;");
  12. ?>
  13. <form name="one" method="post" action="">
  14. <table>
  15. <tbody>
  16. <tr>
  17. <th><label for="Adres">Adres zamieszkania</label></th>
  18. <td><select id="adres" name="adres">
  19. <option value="">Wybierz swój adres</option>
  20. <?php
  21. foreach ( $results as $result ) {
  22. echo '<option>'.$result->adres.'</option>';
  23. }
  24. ?>
  25. </select></td>
  26. </tr>
  27. <tr>
  28. <td><input type="submit" name="ok" value="Wybierz" />
  29.  
  30. <td>
  31.  
  32. </tr>
  33. </tbody>
  34. </table>
  35. </form>
  36. <?php
  37. $adres = $_POST["adres"];
  38.  
  39. if (isset($_POST['ok'])){
  40. $spr_liczbe_wodo = $wpdb->get_var("select liczba_wodomierzy from wp_ow_adres where adres='$adres'");
  41.  
  42. if ($spr_liczbe_wodo == 4) {
  43. ?>
  44. <form name="two" method="post" action="http://localhost.local/">
  45. <table>
  46. <tbody>
  47. <tr>
  48. <td>Adres zamieszkania:</td>
  49. <td><?php $adres?></td>
  50. </tr>
  51. <tr>
  52. <td>Woda ciepła (kuchnia):</td>
  53. <td><input type="text" id="woda_ciepla_kuchnia" name="woda" /></td>
  54. </tr>
  55. <tr>
  56. <td></td>
  57. <td><input type="submit" id="zapisz" name="zapisz" value="Zapisz" /></td>
  58. </tr>
  59. </tbody>
  60. </table>
  61. </form>
  62. <?
  63.  
  64. if(isset($_POST['zapisz']))
  65. {
  66. $woda_ciepla_kuchnia=1;
  67. $data_odczytu = '0013-00-00 22:00:00';
  68.  
  69. $data = array(
  70. 'id' => '',
  71. 'adres' => 'dasd',
  72. 'data_odczytu' => $data_odczytu,
  73. 'woda_ciepla_kuchnia' => 1,
  74.  
  75. );
  76.  
  77. $wpdb->insert(wp_ow_odczyty, (array)$data);
  78.  
  79. }
  80. }
  81.  
  82. }
  83.  
  84. }


Po dodaniu:

  1. <pre style="text-align: left;">
  2. <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') var_dump($_POST);
  3. </pre>


wyświetla się:

  1. array(2) {
  2. ["woda"]=>
  3. string(1) "4"
  4. ["zapisz"]=>
  5. string(6) "Zapisz"
  6. }


ale dalej nie wpadam w if(isset($_POST['zapisz']))

Cytat(fate @ 30.12.2013, 13:42:45 ) *
<option value="">Wybierz swój adres</option>

$_POST adres jest puste bo optiony nie maja zadnego value tylko tekst opisujacy.

Masz rację ale ta zmienna jest przekazywana dalej.
mar1aczi
Cytat(suchy1 @ 30.12.2013, 13:49:37 ) *
ale dalej nie wpadam w if(isset($_POST['zapisz']))

Bo jest w warunku
  1. if ($spr_liczbe_wodo == 4) {

suchy1
Zgadza się. Warunek jest prawdziwy bo wyświetla mi się formularz.
bostaf
Cytat(suchy1 @ 30.12.2013, 13:49:37 ) *
ale dalej nie wpadam w if(isset($_POST['zapisz']))

Bo jest w warunku z wiersza 39:
  1. if (isset($_POST['ok'])){

czyli w warunku sprawdzającym, czy wciśnięto przycisk OK, a wciśnięcie obu przycisków jednocześnie nie jest możliwe. Wyrzuć cały blok od wiersza 64 do 79 gdzieś na zewnątrz i podrasuj, żeby przechwytywał adres z poprzedniego formularza (np. zapisz adres w sesji).
suchy1
@bostaf możesz mi pomóc jeszcze bardziej ? Nie znam się na sesji. Chodzi o to aby użytkownik wybrał swój adres. Następnie sprawdzam ile ma np. wodomierzy. na tej podstawie wyświetlam odpowiedni formularz. Dlatego tyle warunków dałem.
fate
Cytat(suchy1 @ 30.12.2013, 13:49:37 ) *
Masz rację ale ta zmienna jest przekazywana dalej.


No wlasnie mowisz ze dalej ale w momentach w ktorych próbujesz z niej korzystac nie jest przypadkiem pusta
bostaf
Sesja to oględnie mówiąc zmienne zapisywane po stronie serwera. Zasugerowałem Ci zmienne sesyjne, bo przetwarzasz kilka formularzy szeregowo i trzeba jakoś te informacje z poszczególnych etapów zapamiętać. W sesji najłatwiej.

W tym pierwszym bloku warunkowym if (isset($_POST['ok'])){ zapamiętaj adres w zmiennej sesyjnej, np.:
  1. $_SESSION['wybrany_adres'] = $_POST['adres'];

a w drugim bloku warunkowym (if(isset($_POST['zapisz']))), zapisując dane w bazie odczytaj wartość tej zmiennej i od razu ją zlikwiduj, żeby nie śmiecić:
  1. $data = array(
  2. 'id' => '',
  3. 'adres' => $_SESSION['wybrany_adres'],
  4. // ...
  5. )
  6. unset($_SESSION['wybrany_adres']);

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.