Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze skryptem aktualizującym
Forum PHP.pl > Forum > PHP
Vertisan
Witam!

Mam sobie taki kod HTML (a konkretniej link):
  1. <a href="?rank='.$row['user_id'].'" class="btn btn-info btn-sm text-right" name="rank"> Zmień rangę </a>


oraz PHP:
  1.  
  2. if( isset($_GET['rank']) )
  3. {
  4. $rank = $_GET['rank'];
  5. $a_rank=mysql_query('SELECT `user_rank` FROM users');
  6. $res_a_rank = mysql_fetch_array($a_rank);
  7.  
  8. if ($res_a_rank['user_rank'] == 1) {
  9.  
  10. $sql= "UPDATE users SET `user_rank` = '0' WHERE user_id = '$rank' ";
  11. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  12. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  13. } elseif ($res_a_rank['user_rank'] == 0) {
  14.  
  15. $sql= "UPDATE users SET `user_rank` = '1' WHERE user_id = '$rank' ";
  16. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  17. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  18. }
  19.  
  20. }


Problem polega na tym, że po kliknięciu w link zmienia się wartość 1 -> 0, ale 0 -> 1 już nie.
Ma ktoś pomysł?
Wazniak96
Zamień
  1. $a_rank=mysql_query('SELECT `user_rank` FROM users');

Na
  1. $a_rank=mysql_query('SELECT `user_rank` FROM users WHERE user_id='.$rank);


Ps: Zdajesz sobie sprawę, że twój skrypt jest dziurawy jak sito? wink.gif
Vertisan
Nie bardzo działa ...
Dopiero się ucze smile.gif
Pyton_000
Jeżeli tylko zmieniasz zamiennie to możesz tak:

  1. if( isset($_GET['rank']) )
  2. {
  3. $rank = $_GET['rank'];
  4. $sql = "UPDATE users SET `user_rank` = NOT `user_rank` WHERE user_id = '$rank' ";
  5. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  6. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  7. }
Vertisan
Cytat(Pyton_000 @ 8.08.2014, 17:32:52 ) *
Jeżeli tylko zmieniasz zamiennie to możesz tak:

  1. if( isset($_GET['rank']) )
  2. {
  3. $rank = $_GET['rank'];
  4. $sql = "UPDATE users SET `user_rank` = NOT `user_rank` WHERE user_id = '$rank' ";
  5. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  6. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  7. }


Nic nie dało ...
Pyton_000
Co nic nie dało?
Vertisan
To samo co na początku ...
Jeżeli jest ustawione 1 to zmienia na 0, a jeżeli jest 0 to nic nie robi.
Pyton_000
Zamieniłeś całość co miałeś tym co podałem?
Forti
Pobierasz cala tabele zamiast pojedynczy rekord user_id. W pierwszym zapytaniu dodaj WHERE. Wowczas powinno dzialac. Pokaz kod jaki masz po obecnych zmianach.

I tak, ten kod jest jak sitko z samymi uchwytami bez sitka smile.gif


Pisze z telefonu wiec kodu ci nie podam.
Vertisan
Cytat(Pyton_000 @ 9.08.2014, 12:10:30 ) *
Zamieniłeś całość co miałeś tym co podałem?


Tak

Cytat(Forti @ 9.08.2014, 12:12:35 ) *
Pobierasz cala tabele zamiast pojedynczy rekord user_id. W pierwszym zapytaniu dodaj WHERE. Wowczas powinno dzialac. Pokaz kod jaki masz po obecnych zmianach.

I tak, ten kod jest jak sitko z samymi uchwytami bez sitka smile.gif


Pisze z telefonu wiec kodu ci nie podam.


  1. if( isset($_GET['rank']) )
  2. {
  3. $rank = $_GET['rank'];
  4. $a_rank=mysql_query('SELECT `user_rank` FROM users WHERE user_id ='.$rank.' ');
  5. $res_a_rank = mysql_fetch_array($a_rank);
  6.  
  7. if ($res_a_rank['user_rank'] == 1) {
  8.  
  9. $sql= "UPDATE users SET `user_rank` = '0' WHERE user_id = '$rank' ";
  10. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  11. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  12. } else if ($res_a_rank['user_rank'] == 0) {
  13.  
  14. $sql= "UPDATE users SET `user_rank` = '1' WHERE user_id = '$rank' ";
  15. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  16. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  17. }
  18.  
  19. }


