Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kody wapacz a baza danych
Forum PHP.pl > Forum > Bazy danych > MySQL
de6th
Witam

Być może to banał lecz nie znam haczyka. Znam html i trochę php ale z bazami nie miałem zbytnio doczynienia gdyż do wgrania bazy strony służy mi css. Mam jednak wielką prośbę gdyż bardzo potrzebuję wstawić kody wapacz na stronkę. To co dotyczy samego wstawiania do kodu strony to sobie poradzę lecz nie wiem jak to odnieść do bazy. Zawsze są błędy. Nie wiem nawet jak się do tego zabrać. Nie wiem jak i co wstawić do bazy i jak to w niej skonfigurować. Ogólnie wszystko co się wiąże z bazą. Jeśli by mógł mi ktoś tak prosto napisać. Choćby wskazówka lub chociaż początek bo na stronie kody wapacz jest napisane iż kody trzeba zapisać w pliku txt i umieścić w bazie. Tylo jak? Używam PHP MYADMIN.

Szukałem przez ok 6h i nigdzie konkretów i/lub prostych wyjaśnień nie znalazłem.

Bym był bardzo wdzięczny za pomoc i na pewno wielu osobom się przyda.


Jeśli by było potrzebne to co kody.wapacz podaje to wklejam:




Cytat
Zakładam, że kody są już wygenerowane i znajdują sie w jakimś pliku tekstowym. Po wygenerowaniu kodow należy wrzucić je do bazy danych na swoim serwerze. Nasza przykładowa tabela będzie miała taką strukturę:
Kod
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| kod   | varchar(16) | YES  |     | NULL    |       |
| data  | bigint(15)  | YES  |     | 0       |       |
+-------+-------------+------+-----+---------+-------+

Należy pamiętać żeby połączyć się z bazą danych, przed rozpoczęciem operacji na tabelach:
Kod
mysql_pconnect('host','uzytkownik','haslo');

W celu dodania kodów do tabeli wywołujemy następującą funkcję:
Kod
function wrzuc_kody($baza, $tabela, $plik){

    mysql_select_db($baza);

    $insert = "INSERT INTO $tabela VALUES ";
    $f     = fopen("$plik","r");

    while ($kod = fscanf($f, "%s")){

        $insert .= "('$kod[0]',''),";
    }

    $insert = substr($insert,0, strlen($insert)-1);
    mysql_query($insert);
}

Parametry tej funkcji:

$baza - nazwa bazy danych w której znajduje się tabela z kodami
$tabela - nazwa tabeli do której będą wrzucone kody
$plik - nazwa pliku z wygenerowanymi kodami

Teraz kiedy nasze kody są już w tabeli, możemy zająć się ich obsługą. Kiedy użytkownik podaje kod, musimy sprawdzić dwie rzeczy:

1. Czy podany kod jest prawidłowy
2. Czy podany kod nie został już wcześniej użyty

Jeżeli oba powyższe warunki będą spełnione, wtedy możemy dać użytkownikowi dostęp do płatnej usługi. Oczywiście musimy też oznaczyć użyty kod, tak żeby nie można było użyć go ponownie.
W tym przykładzie kluczową role gra pole data z tabeli zawierającej kody. Jeśli wartość tego pola jest równa 0, znaczy to że dany kod nie został użyty. W przeciwnym wypadku wartość tego pola zawiera datę użycia kodu.

Funkcja sprawdzająca czy podany kod jest poprawny i czy nie został wcześniej użyty:
Kod
function sprawdz_kod($baza, $tabela, $kod){

    mysql_select_db($baza);

    $pyt = "SELECT * FROM $tabela WHERE kod='$kod'";
    $odp = mysql_query($pyt);
    $r   = mysql_fetch_array($odp);

    if ($r[data]=='0'){

        // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi

        dostep_do_uslugi();

        // deaktywujemy uzyty kod

            $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
            mysql_query($pyt);
    }
}

PARAMETRY:

$baza - nazwa bazy danych w której znajduje się tabela z kodami
$tabela - nazwa tabeli do której będą wrzucone kody
$kod - kod wpisany przez użytkownika

