Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z formularzem sprawdzającym poprawność danych
Forum PHP.pl > Forum > Przedszkole
specx
Witam, jako że jest to mój pierwszy post, chciałem wszystkich przywitać.

Teraz co do tematu, mam problem z formularzem, który ma sprawdzać poprawność wpisanych danych na stronie z danymi w bazie danych.

Działanie zamierzone: Wprowadzone dane w formularzu:
*account
*password
*username
są sprawdzane pod względem poprawności w kolejności:
1. sprawdza czy hasło w bazie jest równe temu z formularza
2. sprawdza czy dany player ma ten sam numer acccount co podany w formularzu
3. dalsza część skryptu która działa poprawnie bez tych dwóch warunków wyżej.
Ciągle uzyskuje komunikat: "Incorrect password", nawed gdy dane w formularzu są poprawne.
Jestem amatorem i skrypt robię amatorsko za pomocą prób i błędów.
Proszę o pomoc.

  1. <?PHP
  2. echo'<br>';
  3. if ($_POST['submit'])
  4. {
  5.  
  6. $acc = (mysql_real_escape_string($_POST['accounts']));
  7. $pass = (mysql_real_escape_string($_POST['password']));
  8. $user = (mysql_real_escape_string($_POST['username']));
  9.  
  10.  
  11. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'");
  12. if (/*mysql_fetch_assoc*/($wynik) == ($pass)) //sprawdza czy hasło w bazie jest równe temu z formularza
  13. {
  14.  
  15. $wynik2 = mysql_query("SELECT account_id FROM player WHERE id = '$user'"); //sprawdza czy dany player ma ten sam numer acccount co podany w formularzu
  16. if (/*mysql_fetch_assoc*/($wynik2) == ($acc))
  17. {
  18.  
  19.  
  20. if ($user) //właściwa część skryptu, która działa gdy nie ma sprawdzenia up
  21. {
  22.  
  23.  
  24.  
  25. $check = mysql_query("SELECT name FROM players WHERE name = '$user'");
  26. $row99 = mysql_fetch_assoc($check);
  27.  
  28. if (mysql_num_rows($check) >= 1)
  29. {
  30.  
  31. $quer = mysql_query("SELECT points FROM players WHERE name = '$user'");
  32. while ($rowwe = mysql_fetch_assoc($quer)) {
  33. $row9 = $rowwe['points'];
  34. }
  35. $valor = $_SESSION['coste'];
  36.  
  37. if ($row9 >= $valor)
  38. {
  39. $idmg = $_SESSION['ider'];
  40. $idplayer = mysql_query("SELECT * FROM players WHERE name = '$user'");
  41. while ( $row1 = mysql_fetch_assoc($idplayer))
  42. {
  43. $idpp = $row1['id'];
  44. }
  45.  
  46. $pod = mysql_query("SELECT MAX(sid) AS maxsid FROM player_items WHERE player_id = '$idpp'");
  47. while( $ped = mysql_fetch_assoc($pod))
  48. {
  49. $pud = $ped['maxsid'];
  50. $pud++;
  51. }
  52.  
  53. $dar = mysql_query("INSERT INTO player_items VALUES('".$idpp."', '".$pud."', '10', '".$idmg."', '1', '')");
  54. $lose = mysql_query("UPDATE players SET points = $row9 - $valor WHERE name = '$user'");
  55. echo 'You succesfully bought your item! it was now added to your backpack, have fun!';
  56. }
  57.  
  58. else
  59. {
  60.  
  61. $querry = mysql_query("SELECT points FROM players WHERE name = '$user'");
  62. while ($rowe = mysql_fetch_assoc($querry))
  63.  
  64. {
  65. $row19 = $rowe['points'];
  66. echo 'You need more points, you have <b>'.$row19.'</b>';
  67. }
  68.  
  69. }
  70.  
  71. }
  72. else
  73. {
  74. echo '<b> User doesnt exists </b>';
  75. }
  76. }
  77.  
  78. }
  79. else
  80. {
  81. echo "On this account doesn't have this player<br />"; //jeżeli na koncie nie ma playera podanego w formularzu
  82. }
  83.  
  84. }
  85. else
  86. {
  87. echo "Incorrect password<br />"; //jeżeli błędne hasło
  88. }
  89.  
  90. }
  91. ?>
