Witam.
Zajmuję się tworzeniem strony gildiowej. Obowiązuje tam zasada dodawania punktów DKP za jakieś tam eventy. Moim zadaniem jest napisanie skryptu, który będzie wyświetlał wszystkich użytkowników w tabeli. Przy każdym użytkowniku znajduje się checkbox, którego value = $user_id, oraz oczywiście input type=number, gdzie wpisywana jest wartość punktów DKP. Problem polega na tym, że jak wyciągam dane z value checkboxa, to nic się nie dzieje... Strona się odświeża/przeładowuje i tyle. Mam kod przykładowy, na którym się wzorowałem. Ten kod działa, mój już nie.
Oto fragment mojego kodu (proszę nie przejmować się ewentualnym brakiem domknięć if'ów i innych):

  1. <form action="index.php?page=dkp_manage_all" name="dkp" method="post">
  2. <table>
  3. <tr>
  4. <td>Select:</td>
  5. <td>Name:</td>
  6. <td>DKP Earned:</td>
  7. <td>DKP Spent:</td>
  8. <td>DKP Left:</td>
  9. <td>Ammount:</td>
  10. </tr>
  11. <tr>
  12. <td align="left">Select all</td>
  13. <td colspan="6" align="left"><input type="checkbox" name="select_all" /></td>
  14. </tr>
  15. <?php
  16. $user_data = mysql_query("SELECT * FROM `users` WHERE `active` = '1'");
  17. $user_id = $user_data['id'];
  18.  
  19. while ($r = mysql_fetch_assoc($user_data))
  20. {
  21. ?>
  22. <tr class="selected">
  23. <td><input type="checkbox" name="select_check[]" value="<?php echo $user_id; ?>" /></td>
  24. <td><?php echo $r['usr']; ?></td>
  25. <td><?php echo $r['dkp_earned']; ?></td>
  26. <td><?php echo $r['dkp_spent']; ?></td>
  27. <td><?php echo $r['dkp']; ?></td>
  28. <td><input type="number" value="100" name="dkp_value" /></td>
  29. </tr>
  30. <?php
  31. }
  32. ?>
  33. <tr>
  34. <td colspan="7" align="center"><input type="submit" name="manage_dkp" value="Manage DKP" /></td>
  35. </tr>
  36.  
  37. </table>
  38. <input type="hidden" name="hidden_selected" value="yes">
  39. </form>
  40. </div>
  41. </body>
  42. <?php
  43. if ($_POST['hidden_selected'] == 'yes')
  44. {
  45. $dkp_earned = $r['dkp_earned'];
  46. $dkp_spent = $r['dkp_spent'];
  47. $dkp = $r['dkp'];
  48. $value = $_POST['dkp_value'];
  49.  
  50. if (!empty($_POST['select_check']));
  51. {
  52. foreach ($_POST['select_check'] as $id) {
  53. echo $id;
  54. }
  55. }
  56.  
  57.  
  58. // $query = "UPDATE `users` SET `dkp` = '$dkp_new_value', `dkp_earned` = '$dkp_earned_new' WHERE `id` = '$id'";
  59.  
  60. }
  61.  
  62. ?>
  63.  
  64.  
  65. <form action="index.php?page=dkp_manage_all" method="post">
  66. <input type="checkbox" name="check_list[]" value="value 1">
  67. <input type="checkbox" name="check_list[]" value="value 2">
  68. <input type="checkbox" name="check_list[]" value="value 3">
  69. <input type="checkbox" name="check_list[]" value="value 4">
  70. <input type="checkbox" name="check_list[]" value="value 5">
  71. <input type="submit" />
  72. </form>
  73. <?php
  74. if(!empty($_POST['check_list'])) {
  75. foreach($_POST['check_list'] as $check) {
  76. echo $check; //echoes the value set in the HTML form for each checked checkbox.
  77. //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
  78. }
  79. }
  80. ?>



Fragment na samym dole kodu, czyli to:

  1. <form action="index.php?page=dkp_manage_all" method="post">
  2. <input type="checkbox" name="check_list[]" value="value 1">
  3. <input type="checkbox" name="check_list[]" value="value 2">
  4. <input type="checkbox" name="check_list[]" value="value 3">
  5. <input type="checkbox" name="check_list[]" value="value 4">
  6. <input type="checkbox" name="check_list[]" value="value 5">
  7. <input type="submit" />
  8. </form>
  9. <?php
  10. if(!empty($_POST['check_list'])) {
  11. foreach($_POST['check_list'] as $check) {
  12. echo $check; //echoes the value set in the HTML form for each checked checkbox.
  13. //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5.
  14. }
  15. }
  16. ?>

działa bez najmniejszych problemów. Mój fragment nie działa zupełnie.
W związku z tym pytanie: co robię źle? Dlaczego jeden fragment działa dobrze, a drugi, pomimo tego, że teoretycznie taki sam, nie działa zupełnie? Jak uniknąć podobnych błędów w przyszłości?
Dziękuję z góry za odpowiedź oraz wszelką pomoc.
Pozdrawiam.

EDIT:

OK, wybaczcie, mój błąd. Efekt ciągłego poprawiania smile.gif Okazało się, że chodzi o sam początek kodu, czyli zamienić ten fragment:
  1. <?php
  2. $user_data = mysql_query("SELECT * FROM `users` WHERE `active` = '1'");
  3. $user_id = $user_data['id'];
  4.  
  5. while ($r = mysql_fetch_assoc($user_data))
  6. {
  7. ?>
  8. <tr class="selected">
  9. <td><input type="checkbox" name="select_check[]" value="<?php echo $user_id; ?>" /></td>

na to:
  1. <?php
  2. $user_data = mysql_query("SELECT * FROM `users` WHERE `active` = '1'");
  3.  
  4. while ($r = mysql_fetch_assoc($user_data))
  5. {
  6. ?>
  7. <tr class="selected">
  8. <td><input type="checkbox" name="select_check[]" value="<?php echo $r['id']; ?>" /></td>


EDIT2:
Może jednak niech ten temat jeszcze tu posiedzi smile.gif Okazuje się, że po rozwiązaniu jednego problemu, pojawił się kolejny. Generowanie tablicy działa, odczytywanie danych... cóż, powiedzmy, że działa w połowie. To samo zapis danych (wynikający z błędnego odczytu). A może odwrotnie? Właśnie w tym problem, że już się w tym pogubiłem... Przez siedzenie nad tym kodem straciłem połowę włosów na głowie tongue.gif

Jeszcze raz, tym razem cały dostępny kod jaki posiadam (z pominięciem wrażliwych danych, wiadomo):
  1. <form action="index.php?page=dkp_manage_all" name="dkp" method="post">
  2. <table>
  3. <tr>
  4. <td>Select:</td>
  5. <td>Name:</td>
  6. <td>DKP Earned:</td>
  7. <td>DKP Spent:</td>
  8. <td>DKP Left:</td>
  9. <td>Ammount:</td>
  10. </tr>
  11. <tr>
  12. <td align="left">Select all</td>
  13. <td colspan="6" align="left"><input type="checkbox" name="select_all" /></td>
  14. </tr>
  15. <?php
  16. if ($_SESSION['id'])
  17. {
  18. if ($_SESSION['rank'] == '2' || $_SESSION['rank'] == '3' || $_SESSION['rank'] == '4')
  19. {
  20.  
  21. $user_data = mysql_query("SELECT * FROM `users` WHERE `active` = '1'");
  22.  
  23. while ($r = mysql_fetch_assoc($user_data))
  24. {
  25. ?>
  26. <tr class="selected">
  27. <td><input type="checkbox" name="select_check[]" value="<?php echo $r['id']; ?>" /></td>
  28. <td><?php echo $r['usr']; ?></td>
  29. <td><?php echo $r['dkp_earned']; ?></td>
  30. <td><?php echo $r['dkp_spent']; ?></td>
  31. <td><?php echo $r['dkp']; ?></td>
  32. <td><input type="number" name="dkp_value[]" /></td>
  33. </tr>
  34. <?php
  35. }
  36. ?>
  37. <tr>
  38. <td colspan="7" align="center"><input type="submit" name="manage_dkp" value="Manage DKP" /></td>
  39. </tr>
  40. <?php
  41. }
  42. else
  43. {
  44. echo 'You have no permission to see this page';
  45. }
  46. }
  47. else
  48. {
  49. echo 'You have no permission to see this page';
  50. }
  51.  
  52.  
  53.  
  54. ?>
  55. </table>
  56. <input type="hidden" name="hidden_selected" value="yes">
  57. </form>
  58. </div>
  59. </body>
  60. <?php
  61. if ($_POST['hidden_selected'] == 'yes')
  62. {
  63. $r = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `active` = '1'"));
  64. $dkp_earned = $r['dkp_earned'];
  65. $dkp_spent = $r['dkp_spent'];
  66. $dkp = $r['dkp'];
  67. $value = $_POST['dkp_value'];
  68.  
  69. if (!empty($_POST['select_check']))
  70. {
  71. foreach ($_POST['select_check'] as $id) {
  72. if ($value >= 0)
  73. {
  74. $dkp_earned_new = $dkp_earned + $value;
  75. $dkp_new_value = $dkp + $value;
  76. $query = "UPDATE `users` SET `dkp` = '$dkp_new_value', `dkp_earned` = '$dkp_earned_new' WHERE `id` = '$id'";
  77. }
  78. else if ($value < 0)
  79. {
  80. $dkp_spent_new = $dkp_spent + $value;
  81. $dkp_new_value = $dkp + $value;
  82. $query = "UPDATE `users` SET `dkp` = '$dkp_new_value', `dkp_spent` = '$dkp_spent_new' WHERE `id` = '$id'";
  83. }
  84. else
  85. {
  86. echo 'DKP value cannot be 0 (zero/null)!';
  87. }
  88. }
  89. }
  90. else
  91. {
  92. echo 'You have to select at least one account to change DKP values!';
  93. }
  94.  
  95. if (mysql_query($query) == 1)
  96. {
  97. echo 'DKP values has been changed successfuly!';
  98. }
  99. else
  100. {
  101. echo 'Something went wrong... Please check again in a while' .mysql_error();
  102. }
  103.  
  104.  
  105. // $query = "UPDATE `users` SET `dkp` = '$dkp_new_value', `dkp_earned` = '$dkp_earned_new' WHERE `id` = '$id'";
  106.  
  107. }
  108.  
  109. ?>


Więc co jest nie tak? Wybieram za pomocą checkbox'ów użytkowników, którzy zostaną obdarowani punktami DKP. Wpisuję ilość. Wcześniej próbowałem to zrobić na suwakach, ale wychodziły jeszcze dziwniejsze rzeczy, pewnie do tego wrócę, bo sposób znacznie lepszy, niż ręczne wpisywanie... OK, wpisuję ilość. Klikam buttona i... następuje refresh. Jak poprzednio. Próbowałem też tak, że do dkp_value - wartość wpisywana w polu input, dla każdego usera osobna dodawałem znacznik [] określając tabelę w ten sposób. Chyba. Szczerze, to nigdy się w tego typu rzeczy nie bawiłem. Siedzę już trochę w PHP, ale edytowanie kilku, czy nawet kilkunastu wpisów z różnymi wartościami to mój pierwszy raz. Stąd takie problemy. Jak dodawałem znacznik [] do nazwy inputa, to dodawałem pod pierwszym foreach kolejny, tym razem tyczący się wybierania danych z tabeli dkp_value. Niby działało, jakieś tam wartości przypisywało. Szkoda tylko, że kod leciał od góry do dołu (właściwie to tak jak powinien tongue.gif) i brał wartość dkp z pierwszego konta od góry, a dane dodawał do ostatniego konta z listy wybranych.
Przyznaję się bez bicia. Nie mam pojęcia jak to zrobić. Jak patrzę na te tutoriale w necie, to wszędzie sobie sami bazę ustalają, sami dopisują wartości i sami decydują co ma w tych wartościach być. U mnie tabela jest generowana automatycznie i wpisywanie każdego konta do takiej tabeli byłoby po prostu śmieszne.
Przyznaję się do swej niewiedzy. Nie mam pojęcia jak to napisać tak, aby działało. Wiem natomiast, że kiedy już to działać będzie, to następny skrypt tego typu będzie miał 200% więcej możliwości, niż obecny. Postęp smile.gif
Proszę Was o pomoc i z góry dziękuję za wyrozumiałość i cierpliwość.
Pozdrawiam.