Powyższy przykład pozauje w jaki sposób wykorzystać kody do jednorazowego dostępu do usługi. Jednak dzięki kodom można dać użytkownikowi dostęp do płatnej częsci serwisu na określony czas. W tym celu trzeba będzie "trochę" zmodyfikować naszą funkcje sprawdzającą, oraz dodac jedno pole w tabeli z kodami. Może najpierw funkjca, a później opis działania.
Kod
function sprawdz_kod($baza, $tabela, $kod, $czas_zycia){

global $kod_cookie;

    $teraz  = time();

    mysql_select_db($baza);

    $pyt = "SELECT * FROM $tabela WHERE kod='$kod' AND uzyty='0'";
    $odp = mysql_query($pyt);
    $r   = mysql_fetch_array($odp);

// zly kod

    if ($r==""){

        return 0;
    }

    else {

        // prawidlowy kod jeszcze nie uzywany

        if ($r[data]==0){

            $czas   = $teraz+$czas_zycia;

            setcookie("kod_cookie", $kod,$czas);
            $query  = "UPDATE $tabela SET data='$teraz' WHERE kod = '$kod'";
            mysql_query($query);

            return 1;
        }

        // prawidlowy i juz startowany

        else {

            // uplynal jego czas waznosci

            if ($teraz >= ($r[data]+$czas_zycia)){

                $query = "UPDATE $tabela SET uzyty='1' WHERE kod='$kod'";
                mysql_query($query);
                return 0;
            }

            // jeszcze nie skonczyl sie jego czas waznosci

            else {

                $czas   = $teraz+$czas_zycia;
                setcookie("kod_cookie", $kod,$czas);
                return 1;
            }
        }
    }
}

PARAMETRY:

$baza - nazwa bazy danych w której znajduje się tabela z kodami $tabela - nazwa tabeli do której będą wrzucone kody
$kod - kod wpisany przez użytkownika
$czas_zycia - okresla jak dlugo dany kod ma byc wazny (wartość w sekundach)

Aby powyższa funkcja działała poprawnie, do tabeli musi zostać dodane jedno pole: uzyty, o wartosci początkowej 0. Jeśli wartość ta zostanie ustawiona na 1, będzie to znaczyło, że upłynął czas przez jaki kod miał być ważny.

Teraz opis funkcji:

Na początku sprawdzamy czy dany kod jest prawidłowy i czy nie upłynął jego termin ważności. Jeśli któryś z obu warunków nie jest spełniony, funkcja zwraca wartość 0 (czyli nie dajemy dostępu do płatnej części serwisu). W przeciwnym wypadku sprawdzamy datę użycia kodu - jeśli jej wartość jest równa 0 znaczy to, że kod nie był używany. W tej sytuacji ustawiamy cookie, którego wartością jest kod, a czas życia jest ustalony zmienną $czas_zycia. Następnie ustawiamy w bazie datę użycia kodu.

Jeśli jednak data użycia kodu będzie różna od zera, to musimy sprawdzić czy nie minął termin ważności kodu (warunek if ($teraz >= ($r[data]+$czas_zycia))). Jeśli termin ważności upłynął, ustawiamy w tabeli pole uzyty na 1 co jest jednoznaczne z kodem nieważnym. W przeciwnym wypadku ustawiamy nowego cookiesa i zwracamy wartość 1 (czyli wpuszczamy do płatnej części serwisu).

Cała funkcja jest wywoływana tylko wtedy, jeśli na komputerze użytkownika nie ma zarejestrowanego cookie z kodem.


Pzdr
b4x
To czytaj ze zrozumieniem, nawet początkujący myślę że to zrobi ;-)
W tym co wkleiłeś jest wszystko opisane ;]
Masz przykład wrzucenia z pliku do bazy
struktura bazy :

id || kod || stan

id - automatycznie nadawany przez mysql

kod - kod ...

stan - stan kodu 0 - domyślny (nie wykorzystany)
Czymś takim będziesz mógł zmienić stan z 0 na 1
  1. <?php
  2. $pyt = "UPDATE $tabela SET stan='1' WHERE kod='$kod'";
  3. ?>


to wrzuć w phpmyadmin

  1. CREATE TABLE `kody` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `kod` varchar(16) NOT NULL DEFAULT '',
  4. `stan` char(2) NOT NULL DEFAULT '0',
  5. PRIMARY KEY (`id`),
  6. UNIQUE KEY `kod` (`kod`)
  7. ) TYPE=MyISAM AUTO_INCREMENT=1 ;



