Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP & MySql] skrypt wartości
Forum PHP.pl > Forum > Przedszkole
Marcek
Witam mam prosbe o udostepnienie tutoriala lub wskazanie kursu ktory mi pokaze po wrzuceniu na strone i do bazy takie cos: Gdy rejestruje sie na strone tworzy sie tabela z wartoscia 100, po logowaniu wartosc pojawia sie np: u gory (wyswietla liczbe 100) a po nizej jest przycisk np: klik i zabiera 1 punkt z tych stu ale zeby od razu zapisywal w bazie ze jest juz 99 i tak po kazdym kliknieciu. Konieczne jest to ze gdy bede sie logowal np jutro czy za godzine zapamieta mi to 99. Z góry bardzo dziękuję i jesli jakos moge pomuc piszcie na gg:8164874 (Mam juz gotowy skrypt logowania rejestracji i wyswietlania danej czesci strony za pomoca danego kawalka skryptu po logowaniu. Rejestracja i logowania zrobione są na bazie sesji) Jeszcze raz z góry dziękuje.



(Wiem że temat powinien być w temacie z prosbami o gotowe rozwiazaniami ale ucze sie i chce o wytlumaczenie tego skryptu wartosci zmiennych itd)
werek
  1. <?php
  2. //zakladajac ze zmienna ktora przechowuje licznik jest w sesji pod indeksem 'countDown'
  3. if (isset($_SESSION['countDown'])){
  4. //zakladam ze jak licznik dojdzie do zera to chcialbys cos wykonac
  5. if ($_SESSION['countDown']>0){
  6. //decrementacja o 1
  7. $_SESSION['countDown']--;
  8. } else {
  9. //akcja wykonywana kiedy licznik osiagnie zero (czyli wykorzystal sto requestow)
  10. }
  11. } else {
  12. //inicjalizacja odliczania dla nowego uzytkownika
  13. $_SESSION['countDown']=100;
  14. }
  15. ?>

mam nadzieje ze wytlumaczenie jest czytelne, prosciej sie chyba nie da, ten kod umieszczasz w swoim skrypcie w takim miejscu ktore ykona sie tylko raz np. zaraz po wywolaniu start_session(). a wyswietlanie to juz raczej banal $_SESSION to zmienna globana i dostepna zewszad (jezeli istnieje sesja)
Marcek
Siemka wolal bym zeby skrypt byl kompletny oczywiscie jesli to nie sprawi problemu to znacy z sumbitem (buttonem) i tabela w bazie danych bo chyba nie napisalem ze chce zastosowac db.Jak pisalem wczesniej "ucze sie" wiec bardzo bym prosil o gotowy on i tak bedzie przezemnie calkiem zmodyfikowany i przepuszczony przez filtracjie bo przzy kazdym skrypcie jaki ktos mi daje przepisuje go robie wszystko na odwrot (czyli powstanie dodawanie czy jakos tak) i szukam w nim wielu zastosowan ktore zmieniam wrzucam potem patrze czym sie roznia itd. poprostu latwiej mi tak zapamietywac i pisac samemu a nie strukturalnie. Przepraszam za klopot i z gory bardzo dziekuje.

ps: w bazie mam kategorie uzytkownicy a wniej id, login, haslo, email i ostatnia to ma byc ta z tego skryptu winksmiley.jpg
werek
tutaj poojawia sie pewien problem, rozumiem ze licznik ten ma okreslac ilosc logowan. napisalem ci klase zeby bylo ci latwiej z tego korzystac (ale niestety klasa wymaga php5). kod jest bardzo prosty, wymaga od ciebie podania nazwy tabeli gdzie sa dame uzytkownika i zeby w danej tabeli byla kolumna o nazwie 'logon_count' ktora bedzie przechowywala licznik, uzytkownicy w tej tabeli beda identyfikowani po wartosci kolumny 'id'. no prosciej sie juz nie da.

  1. <?php
  2. /**
  3.  * tutaj wykonujesz swoja czynnosc w stylu logowanie uzytkowwnika
  4.  * badz rejestracje (w tym wypadku jezeli jest to rejestracja to uzyjesz metody init counter)
  5.  */
  6.  
  7. //muszisz podac identyfikator uzytkownika aby klasa wiedziala na ktorym uzytkownik
    u ma operowac
  8. $userCounter=new licznikLogowan($userID);
  9.  
  10. //opcjonalnie mozesz podac identyfikator polaczenia zwrocony przez mysql_connect (tutaj w zmiennej $db)
  11. $userCounter=new licznikLogowan($userID,$db);
  12.  
  13. //jezeli uzytkownik jest dopiero zarejestrowany to trzeba mu zainicjalizowac liczn
    ik
  14. $userCounter->initCounter();
  15.  
  16. //jezeli to jest logowanie to sprawdzamy czy nie doszedla do zera
  17. if ($userCounter->getCounterValue()>0) {
  18. $userCounter->decreaseCounter();
  19. } else {
  20. //tutaj wpisujesz kod jaki ma zostac wykonany po wykonczeniu licznika
  21. }
  22.  
  23. //a tak mozesz wyswietlic wartosc licznika
  24. echo $userCounter;
  25.  
  26. //co odpowiada wywolaniu funkcji
  27. echo $userCounter->getCounterValue();
  28. ?>

