Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] problem z zapytaniem
Forum PHP.pl > Forum > Przedszkole
jjarkus
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. ?>
Pawel_W
najprościej by było jakbyś sobie zrobił echo $query, wtedy zobaczyłbyś co dostaje mysql.
deniol13
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
jjarkus
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
Pawel_W
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ć...
jjarkus
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'
Pawel_W
hmm, ciężko powiedzieć co jest źle, jak masz phpMyAdmin to spróbuj wykonać w nim te zapytania, wtedy dowiesz się co jest źle.
jjarkus
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
Pawel_W
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'))",
jjarkus
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?
Pawel_W
poczytaj o IFNULL dla sql winksmiley.jpg
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.