Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: podmienianie danych przez zalogowanego formularzem
Forum PHP.pl > Forum > PHP
Th0e
Witam. Chciałbym, by osoba zalogowana mogła zmienić swoje hasło, jednak nie mogę się z tym uporać. Po wysłaniu danych tworzy się nowy wiersz w tabeli, w którym jest zawarte wprowadzone nowe hasło.

Oto kod:

  1. <h3>zmień swoje hasło</h3>
  2. <form method="POST">
  3. <input type="text" name="nowehaslo">
  4. <input type="submit"></form>
  5.  
  6. <?php
  7.  
  8. $nowehaslo = $_POST['nowehaslo'];
  9.  
  10. mysql_query("INSERT INTO `uzytkownicy` (haslo)VALUES('$nowehaslo')") or die("BŁĄD");
  11.  
  12. ?>
Psajkus
Cytat
Po wysłaniu danych tworzy się nowy wiersz w tabeli...


Skoro robisz insert'a to nic dziwnego, ze sie tworzy nowy wiersz. Do edycji sluzy UPDATE
Th0e
  1. <?php
  2.  
  3. $nowehaslo = $_POST['nowehaslo'];
  4.  
  5. mysql_query("UPDATE INTO `uzytkownicy` (haslo)VALUES('$nowehaslo')") or die("BŁĄD");
  6.  
  7. ?>


takim sposobem w ogóle nie działa
ixox
np tak.
  1. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE uzytkownik='$uzytkownik' ");
Th0e
Cytat(ixox @ 2.10.2012, 15:53:46 ) *
np tak.
  1. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE uzytkownik='$uzytkownik' ");


  1. <?php
  2.  
  3. $nowehaslo = $_POST['nowehaslo'];
  4.  
  5. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE uzytkownik='$uzytkownik' ");
  6. ?>


nie działa.
netrat
Zapoznaj się z budową update http://dev.mysql.com/doc/refman/5.0/en/update.html nic dziwnego że nie zmienia Ci hasła jesli nie podajesz niczego co by mogło zidentyfikować jakiemu userowi zmieniasz hasło. Skąd SQL ma wiedzieć czy to user o id 1 czy user o id 2 czy jakiekolwiek smile.gif poza tym bardzo niebezpieczna jest Twoja konstrukcja. nigdzie nie sprawdzasz co użytkownik Ci wysyła tym postem, mozliwe że to będzie jakieś sql injection ( http://pl.wikipedia.org/wiki/SQL_injection ) czy cokolwiek wink.gif nigdy nie ufaj użytkownikom i wszystko co idzie od nich do serwera traktuj podejrzliwie bo Ci walnie jakieś drop database czy coś smile.gif
Th0e
oto screen mojej bazy:

http://gramytu.pl/uploads/imgs/pre_1349186366__screenik.jpg

oto mój plik config, którego używam do łączenia się:

  1. <?php session_start();
  2. mysql_connect("localhost","root","") or die(mysql_error()."Nie mozna polaczyc sie z baza danych. Prosze chwile odczekac i sprobowac ponownie.");
  3. mysql_select_db("konta") or die(mysql_error()."Nie mozna wybrac bazy danych.");
  4. ?>


