Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Warning z mysql_fetch_array()
Forum PHP.pl > Forum > PHP
weisu
Witam, problem polega na tym że wywala mi błąd:
Kod
<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/var/www/wet/logowanie.php</b> on line <b>36</b>


Nie mam pojęcia dlaczego. Wywołuje to strona logowania wyglądająca tak:
  1. <?php
  2.  
  3. if(isset($_POST['submit'])) {
  4.  
  5. require_once ('./admin/mysql_connect.php');
  6.  
  7. function escape_data ($data) {
  8.  
  9. global $dbc;
  10. if (ini_get('magic_quotes_qpc')) {
  11. $data = stripslashes($data);
  12. }
  13. return mysql_real_escape_string($data, $dbc);
  14. }
  15.  
  16. $message = NULL;
  17.  
  18. if (empty($_POST['username'])) {
  19. $u = FALSE;
  20. $message .= '<p>Zapomniałeś wprowadzić nazwę użytkownika!</p>';
  21. } else {
  22. $u = escape_data($_POST['username']);
  23. }
  24.  
  25. if (empty($_POST['password'])) {
  26. $p = FALSE;
  27. $message .= '<p>Zapomniałeś wprowadzić hasło!</p>';
  28. } else {
  29. $p = escape_data($_POST['password']);
  30. }
  31.  
  32. if ($u && $p) {
  33.  
  34. $query = "SELECT user_id, first_name FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  35. $result = @mysql_query($query);
  36. $row = mysql_fetch_array ($result, MYSQL_NUM);
  37.  
  38. if($row) {
  39. setcookie ('first_name', $row[1]);
  40. setcookie ('user_id', $row[0]);
  41. header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/zalogowany.php");
  42. exit();
  43.  
  44. } else {
  45. $message .= '<p>Wprowadzona przez Ciebie nazwa użytkownika i hasło nie zgadzają się z bazą.</p>';
  46. }
  47.  
  48.  
  49. } else {
  50. $message .= '<p>Spróbuj jeszcze raz.</p>';
  51. }
  52. }
  53.  
  54. $page_title = 'Logowanie';
  55. include('./inc/header.inc');
  56.  
  57. if(isset($message)) {
  58. echo '<font color="red">' . $message . '</font>';
  59. }
  60.  
  61. ?>
  62.  
  63. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
  64. <fieldset><legend>Wprowadź dane:</legend>
  65.  
  66. <p><strong>Nazwa użytkownika:</strong> <input type="text" name="username" size="10" maxlength="20" /></p>
  67. <p><strong>Hasło:</strong> <input type="password" name="password" size="20" maxlength="20" /></p>
  68. <div align="center"><input type="submit" name="submit" value="Zaloguj się" /></div>
  69.  
  70. </fieldset>
  71.  
  72. </form>
  73.  
  74. <?php
  75. include('./inc/footer.inc');
  76. ?>


i odwołująca się do pliku mysql_connect.php o takiej zawartości:

  1. <?php
  2.  
  3. DEFINE ('DB_USER', 'user');
  4. DEFINE ('DB_PASSWORD', 'haslousera');
  5. DEFINE ('DB_HOST', 'localhost');
  6. DEFINE ('DB_NAME', 'baza');
  7.  
  8. $dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
  9. mysql_select_db(DB_NAME);
  10.  
  11. ?>


Cóż, grzebałem w tym i grzebałem i wygrzebać nie potrafię gdzie jest błąd. Proszę o pomoc.
nospor
  1. <?php
  2. $result = mysql_query($query) or die(mysql_error());
  3. ?>

I juz wiesz co masz nie tak
em1X
i radzę Ci się zastanowić kilkukrotnie zanim coś takiego popełnisz:
  1. <?php
  2. setcookie ('first_name', $row[1]);
  3. setcookie ('user_id', $row[0]);
  4. ?>


mogę sobie bez problemu wyedytować cookie i ręcznie wstawić czyjkolwiek numer ID - np. 1 i zapewne będę zalogowany jako ADMIN ! albo wstawię ID 10 i będę zalogowany jako Kasia.. mogę robić na stronie co mi się podoba aaevil.gif
marcio
Cytat(em1X @ 20.05.2008, 20:21:07 ) *
i radzę Ci się zastanowić kilkukrotnie zanim coś takiego popełnisz:
  1. <?php
  2. setcookie ('first_name', $row[1]);
  3. setcookie ('user_id', $row[0]);
  4. ?>


mogę sobie bez problemu wyedytować cookie i ręcznie wstawić czyjkolwiek numer ID - np. 1 i zapewne będę zalogowany jako ADMIN ! albo wstawię ID 10 i będę zalogowany jako Kasia.. mogę robić na stronie co mi się podoba aaevil.gif

