Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] pytanie odnośnie mini gry
grzegosh
post
Post #1





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Witam.
Jestem amatorem jeśli chodzi o php i mysqla, uczę się go od kilku dni. Problemem nie jest dla mnie składnia php, bo dobrze znam składnię C++, która jest podobna, lecz ogranicza mnie wyobraźnia...

Mianowicie, chciałem zrobić sobie taką mini grę. Tzn rejestrujesz się, logujesz i masz jakąś tam postać, której możesz rozdać np 20 statystyk (np do siły, zręczności itp). Potem, wybierasz innego usera i walczysz z nim.
Stworzyłem (a raczej połączyłem 2 i przerobiłem lekko) system logowania i rejestrowania.
I tutaj zaczyna się problem.
Może po kolei. Tabela do logowania wygląda tak:
  1. CREATE TABLE `users` (
  2. `user_id` INT NOT NULL AUTO_INCREMENT ,
  3. `user_login` VARCHAR( 30 ),
  4. `user_haslo` VARCHAR( 32 ),
  5. PRIMARY KEY ( `user_id` )
  6. );


Podczas rejestracji, zapisywany jest login oraz zakodowane md5 hasło.
No i co dalej?
Myślę, że stworzyć tabelę np wojownik, w której będzie wojownik_id, user_id (z tabeli users), sila, zrecznosc etc...
I tu się już gubię... Nie wiem jak powiązać te tabele, tak, by jak ktoś zalogiuje się swoim loginem i haslem, zobaczył statystyki czyli nick, sila itp tylko swojego wojownika.
Tzn logując się by miał dostęp do swojej postaci i jej statystyk, które są zapisane w innej tabeli.
Nie wiem nawet jak wyświetlić owe statystyki przypisane do zalogowanego użytkownika.

Prosiłbym o pomoc, za którą bardzo bym podziękował.
Jeśli potrzeba, wrzucę kod wszystkich obecnych plików.

Ten post edytował batman 26.06.2008, 15:05:04
Powód edycji: poprawiłem temat
Go to the top of the page
+Quote Post
Shili
post
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Wiesz, ogólnie trudno będzie przeprowadzić dla Ciebie cały kurs języka sql i powiązania go z php. Poucz się za pomocą jakiegoś kursu tworzyć bardziej złożone zapytania, to czasem może być fajna zabawa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
tak na szybko najprostsze zapytanie wybierające wojowników użytkownika numer 1 to:
  1. SELECT * FROM wojownik WHERE user_id = 1;

Nie wiem jak logujesz co prawda, ale pewnie do user_id gdzies tam dostęp masz. Jesli nie masz, to wyłuskaj go z zapisywanych podczas logowania danych.

Jeśli w tabeli wojownik dasz identyfikator usera, to te dwie tabele już automatycznie będą połączone ze sobą.
Go to the top of the page
+Quote Post
grzegosh
post
Post #3





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedź to po pierwsze.
Next to, jaki kurs byś polecał? Przerabiałem już sporo, może jakiś ominąłem.

Widzisz, zapytanie, które mi napisałeś miałem już wcześnej, ale chodzi mi o to, by php z mysqlem automatycznie łączyło statystyki z zalogowanym userem. Tzn, nie aby ręcznie podawać id, bo nie mam pojęcia przecież jakie ktoś może mieć id, tylko, że jak logujesz się np masz user_id=12, to jak wypisać dla tego usera informacje z tabeli wojownik? Aby nie ręcznie ustawiać user_id, tylko automatycznie?
Sorry, że tak nie po ludzku napisane, ale nie wiem sam dokładnie jak to wytłumaczyć.

Dzięki :-)
Go to the top of the page
+Quote Post
Shili
post
Post #4





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


No właśnie - jak się logujesz masz id (pisałam o tym wcześniej, być może za mało wyraźnie). Zapisz sobie gdzieś to id (na przykład w zmiennej, w sesji, byle nie w ciastku, bo mało bezpieczne). I potem zamiast na stałe wpisywać user_id = 1 wpisz user_id = $zmienna_z_id

http://manta.univ.gda.pl/~postkurs/wyklad.html#od3 - tutaj masz co nieco, z tego co się zdążyłam zorientować dość przystępnie napisane, w tym i o złączeniach tabel
http://kursy.skryptoteka.pl/kurs.php?kurs=sql&strona=1 - tutaj masz całą możliwą składnię select
Jeszcze poczytaj sobie na wszelki wypadek o podzapytaniach.