config.php

  1. <?php
  2. define( 'DB_USER', 'root' ); # nazwa uzytkownika bazy danych
  3. define( 'DB_PASS', 'root' ); # haslo uzytkownika bazy danych
  4. define( 'DB_HOST', 'localhost' ); # host bazy danych ( zazwyczaj jest nim "localhost" )
  5. define( 'DB_DB', 'baza' ); # nazwa bazy danych
  6.  
  7.  
  8. # funkcja połączenia z bazą
  9.  
  10. function connect()
  11. {
  12. mysql_connect( DB_HOST, DB_USER, DB_PASS );
  13. mysql_select_db( DB_DB );
  14. }
  15. ?>


wrzuc.php
  1. <?php
  2. include('config.php'); // includuje połączenia z bazą
  3. function wrzuc_kody($tabela, $plik){
  4. connect();
  5. $insert = "INSERT INTO $tabela (`id`, `kod`, `stan`) VALUES ";
  6. $f  = fopen("$plik","r"); // otwieranie pliku z kodami
  7. while ($kod = fscanf($f, "%s")){
  8.  
  9.  $insert .= "('', '$kod[0]', '0'),";
  10. }
  11.  
  12. $insert = substr($insert,0, strlen($insert)-1);
  13. mysql_query($insert) or die (mysql_error ()); // wykonywanie inserta - jeśli będzie błąd - wyświetli się
  14. }
  15. $tabela = 'kody';
  16. $plik = 'kody.txt';
  17. wrzuc_kody($tabela, $plik); // wywołanie funkcji która wrzuca kody
  18. ?>


Umieszczasz w tym samym katalogu plik z kodami o nazwie : kody.txt i wrzuci Ci ;-)
de6th
Mam jeszcze jedno pytanie:
Jak zrobić by ten guzik:

  1. <?php
  2. echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>
  3.  <input type='text' name='kod' value='' />
  4.  <input type='submit' name='go' value='Wchodze!' />
  5.  </form>";
  6. ?>



przekazywał wpisany kod do:

  1. <?php
  2. function sprawdz_kod($baza, $tabela, $kod){
  3.  
  4.  
  5. $pyt = "SELECT * FROM $tabela WHERE kod='$kod'";
  6. $odp = mysql_query($pyt);
  7. $r  = mysql_fetch_array($odp);
  8.  
  9. if ($r[data]=='0'){
  10.  
  11. // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi
  12.  
  13. dostep_do_uslugi();
  14.  
  15. // deaktywujemy uzyty kod
  16.  
  17. $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
  18. mysql_query($pyt);
  19. }
  20. }
  21. ?>


Czy mogą być w tym samym pliku?

pzdr
kulpek
  1. <?php
  2. function sprawdz_kod($baza, $tabela, $kod){
  3.  
  4.  
  5. $pyt = "SELECT * FROM $tabela WHERE kod='$kod'";
  6. $odp = mysql_query($pyt);
  7. $r  = mysql_fetch_array($odp);
  8.  
  9. if ($r[data]=='0'){
  10.  
  11. // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi
  12.  
  13. dostep_do_uslugi();
  14.  
  15. // deaktywujemy uzyty kod
  16.  
  17. $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
  18. mysql_query($pyt);
  19. }
  20. }
  21.  
  22. if (isset($_POST['submit'])) {
  23.  $kod = $_POST['kod'];
  24.  $baza = baza_danych;
  25.  $tabela = tabela;
  26.  sprawdz_kod($baza, $tabela, $kod);
  27.  // dalsza czesc skryptu.....................
  28.  
  29. } 
  30. echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>
  31.  <input type='text' name='kod' value='' />
  32.  <input type='submit' name='go' value='Wchodze!' />
  33.  </form>";
  34. ?>


