Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]kilka pytań odnośnie poprawnej sesji
jobp33
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.11.2015

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


Witam
Tworzę prostą aplikacje z logowanie i sesją. Jedno pyatanie zaznaczyłem jako komentarze w kodzie (wydaje mi się że chyba najlepsze rozwiązanie aby wytłumaczyć o co mi chodzi)
  1. <!DOCTYPE html>
  2.  
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>strona</title>
  6. </head>
  7. <body>
  8. <div>
  9.  
  10. <center>
  11. <br>
  12. <br>
  13. <font>LOGOWANIE</font>
  14. <br>
  15. <br>
  16.  
  17. <?php
  18.  
  19. $con = mysqli_connect('localhost', 'ja, 'ja', 'baza');
  20. if(mysqli_connect_errno()){
  21. echo mysqli_connect_error();
  22. exit();
  23. }
  24.  
  25. session_start();
  26.  
  27. if(isset($_POST['zaloguj'])){
  28. $login = $_POST['login'];
  29. $haslo= $_POST['haslo'];
  30.  
  31. $log = mysqli_query($con, 'select * from uzytkownicy where login = "'.$login.'" and haslo = "'.$haslo.'" ');
  32. //$res=$mysqli->query($log);
  33.  
  34. if(mysqli_num_rows($log)==1 || ){
  35. if("'.admin.'"==1){ <------Czy w ten sposób powinno się podawać zmienne z bazy danych których wartość ma sprawdzić?
  36. $_SESSION ['imie'] = $imie;
  37. $_SESSION ['nazwisko'] = $nazwisko; <----
  38. header ('Location:admin.php');
  39. }
  40. else{
  41. $_SESSION ['imie'] = $imie;
  42. $_SESSION ['nazwisko'] = $nazwisko;
  43. header ('Location:start.php');
  44. }
  45. }else{ echo "Błędny login lub hasło";
  46. }
  47.  
  48. if(isset($_GET['Wyloguj'])){
  49. session_unregister($login);
  50. }
  51. }
  52.  
  53. ?>
  54.  
  55. <form name="logowanie" method="POST">
  56. LOGIN <input type="text" name="login" value="" size="35" /><br>
  57. HASŁO <input type="password" name="haslo" value="" size="35" /><br>
  58. <input type="submit" value="Login" name="zaloguj" />
  59.  
  60.  
  61.  
  62. </form>
  63. </center>
  64.  
  65.  
  66. </body>
  67. </html>


Odnośnie linijki 36 i 37: Czy dzięki takiej konstrukcji program przechwyci konkretne dane z bazy i przypisze je do tych zmiennych dzieki czemu będe mógł się do nich odwoływać na innych plikach tego projektu? Np. na stronie admin czy ten zapisa ma sens
  1. echo 'Witamy '.$_SESSION['imie'];
?
Której składni lepiej używać mysql czy mysqli?

Ten post edytował jobp33 14.12.2015, 16:44:41
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


O rozszerzeniu mysql zapomnij, zostało usunięte.

W linii 31 masz podatność na SQL Injection. Stosuj bindowanie parametrów. mysqli_query zwraca result http://php.net/manual/pl/class.mysqli-result.php więc musisz go jeszcze wybrać np. poprzez http://php.net/manual/pl/mysqli-result.fetch-assoc.php
header nie zadziała bo wysłałeś już tekst.
Go to the top of the page
+Quote Post
patwoj98
post
Post #3





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


Tak jak kolega wyżej napisał - header nie pójdzie. Użyj ob_start() na samym początku.
Dodawaj slashe do danych, które współgrają z bazą.
Zdecyduj się czy używasz objektów czy strukturalnego. Wszystko robisz na strukturze i nagle object w 32 się pojawił.
Między 32, a 35 nie masz nic co by Ci tego admina do 35 pobrało. Musisz użyć fetch_assoc lub fetch_array.
Mysql nie używamy, a najlepiej teraz na PDO się przenosić już (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
jobp33
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.11.2015

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


Cytat(patwoj98 @ 14.12.2015, 18:50:58 ) *
Wszystko robisz na strukturze i nagle object w 32 się pojawił.


Z różnych jakiś rzeczy ktróre czytałem na temat MySQL i MySQLi to zrozumiałem, że MySQL to działania strukturalne a MySQLi to obiektowe (i jeszcze wspomniane przez ciebie PDO) więc jeśli jest inaczej czy ktoś by mógł jeszcze rozwinąć trochę tą kwestię? Bindowanie parametrów to już jest chyba PDO?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


mysqli_* ma też odpowiedniki strukturalne.

Go to the top of the page
+Quote Post
patwoj98
post
Post #6





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


Tak jak napisał Pyton. Mysqli ma odpowiedniki strukturalne, gdzie chyba każdy różni się od mysql tylko literką i na końcu i podaniem nazwy połączenia. Ty cały czas działasz strukturalnie, aż do momentu 35 linijki gdzie się pojawia nagle jakiś object. Przerób sobie kod, aby był pod tym względem poprawny.
W samyn manualu już jest pokazane jak się łączyć i działać z mysqli objectowo. Nie wielka różnica, a lepiej wygląda i jest nowszym rozwiązaniem.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Kolejna uwaga, oddzielaj kod HTML od PHP.
Wrzuć sobie formularz do jednego pliku, a całość wysyłaj do drugiego pliku.

Będziesz miał porządek i będziesz mógł łatwiej i klarowniej sterować przepływem tego co użytkownik robi.
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


I jeszcze odnośnie bindowania parametrów: http://php.net/manual/pl/mysqli-stmt.bind-param.php
Oczywiście że jest też w mysqli.
Go to the top of the page
+Quote Post
jobp33
post
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 30.11.2015

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


Czy po takim zabiegu on przechwyci poszczególne dane do sesji? Czemu akurat te? Robię aplikacje w stylu "gieldy ogloszeń" i chcę aby każde dodane ogłoszenie było z automatu podpisane (zalogowany jan kowalski to podpis dodał jan kowalski, napis witający itp ). W którym miejscu należy sprawdzić czy konto jest admina i czy ma upranienia do komentowania?
  1. <?php
  2.  
  3. $mysqli = new mysqli('localhost', 'ja', 'ja', 'baza');
  4.  
  5. if(mysqli_connect_errno()){
  6. echo mysqli_connect_error();
  7. exit();
  8. }
  9.  
  10.  
  11. if(isset($_POST['zaloguj'])){
  12. $login = $_POST['login'];
  13. $haslo= $_POST['haslo'];
  14.  
  15. $query = "SELECT * FROM uzytkownicy WHERE login = ".$login." AND haslo = ".$haslo."";
  16.  
  17. if($stmt = $mysqli->prepare($query)){
  18.  
  19. $stmt->execute();
  20.  
  21. $stmt->bind_result($imie, $nazwisko);
  22.  
  23. while ($stmt->fetch()){
  24.  
  25. $_SESSION ['imie'] = $imie;
  26. $_SESSION ['nazwisko'] = $nazwisko;
  27.  
  28. }
  29.  
  30. }
  31. }
  32.  
  33.  
  34. if(isset($_GET['Wyloguj'])){
  35. }
  36.  
  37.  
  38. ?>
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


A zajrzałeś do dokumentacji, bo na pewno nie tak wygląda prepare i na pewno nie przekazanie zmiennych z POST bo to przed niczym nie chroni. Do tego login jest pewnie jeden więc ograniczaj zapytanie LIMIT 1. W ten sposób dostajesz 1 rekord w zwrotce który jest tym właściwym.

Ten post edytował viking 15.12.2015, 12:07:24
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: 22.09.2025 - 04:47