Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> podmienianie danych przez zalogowanego formularzem
Th0e
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


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





Grupa: Zarejestrowani
Postów: 45
Pomógł: 5
Dołączył: 26.06.2011

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


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
Go to the top of the page
+Quote Post
Th0e
post
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


  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
Go to the top of the page
+Quote Post
ixox
post
Post #4





Grupa: Zarejestrowani
Postów: 51
Pomógł: 13
Dołączył: 8.09.2012

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


np tak.
  1. mysql_query("UPDATE `uzytkownicy` SET haslo='$nowehaslo' WHERE uzytkownik='$uzytkownik' ");
Go to the top of the page
+Quote Post
Th0e
post
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


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





Grupa: Zarejestrowani
Postów: 14
Pomógł: 2
Dołączył: 1.10.2012
Skąd: Łódź

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ś (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Th0e
post
Post #7





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


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





Grupa: Zarejestrowani
Postów: 51
Pomógł: 13
Dołączył: 8.09.2012

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


  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?

Ten post edytował ixox 2.10.2012, 15:25:28
Go to the top of the page
+Quote Post
Th0e
post
Post #9





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


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





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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


Go to the top of the page
+Quote Post
Th0e
post
Post #11





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


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 (IMG:style_emoticons/default/smile.gif) a już miałem porzucić ten skrypt (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #12





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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 --
Go to the top of the page
+Quote Post
Th0e
post
Post #13





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 16.09.2012

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


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ę (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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


Ten post edytował Th0e 3.10.2012, 12:24:11
Go to the top of the page
+Quote Post
CuteOne
post
Post #14





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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_*
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 13:20