Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomóżcie - rejestracja i MySQL
Forum PHP.pl > Forum > Przedszkole
andaron
Hejka.
Właśnie robie z kolegami stronę o naszej mmorpg jednak gdy wklejam skrypt rejestracji , po uzupełnieniu danych klikne zarejestruj wyświetla się komunikat o błędzie :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /register.php on line 80
Wystapil blad
Stronka jest nowa bo ma dopiero 3 dni , jednak nikt z naszej ekipy nie wie gdzie leży błąd podczas łączenia z bazą.
Serwer mamy na home.pl .
Oto skrypt łączenia z mysql.
  1. <?
  2. define('DB_HOST','localhost');
  3. define('DB_USER','knighters');
  4. define('DB_PASS','hasłodobazy');
  5. define('DB_DB','knighters');
  6.  
  7. $connect = mysql_connect(DB_HOST, DB_USER, DB_PASS)
  8. or die('Nie uda^3o po^3^1czyc si^e z baz^1 danych. '.mysql_error());
  9.  
  10. mysql_select_db(DB_DB,$connect)
  11. ?>


Czy aby na pewno skrypt jest dobrze napisany ?
Oto skrypt rejestracji:

  1. <?php
  2.  
  3. require('conn.php');
  4.  
  5. if (isset($_POST['konto']) and isset($_POST['password']) and isset($_POST['password2']))
  6.  
  7. {
  8.  
  9. if ($_POST['password']==$_POST['password2'])
  10.  
  11. {
  12.  
  13. $konto = mysql_real_escape_string (trim($_POST['konto']));
  14.  
  15. $password = sha1(md5(mysql_real_escape_string (trim($_POST['password']))));
  16.  
  17. $ile =mysql_query("SELECT * FROM `user` WHERE login = '$konto'");
  18.  
  19. $ile = mysql_num_rows($ile);
  20.  
  21. if ($ile==0) {
  22.  
  23. $zapytanie="INSERT INTO user (login,password,online) VALUES('$konto','$password', '0')";
  24.  
  25. mysql_query($zapytanie) or die("Wyst^1pi^3 b^3^1d" );
  26.  
  27. echo('Konto '.$konto.' zostalo utworzone');
  28. header('http://www.lo2klan.yoyo.pl/index.php?id=login');
  29.  
  30.  
  31.  
  32. }
  33.  
  34. else
  35.  
  36. {
  37.  
  38. echo("Taki uzytkownik juz istnieje. Kliknij wstecz aby zarejestrowac sie ponownie");
  39.  
  40. }
  41.  
  42. }
  43.  
  44. else echo ("Podane hasla nie zgadzaja sie");
  45.  
  46. }
  47.  
  48. else{
  49.  
  50. ?>
  51.  
  52. <html>
  53.  
  54. <body>
  55.  
  56. <h1>Dodaj nowego uzytkow
  57.  
  58. nika</h1>
  59.  
  60. <form action="register.php" method="post">
  61.  
  62. <strong>Nazwa konta:</strong><input name="konto" type="text" value="" /><br>
  63.  
  64. <strong>Haslo:</strong><input name="password" type="password" value="" /><br>
  65.  
  66. <strong>Powtorz haslo:</strong><input name="password2" type="password" value="" /><br>
  67.  
  68. <input type="submit" value="Zarejestruj" />
  69.  
  70. </form>
  71.  
  72. </body>
  73.  
  74. </html>
  75.  
  76. <?php
  77.  
  78. }
  79.  
  80.  
  81.  
  82. ?>


Stronka to www.knighters.home.pl , jeżeli sami chcecie zobaczyć na czym polega błąd kliknijcie w zarejestruj się i sami zobaczcie sciana.gif
Oczywiście jak poprawnie będzie już łączyło z bazą , schemat logowania ,, poukładam '' .
Gdzie popełniłem błąd ?!
Armstrong
echo $ile; po zapytaniu, hmm a uchwytu połączenia czasem nie ma być? przy mysql_query() (dawno nie używałem)

A tak w ogóle:
  1. $ile =mysql_query("SELECT * FROM `user` WHERE login = '$konto'")
  2. or die("Zapytanie niepoprawne");
Pilsener
Cytat
aby na pewno skrypt jest dobrze napisany?
- a skąd, typowa, amatorska prowizorka. Chcesz mieć dobry skrypt to zapłać profesjonaliście lub sam go napisz.

A Twój problem można rozwiązać używając następującego kodu przy obsłudze bazy danych:
  1. if(mysql_query($zapytanie_do_bazy)){
  2. echo 'sukces';
  3. }else{
  4. echo 'blad: '.mysql_error();
  5. }