b4rt3kk
Czy hasło zapisane w bazie jest w jakiś sposób hashowane? Czy na żywo wpisane do bazy? W pierwszym przypadku ciąg odpowiadający hasłu musi zostać w ten sam sposób zahashowany przed porównaniem z tym zapisanym w bazie.
specx
hasło jest wpisane na żywo, takim zapytaniem normalnie uzyskuje poprawne hasło:
  1. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'")
  2. or die('Błąd zapytania');
  3.  
  4. if(mysql_num_rows($wynik) > 0) {
  5. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  6. echo "<table cellpadding=\"2\" border=1>";
  7. while($r = mysql_fetch_assoc($wynik)) {
  8. echo "<tr>";
  9.  
  10. echo "<td>".$r['password']."</td>";
  11.  
  12. echo "</tr>";
  13. }
  14. echo "</table>";
  15. }

więc nie mam pojęcia co jest nie tak.
b4rt3kk
Wyświetl sobie czy aby na pewno jest tak jak sądzisz:

  1. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'");
  2. // if (/*mysql_fetch_assoc*/($wynik) == ($pass)) //sprawdza czy hasło w bazie jest równe temu z formularza
  3. // zamiast if daj echo
  4. echo $wynik . '=' . $pass;
  5.  
  6. $wynik2 = mysql_query("SELECT account_id FROM player WHERE id = '$user'"); //sprawdza czy dany player ma ten sam numer acccount co podany w formularzu
  7. // if (/*mysql_fetch_assoc*/($wynik2) == ($acc))
  8. // zamiast if daj echo
  9. echo $wynik2 . '=' . $acc;


jeśli ciągi będą identyczne wtedy się należy zastanowić gdzie jest błąd.
specx
Dostałem taki wynik:
  1. Resource id #18=hasło=201091

Nie wiem czy dobrze to dodałem do skryptu:


  1. echo'<br>';
  2. if ($_POST['submit'])
  3. {
  4.  
  5. $acc = (mysql_real_escape_string($_POST['accounts']));
  6. $pass = (mysql_real_escape_string($_POST['password']));
  7. $user = (mysql_real_escape_string($_POST['username']));
  8.  
  9.  
  10. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'");
  11. // if (/*mysql_fetch_assoc*/($wynik) == ($pass)) //sprawdza czy hasło w bazie jest równe temu z formularza
  12. // zamiast if daj echo
  13. echo $wynik . '=' . $pass;
  14.  
  15. $wynik2 = mysql_query("SELECT account_id FROM player WHERE id = '$user'"); //sprawdza czy dany player ma ten sam numer acccount co podany w formularzu
  16. // if (/*mysql_fetch_assoc*/($wynik2) == ($acc))
  17. // zamiast if daj echo
  18. echo $wynik2 . '=' . $acc;
  19. /*
  20. {
  21.  
  22.  
  23. if ($user) //właściwa część skryptu, która działa gdy nie ma sprawdzenia up
  24. {
  25.  
  26.  
  27.  
  28. $check = mysql_query("SELECT name FROM players WHERE name = '$user'");
  29. $row99 = mysql_fetch_assoc($check);
  30.  
  31. if (mysql_num_rows($check) >= 1)
  32. {
  33.  
  34. $quer = mysql_query("SELECT points FROM players WHERE name = '$user'");
  35. while ($rowwe = mysql_fetch_assoc($quer)) {
  36. $row9 = $rowwe['points'];
  37. }
  38. $valor = $_SESSION['coste'];
  39.  
  40. if ($row9 >= $valor)
  41. {
  42. $idmg = $_SESSION['ider'];
  43. $idplayer = mysql_query("SELECT * FROM players WHERE name = '$user'");
  44. while ( $row1 = mysql_fetch_assoc($idplayer))
  45. {
  46. $idpp = $row1['id'];
  47. }
  48.  
  49. $pod = mysql_query("SELECT MAX(sid) AS maxsid FROM player_items WHERE player_id = '$idpp'");
  50. while( $ped = mysql_fetch_assoc($pod))
  51. {
  52. $pud = $ped['maxsid'];
  53. $pud++;
  54. }
  55.  
  56. $dar = mysql_query("INSERT INTO player_items VALUES('".$idpp."', '".$pud."', '10', '".$idmg."', '1', '')");
  57. $lose = mysql_query("UPDATE players SET points = $row9 - $valor WHERE name = '$user'");
  58. echo 'You succesfully bought your item! it was now added to your backpack, have fun!';
  59. }
  60.  
  61. else
  62. {
  63.  
  64. $querry = mysql_query("SELECT points FROM players WHERE name = '$user'");
  65. while ($rowe = mysql_fetch_assoc($querry))
  66.  
  67. {
  68. $row19 = $rowe['points'];
  69. echo 'You need more points, you have <b>'.$row19.'</b>';
  70. }
  71.  
  72. }
  73.  
  74. }
  75. else
  76. {
  77. echo '<b> User doesnt exists </b>';
  78. }
  79. }
  80.  
  81. }
  82.  
  83. else
  84. {
  85. echo "On this account doesn't have this player<br />"; //jeżeli na koncie nie ma playera podanego w formularzu
  86. }
  87.  
  88. }
  89. else
  90. {
  91. echo "Incorrect password<br />"; //jeżeli błędne hasło
  92. }
  93. */
  94. }



