Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Sprawdzanie hasła md5.
Forum PHP.pl > Forum > Przedszkole
Gruchol
Witam,

Napisałem takie coś :
  1. <!DOCTYPE HTML>
  2. <html lang="pl">
  3. <head>
  4. <title>Sklepik</title>
  5. </head>
  6. <body>
  7.  
  8.  
  9.  
  10. <?php
  11. $db = mysqli_connect('localhost', 'root', '', 'sf');
  12.  
  13. $id = $_GET['player'];
  14. $nick = mysqli_query($db, "SELECT user_name FROM user_data WHERE user_id='$id'");
  15. $user_name = $nick->fetch_assoc()['user_name'];
  16. $grzybki = mysqli_query($db, "SELECT mushroom FROM user_data WHERE user_id='$id'");
  17. $grzybkiwyswietl = $grzybki->fetch_assoc()['mushroom'];
  18. $zloto = mysqli_query($db, "SELECT silver FROM user_data WHERE user_id='$id'");
  19. $zlotowyswietl = $zloto->fetch_assoc()['silver'];
  20.  
  21. echo "<center><h1>Witaj w sklepiku $user_name!</h1></center>";
  22. echo "<center><h3>Aktalnie posiadasz $grzybkiwyswietl grzybkow oraz $zlotowyswietl zlota</h3></center>";
  23.  
  24. ?>
  25. <center>
  26. <form method="post" action="">
  27. <b>Zresetowanie lochów(bez kluczy)</b>
  28. <br/>
  29. <b>Aby potwierdzić wpisz hasło : </b>
  30. <input type="password" name="haslo"/>
  31. <br/>
  32. <br/>
  33. <input type="submit" value="30 grzybków"/></center>
  34. </form>
  35. <?php
  36. $db = mysqli_connect('localhost', 'root', '', 'sf');
  37. $haslozbazy = mysqli_query($db, "SELECT password FROM user_data WHERE user_name='$user_name'");
  38. @$haslozsklepu = $_POST["haslo"];
  39. if($haslozbazy["haslo"] == md5($haslozsklepu)) {
  40. mysqli_query($db, "UPDATE user_data SET dungeon_1 = '0', dungeon_2 = '0', dungeon_3 = '0', dungeon_4 = '0', dungeon_5 = '0', dungeon_6 = '0', dungeon_7 = '0', dungeon_8 = '0' WHERE user_name = '$user_name'");
  41. }
  42. else {
  43. echo "Haslo jest bledne";
  44. }
  45. if($haslozesklepu == '') {
  46.  
  47. echo "Pole jest puste";
  48. }
  49. ?>
  50. </body>
  51. </html>

I mam problem z ifem który sprawdza hasło.
Gdy wywale tego ifa wszystko działa ok.
Hasło w bazie jest zahaszowane w md5.
Próbuje się przestawić z MySQL na MySQLi i nie wiem czy wszędzie zastosowałem właśnie MySQLi.
Proszę o sprawdzenie i pozdrawiam.
Damonsson
A nie przyszło Ci do głowy, np. wyświetlić obydwie (a w sumie trzy nawet) zmienne i swoim bystrym wzrokiem porównać czy są takie same?
Gruchol
Przed ifem dopisałem echo "$haslozbazy || $haslozsklepu"; i wyświetla się :
Catchable fatal error: Object of class mysqli_result could not be converted to string in E:\XAMPP\htdocs\sfgame\legal\shop.php on line 39
Damonsson
No widzisz, to już doszedłeś do wniosku, że źle pobierasz string z bazy danych.

Teraz pytasz Google o: mysqli get value

i po paru godzinach prób dopiero wracasz na forum, jak nadal sobie nie możesz poradzić z pobraniem wartości.
Gruchol
Kompletnie zapomniałem o tym.
Na początku gdy pobierałem nazwę użytkownika to zrobiłem dobrze.

Dopisałem $haslozbazy1 = $haslozbazy->fetch_assoc()['password'];
I teraz wyświetla się hasło które wpisałem w polu oraz zahaszowane hasło z bazy.
Tylko teraz jak zrobić aby hasło się haszowało przed wysłaniem go do bazy?
Damonsson
Przed wysłaniem robisz
  1. $hasloDoBazy = md5($haslo)
i dopiero pakujesz do bazy.
Gruchol
@Edit
Wszystko już działa oprócz 1.

  1. if($haslozbazy1 == $haslozsklepu1 and $grzybkiwyswietl >= '10') {
  2. mysqli_query($db, "UPDATE user_data SET dungeon_1 = '0', dungeon_2 = '0', dungeon_3 = '0', dungeon_4 = '0', dungeon_5 = '0', dungeon_6 = '0', dungeon_7 = '0', dungeon_8 = '0', mushroom=mushroom-30 WHERE user_name = '$user_name'");
  3. }
  4. else {
  5. echo "<center><font color=red>Haslo jest bledne lub nie masz wystarczajacej ilosci grzybkow.</center></font>";
  6. }


