Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Warning z mysql_fetch_array()
weisu
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




  1. <?php
  2. $result = mysql_query($query) or die(mysql_error());
  3. ?>

I juz wiesz co masz nie tak


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
em1X
post
Post #3





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


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

Ten post edytował em1X 20.05.2008, 19:21:47


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


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


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
weisu
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


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. ?>
Go to the top of the page
+Quote Post
marcio
post
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


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. ?>


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
weisu
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


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'



Ten post edytował weisu 20.05.2008, 23:21:48
Go to the top of the page
+Quote Post
nospor
post
Post #8





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrooo89
post
Post #9


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




do mysql_fetch_array jakieś złe argumenty przekazujesz... zobacz czy mam poprawnie nazwane kolumny, czy zmienne mają wartość...

Ten post edytował piotrooo89 21.05.2008, 08:03:48


--------------------
Go to the top of the page
+Quote Post
weisu
post
Post #10





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


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 :/
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




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()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
weisu
post
Post #12





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


Błąd wywala dalej, ten sam: Unknown column 'admin' in 'where clause'
Go to the top of the page
+Quote Post
nospor
post
Post #13





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




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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
piotrooo89
post
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




myślenie nie boli.... www.ling.pl i teraz wklep sobie pokolei angielskie słowa i zobacz co robisz źle...


--------------------
Go to the top of the page
+Quote Post
weisu
post
Post #15





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


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 :/

Go to the top of the page
+Quote Post
piotrooo89
post
Post #16


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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"

Ten post edytował piotrooo89 21.05.2008, 11:05:46


--------------------
Go to the top of the page
+Quote Post
weisu
post
Post #17





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 20.05.2008

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


Dzięki wielkie, już działa.
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 Aktualny czas: 21.08.2025 - 12:49