Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] problem z zapytaniem
jjarkus
post 31.12.2009, 11:34:09
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 26.08.2008

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


Dręczy mnie pewien problem z moim kodem blinksmiley.gif
Mianowicie tworzę sobie taką małą grę i problem jest następujący:
Podczas rejestracji nowego użytkownika wyskakuje taki błąd:
Kod
         Warning:  mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\gra\stats.php on line 43
         Warning:  mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\gra\stats.php on line 43
         Warning:  mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\gra\stats.php on line 43

Skorzystałem też z
i pokazał taki komunikat:
Kod
         Something is wrong in your syntax obok 'SELECT id FROM stats WHERE display_name = 'mag' OR short_name = ' w linii 1


Wychodzi na to, że chyba wykonanie zapytania się nie powiodło.
W czym może tkwić błąd?

Dodatkowo kod stats.php
  1. <?php
  2.  
  3. function getStat($statName,$userID) {
  4. include 'config.php';
  5. $conn = mysql_connect($dbhost,$dbuser,$dbpass)
  6. or die ('Error connecting to mysql:');
  7. mysql_select_db($dbname);
  8. createIfNotExists($statName,$userID);
  9. $query = sprintf("SELECT value FROM user_stats WHERE stat_id = (SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s') AND user_id = '%s'",
  10. $result = mysql_query($query);
  11. list($value) = mysql_fetch_row($result);
  12. return $value;
  13. $userID = mysql_insert_id($conn);
  14.  
  15. }
  16. function setStat($statName,$userID,$value) {
  17. include 'config.php';
  18. $conn = mysql_connect($dbhost,$dbuser,$dbpass)
  19. or die ('Error connecting to mysql');
  20. mysql_select_db($dbname);
  21. createIfNotExists($statName,$userID);
  22. $query = sprintf("UPDATE user_stats SET value = '%s' WHERE stat_id = (SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s') AND user_id = '%s'",
  23. $result = mysql_query($query);
  24. }
  25.  
  26. function createIfNotExists($statName,$userID) {
  27. include 'config.php';
  28. $conn = mysql_connect($dbhost,$dbuser,$dbpass)
  29. or die ('Error connecting to mysql:');
  30. mysql_select_db($dbname);
  31. $query = sprintf("SELECT count(value) FROM user_stats WHERE stat_id = (SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s') AND user_id = '%s'",
  32. $result = mysql_query($query);
  33. list($count) = mysql_fetch_row($result);
  34. if($count == 0) {
  35. $query = sprintf("INSERT INTO user_stats(stat_id,user_id,value) VALUES ((SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s'),'%s','%s')",
  36. '0');
  37. mysql_query($query);
  38. }
  39. }
  40.  
  41. ?>


Oraz register.php
  1. <?php
  2.  
  3. include 'smarty.php';
  4.  
  5. if($_POST) {
  6. $password = $_POST['password'];
  7. $confirm = $_POST['confirm'];
  8. if($password != $confirm) {
  9. $error = 'Passwords do not match!';
  10. } else {
  11. require_once 'config.php';
  12. $conn = mysql_connect($dbhost,$dbuser,$dbpass)
  13. or die('Error connecting to mysql');
  14. mysql_select_db($dbname);
  15. $query = sprintf("SELECT COUNT(id) FROM users WHERE UPPER(username) = UPPER('%s')",
  16. mysql_real_escape_string($_POST['username']));
  17. $result = mysql_query($query);
  18. list($count) = mysql_fetch_row($result);
  19. if($count >= 1) {
  20. $error = 'that username is taken.';
  21. } else {
  22. $query = sprintf("INSERT INTO users(username,password) VALUES ('%s','%s');",
  23. mysql_real_escape_string($_POST['username']),
  24. mysql_query($query);
  25. $userID = mysql_insert_id($conn);
  26. require_once 'stats.php';
  27. setStat('atk',$userID,'5');
  28. setStat('def',$userID,'5');
  29. setStat('mag',$userID,'5');
  30. $message = 'Congratulations, you registered successfully!';
  31. }
  32. }
  33. }
  34. $smarty->assign('error',$error);
  35. $smarty->assign('message',$message);
  36. $smarty->display('register.tpl');
  37. ?>
Go to the top of the page
+Quote Post
Pawel_W
post 31.12.2009, 19:58:06
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


najprościej by było jakbyś sobie zrobił echo $query, wtedy zobaczyłbyś co dostaje mysql.
Go to the top of the page
+Quote Post
deniol13
post 1.01.2010, 11:56:24
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 2
Dołączył: 30.11.2009

Ostrzeżenie: (10%)
X----


weź po każdej operacji mysql_fetch_row(); daje or die(mysql_error();

czyli

$zmienna = mysql_fetch_row($zapytanie) or die(mysql_error()); i pokaż kod błędu wtedy
Go to the top of the page
+Quote Post
jjarkus
post 1.01.2010, 12:27:49
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 26.08.2008

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


Kod błędu pod doadniu echo $query wygląda tak:
Kod
         Something is wrong in your syntax obok 'SELECT id FROM stats WHERE display_name = 'mag' OR short_name = ' w linii 1INSERT INTO users(username,password) VALUES ('66','3295c76acbf4caaed33c36b1b5fc2cb1')

A tak po tym co napisał daniol13 taki komunikat:
Kod
Something is wrong in your syntax obok 'SELECT id FROM stats WHERE display_name = 'atk' OR short_name = ' w linii 1
Go to the top of the page
+Quote Post
Pawel_W
post 1.01.2010, 13:00:47
Post #5





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


Cytat(jjarkus @ 1.01.2010, 12:27:49 ) *
Kod błędu pod doadniu echo $query wygląda tak:
Kod
         Something is wrong in your syntax obok 'SELECT id FROM stats WHERE display_name = 'mag' OR short_name = ' w linii 1INSERT INTO users(username,password) VALUES ('66','3295c76acbf4caaed33c36b1b5fc2cb1')

A tak po tym co napisał daniol13 taki komunikat:
Kod
Something is wrong in your syntax obok 'SELECT id FROM stats WHERE display_name = 'atk' OR short_name = ' w linii 1

przecież to są 2 różne zapytania, musiałes w złym miejscu echo wstawić...
Go to the top of the page
+Quote Post
jjarkus
post 1.01.2010, 13:27:58
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 26.08.2008

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


Tutaj wstawiam echo $query:
  1. function setStat($statName,$userID,$value) {
  2. include 'config.php';
  3. $conn = mysql_connect($dbhost,$dbuser,$dbpass)
  4. or die ('Error connecting to mysql');
  5. mysql_select_db($dbname);
  6. createIfNotExists($statName,$userID);
  7. $query = sprintf("UPDATE user_stats SET value = '%s' WHERE stat_id = (SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s') AND user_id = '%s'",
  8. $result = mysql_query($query);
  9. echo mysql_error(); \\teraz dałem tutaj
  10. echo $query; \\ i tu
  11.  
  12. }
  13.  
  14. function createIfNotExists($statName,$userID) {
  15. include 'config.php';
  16. $conn = mysql_connect($dbhost,$dbuser,$dbpass)
  17. or die ('Error connecting to mysql:');
  18. mysql_select_db($dbname);
  19. $query = sprintf("SELECT count(value) FROM user_stats WHERE stat_id = (SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s') AND user_id = '%s'",
  20. $result = mysql_query($query);
  21. list($count) = mysql_fetch_row($result);
  22. if($count == 0) {
  23. $query = sprintf("INSERT INTO user_stats(stat_id,user_id,value) VALUES ((SELECT id FROM stats WHERE display_name = '%s' OR short_name = '%s'),'%s','%s')",
  24. '0');
  25. mysql_query($query);
  26. echo mysql_error(); \\teraz dałem tutaj
  27. echo $query; \\ i tu
  28. }
  29. }


Wyskakuje coś takiego:
Kod
     Warning:  mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\gra\stats.php on line 45
       Something is wrong in your syntax obok 'SELECT id FROM stats WHERE  display_name = 'atk' OR short_name = ' w linii 1INSERT INTO  user_stats(stat_id,user_id,value) VALUES ((SELECT id FROM stats WHERE  display_name = 'atk' OR short_name = 'atk'),'30','0')Something is wrong  in your syntax obok 'SELECT id FROM stats WHERE display_name = 'atk' OR  short_name = ' w linii 1UPDATE user_stats SET value = '5' WHERE stat_id  = (SELECT id FROM stats WHERE display_name = 'atk' OR short_name =  'atk') AND user_id = '30'

       Warning: mysql_fetch_row(): supplied argument is not a valid MySQL  result resource in c:\usr\krasnal\www\gra\stats.php on line 45
       Something is wrong in your syntax obok 'SELECT id FROM stats WHERE  display_name = 'def' OR short_name = ' w linii 1INSERT INTO  user_stats(stat_id,user_id,value) VALUES ((SELECT id FROM stats WHERE  display_name = 'def' OR short_name = 'def'),'30','0')Something is wrong  in your syntax obok 'SELECT id FROM stats WHERE display_name = 'def' OR  short_name = ' w linii 1UPDATE user_stats SET value = '5' WHERE stat_id  = (SELECT id FROM stats WHERE display_name = 'def' OR short_name =  'def') AND user_id = '30'

       Warning: mysql_fetch_row(): supplied argument is not a valid MySQL  result resource in c:\usr\krasnal\www\gra\stats.php on line 45
       Something is wrong in your syntax obok 'SELECT id FROM stats WHERE  display_name = 'mag' OR short_name = ' w linii 1INSERT INTO  user_stats(stat_id,user_id,value) VALUES ((SELECT id FROM stats WHERE  display_name = 'mag' OR short_name = 'mag'),'30','0')Something is wrong  in your syntax obok 'SELECT id FROM stats WHERE display_name = 'mag' OR  short_name = ' w linii 1UPDATE user_stats SET value = '5' WHERE stat_id  = (SELECT id FROM stats WHERE display_name = 'mag' OR short_name =  'mag') AND user_id = '30'
Go to the top of the page
+Quote Post
Pawel_W
post 1.01.2010, 18:25:08
Post #7





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


hmm, ciężko powiedzieć co jest źle, jak masz phpMyAdmin to spróbuj wykonać w nim te zapytania, wtedy dowiesz się co jest źle.
Go to the top of the page
+Quote Post
jjarkus
post 3.01.2010, 14:19:19
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 26.08.2008

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


Dobra napisałem to jeszcze raz od nowa i poszło worriedsmiley.gif Dzięki za pomoc. Ale natrafiłem na jakiś dziwny błąd sciana.gif
Teraz próbuję dodać avatary.

W tabeli users dodałem pole avatar, w którym będzie przetrzymywany adres http:// do avatara. Po rejestracji elegancko nowe dane są wpisywane do bazy.
A teraz nie za bardzo wiem jak wyświetlić avatar withstupidsmiley.gif
Dodatkowo korzystam ze smartów.

Próbowałem to zrobić tak ( na razie żeby wyświetlał się po prostu adres http:// avatara):

W pliku stats.php tworzę taki kod:

  1. function getAvatar($avatar,$userID) {
  2. $query = sprintf("SELECT avatar FROM users WHERE id = (SELECT id FROM users WHERE UPPER(username) = UPPER('%s'))",
  3. $result = mysql_query($query);
  4. echo $query;
  5. list($value) = mysql_fetch_row($result);
  6. return $value;
  7. }


W index.php
  1. $smarty->assign('avatar',getAvatar($avatar,$userID));


W index.tpl
  1. Avatar: <strong>{$avatar}</strong>


I coś to nie działa ...
W index.php wyskakuje takie komunikat:
Kod
SELECT avatar FROM users WHERE id = (SELECT id FROM users WHERE  UPPER(username) = UPPER(''))SELECT avatar FROM users WHERE id = (SELECT  id FROM users WHERE UPPER(username) = UPPER(''))


Na pewno coś źle zrobiłem wstydnis.gif
Go to the top of the page
+Quote Post
Pawel_W
post 3.01.2010, 15:12:27
Post #9





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


spróbuj tak:
  1. $query = sprintf("SELECT `avatar` FROM `users` WHERE `users`.`id` = (SELECT u.`id` FROM `users` u WHERE UPPER(u.`username`) = UPPER('%s'))",
Go to the top of the page
+Quote Post
jjarkus
post 3.01.2010, 16:45:49
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 26.08.2008

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


Dobra zrobiłem tak i wszystko działa teraz pięknie:
stats.php
  1. function getAvatar($avatar,$userID) {
  2. $query = sprintf("SELECT avatar FROM users WHERE UPPER(username) = UPPER('%s')",
  3. mysql_real_escape_string($_SESSION['username']),
  4. $result = mysql_query($query);
  5. list($avatar) = mysql_fetch_row($result);
  6. return $avatar;
  7. }

index.php
  1. $smarty->assign('avatar',getAvatar($avatar,$userID));


index.tpl
  1. <img src="{$avatar}"/>


I awatary się wyświetlają guitar.gif
A jak zrobić żeby przy rejestracji, jak się nic nie wpisze w pole awatar, aby w tablicy został podany adres domyślny awatara dla nowego usera?

Ten post edytował jjarkus 3.01.2010, 16:46:20
Go to the top of the page
+Quote Post
Pawel_W
post 3.01.2010, 18:11:21
Post #11





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


poczytaj o IFNULL dla sql winksmiley.jpg
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2025 - 18:02