Tak wygląda if i problem jest taki, że jak się wejdzie na stronę ( nie klikając ani nie wpisując nic ) strona wyświetla treść else.
Czyli tj. formularz sam się wysyła nie podając żadnych wartości w pole hasła.
com
no bo nie masz warunku który to sprawdza, tłumaczyłem Ci to przecież ostatnio a dalej robisz ten sam bład wink.gif
Gruchol
Zamieniłem tego ifa na if(!empty($haslozbazy1 == $haslozsklepu1 and $grzybkiwyswietl >= '30')) { i nadal się sam wysyła. ( chyba o to chodziło tongue.gif )
Rysh
albo if empty albo if == zdecyduj się.

  1. $nick = mysqli_query($db, "SELECT user_name FROM user_data WHERE user_id='$id'");
  2. $user_name = $nick->fetch_assoc()['user_name'];
  3. $grzybki = mysqli_query($db, "SELECT mushroom FROM user_data WHERE user_id='$id'");
  4. $grzybkiwyswietl = $grzybki->fetch_assoc()['mushroom'];
  5. $zloto = mysqli_query($db, "SELECT silver FROM user_data WHERE user_id='$id'");
  6. $zlotowyswietl = $zloto->fetch_assoc()['silver'];

Po cholerę robisz tyle zapytań do bazy danych? Nie możesz dać:
  1. $zloto = mysqli_query($db, "SELECT user_name, mushroom, silver FROM user_data WHERE user_id='$id'");

BTW, Twój kod jest strasznie napisany - pobierasz ID użytkownika z GET, czyli z linku - modyfikując link mogę zmienić każdemu co tylko chcę. nie wspominając już o sql injection.
Gruchol
Z tego get zrezygnuje i zrobię to inaczej postem.

Co do twojego zapytania które zrobiłeś w innej linijce, zobacz, że ja wyświetlam każdą zmienną osobno i każda jest mi z osobna potrzebna.

Prosił bym jeszcze o pomoc z zablokowaniem tego aby formularz po wejściu sam się nie wysyłał.

Napisałeś, że kod jest okropny lecz zauważ że znajdujemy się w dziale przedszkole gdzie nie można się spodziewać najlepiej zabezpieczonego i zoptymalizowanego kodu a ja w php piszę od 2 dni.
Dziękuję za cenne uwagi.
untorched
  1. if(isset($_POST['submit']))
  2. {
  3. // wykonaj jesli zostaly wprowadzone dane
  4. }
  5. else
  6. {
  7. // Wyswietl formularz
  8. }
Gruchol
Nie za bardzo wiem jak to zrobić.

Próbowałem tak :

  1. if(isset($_POST['submit'])) {
  2. if($haslozbazy1 == $haslozsklepu1 and $grzybkiwyswietl >= '30') {
  3. mysqli_query($db, "UPDATE user_data SET dungeon_1 = '0', dungeon_2 = '0', dungeon_3 = '0', dungeon_4 = '0', dungeon_5 = '0', dungeon_6 = '0', dungeon_7 = '0', dungeon_8 = '0', mushroom=mushroom-30 WHERE user_name = '$user_name'");
  4. }
  5. else {
  6. echo "<center><font color=red>Haslo jest bledne lub nie masz wystarczajacej ilosci grzybkow.</center></font>";
  7. }
  8. }

Jednak teraz to kompletnie nic nie działa.
com
tak jak masz jest ok jednakże zmień
  1. <input type="submit" value="30 grzybków"/>

na
  1. <input type="submit" name="submit" value="30 grzybków"/>
Gruchol
Zrobiłem to tak :

  1. if(!empty($_POST["haslo"]))
  2. {
  3. $db = mysqli_connect('localhost', 'root', '', 'sf');
  4. $haslozbazy = mysqli_query($db, "SELECT password FROM user_data WHERE user_name='$user_name'");
  5. $haslozbazy1 = $haslozbazy->fetch_assoc()['password'];
  6. @$haslozsklepu = $_POST["haslo"];
  7. $haslozsklepu1 = md5($haslozsklepu);
  8. //echo "<center><font color=red>Haslo jest bledne lub nie masz wystarczajacej ilosci grzybkow.</center></font>";
  9. if($haslozbazy1 == $haslozsklepu1 and $grzybkiwyswietl >= '30') {
  10. mysqli_query($db, "UPDATE user_data SET dungeon_1 = '0', dungeon_2 = '0', dungeon_3 = '0', dungeon_4 = '0', dungeon_5 = '0', dungeon_6 = '0', dungeon_7 = '0', dungeon_8 = '0', mushroom=mushroom-30 WHERE user_name = '$user_name'");
  11. }
  12. }

Jednak cały czas dzieje się to samo.
Jak kliknę w 1 wysyłają się wszystkie.
Takich opcji jak wkleiłem up. mam z 4 i w każdej mam tak samo zastosowane if(!empty
com
no bo w każdym formularzu masz taki same imputy, wiec spełniają sie wszystkie warunki a wysyła sie tylko jeden, sory kolego ale bez podstaw na ten temat nie zrobisz nic, poczytaj trochę a potem zabierz się za pisanie tego i nie pisz do mnie na pw tylko tutaj wink.gif

Masz straszny balagan w tym kodzie jak nie potrafisz sobie poradzić, żeby działało kilka formularzy w 1 pliku to rozłóż to na więcej, a najlepiej po prostu pozmieniaj pola name w tych formach na unikatowe dla każdego, no i skoro wszystkie formularze wyświetlasz od razu to poco przeplatasz miedzy nimi te kody, w 1 miejscu je odbieraj a potem wyświetlaj je wszystkie, bo masz straszny bałagan i sam się w tym potem gubisz 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.