Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] Błąd z funkcją mysql_fetch_array
Bonzaii
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 31.08.2006

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


Oto kod:
  1. <?php
  2. #Łączy się z bazą
  3. $sql = mysql_connect($dbhost,$dbuser,$dbpass);
  4. #Wybiera bazę
  5. mysql_select_db($dbname);
  6. #Pobiera wszystkie wpisy z tabeli 'bases' gdzie przykładowo owner='1'
  7. $res = mysql_query("SELECT * FROM bases WHERE owner='$_SESSION[id]'");
  8. #Wyświetla liczbę rekordów
  9. #A to wyświetla błąd: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in blablabla/blabla.php on line 37
  10. while ($base = mysql_fetch_array($res)) {
  11. instrukcje;
  12. }
  13. ?>

To nie jest cały kod ale myśle że to starczy. Powiem tylko tyle, że dla mnie jest to kompletnie nie logiczny błąd.
Prosze o pomoc !

Ten post edytował Bonzaii 18.09.2006, 15:31:54
Go to the top of the page
+Quote Post
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


hmm kod wydaje sie ok ale wypadałoby sprawdzić że jeżeli jest 0 zwróconych rekordów to nie może wywoływać
  1. <?php
  2. ?>
bo po prostu $res będzie dla niego NULLem
Go to the top of the page
+Quote Post
Bonzaii
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 31.08.2006

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


No tak tylko że:
  1. <?php
  2. ?>

Wyświetla cyfrę 5! Czyli jest 5 rekordów więc nie wiem dlaczego w mysql_fetch_array() mialo już $res być NULL'em (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jak na moj gust, to ty w tej pętli, nadpisujesz zmienną $res. Juz nie raz takie "przypadki " widzialem na forum.

I popraw tytul na bardziej sensowny Dzwinych bledow ci u nas dostatek na forum.
Go to the top of the page
+Quote Post
piwoszeq
post
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 13.01.2005
Skąd: warszawa

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


najprawdopodobniej wlasnie jak kolega napisal nadpisujesz $res
albo $base ?
Go to the top of the page
+Quote Post
Bonzaii
post
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 31.08.2006

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


Nie nadpisuje $base, nie nadpisuje $res... Nigdzie wczesniej nie robie z $res (ze zmienną) tylko wyświetlam (nie ustawiam) jej zawartość za pomocą funkcji mysql_num_rows....

Prosze o dalszą pomoc :/ Moge podać cały skrypt jak wygląda jak to jest konieczne.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




to podaj caly skrypt, a glownie to co w petli masz
Go to the top of the page
+Quote Post
Bonzaii
post
Post #8





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 31.08.2006

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


  1. <?php
  2. if (empty($_SESSION['id'])) die(E_NOTLOGGEDIN);
  3. if ($_POST['action']) {
  4. if ($_POST['action'] == 'cashtobase' && $_POST['cash'] && $_POST['base']) {
  5. if ($user['cash'] >= $_POST['cash']) {
  6. $res = mysql_query("SELECT * FROM bases WHERE id='$_POST[base]'");
  7. if (mysql_num_rows($res) == 0) {
  8. echo E_NOSUCHBASE;
  9. }
  10. $res = mysql_fetch_array($res);
  11. $newcash = $res['cash'] + $_POST['cash'];
  12. $newucash = $user['cash'] - $_POST['cash'];
  13. if ($newucash < 0) die(E_NOCASH);
  14. $res = mysql_query("UPDATE users SET cash='$newucash' WHERE id='$_SESSION[id]'");
  15. $res = mysql_query("UPDATE bases SET cash='$newcash' WHERE id='$_POST[base]'");
  16. }
  17. }
  18. if ($_POST['action'] == 'cashtobank' && $_POST['cash'] && $_POST['base']) {
  19. $res = mysql_query("SELECT * FROM bases WHERE id='$_POST[base]'");
  20. $base = mysql_fetch_array($res);
  21. if ($base['cash'] >= $_POST['cash']) {
  22.  
  23. if (mysql_num_rows($res) == 0) {
  24. echo E_NOSUCHBASE;
  25. }
  26.  
  27. $newcash = $base['cash'] - $_POST['cash'];
  28. $newucash = $user['cash'] + $_POST['cash'];
  29. if ($newcash < 0) die(E_NOCASH);
  30. $res = mysql_query("UPDATE users SET cash='$newucash' WHERE id='$_SESSION[id]'");
  31. $res = mysql_query("UPDATE bases SET cash='$newcash' WHERE id='$_POST[base]'");
  32. }
  33. }
  34. if ($_POST['action'] == 'allcashtobank') {
  35.  
  36. #TO JEST TA SEKCJA
  37. $res = mysql_query("SELECT * FROM bases WHERE owner='$_SESSION[id]' ORDER BY name ASC");
  38. echo mysql_num_rows($res); #TO DZIAŁA
  39.  
  40. while ($base = mysql_fetch_array($res)) { # A TO JUŻ NIE
  41. if (mysql_num_rows($res) == 0) {
  42. echo E_NOSUCHBASE;
  43. }
  44. $newcash = $base['cash'] - $base['cash'];
  45. $newucash = $user['cash'] + $_base['cash'];
  46. if ($newcash < 0) die(E_NOCASH);
  47. $res = mysql_query("UPDATE users SET cash='$newucash' WHERE id='$_SESSION[id]'");
  48. $res = mysql_query("UPDATE bases SET cash='$newcash' WHERE id='$_POST[base]'");
  49. }
  50. }
  51. }
  52. #Tu urywam bo reszta to same echa.
  53. ?>


Za przeproszeniem: What Is Going On?

Ten post edytował Bonzaii 18.09.2006, 15:58:35
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja ci piszę:
Cytat
Jak na moj gust, to ty w tej pętli, nadpisujesz zmienną $res.

A ty mi odpowiadasz:
Cytat
nie nadpisuje $res...

Potem pokazujesz kod tej pętli i jak wol nadpisujesz zmienna $res. Czy ty chociaz sie zastanowiles nad tym co ja ci napisalem? A moze rzuciles monetą i zalozyles, ze jak wypadnie reszka to powiesz, ze nie nadpisujesz, a ja orzel - to nadpisujesz.... no i wypadla reszka.....

Przeciez w petli masz dwie takie linijki:
  1. <?php
  2. $res = mysql_query('....');
  3. $res = mysql_query('...');
  4. ?>

Dalej twierdzisz ze nie nadpisujesz?
Go to the top of the page
+Quote Post
Bonzaii
post
Post #10





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 31.08.2006

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


Ale przecież poprzednie wartości funkcji mysql_query() są nadpisane w $res więc poprzednie się nie liczą tylko ta ostatnia... A skoro po funkcji mysql_query() chce wywołać odrazu mysql_fetch_array() to chyba nie zdążyłem jeszcze nadpisać co nie?

Ja też jestem homo-sapiens...


To co przed wywo łaniem funkcji mysql_query() mam zrobić $res = ''; ? bo teraz to już się pogubiłem (IMG:http://forum.php.pl/style_emoticons/default/blink.gif)

Ten post edytował Bonzaii 19.09.2006, 15:21:49
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ta petla ci sie raz wykona, bo zapierwszym razem nie masz nadpisania. Blad wyskakuje juz za drugim razem, gdy po pierwszym razie nadpiszesz zmienna. Zmien w tej petli nazwy tych zmiennych i bedzie po sprawie. Ciezko sprawdzic od razu jak dobrzy ludzie ci to daja do zrozumienia? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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: 28.08.2025 - 02:25