EDIT

Mała literówka była w zapytaniu:
Resource id #18=hasło11Resource id #19=201091

Nadal nie wiem co jest nie tak ;/
b4rt3kk
Nie wiem czy to tylko takie uproszczenie w Twoim skrypcie, ale brakuje mi tu przetwarzania wyników zapytania:

  1. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'");
  2. $row = mysql_fetch_row($wynik);
  3.  
  4. echo 'pobrane hasło z bazy: ' . $row[0];


ale z tego co widzę wynik zapytania jest pusty, więc to chyba to.
specx
Miałeś racje, gdy dałem row, o tak:
  1. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'");
  2. // if (/*mysql_fetch_assoc*/($wynik) == ($pass)) //sprawdza czy hasło w bazie jest równe temu z formularza
  3. // zamiast if daj echo
  4. $row = mysql_fetch_row($wynik);
  5. //echo 'pobrane hasło z bazy: ' . $row[0];
  6. echo $row[0] . '=' . $pass;
  7. echo '</br>';
  8.  
  9. $wynik2 = mysql_query("SELECT account_id FROM players WHERE name = '$user'"); //sprawdza czy dany player ma ten sam numer acccount co podany w formularzu
  10. // if (/*mysql_fetch_assoc*/($wynik2) == ($acc))
  11. // zamiast if daj echo
  12. $row1 = mysql_fetch_row($wynik2);
  13. //echo 'pobrane acc z bazy: ' . $row1[0];
  14. echo $row1[0] . '=' . $acc;


teraz wyniki zapytań są identyczne, teraz poprawie całość i dam tutaj znać czy wszystko ok.
x=x
y=y

EDIT

Wszystko działa poprawnie, zrobiłem tak, może komuś to się przyda w podobnej sytuacji i nie będzie musiał zakładać nowego tematu:

  1. $wynik = mysql_query("SELECT password FROM accounts WHERE id = '$acc'");
  2. $row22 = mysql_fetch_array($wynik, MYSQL_ASSOC);
  3.  
  4. if ($row22[password] == $pass) //sprawdza czy hasło w bazie jest równe temu z formularza
  5. {
  6.  
  7.  
  8. //
  9. $wynik2 = mysql_query("SELECT account_id FROM players WHERE name = '$user'"); //sprawdza czy dany player ma ten sam numer acccount co podany w formularzu
  10. $row23 = mysql_fetch_array($wynik2, MYSQL_ASSOC);
  11. if ($row23[account_id] == $acc)
  12. {

PS. zmieniłem:

na:
  1. mysql_fetch_array($wynik, MYSQL_ASSOC);

bo wcześniej nie chciało iść.

Oczywiście podziękowania za pomoc
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.