- w ten sposób gdy zapytanie jest niepoprawne uzyskasz komunikat błędu.
PawelBah
Sek w tym, że zapytanie jest poprawne. Z ciekawości sam wykonałem mini skrypt do przetestowania innych zapytań i za każdym razem otrzymywałem podobny błąd, a że za bardzo szkoda mi czasu na czyny społeczne proponuje Ci abyście się przerzucili na mysqli :

  1. <?
  2. define('DB_HOST','localhost');
  3. define('DB_USER','knighters');
  4. define('DB_PASS','hasłodobazy');
  5. define('DB_DB','knighters');
  6.  
  7. $connect = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_DB)
  8. or die('Błąd ble ble'.mysqli_error());
  9. ?>


  1. <?php
  2. $z = "SELECT * FORM tabela";
  3. $r = mysqli_query($bd, $z);
  4. $n = mysqli_num_rows($r);
  5. ?>


Reszta analogicznie.

PS
Z czystej ciekawości: dlaczego używacie najpierw używacie MD5, a później SHA-1? Po co aż dwa? Jaki jest sens? Nie lepiej jest użyć wbudowanej funkcji MySQL (PASSWORD())? Dobrze jest uświadomić sobie skale zagrożeń, a mi się wydaje, że jedyny powód aby włamać się na waszą stronę jest taki, aby usunąć ten padający śnieg.
nospor
Cytat
Sek w tym, że zapytanie jest poprawne.
Komunikat bledu jasno wskazuje, ze wykonanie zapytania się nie powiodło. Wiec za przeproszeniem nie gadaj glupot tylko poczekaj na wynik mysql_error(), który juz tu nie raz zaproponowano.
PawelBah
Cytat(nospor @ 4.02.2010, 13:13:24 ) *
Komunikat bledu jasno wskazuje, ze wykonanie zapytania się nie powiodło. Wiec za przeproszeniem nie gadaj glupot tylko poczekaj na wynik mysql_error(), który juz tu nie raz zaproponowano.


To, że wykonanie zapytania się nie powiodło wcale nie oznacza, że zapytanie było niepoprawne.
nospor
No i przeciez ja tego nie powiedzialem... Powiedzialem ze wykonanie zapytania sie nie powiodlo i mysql_error() prawde ci powie... sam mnie cytujesz a nie wiesz co cytujesz,
PawelBah
Cytat(nospor @ 4.02.2010, 20:37:31 ) *
No i przeciez ja tego nie powiedzialem... Powiedzialem ze wykonanie zapytania sie nie powiodlo i mysql_error() prawde ci powie... sam mnie cytujesz a nie wiesz co cytujesz,



Może przeanalizuj powoli i na chłodno co tutaj zostało napisane, a później zastanów się czy czytając za pierwszym razem czegoś nie przeoczyłeś.

Skracając:

kolega miał problem. Zerkłem na kod i fragment dotyczący zapytania wydawał się poprawny, a więc odpaliłem edytor, zmontowałem na szybko tabele, przeklepałem kod, zmieniłem zapytanie na najprostsze z możliwych (SELECT * FROM tabela), odpaliłem i nadal błąd był ten sam, a jako, że nie używam funkcji z rodziny mysql... tylko mysqli, a więc dodałem wszędzie i na końcu żeby czuć się swobodniej mimo, że do dziś dnia nie sądziłem, że miedzy tymi rodzinami są jakieś wielkie różnice, a jednak okazało się koniec końców, że a jednak! To samo wyrażenie przy wykorzystaniu mysqli działa bez zarzutu. - dlatego podkreśliłem, że w samym zapytaniu błędów nie ma ... i zaczęła się Twoja historia.
nospor
A ja ci grzecznie wyjasniam ze nie trzeba zmieniac na mysqli bo na dzien dobry wystarczy zwykly mysql_error(). Moze autor ma blad podczas wybierania bazy danych - nie sprawdza tego wiec nie wiemy. Moze ma blad w nazwie kolumny, moze masa innych rzeczy a wystarczy zrobil glupie mysql_error a nie zaraz zmieniac liba... rozumiesz prostotę rozwiazania?
PawelBah
Rozumiem, ale zmiana i tak byłaby krokiem wprzód.
nospor
No to trzeba bylo od razu zaproponowac PDO - jeszcze lepszy krok w przód smile.gif
Co nie zmienia faktu, ze dobrze by bylo najpierw poznac przyczyne problemu przy uzyciu mysql_error() gdyż może ona naprawdę istnieć. W zasadzie na kazde 100 przypadkow na forum az 100 rozwiązane zostalo przez mysql_error() . smile.gif
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.