Coś takiego skleciłem ale nadal nic (w sensie nie zmienia rangi)
Forti
Ty chcesz zmienic range jednego usera czy wszystkich na raz? Jak wszystkich na raz? Skasuj caly twoj kod i wstaw to co python ci napisal. Jak nie dziala to blad masz gdzie indziej..

To co wstawiles where co prpsilem: szukasz usera z user_id odpowiadajacego wartosci zmiennej rank.. smile.gif
Vertisan
Cytat(Forti @ 9.08.2014, 12:37:00 ) *
Ty chcesz zmienic range jednego usera czy wszystkich na raz? Jak wszystkich na raz? Skasuj caly twoj kod i wstaw to co python ci napisal. Jak nie dziala to blad masz gdzie indziej..

To co wstawiles where co prpsilem: szukasz usera z user_id odpowiadajacego wartosci zmiennej rank.. smile.gif


Chce zmienić tylko jednego użytkownika, tego przy którym kliknę w link
Forti
To musisz zrobić tak:

masz lista użytkowników. Klikasz w link i odsyła Cie np. do strony ze skryptem. w linku jako _GET pobieraj jego ID (w bazie unikalne ID dla user oczywiście). Następnie coś takiego:


  1. <?php
  2. if( isset($_GET['id']) ) //jeżeli wybraliśmy user ID
  3. {
  4. $user_id = $_GET['id']; // przypisujemy _GET do zmiennej user_id
  5. $a_rank=mysql_query('SELECT `user_rank` FROM users WHERE user_id ='.$user_id.' '); // pobieramy user_rank usera wg. jego ID
  6. $res_a_rank = mysql_fetch_array($a_rank);
  7.  
  8. if ($res_a_rank['user_rank'] == 1) { // jeżeli wartość user_rank 1 to:
  9.  
  10. $sql= "UPDATE users SET `user_rank` = '0' WHERE user_id = '$user_id' ";
  11. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  12. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  13. }
  14. elseif ($res_a_rank['user_rank'] == 0) { // jeżeli wartość user_rank 0 to:
  15.  
  16. $sql= "UPDATE users SET `user_rank` = '1' WHERE user_id = '$user_id' ";
  17. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  18. echo "<meta http-equiv='refresh' content='0;url=listUsers.php'>";
  19. }
  20.  
  21. echo $res_a_rank['user_rank']; // wyświetl sobie wartość user_rank
  22.  
  23. }
  24. ?>


Jest sobota i ja nie myślę, więc mogę się mylić ale elseif piszę się razem ;]
oczywiście na stronie z listą uzytkowników musisz pobierać z bazy ich nazwy oraz id by tego przekazać.

Rozumiesz? wink.gif


edit:

zastanów się nad PDO - ułatwia życie, zabezpiecza przed wieloma błędami i atakami. Troche możesz mieć problemów ze zrozumieniem i nauczeniem się, ale na prawdę warto od tego zaczynać. mysql_query przeszło do "lamusa" wieki temu i kolejne wersje php za pewne wogóle nie będą go obsługiwać.
Pyton_000
Forti to co ja podałem realizuje dokładnie to samo tyle że dużo szybciej i prościej.

Ewidentnie błąd jest nie tu tylko w innym miejscu.

Vertisan wklej jeszcze raz mój kod do postu i po $sql = ...
daj
echo $sql; Zobacz jakie zapytania Ci się generują.
Forti
Tak, twój kod wykona się szybciej, jednak napisałem mu tak aby zrozumiał gdzie ma błąd. Bardziej w celach edukacyjnych.
Vertisan
Pogubiłem się już .. sad.gif
To może od początku (może coś bardziej rozjaśni).

To jest moja struktura tabeli