Racja smile.gif polecam autorowi sprawdzac czy dane z cookie zgadzaja sie z tymi w bazie no dawaj jakis dodatkowy kod kazdemu user'owi i bez niego nie da rady nic zmienic smile.gif
weisu
Ok, udało się. Okazało się potem że odwołuję się do row którego nie ma w tabeli, nie komentujcie. Racja z tymi ciasteczkami, coś pozmieniam winksmiley.jpg Wybaczcie, ucze sie dopiero smile.gif Jest jednak dalej kolejny problem, mianowicie, gdy już jest połączenie i gdy nazwa usera i hasło pasują (w końcu testowy user "admin" z haslem "aaa") to wywala mi błąd że nie pasuje to co podałem. Nie wiem w takim razie co może być źle, logicznie rzecz biorąc wiem tyle że w tym if'ie się sypie, ale co i dlaczego?

  1. <?php
  2. $query = "SELECT user_id, first_name FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  3. $result = @mysql_query($query);
  4.  
  5. $row = mysql_fetch_array ($result, MYSQL_NUM);
  6.  
  7. if($row) {
  8. setcookie ('first_name', $row[1]);
  9. setcookie ('user_id', $row[0]);
  10. header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/zalogowany.php");
  11. exit();
  12.  
  13. } else {
  14. $message .= '<p>Wprowadzona przez Ciebie nazwa użytkownika i hasło nie zgadzają się z bazą.</p>';
  15. }
  16. ?>
marcio
Cytat(weisu @ 20.05.2008, 23:24:26 ) *
Ok, udało się. Okazało się potem że odwołuję się do row którego nie ma w tabeli, nie komentujcie. Racja z tymi ciasteczkami, coś pozmieniam winksmiley.jpg Wybaczcie, ucze sie dopiero smile.gif Jest jednak dalej kolejny problem, mianowicie, gdy już jest połączenie i gdy nazwa usera i hasło pasują (w końcu testowy user "admin" z haslem "aaa") to wywala mi błąd że nie pasuje to co podałem. Nie wiem w takim razie co może być źle, logicznie rzecz biorąc wiem tyle że w tym if'ie się sypie, ale co i dlaczego?

  1. <?php
  2. $query = &#092;"SELECT user_id, first_name FROM users WHERE username='$u' AND password=PASSWORD('$p')\";
  3. $result = @mysql_query($query);
  4.  
  5. $row = mysql_fetch_array ($result, MYSQL_NUM);
  6.  
  7. if($row) {
  8. setcookie ('first_name', $row[1]);
  9. setcookie ('user_id', $row[0]);
  10. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/zalogowany.php\");
  11. exit();
  12.  
  13. } else {
  14. $message .= 'Wprowadzona przez Ciebie nazwa użytkownika i hasło nie zgadzają się z bazą.
  15.  
  16. ';
  17. }
  18. ?>

A gdzie ty sprawdzasz czy dane sie zgadzajka albo przynajmniej za pomoca mysql_num_rows() czy wyni zostal znalezionmy??

Jak na moje oko to cos takiego

  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = '.$u.' AND password=PASSWORD('$p')');
  3. $result = @mysql_query($query);
  4.  
  5. $row = mysql_fetch_array ($result);
  6.  
  7. if(mysql_num_rows($result) > 0) { // lub porownanie danych z forma i z bazy jesli cos wpisujesz
  8. setcookie ('first_name', $row[1]);
  9. setcookie ('user_id', $row[0]);
  10. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/zalogowany.php\");
  11. exit();
  12.  
  13. } else {
  14. $message .= 'Wprowadzona przez Ciebie nazwa użytkownika i hasło nie zgadzają się z bazą.
  15.  
  16. ';
  17. }
  18. ?>
weisu
Cytat(marcio @ 20.05.2008, 23:50:42 ) *
Jak na moje oko to cos takiego

  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = '.$u.' AND password=PASSWORD('$p')');
  3. $result = @mysql_query($query);
  4.  
  5. $row = mysql_fetch_array ($result);
  6.  
  7. if(mysql_num_rows($result) > 0) { // lub porownanie danych z forma i z bazy jesli cos wpisujesz
  8. setcookie ('first_name', $row[1]);
  9. setcookie ('user_id', $row[0]);
  10. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/zalogowany.php\");
  11. exit();
  12.  
  13. } else {
  14. $message .= 'Wprowadzona przez Ciebie nazwa użytkownika i hasło nie zgadzają się z bazą.
  15.  
  16. ';
  17. }
  18. ?>


