Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> High Score / Hall of Fame, Skrypt php z obsluga MySQL
Dende
post
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


Witam,
jak w temacie, mam z tym problem xD
Lazilem po tutorialach pytalem o pomoc znajomych... i mam pare zlepkow skryptku ktorych nie potrafie zastosowac =P
Caly czas pisze we flashu, no i wlasnie stworzylem gre i pierwszy raz mi jest potrzebne mysql i php i jestem w kropce xD
moje zlepki to:
  1. <?php
  2.  
  3. $dbc=mysql_pconnect ("localhost", "tworcy_3", "haslo");
  4. mysql_select_db("highscore");
  5. $dbr=mysql_query($zapytanie);
  6.  
  7. $zapytanie = "SELECT nick, wynik FROM baza.tabela ORDER BY wynik DESC LIMIT 10"
  8.  
  9. while($tmp = mysql_fetch_array( $dbr )) {
  10. }
  11.  
  12. $query= sprintf(
  13. "INSERT INTO highscore (nick, wynik) "
  14. ."VALUES ('%s','%d' "
  15. ." )",
  16. $nick, $wynik
  17. );
  18.  
  19.  
  20. ?>

(oczywiscie juz stworzylem w bazie danych tabele "highscore" i kolumny id / nick / wynik z odpowiednimi parametrami)
Czy bylby ktos w stanie mi pomoc to uporzadkowac i sprawic by zadzialalo ?^^ albo dac linka do jakiegos gotowca... bo tez szukalem i jedyne co znalazlem to toplisty stron www...
Pozdrawiam i dziekuje za wszelka pomoc!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
Cienki1980
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Ten skrypt nic nie wyświetli bo nic nie zostanie pobrane z bazy.

Najpierw ( linia 5 ) wywołujesz zapytanie do bazy ... a dopiero ( linia 7 ) tworzysz zapytanie.

Zmień kolejność i zobacz co wyjdzie z tego
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #3





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


1. Na końcu linijki, gdzie przypisujesz wartość do zmiennej $zapytanie musi być średnik (nie wiem, czy literówka, czy nie).
2. Nigdzie nie wywołujesz przypisanego zapytania. Po przypisaniu do zmiennej $zapytanie musi się pojawić np. $dbr = mysql_query($zapytanie);
3. Wywołujesz pętlę while, ale kompletnie nic w niej nie robisz
4. Czemu ma służyć przypisanie $query = sprintf(...)?

Popraw, a następnie napisz, jak to ma działać i co ewentualnie nie działa...
Go to the top of the page
+Quote Post
Dende
post
Post #4





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


Chyba poprawione...
  1. <?php
  2.  
  3. $dbc=mysql_pconnect ("localhost", "tworcy_3", "haslo");
  4. mysql_select_db("highscore");
  5.  
  6. $zapytanie = "SELECT nick, wynik FROM baza.tabela ORDER BY wynik DESC LIMIT 10";
  7.  
  8. $dbr=mysql_query($zapytanie);
  9.  
  10. while($tmp = mysql_fetch_array( $dbr )) {
  11. echo("$id, $nick, $wynik");
  12. };
  13.  
  14. $query= sprintf(
  15. "INSERT INTO highscore (nick, wynik) "
  16. ."VALUES ('%s','%d' "
  17. ." )",
  18. $nick, $wynik
  19. );
  20.  
  21. ?>


  1. Warning: mysql_pconnect() [function.mysql-pconnect]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/tworcy/ftp/gra/skrypt.php on line 3
  2.  
  3. Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/tworcy/ftp/gra/skrypt.php on line 4
  4.  
  5. Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/tworcy/ftp/gra/skrypt.php on line 4
  6.  
  7. Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/tworcy/ftp/gra/skrypt.php on line 8
  8.  
  9. Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/tworcy/ftp/gra/skrypt.php on line 8
  10.  
  11. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/tworcy/ftp/gra/skrypt.php on line 10



a ma to byc bardzo prosty high score dla gry flashowej
kazdy ktory uzyska jakis tam wynik jest dodawany do bazy
a nastepnie wyswietlane np top 10 czy top 30 wynikow
a jak da rade jeszce dodatkowo obok zrobic jakies top 30 bierzacego tygodnia to juz bajka =)

