Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Błąd z funkcją mysql_fetch_array
Forum PHP.pl > Forum > PHP
Bonzaii
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 !
sticker
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
Bonzaii
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 dry.gif
nospor
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.
piwoszeq
najprawdopodobniej wlasnie jak kolega napisal nadpisujesz $res
albo $base ?
Bonzaii
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.
nospor
to podaj caly skrypt, a glownie to co w petli masz
Bonzaii
  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?
nospor
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?
Bonzaii
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 blink.gif
nospor
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? 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.