no i oczywiscie musisz sie jeszcze połaczyc z baza danych..
winksmiley.jpg
de6th
O to chodziło tylko że coś jest nie tak. Jest okienko ale nie przerzuca nigdzie albo nie sprawdza kodu. Gdzie jest błąd?

  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. function sprawdz_kod($tabela, $kod){
  6. connect();
  7.  
  8.  
  9. $pyt = "SELECT * FROM $tabela (`id`, `kod`, `stan`) WHERE kod='$kod'";
  10. $odp = mysql_query($pyt);
  11. $r  = mysql_fetch_array($odp);
  12.  
  13. if ($r[data]=='0'){
  14.  
  15. // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi
  16.  
  17. dostep_do_uslugi();
  18. echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>
  19.  <input type='text' name='kod' value='' />
  20.  <input type='submit' name='go' value='Wchodze!' />
  21.  
  22. ala
  23.  </form>";
  24.  
  25. // deaktywujemy uzyty kod
  26.  
  27. $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
  28. mysql_query($pyt);
  29. }
  30. }
  31.  
  32. if (isset($_POST['submit'])) {
  33.  $kod = $_POST['kod'];
  34.  $tabela = kody;
  35.  sprawdz_kod($tabela, $kod);
  36.  
  37.  
  38. $pyt = "SELECT * FROM $tabela (`id`, `kod`, `stan`) WHERE kod='$kod'";
  39. $odp = mysql_query($pyt);
  40. $r  = mysql_fetch_array($odp);
  41.  
  42. if ($r[data]=='0'){
  43.  
  44. // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi
  45.  
  46. dostep_do_uslugi();
  47. echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>
  48.  <input type='text' name='kod' value='' />
  49.  <input type='submit' name='go' value='Wchodze!' />
  50.  
  51. ola
  52.  </form>";
  53.  
  54. // deaktywujemy uzyty kod
  55.  
  56. $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
  57. mysql_query($pyt);
  58. }
  59.  
  60. } 
  61. echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>
  62.  <input type='text' name='kod' value='' />
  63.  <input type='submit' name='go' value='Wchodze!' />
  64. kat
  65.  </form>";
  66. ?>


Wg mnie powinno po weryfikacji kodu przenieść do takiego samego okienka ale z inną nazwą.


Doszedłem do martwego punktu więcej nie wymyślę. Ostatecznie coś takiego wymodziłem:

  1. <?php
  2.  
  3.  
  4. $polaczenie = @mysql_connect('localhost', 'xxxx', 'xxxx')
  5. or die('Brak połączenia z serwerem mysql. Błąd: '.mysql_error());
  6.  
  7.  
  8. function sprawdz_kod($kody, $kod){
  9.  
  10.  
  11. $pyt = "SELECT * FROM $kody WHERE kod='$kod'";
  12. $odp = mysql_query($pyt);
  13. $r  = mysql_fetch_array($odp);
  14.  
  15. if ($r[data]=='0'){
  16.  
  17. // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi
  18.  
  19. dostep_do_uslugi(rejestracja);
  20. echo "<p><a href='http://www.xxxx.pl/xxxx.php'>zarejestruj sie</a></p>";
  21. // deaktywujemy uzyty kod
  22.  
  23. $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
  24. mysql_query($pyt);
  25. }
  26. }
  27.  
  28. if (isset($_POST['submit'])) {
  29.  $kod = $_POST['kod'];
  30.  
  31.  $tabela = kody;
  32.  sprawdz_kod($tabela, $kod);
  33.  
  34.  
  35. $pyt = "SELECT * FROM $tabela WHERE kod='$kod'";
  36. $odp = mysql_query($pyt);
  37. $r  = mysql_fetch_array($odp);
  38.  
  39. if ($r[data]=='0'){
  40.  
  41. // kod jest poprawny wiec dajemy klientowi dostep do jakiejs uslugi
  42.  
  43. dostep_do_uslugi();
  44.  
  45. // deaktywujemy uzyty kod
  46.  
  47. $pyt = "UPDATE $tabela SET data='$data' WHERE kod='$kod'";
  48. mysql_query($pyt);
  49. }
  50. }
  51.  
  52.  
  53. echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>
  54. Wpisz tekst: <input type='text' name='kod' />
  55. <input type='submit' name='go' value='Wchodze!' />
  56.  
  57. </form>";
  58.  
  59.  
  60.  
  61. ?>



Jeśli ktoś dopatrzy się błędu to fajno by było gdyby mi pomógł. smile.gif

Pzdr
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.