----------

zmienilem localhost na dokladny host z portem i juz wyskakuje tylko Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource w linicjce 10

Ten post edytował Dende 17.01.2007, 13:16:24
Go to the top of the page
+Quote Post
Cienki1980
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


To chyba też nie za bardzo cokolwiek wyświetli ... no ale narazie masz problem z połączeniem do bazy danych na co wskazują Warningi.

Samo wyświetlanie też nie zabangla bo powinno wyglądać to bardziej tak:
  1. <?php
  2. while($tmp = mysql_fetch_array( $dbr )) 
  3. {
  4.  echo("$tmp['id'], $tmp['nick'], $tmp['wynik']");
  5. };
  6. ?>


No ale najpierw musisz się poprawnie połączyć do bazy.
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #6





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Zmień fragment kodu gdzie tworzysz zapytanie i próbujesz je wykonać na:
  1. <?php
  2. $zapytanie = "SELECT nick, wynik FROM baza.tabela ORDER BY wynik DESC LIMIT 10";
  3. echo $zapytanie;
  4. $dbr=mysql_query($zapytanie) or die (mysql_error());
  5. ?>
Go to the top of the page
+Quote Post
Dende
post
Post #7





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


Do testow troche wczesniej dorobilem plik html
  1. <FORM ACTION=skrypt.php METHOD=POST>
  2. <INPUT TYPE=TEXT NAME=nick><BR>
  3. <INPUT TYPE=TEXT NAME=wynik><BR>
  4. <INPUT TYPE=SUBMIT>
  5. </FORM>


A aktualnie php wyglada tak:
  1. <?php
  2.  
  3. $dbc=mysql_pconnect ("sql.tworcy.nazwa.pl:3305", "tworcy_3", "******");
  4. mysql_select_db("highscore");
  5.  
  6. $zapytanie = "SELECT nick, wynik FROM baza.tabela ORDER BY wynik DESC LIMIT 10";
  7. echo $zapytanie;
  8. $dbr=mysql_query($zapytanie) or die (mysql_error());
  9.  
  10. while($tmp = mysql_fetch_array( $dbr )) 
  11. {
  12. echo("$tmp['id'], $tmp['nick'], $tmp['wynik']");
  13. };
  14.  
  15. $query= sprintf(
  16. "INSERT INTO highscore (nick, wynik) "
  17. ."VALUES ('%s','%d' "
  18. ." )",
  19. $nick, $wynik
  20. );
  21.  
  22. ?>