Nie wiem które przerobiłeś, jeśli te również, to po prostu kombinuj. I nie zapominaj o sile zmiennych w phpie, i o tym, że z bazy danych możesz wyciągnąć każdy potrzebny Ci rekord - w tym i po zalogowaniu jakiegoś usera id tego usera.

ps. Kobietą jestem ^^
Go to the top of the page
+Quote Post
-Namariee-
post
Post #5





Goście







Ja wiem o co Tobie chodzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ja na przykład męczyłem się jak według zalogowanego usera wyciągnąć ile ma ziemi, jedzenia, drewna itd.
Zrobiłem to tak:

  1. <?php
  2. $zapyt1 = mysql_query("SELECT * FROM users WHERE login='".$_SESSION['logowanie']."'");
  3. $odp = mysql_fetch_array($zapyt1);
  4. ?>


I tam gdzie chcesz wstawić to co się ma wyświetlać na przykład siła:

  1. <?php
  2. $odp['siła'];
  3. $odp['zycie'];
  4. ?>


Oczywiście '".$_SESSION['logowanie']."' musisz zastąpić tak jaką Ty masz zrobioną sesję. Mam nadzieję że to jakoś Tobie pomogło.
Go to the top of the page
+Quote Post
grzegosh
post
Post #6





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Shili, wybacz, nie zwróciłem uwagi na płeć. Mea culpa :-P
Btw, tych kursów nie widziałem, na pewno przestudiuję, dzięki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Namariee, nie do końca rozumiem. Ty podałeś przykład z jedną tabelą chyba, tak?

I tak dla pewności czy wszystko jest OK (bo lekko zmieniłem system logowania z jakiegoś kursu), wstawię kod plików php i zaraz po tym zabieram się za czytanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

index.php
  1. <?php
  2. session_register("zalogowany");
  3.  
  4. if(empty($_SESSION["zalogowany"]))$_SESSION["zalogowany"]=0;
  5.  
  6. require("ustawienia.php");
  7.  
  8.  
  9.  
  10. function formularz_logowania($komunikat=""){
  11. echo "$komunikat<br>";
  12. echo "<form action='index.php' method=post>";
  13. echo "Login: <input type=text name=login><br>";
  14. echo "Hasło: <input type=password name=haslo><br>";
  15. echo "<input type=submit value='Zaloguj!'>";
  16. echo "</form>";
  17. echo "Nie masz jeszcze konta? <a href='rejestracja.php'>Zarejestruj się</a>";
  18. }
  19.  
  20. ?>
  21.  
  22. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  23. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  24. <html xmlns="http://www.w3.org/1999/xhtml">
  25.  
  26.  
  27.  
  28. <head>
  29. <title>tytul</title>
  30. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  31.  
  32. </head>
  33. <body>
  34. <?php
  35. if($_GET["wyloguj"]=="tak")
  36. {
  37. $_SESSION["zalogowany"]=0;
  38. echo "Zostales wylogowany z serwisu";
  39. }
  40.  
  41. if($_SESSION["zalogowany"]!=1)
  42. {
  43. if(!empty($_POST["login"]) && !empty($_POST["haslo"]))
  44. {
  45. $login=$_POST["login"];
  46. $haselko=md5($_POST["haslo"]);
  47. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($haselko)."'")))
  48. {
  49. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  50. $_SESSION["zalogowany"]=1;
  51. }
  52. else echo formularz_logowania("Podano zle dane!!!");
  53. }
  54. else formularz_logowania();
  55. }
  56. else
  57. {
  58. echo "<script type='text/javascript'>location.href = 'main.php'</script> ";
  59. }
  60. ?>
  61. </body>
  62. </html>
  63. <?php mysql_close(); ?>