oto indeks.php - strona dla zalogowanych

  1. <html>
  2. <head>
  3. <link rel="stylesheet" type="text/css" href="style.css" />
  4. <title>klocuchowo.cba.pl</title>
  5. <meta http-equiv="Content-type" content="text/html; charset=windows-1250" />
  6. </head>
  7. <body>
  8. <center>
  9. <div id=logo>
  10. <a href="index.php"><img src="img/logo.png"></a>
  11. </div>
  12.  
  13. <div id="pasek">
  14. <a href="index.php">Strona Główna</a>&nbsp;
  15. <a href="rejestracja.php">Rejestracja</a>&nbsp;
  16. <a href="admini.php">Administracja</a>&nbsp
  17. <a href="faq.php">FAQ</a>&nbsp;
  18. <a href="logowanie.php">logowanie</a>&nbsp;
  19. </div>
  20.  
  21. </center>
  22. <div id="tlo">
  23.  
  24.  
  25. <?php include("config.php");
  26. $nick = $_SESSION['nick'];
  27. $haslo = $_SESSION['haslo'];
  28. if ((empty($nick)) AND (empty($haslo))) {
  29. echo '<br>Nie byłeś zalogowany albo zostałeś wylogowany<br><a href="index.php">Strona Główna</a><br>';
  30. }
  31. $user = mysql_fetch_array(mysql_query("SELECT * FROM uzytkownicy WHERE `nick`='$nick' AND `haslo`='$haslo' LIMIT 1"));
  32. if (empty($user[id]) OR !isset($user[id])) {
  33. echo '<br>Nieprawidłowe logowanie.<br>';
  34. }
  35. // tresc dla zalogowanego uzytkownika
  36. echo 'Witaj '.$user[nick].' zostałeś/aś pomyślnie zalogowany/a, tutaj umieść ukryta strone tylko dla zalogowanych';
  37. echo '<br><a href="wyloguj.php">Wyloguj mnie</a>';
  38.  
  39.  
  40. ?>
  41.  
  42. <h3>zmień swoje hasło</h3>
  43. <form method="POST">
  44. <input type="text" name="nowehaslo">
  45. <input type="submit"></form>
  46.  
  47. <?php
  48.  
  49. $nowehaslo = $_POST['nowehaslo'];
  50.  
  51. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE uzytkownik='$uzytkownik' ");
  52. ?>
  53.  
  54. </div></body></html>



ktoś wie jak zrobić by podmieniało to hasło?
ixox
  1. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE nick='$_SESSION['nick']' ");


PS. A tak wogóle to po co przechowujesz hasło w Sesji i to jeszcze w sposób jawny?
Th0e
uporałem się z tym problemem

  1. <h3>zmień swoje hasło</h3>
  2. <form method="POST">
  3. <input type="text" name="nowehaslo">
  4. <input type="submit"></form>
  5.  
  6. <?php
  7.  
  8. $nowehaslo = $_POST['nowehaslo'];
  9.  
  10. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE nick='$nick' ")or die(mysql_error());
  11.  
  12. ?>


działa.

Tyle że dopiero teraz zauważyłem pewien bug - a mianowicie po zalogowaniu się i odświeżeniu strony pokazuje mi "Nieprawidłowe logowanie." i zmienia mi hasło na jedną spacje. potem gdy się zaloguje na takie konto z takim hasłem to mogę odświeżać ile chcę a i tak nie wyloguje mnie / nie zmieni hasła - czyli nic złego się nie stanie.

w poprzednim moim poście zawarłem kod indeks.php , connection.php i SS z bazy danych. Ktoś ma pomysł dlaczego tak się dzieje?
b4rt3kk
A nie widzisz czemu tak się dzieje? Masz w indexie:

  1. <?php
  2.  
  3. $nowehaslo = $_POST['nowehaslo'];
  4.  
  5. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE nick='$nick' ")or die(mysql_error());
  6.  
  7. ?>


więc zapytanie wykonuje się za KAŻDYM RAZEM gdy odpalasz index.php, jednak przed zalogowaniem zmienna $nick jest pusta, więc nie znajduje takiego rekordu w bazie do aktualizacji, po zalogowaniu w zmiennej $nick jest już prawidłowy nick z bazy, ale $nowehaslo jest ciągle puste, więc zapytanie czyści komórkę z hasłem...


Th0e
Cytat(b4rt3kk @ 3.10.2012, 09:54:30 ) *
A nie widzisz czemu tak się dzieje? Masz w indexie:

  1. <?php
  2.  
  3. $nowehaslo = $_POST['nowehaslo'];
  4.  
  5. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE nick='$nick' ")or die(mysql_error());
  6.  
  7. ?>