To jest kod w całości:
  1. <html>
  2. <head>
  3. <title>Zmiana rangi</title>
  4. <meta charset="utf-8">
  5.  
  6. <style>
  7. table {
  8. border: 1px solid black;
  9. }
  10. td {
  11. padding: 5px;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16.  
  17.  
  18. <?php
  19.  
  20. define('DBHOST', 'localhost');
  21. define('DBUSER', 'root');
  22. define('DBPASS', '');
  23. define('DBNAME', 'service');
  24.  
  25. function db_connect() {
  26. mysql_connect(DBHOST, DBUSER, DBPASS) or die('Server MySQL nie odpowiada!');
  27.  
  28. mysql_select_db(DBNAME) or die('Nie można wybrać bazy!');
  29. }
  30.  
  31. function db_close() {
  32. }
  33.  
  34. // -------------------------------------------------------------------------------------
  35. db_connect();
  36.  
  37. if($result = mysql_query('SELECT * FROM users ORDER BY user_id'))
  38. {
  39.  
  40. echo ' <table>
  41. <thead>
  42. <tr>
  43. <th>#</th>
  44. <th>Nazwa</th>
  45. <th>Email</th>
  46. <th>Ranga</th>
  47. <th>Data rejestracji</th>
  48. <th>&nbsp</th>
  49. </tr>
  50. </thead>
  51. ';
  52.  
  53.  
  54. while($row = mysql_fetch_array($result)){
  55.  
  56. echo '<tbody>';
  57. echo '<tr>';
  58. echo '<td>' . $row['user_id'] . '</td>';
  59. echo '<td>' . $row['user_name'] . '</td>';
  60. echo '<td>' . $row['user_email'] . '</td>';
  61. echo '<td>' . $row['user_rank'] . '</td>';
  62. echo '<td>' . $row['user_regdate'] . '</td>';
  63. echo '<td> <a href="?rank='.$row['user_id'].'" name="rank"> Zmień rangę </a>';
  64.  
  65. // ---------------------------------------------------------------------
  66.  
  67. if( isset($_GET['rank']) )
  68. {
  69. $rank = $_GET['rank'];
  70. $a_rank=mysql_query('SELECT `user_rank` FROM users');
  71. $res_a_rank = mysql_fetch_array($a_rank);
  72.  
  73. if ($res_a_rank['user_rank'] == 1) {
  74.  
  75. $sql= "UPDATE users SET `user_rank` = '0' WHERE user_id = '$rank' ";
  76. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  77. } elseif ($res_a_rank['user_rank'] == 0) {
  78.  
  79. $sql= "UPDATE users SET `user_rank` = '1' WHERE user_id = '$rank' ";
  80. $res= mysql_query($sql) or die("Wystąpił błąd podczas zmiany uprawnien!".mysql_error());
  81. }
  82.  
  83. }
  84.  
  85. echo '</tr>';
  86. echo '</tbody>';
  87.  
  88. }
  89. }
  90.  
  91. echo '</table>';
  92.  
  93.  
  94. db_close();
  95. ?>
  96.  
  97. </body>
  98. </html>


I teraz.
Gdy jest ustawiona wartość na 1 to zmienia na 0, natomiast jeżeli jest 0 to nic się nie dzieje (a ma zmieniać na 1)
Pyton_000
Wywal cały ten if z rank
i wstaw to co Ci dałem zaraz po db_connect();
Forti
Wkleiłeś to ci ci napisałem ja lub python? W linku przekazujesz $_GET['rank']. Co to jest rank? 0 lub 1 odpowiadające randze usera czy jego ID?


już wiem gdzie masz kod, zrób to co mówi python, to musi dzialać.

Co ten kod Tobie wyświetla? Bo jak dla mnie to nie powinna Ci sie wogole strona otworzyć ;] masz pobrać jednego użytkownika czy wszystkich?

Ja to cały ten kod bym skasował i napisał od nowa.


edit
Vertisan
Nareszcie ...
Widzę że jeszcze sporo muszę się nauczyć smile.gif
Dzięki wielkie chłopaki za pomoc wink.gif
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.