Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] [MYSQL] System kodów
Forum PHP.pl > Forum > PHP
Killerek
Witam, posiadam swoją stronę PHP i mam tam system punktów utworzyłem już taką tabelę:

  1. CREATE TABLE IF NOT EXISTS `codes` (
  2. `kod` varchar(8) NOT NULL,
  3. `aktywuj` varchar(1) NOT NULL DEFAULT '0'
  4. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Oraz zrobiłem takie zapytanie

  1. INSERT INTO `codes` (`kod`, `aktywuj`) VALUES
  2. ('12w31a', '0'),
  3. ('12w32a', '0');


Oraz mam np. link http://www.adres-strony.pl/doladuj.php?id=15&kod=12w31a

I teraz skrypt powinnien wyszukać w tabelce 'uzytkownicy' uzytkownika o id 15 oraz w tabelece 'codes' ma wyszukać kod 12w31a i jeżeli w kolumnie aktywuj będzie 0 to wykonują się takie zapytania

  1. $zapytanie = 'UPDATE uzytkownicy SET `punkty` = +100 WHERE `id` = '15'';
  2. $zapytanie = 'UPDATE codes SET `status` = '1' WHERE `kod` = '12w31a'';


Oraz ma się w echo wyświetlić np.
  1. echo '<div class="msg success">Konto zostało doładowane!</div>'


Ale jeżeli w kolumnie aktywuj będzie 1 to wyświetla się takie coś
  1. echo '<div class="msg error">Konto nie zostało doładowane!</div>'
NetBeans
Albo ja niedowidzę, albo nie napisałeś o co Ci chodzi. Oczekujesz może, że ktoś napisze za Ciebie skrypt, czy zapomniałes przedstawić problem?
Killerek
  1. <?php
  2. include 'inc/db.php'; // połączenie się z bazą danych
  3. $tabela = 'add_obrazki'; // zdefiniowanie tabeli MySQL
  4. $tabela2 = 'codes'; // zdefiniowanie tabeli MySQL
  5.  
  6. if(isset($_GET['id'])) {
  7.  
  8. if ($_POST['wyslane']) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt
  9.  
  10. // filtrowanie treści wprowadzonych przez użytkownika
  11. $kod = $_POST["kod"];
  12.  
  13. // system sprawdza czy prawidłowo zostały wprowadzone dane
  14.  
  15. if ($kod !== $informacja['kod']) {
  16. $wynik = mysql_query("SELECT * FROM $tabela2 WHERE kod='$kod' and aktywuj='0'");
  17. if (mysql_num_rows($wynik) <> 1) {
  18. $blad++;
  19. echo '<div class="msg error">Ten kod był już aktywowany wcześniej.</div>';
  20. }
  21. }
  22.  
  23. // jeżeli błąd nie wystąpił, to dane zostają prawidłowo zapisane z bazie MySQL
  24. if ($blad == 0) {
  25.  
  26. $wynik=mysql_query("UPDATE $tabela2 SET `aktywuj`='0' WHERE `kod`='$kod'");
  27. $wynik=mysql_query("UPDATE $tabela SET `plus`= +100 WHERE `id`='".$_GET['id']."'");
  28.  
  29. }
  30.  
  31. if ($wynik) {
  32. echo '<div class="msg success">Konto zostało doładowane.</div>';
  33. } else {
  34. echo '<div class="msg error">Konto nie zostało doładowane.</div>';
  35. }
  36. }
  37.  
  38. $wynik = mysql_query("SELECT * FROM $tabela WHERE id='".$_GET['id']."'");
  39. if ($wynik) {
  40. $informacja = mysql_fetch_array($wynik);
  41.  
  42. // tworzenie formularza HTML z danymi użytkownika
  43. echo <<< KONIEC
  44.  
  45. <form class="form" action="doladuj.php?id={$informacja['id']}" method="post">
  46. <input type="hidden" name="wyslane" value="TRUE" />
  47. Wprowadź swój 8 cyfrowy kod:<br>
  48. <input type="text" name="kod" id="kod" value="12w32a" />
  49. <input type="submit" value="Doładuj konto" />
  50. </form>
  51.  
  52. KONIEC;
  53. }
  54. mysql_close($polaczenie);
  55.  
  56. }
  57.  
  58. ?>


Mam taki ale za kazdym razem mi wyskakuje "Konto zostało doładowane." nawet gdy kod jest zly ale i tak nie doladowuje ani nie zmienia na aktywuj='1'
weedget
jeśli zapytanie:

  1. $wynik=mysql_query("UPDATE $tabela SET `plus`= +100 WHERE `id`='".$_GET['id']."'");


nie zwróci błędu to będziesz miał taki komunikat, nigdzie nie inicjalizujesz zmiennej $wynik (wiem ze w PHP nie musisz, ale wtedy nie masz pewnosci ze jest "negatywna", a to może prowadzić do tego że warunek będzie prawdziwy).

Jednocześnie jeśli zrobiłbyś osobne sprawdzanie (w osobnej zmiennej) dla każdej kwerendy to możesz wyświetlić/zalogować odpowiedni komunikat o błędzie.

Dodatkowo nigdzie nie widzę filtrowania zmiennych przesyłanych od usera, a to dość niebezpieczne...
Killerek
Hmmm, męcze się z tym od wczoraj i za kazdym razem jak zmienie caly skrypt to zawsze wynik byl taki sam... Czy moge was prosic o takiego 'gotowca' lub naprowadzic mnie na dobry trop? Dodam ze jestem poczatkujacy...

@refresh
BORG
Jak ma ci zmieniać aktywuj na 1 skoro masz
  1. $wynik=mysql_query("UPDATE $tabela2 SET `aktywuj`='0' WHERE `kod`='$kod'");

I nie masz nigdzie zdefiniowanej zmiennej $blad, moze dla tego zawsze pokazuje Ci, że jest okej.

Pierwszy raz też widzę taki operator
  1. if (mysql_num_rows($wynik) <> 1)
, co on znaczy?
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.