Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: High Score / Hall of Fame
Forum PHP.pl > Forum > Bazy danych > MySQL
Dende
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!
Cienki1980
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
JaRoPHP
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...
Dende
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
Cienki1980
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.
JaRoPHP
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. ?>
Dende
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 haha.gif za (...)baza.tabela(...) wstawic jakos tworcy_3.highscore questionmark.giftongue.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.
JaRoPHP
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ć...
Dende
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"
Cienki1980
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.
Dende
  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 tongue.gif
ale nie wyskakuja errory to chyba dobrze...

a zmienne $nick i $wynik nie przychodza z formularza html ?
Cienki1980
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 ).
JaRoPHP
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.
Dende
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 tongue.gif znalazlem jakies okienko do wpisywania komend dla bazy danych... ale co mam w niej wpisac?

------
to z tym id juz lapie biggrin.gif
a to na koncu insert into, tak, mialo wgrywac rekordy biggrin.gif
JaRoPHP
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. ?>
Dende
Konsola "polknela" drugie echo tongue.gif i jest rekord;
a blad to : "No database selected" ....

------
ale! po wgraniu do konsoli tamtego zczytuje rekord 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 biggrin.gif
$zapytanie="INSERT INTO tworcy_3.highscore (nick,wynik) values ('".$_POST['nick']."','".$_POST['wynik']."')";

Dzieki wielkie za pomoc!!
Jestem bardzo wdzieczny =)
JaRoPHP
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).
Dende
Juz to zrobilem mniej wiecej
baza tworcy_3 tabela highscore
Koncowy kod juz ladnie dzialajacy biggrin.gif (np dla potomnych 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. ?>
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-2024 Invision Power Services, Inc.