a ponizej kod zrodlowy klasy licznikLogowan, to w niej wpisujesz nazwe tabeli do zmiennej $_tableName
  1. <?php
  2. class licznikLogowan{
  3. /**
  4.  * startowa wartosc licznika dla uzytkownika
  5.  *
  6.  * @var int
  7.  */
  8. private $_startValue=100;
  9. /**
  10.  * przechowuje identyfikator polaczenia z baza danych
  11.  *
  12.  * @var MySQL Resource
  13.  */
  14. private $_db=null;
  15. /**
  16.  * przechowuje nazwe tabeli z danymi o ilosci logowan
  17.  *
  18.  * @var string
  19.  */
  20. private $_tableName='users';
  21. /**
  22.  * przechowuje ID uzyttkownika
  23.  *
  24.  * @var int
  25.  */
  26. private $_userID;
  27. /**
  28.  * konstruktor klasy, jako parametr przyjmuje id user'a i opcjonalnie polaczenie z baza danych
  29.  *
  30.  * @param int $userID
  31.  * @param MySQL Resource $db
  32.  */
  33.  
  34. public function __construct($userID,$db=null){
  35. $this->_userID=$userID;
  36. if (!is_null($db)) {
  37. $this->_db=$db;
  38. }
  39. }
  40. /**
  41.  * inicjalizuje licznik dla uzytkownika
  42.  *
  43.  * @return licznikLogowan
  44.  */
  45. public function initCounter(){
  46. $sql=sprintf("UPDATE `%s` SET logon_count=%d WHERE id='%d'",$this->_tableName,$this->_startValue,$this->_userID);
  47. $this->_query($sql);
  48. return $this;
  49. }
  50. /**
  51.  * zwraca wartosc licznika
  52.  *
  53.  * @return int
  54.  */
  55. public function getCounterValue(){
  56. $sql=sprintf("SELECT logon_count FROM `%s` WHERE id='%d'",$this->_tableName,$this->_userID);
  57. $query=$this->_query($sql);
  58. $data=mysql_fetch_array($query);
  59. return (int) $data[0];
  60. }
  61. /**
  62.  * obniza o jeden wartosc licznika i zwraca jego aktualna wartosc
  63.  *
  64.  * @return int
  65.  */
  66. public function decreaseCounter(){
  67. $sql=sprintf("UPDATE `%s` SET logon_count=logon_count-1 WHERE id='%d'",$this->_tableName,$this->_userID);
  68. $this->_query($sql);
  69. return $this->getCounterValue();
  70. }
  71. /**
  72.  * wewnetrzna metoda opakowujaca wykonywanie zapytan
  73.  *
  74.  * @param string $sql
  75.  * @return MySQL Result Resource
  76.  */
  77. private function _query($sql){
  78. if (!is_null($this->_db)) {
  79. $query=mysql_query($sql,$this->_db);
  80. $error=mysql_error($this->_db);
  81. $errorN=mysql_errno($this->_db);
  82. } else {
  83. $query=mysql_query($sql);
  84. $error=mysql_error();
  85. $errorN=mysql_errno();
  86. }
  87. if ($error!='') {
  88. throw new Exception("wystapil problem z zapytaniem '".$sql."' serwer zwrocil odpowiedz: ".$error,$errorN);
  89. }
  90. }
  91. /**
  92.  * funkcja uruchamiana przy probie wyswietlenia obiektu za pomoca echo
  93.  *
  94.  * @return unknown
  95.  */
  96. private function __toString(){
  97. return $this->getCounterValue();
  98. }
  99. }
  100. ?>
Marcek
To znaczy to nie bedzie licznik ale cos w stylu kup sprzedaj wymien rozmien tak zebym mogl troche sie tym pobawic ale to juz sobie zmodyfiikuje. Mam tylko pytanie czy do db mam cos dodac?


PS: chyba przeoczyles polaczenie z baza bo nie widze zeby cos tu zmienic aby w bazie moglo sie zapisac.



Z gory uprzejmie dzzikuje
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.