(wydaje mi sie ze powinno a nie jest (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) za (...)baza.tabela(...) wstawic jakos tworcy_3.highscore (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
a przy aktualnym kodzie wyskakuje

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/tworcy/ftp/gra/skrypt.php on line 12

--------

I poki co w PhpMyAdmin nie widze zadnych rekordow.

Ten post edytował Dende 17.01.2007, 14:07:03
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #8





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Zamień:
  1. <?php
  2. while($tmp = mysql_fetch_array($dbr)) {
  3. echo("$tmp['id'], $tmp['nick'], $tmp['wynik']");
  4. };
  5. ?>
na
  1. <?php
  2. while($tmp = mysql_fetch_array($dbr)) {
  3. echo("{$tmp['id']}, {$tmp['nick']}, {$tmp['wynik']}");
  4. };
  5. ?>

Ale pozostaje jeszcze jedna kwestia: mianowicie w zapytaniu SELECT pobierasz tylko dwie kolumny: nick i wynik, natomiast w pętli while chcesz wyświetlić wartości z trzech kolumn: dodatkowo id.
Więc raczej zapytanie SQL powinno wyglądać tak:
  1. <?php
  2. $zapytanie = "SELECT id, nick, wynik FROM baza.tabela ORDER BY wynik DESC LIMIT 10";
  3. ?>

[EDIT]
Co robią te linie (raczej co mają robić w Twoim zamyśle):
  1. <?php
  2. $query= sprintf(
  3. "INSERT INTO highscore (nick, wynik) "
  4. ."VALUES ('%s','%d' "
  5. ." )",
  6. $nick, $wynik
  7. );
  8. ?>
Zmiennych $nick i $wynik nie masz nigdzie zadeklarowanych, więc na pewno nie będzie to działać...

Ten post edytował JaRoPHP 17.01.2007, 14:22:41
Go to the top of the page
+Quote Post
Dende
post
Post #9





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


a czy w kolumnie id jak jest Dodatkowe : auto_increment to nie wystarczy ?
bo id ma byc kolejna liczba naturalna ...

Oooo... ale jak zmienilem tamto to mi nie wyskoczyl error tylko
"SELECT nick, wynik FROM tworcy_3.highscore ORDER BY wynik DESC LIMIT 10"
czyli pewno to pierwsze "echo"

Ten post edytował Dende 17.01.2007, 14:25:14
Go to the top of the page
+Quote Post
Cienki1980
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Cytat(Dende @ 17.01.2007, 14:02:38 ) *
I poki co w PhpMyAdmin nie widze zadnych rekordow.

Rekordów w bazie nie będzie bo nigdzie ich nie wstawiasz.

Musisz dodać to do bazy w podobny sposób jak wyciągasz ( patrząc ze strony kodu php ). Czyli coś takiego:

  1. <?php
  2. $pytanie="INSERT INTO highscore (nick,wynik) values ('".$_POST['nick']."','".$_POST['wynik']."')";
  3. mysql_query($pytanie);
  4. ?>


Dopiero wtedy będziesz miał rekordy w bazie danych.
Go to the top of the page
+Quote Post
Dende
post
Post #11





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


  1. <?php
  2.  
  3. $dbc=mysql_pconnect ("sql.tworcy.nazwa.pl:3305", "tworcy_3", "*****");
  4. mysql_select_db("highscore");
  5.  
  6. $zapytanie = "SELECT nick, wynik FROM tworcy_3.highscore ORDER BY wynik DESC LIMIT 10";
  7. echo $zapytanie;
  8. $dbr=mysql_query($zapytanie) or die (mysql_error());
  9.  
  10. while($tmp = mysql_fetch_array($dbr)) {
  11. echo("{$tmp['id']}, {$tmp['nick']}, {$tmp['wynik']}");
  12. };
  13.  
  14. $zapytanie="INSERT INTO highscore (nick,wynik) values ('".$_POST['nick']."','".$_POST['wynik']."')";
  15. mysql_query($zapytanie);
  16.  
  17. ?>

Przy takim kodzie caly czas zwraca jedynie:
  1. SELECT nick, wynik FROM tworcy_3.highscore ORDER BY wynik DESC LIMIT 10

a rekordow dalej nie ma (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
ale nie wyskakuja errory to chyba dobrze...

a zmienne $nick i $wynik nie przychodza z formularza html ?

Ten post edytował Dende 17.01.2007, 14:33:30
Go to the top of the page
+Quote Post
Cienki1980
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Wyświetl to drugie zapytanie ( to z dodawaniem )
  1. <?php
  2. echo $zapytanie;
  3. ?>


I sprawdź czy wykona się bezpośrednio w bazie danych ( z poziomu konsoli, phpmyadmin czy czego tam jeszcze używasz ).
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #13





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Cytat(Dende @ 17.01.2007, 14:23:22 ) *
a czy w kolumnie id jak jest Dodatkowe : auto_increment to nie wystarczy ?
Ale to nie ma nic do tego. Jak pobierasz dane, to określasz, jakie kolumny mają być pobrane, a potem je możesz wyświetlać (ale tylko te, które pobrałeś).
Owszem, gdybyć wstawiał dane, to miałoby to znaczenie.

Cytat(Dende @ 17.01.2007, 14:23:22 ) *
Oooo... ale jak zmienilem tamto to mi nie wyskoczyl error tylko ... to pierwsze "echo"
To źle? To znaczy, że nie ma poważniejszych błędów.

Cytat
rekordów w bazie nie będzie bo nigdzie ich nie wstawiasz.
Ja mam wrażenie, że ostatnie linijki mają odpowiadać za wstawianie danych, ale nie uzyskałem od autora odpowiedzi na pytanie co mają one robić (zadane dwukrotnie), więc na razie się nie odzywam w tym aspekcie.
Go to the top of the page
+Quote Post
Dende
post
Post #14





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


z drugim echo zwraca:
  1. SELECT nick, wynik FROM tworcy_3.highscore ORDER BY wynik DESC LIMIT 10
  2. INSERT INTO highscore (nick,wynik) values ('Dende','213')


a z konsoli ... nie bardzo wiem o co chodzi (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) znalazlem jakies okienko do wpisywania komend dla bazy danych... ale co mam w niej wpisac?

------
to z tym id juz lapie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
a to na koncu insert into, tak, mialo wgrywac rekordy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował Dende 17.01.2007, 14:39:59
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #15





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Cytat(Dende @ 17.01.2007, 14:36:40 ) *
ale co mam w niej wpisac?
To co dostałeś w drugim echo().

Jak nie działa w php, to popraw kod na poniższy, aby otrzymać komunikat o błędzie:
  1. <?php
  2. $zapytanie="INSERT INTO highscore (nick,wynik) values ('".$_POST['nick']."','".$_POST['wynik']."')";
  3. mysql_query($zapytanie) or die(mysql_error());
  4. ?>
Go to the top of the page
+Quote Post
Dende
post
Post #16





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


Konsola "polknela" drugie echo (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) i jest rekord;
a blad to : "No database selected" ....

------
ale! po wgraniu do konsoli tamtego zczytuje rekord (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
SELECT id, nick, wynik FROM tworcy_3.highscore ORDER BY wynik DESC LIMIT 101, Dende, 213INSERT INTO highscore (nick,wynik) values ('Dende','213')No database selected

ha! mam (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
$zapytanie="INSERT INTO tworcy_3.highscore (nick,wynik) values ('".$_POST['nick']."','".$_POST['wynik']."')";

Dzieki wielkie za pomoc!!
Jestem bardzo wdzieczny =)

Ten post edytował Dende 17.01.2007, 14:58:07
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #17





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Jak się nazywa twoja baza danych? tworcy_3, czy highscore? W zależności od tego, w funkcji mysql_select_db daj prawidłowy argument (prawidłowa nazwa bazy danych).

PS.
Skasuj sobie funkcjie echo() - służyły tylko w celach diagnostycznych.

[EDIT]
Mam wrażenie, że powinno być:
  1. <?php
  2. mysql_select_db("tworcy_3");
  3. ?>
i wtedy w zapytaniach mógłbyś używać np: INSERT INTO highscore, a nie INSERT INTO tworcy_3.highscore (przy zapytaniu SELECT analogicznie).

Ten post edytował JaRoPHP 17.01.2007, 15:40:23
Go to the top of the page
+Quote Post
Dende
post
Post #18





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 17.01.2007

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


Juz to zrobilem mniej wiecej
baza tworcy_3 tabela highscore
Koncowy kod juz ladnie dzialajacy (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (np dla potomnych (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) )
  1. <?php
  2. $lp=1;
  3. $dbc=mysql_pconnect ("localhost", "baza", "*****");
  4.  
  5. $zapytanie="INSERT INTO tabela (nick,wynik) values ('".$_POST['nick']."','".$_POST['wynik']."')";
  6. mysql_query($zapytanie) or die(mysql_error());
  7.  
  8. $zapytanie = "SELECT id, nick, wynik FROM tabela ORDER BY wynik DESC LIMIT 25";
  9. $dbr=mysql_query($zapytanie) or die (mysql_error());
  10.  
  11. echo("<CENTER><TABLE width=400 border=2 bordercolor=#660000>");
  12.  
  13. while($tmp = mysql_fetch_array($dbr)) {
  14. echo("<TR><TD width=50 align=center><b>{$lp}</b><TD width=250 align=center><b>{$tmp['nick']}</b><TD width=100 align=center><b>{$tmp['wynik']}</b>");
  15. $lp++;
  16. };
  17.  
  18. echo("</TABLE></CENTER>");
  19.  
  20.  
  21. ?>


Ten post edytował Dende 17.01.2007, 16:49:50
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 - 22:29