rejestracja.php
  1. <?
  2. require("ustawienia.php");
  3.  
  4. function pokaz_formularz($komunikat=""){ //funkcja wyświetlająca formularz rejestracyjny
  5.  
  6.  
  7. echo "$komunikat<br>";
  8. echo "<form action='rejestracja.php' method=post>";
  9. echo "Login: <input type=text name=login><br>";
  10. echo "Hasło: <input type=password name=haslo><br>";
  11. echo "Potwierdź hasło: <input type=password name=pothaslo><br>";
  12. echo "Email: <input type=text name=email><br>";
  13. echo "<input type=hidden value='1' name=send>";
  14. echo "<input type=submit value='Zarejestruj mnie'>";
  15. echo "</form>";
  16.  
  17. }
  18. ?>
  19.  
  20.  
  21. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  22. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  23. <html xmlns="http://www.w3.org/1999/xhtml">
  24.  
  25. <head>
  26. <title>Formularz rejestracyjny</title>
  27. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  28. </head>
  29. <body>
  30. <?php
  31. if($_POST["send"]==1){ //sprawdzanie czy formularz został wysłany
  32. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){ //oraz czy uzupełniono wszystkie dane
  33. $zap='"select * from users where user_login=`".htmlspecialchars($_POST["login"]."`';
  34. if(@mysql_num_rows($zap))
  35. pokaz_formularz("Użytkownik o podanym loginie już istnieje!!!"); // sprawdzanie czy użytkownik o podanej nazwie już istnieje
  36. else
  37. {
  38. $haslo=md5($_POST["haslo"]);
  39. mysql_query("insert into users values(NULL, '".htmlspecialchars($_POST["login"])."', '".htmlspecialchars($haslo)."')"); // zapisywanie rekordu do bazy
  40. echo "Rejestracja przebiegła pomyślnie. Możesz teraz przejść do <a href='index.php'>strony głównej</a> i się zalogować.";
  41. }
  42. }
  43. else pokaz_formularz("Nie uzupełniono wszystkich pól!!!");
  44. }
  45. else pokaz_formularz();
  46. mysql_close(); //zamykanie połączenia z bazą
  47. ?>
  48. </body>
  49. </html>


ustawienia.php
  1. <?
  2. $db="localhost";
  3. $db_u="***";
  4. $db_p="***";
  5. $db_w="test";
  6. mysql_connect("$db", "$db_u", "$db_p")or die("Nie można nawiązać połączenia z bazą");
  7. mysql_select_db("$db_w")or die("Wystąpił błąd podczas wybierania bazy danych");
  8. ?>


sprawdz.php
  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  4. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <?php
  7. if($_SESSION["zalogowany"]==0){echo "nie masz dostępu do tej części witryny. <a href='index.php'>Zaloguj się</a></body></html>;"; exit();}
  8. ?>


main.php
  1. <?php require("sprawdz.php"); ?>
  2.  
  3. <head>
  4. <title>tytul</title>
  5. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  6. </head>
  7. Tutaj będą informacje o zalogowanym wojowniku
  8. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  9. </body>
  10. </html>


Btw, przydała by się na forum opcja ukrywania i pokazywania części postu, po kliknięciu w button. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Chciałem też przeprosić, jeśli coś powinienem załapać, a nie załapałem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Namariee
post
Post #7





Grupa: Zarejestrowani
Postów: 1
Pomógł: 1
Dołączył: 26.06.2008
Skąd: Zabrze

Ostrzeżenie: (0%)
-----