Cóż, spróbowałem i tak, ale nic nie działa, pozatym czy przypadkiem w

  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = '.$u.' AND password=PASSWORD('$p')');
  3. ?>


nie powinno być

  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = '.$u.' AND password=PASSWORD('.$p.')');
  3. ?>


?

Cóż, kombinuje dalej. Dam głowę że okaże się ostatniecznie że błąd był wogole gdzieś indziej i na czymś innym polegał ale co tam.

_____ EDIT:

Zgłupiałem totalnie :/ aktualnie kod wygląda tak:
  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = '.$u.' AND password=PASSWORD('.$p.')');
  3. $result = @mysql_query($query);
  4.  
  5. $row = mysql_fetch_array ($result) or die(mysql_error());
  6.  
  7. if(mysql_num_rows($result) > 0) { // lub porownanie danych z forma i z bazy jesli cos wpisujesz
  8. setcookie ('first_name', $row[1]);
  9. setcookie ('user_id', $row[0]);
  10. header ("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/zalogowany.php");
  11. exit();
  12.  
  13. } else {
  14. $message .= 'Wprowadzona przez Ciebie nazwa użytkownika i hasło nie zgadzają się z bazą.';
  15.  
  16. }
  17. ?>


po wykonaniu wywala mi błąd:
Kod
<b>Warning</b>:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>/var/www/wet/logowanie.php</b> on line <b>37</b>
         Unknown column 'admin' in 'where clause'

nospor
Chlopie, ale ty sie ucz na podstawie tego ci ci dajemy.
or die(mysql_error()); ma byc przy mysql_query() a nie przy mysql_fetch_array()
Analizuj informacje ktore od nas dostajesz
piotrooo89
do mysql_fetch_array jakieś złe argumenty przekazujesz... zobacz czy mam poprawnie nazwane kolumny, czy zmienne mają wartość...
weisu
nospor - poprawilem, nic jednak nie daje :/

piotrooo89 - Cóż, może ja to źle rozumiem, mam tak:

  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = '.$u.' AND password=PASSWORD('.$p.')');
  3. ?>


Wybieram pole user_id oraz first_name z tabeli users gdzie username = $u i password to $p.. No chyba nie mogę zresztą źle teog zrozumieć. Tabela wygląda tak:

Kod
user_id username first_name last_name password


Wszystko się zgadza :/
nospor
Cytat
nospor - poprawilem, nic jednak nie daje :/
Powinien ci sie wyswietlic blad zapytania. Skoro myslql_fetch_array() pluje takim bledem to znaczy wlasnie ze zapytanie jest bledne.

Moze wiec cos źle poprawiles, albo ten blad dotyczyl innego mysql_fetch_array()
weisu
Błąd wywala dalej, ten sam: Unknown column 'admin' in 'where clause'
nospor
Cytat
Błąd wywala dalej, ten sam:
Jaki ten sam... wczesniej ci wywalalo blad o mysql_fetch_array(), a teraz ci wywala konkretny blad dla zapytania. Dzieki temu wiesz co jest źle: nie ma kolumny admin do ktorej sie odwolujesz. A odwolujesz sie do admin bo nie wziales w warunku w ciapki. tak powinno byc:
  1. <?php
  2. $query = ('SELECT user_id, first_name FROM users WHERE username = ''.$u.'' AND password=PASSWORD(''.$p.'')');
  3. ?>
piotrooo89
myślenie nie boli.... www.ling.pl i teraz wklep sobie pokolei angielskie słowa i zobacz co robisz źle...
weisu
Super, poprawiłem i działa, dzieki wielkie. Aczkowliek muszę dalej smęcić że jest kolejny problem a mianowicie wywala mi błąd:
Kod
Warning:  Cannot modify header information - headers already sent by (output started at /var/www/wet/logowanie.php:23) in /var/www/wet/logowanie.php on line 42

  Warning:  Cannot modify header information - headers already sent by (output started at /var/www/wet/logowanie.php:23) in /var/www/wet/logowanie.php on line 43

  Warning:  Cannot modify header information - headers already sent by (output started at /var/www/wet/logowanie.php:23) in /var/www/wet/logowanie.php on line 44


Tak, wiem co to znaczy ale nie rozumiem czemu ten błąd mi wywala :/

piotrooo89
z tego co pamiętam było to juz nie raz na forum... a i google u mnie działają ale nie wiem może ty masz zablokowane

http://krzysztofglaz.eu.org/2007/08/10/can...s-already-sent/

i tym razem odsyłam Cię do biblii do ewangelii Mateusza 7:7
cytat:

"szukajcie a znajdziecie"
weisu
Dzięki wielkie, już działa.
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.