więc zapytanie wykonuje się za KAŻDYM RAZEM gdy odpalasz index.php, jednak przed zalogowaniem zmienna $nick jest pusta, więc nie znajduje takiego rekordu w bazie do aktualizacji, po zalogowaniu w zmiennej $nick jest już prawidłowy nick z bazy, ale $nowehaslo jest ciągle puste, więc zapytanie czyści komórkę z hasłem...


dzięki smile.gif a już miałem porzucić ten skrypt snitch.gif

Przeprawiłem to na takie coś:
  1. <h3>zmień swoje hasło</h3>
  2. <form method="POST">
  3. <input type="text" name="nowehaslo">
  4. <input type="submit"></form>
  5.  
  6. <?php
  7.  
  8. $nowehaslo = $_POST['nowehaslo'];
  9.  
  10. if(!empty ($nowehaslo)){
  11.  
  12. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE nick='$nick' ")or die(mysql_error());
  13. }
  14. else {
  15. echo "zalecane jest ustawienie trudnego hasła.";
  16. }
  17. ?>


i wszytko działa jak powinno smile.gif

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

Mam jeszcze kilka drobnych pytań. Dał by ktoś gotowe komendy na pobieranie danych z bazy do tablicy zmiennej globalnej SESSION, oraz na wysyłanie?
b4rt3kk
Przecież chyba wiesz w jaki sposób pobierać dane z bazy?

  1. $mysqli = new mysqli('host', 'user', 'pass', 'name');
  2. $result = $mysqli -> $query('SELECT * FROM tabela');
  3. while ($row = $result -> fetch_row()) print_r($row); // wyświetlenie wyników zapytania


więc nie powinno być problemem zastosowanie zwykłego podstawienia:

  1. while ($row = $result -> fetch_row()) {
  2. $_SESSION['costam'] = $row[0];
  3. $_SESSION['costam1'] = $row[1];
  4. // itd.
  5. }


Swoją drogą hasła powinny być hashowane, przy tak dziurawym skrypcie prawdopodobieństwo wycieku jest bardzo duże, a to zawsze jakieś zabezpieczenie, przy zmianie hasła przyjęło się podawanie starego hasła w celu potwierdzenia, czy np. ktoś się nie zapomniał wylogować i po nim ktoś siada i mu zmienia hasło. Przydałoby się też sprawdzanie długości nowego hasła i ustalenie jakiegoś minimum znaków (np. 5).

Spróbuj proszę zmienić hasło i w pole nowego hasła wpisać coś takiego: 1' DROP TABLE uzytkownicy --
Th0e
wpisałem w hasło 1' DROP TABLE uzytkownicy --

to po prostu ustawiło mi takie hasło , tylko że się teraz na takie konto zalogować nie mogę smile.gif
musiałem w SQL wykonać
  1. UPDATE `uzytkownicy` SET haslo='nowehaselko' WHERE nick='Th0e'


Postanowiłem uczyć się od podstaw, tutaj coś znalazlem:
http://php.pl/phppl/Wortal/Artykuly/PHP/Po...anie-informacji

jak myślicie to dobry tut? sposoby łączenia się z bazą danych preferowane przez autora tego kursu są mniej wygodne, od tych, które stosuje ja.

próbowałem wyświetlić dane takim sposobem i oczywiście że nie działa bo to mój sposób smile.gif

  1. $pokazniczek = mysql_query("SELECT `nick` FROM `uzytkownicy` WHERE nick='$nick' ")or die(mysql_error());
  2. echo "twój nick to ". $pokazniczek ."";


błąd
Kod
Resource id #5
CuteOne
Zamiast spamować na forum lepiej weź do ręki porządną książkę traktującą o PHP, MySQL i podobnych. Ewentualnie jeżeli nie masz takowej poszukaj na necie tutoriali dla początkujących.

ps. mysql_fetch_*
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.