Tak podałem przykład z jedną tabelą, ale to chyba nie problem zrobić takie coś z dwoma tabelami (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Jeśli masz sesje według loginu to tym bardziej jest łatwo to zrobić.
Masz tak jak napisałeś tabele users
  1. CREATE TABLE`users` (
  2. `user_id` INT NOT NULL AUTO_INCREMENT ,
  3. `user_login` VARCHAR( 30 ),
  4. `user_haslo` VARCHAR( 32 ),
  5. PRIMARY KEY ( `user_id` )
  6. );


Robisz drugą tabelę na przykład wojownik
  1. CREATE TABLE`wojownik` (
  2. `user_id` INT NOT NULL AUTO_INCREMENT ,
  3. `user_login` VARCHAR( 30 ),
  4. `user_sila` VARCHAR( 32 ),
  5. `user_zycie` VARCHAR( 32 ),
  6. PRIMARY KEY ( `user_id` )
  7. );


Wtedy podczas rejestracji musisz dodać kolejne zapytanie aby dodał Tobie w tabeli wojownik user_id i user_login takie same dane jak w tabeli users (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) no i domyślne wartości dla user_sila i user_zycie.

I robisz tamte zapytanie co jest podane wyżej
  1. <?php
  2. require('ustawienia.php'); // łączenie z Twoją bazą
  3. $wynik2 = mysql_query("SELECT * FROM wojownik WHERE login='".$_SESSION['logowanie']."'");
  4. // pobieranie rekordów z tabeli wojownik według zalogowanego użytkownika
  5. $dane2 = mysql_fetch_array($wynik2);
  6. ?>


I wstawiasz gdzieś na stronie to co chcesz wyświetlić czyli jego Siłę i życie
  1. <?php
  2. $dane2['user_sila']; // pobrana wartość z rekordu user_sila
  3. $dane2['user_zycie']; // pobrana wartość z rekordu user_zycie
  4. ?>


Ten post edytował Namariee 26.06.2008, 11:52:15
Go to the top of the page
+Quote Post
grzegosh
post
Post #8





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Zrobiłem tak jak mówiłeś (mam nadzieję).
Nie byłem pewny tylko co do tego "$_SESSION['logowanie']" co napisałeś, chyba chodziło Ci o stworzenie w indexie $_SESSION['login'] i przekazanie jej wartości zmiennej $login, a potem sprawdzenie:
$wynik2 = mysql_query("SELECT * FROM wojownik WHERE login='".$_SESSION['login']."'");
tak?

Stworzyłem w indexie czyli w miejscu logowania zmienną sesji o nazwie login, przypisałem jej wartość w tym miejscu:
  1. <?php
  2. if($_SESSION["zalogowany"]!=1)
  3. {
  4. if(!empty($_POST["login"]) && !empty($_POST["haslo"]))
  5. {
  6. $login=$_POST["login"];
  7. $haselko=md5($_POST["haslo"]);
  8. if(mysql_num_rows(mysql_query("select * from users where user_login = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($haselko)."'")))
  9. {
  10. echo "Zalogowano poprawnie. <a href='index.php'>Przejdź na stronę główną</a>";
  11. $_SESSION["zalogowany"]=1;
  12. $_SESSION["login"]=$login; //  --------------  TUTAJ  ------------- 
  13. }
  14. else echo formularz_logowania("Podano zle dane!!!");
  15. }
  16. else formularz_logowania();
  17. }
  18. ?>


Moj plik main.php gdzie mają być wypisywane statystyki wygląda teraz tak:
  1. <?php require("sprawdz.php"); ?>
  2.  
  3. <head>
  4. <title>tytul</title>
  5. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  6. </head>
  7.  
  8. <?
  9.  
  10. require('ustawienia.php'); // łączenie z Twoją bazą
  11. $wynik2 = mysql_query("SELECT * FROM wojownik WHERE login='".$_SESSION['login']."'");
  12. // pobieranie rekordów z tabeli wojownik według zalogowanego użytkownika
  13. $dane2 = mysql_fetch_array($wynik2);
  14.  
  15. $dane2['user_sila']; // pobrana wartość z rekordu user_sila
  16. $dane2['user_zycie']; // pobrana wartość z rekordu user_zycie
  17. ?>
  18.  
  19. <br><a href='index.php?wyloguj=tak'>wyloguj się</a>
  20. </body>
  21. </html>

No i gdy się rejestruję (oczywiscie podczas rejestracji wysyłam do bazy dane z id, loginem, siłą i zyciem jak pisałeś) i loguję potem, próbuję wejśc na main.php i wyskakuje taki błąd:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in sciezka/main.php on line 13

Trochę się już zagmatwałem :/
Go to the top of the page
+Quote Post
Shili
post
Post #9





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Masz błędne zapytanie, sprawdź, czy nie popełniłeś jakiejś literówki, czy masz w bazie tabelę z polami o takiej nazwie, jaką zadeklarowałeś w zapytaniu.

Wypisz sobie zapytanie na ekran, na przykład przez echo (sam ciąg znaków) i spróbuj przekleić do phpMyAdmina, sprawdź czy działa. W ogóle spróbuj wyświetlić i porównaj to z tym, co chciałeś otrzymać.


@edit
  1. <?php
  2. htmlspecialchars($_POST["login"])
  3. ?>
Widać, że czytałeś sobie o bezpieczeństwie kodu, ale trzeba tutaj nadmienić, że ten wcale nie jest bezpieczny. htmlspecialchars używa się przy wyświetlaniu wyników, a przy dodawaniu do bazy o wiele lepsza jest mysql_real_escape_string.

Ten post edytował Shili 26.06.2008, 14:17:27
Go to the top of the page
+Quote Post
grzegosh
post
Post #10





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Nooo (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Śmiga. Wreszcie.
Na razie kończę bo mi już głowa paruje (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Dzięki Shili oraz Namariee za pomoc.

Jak będę miał kolejne pytania odnośnie dalszej pracy nad gierką, nie omieszkam zapytać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Miłego dnia, odezwę się potem tutaj.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 21:41