Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Przekazanie zmiennej do następnej strony
kyez
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Witajcie.

To moje początki z pehaczem więc proszę o wyrozumiałość. Próbuję przekazać ze strony index.php do strony auth.php dwie zmienne (authusername, password) ale oczywiście dostaję error.

auth.php

  1.  
  2. $username = $_POST['authusername'];
  3. $pass = $_POST['password'];
  4.  
  5.  
  6. require_once('/db.php');
  7.  
  8. if(!isset($username) or !isset($pass)){
  9. echo 'Nie podaleś loginu lub hasla';
  10. }//else if(){
  11. //zrobic sprawdzanie poprawnosci nicku i hasla
  12.  
  13. //}


index.php

  1. <form name="login" action="auth.php" method="post" onsubmit="return check(this)">
  2. Podaj swój login: <input type="text" name="authusername" style="margin-left: 12px;"/></br>
  3. Podaj swoje hasło: <input type ="password" name="password"/>
  4. <input type="submit" name="SubMit" value="zaloguj"/>
  5. </form>


Otrzymywany error:

  1. Notice: Undefined index: authusername in C:\Program Files\EasyPHP-12.1\www\my portable files\harc\auth.php on line 6


Dzięki, i jeszcze raz proszę o wyrozumiałość. Pozdrawiam, Przemek (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
john_doe
post
Post #2





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


to nie error lecz notice

czy testujesz to tak, że:

1. wpisujesz dane w index. php
2. klikasz w guzik
3. i masz brak post? kod na to nie wskazuje

wiadomo że od razu nie możesz uruchamiać pliku auth.php

Go to the top of the page
+Quote Post
kyez
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Właśnie tak testuje. W pliku index.php jest jeszcze mały skrypcik js ale wątpię aby to była jego wina. Też sam się dziwię dlaczego wyskakuje mi ten notice + skrypt nie działa poprawnie, bo mimo że wpisuje wartości w indexie to pokazuje mi pod noticem że nic nie wpisalem. Dzięki za szybką odpowiedź.
Go to the top of the page
+Quote Post
Damonsson
post
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Niemożliwe.

Daj na samym początku auth.php

  1. print_r($_POST); die;

i pokaż co pokazuje

pliki są w tym samym katalogu?
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
to nie error lecz notice
To Errror, lecz o mniejszym poziomie ważności. Nie wprowadzaj w błąd początkujacych, bo jeszcze nabiorą jakis złych nawyków.

Formularz może się wysyłać źle, jeśli ten formularz znajduje się w innnym formularzu - bardzo często popełniany błąd.

Cytat
pliki są w tym samym katalogu?
Przecież wchodzi do auth.php, więc raczej są... jakby nie były to by nie wchodził (IMG:style_emoticons/default/wink.gif)
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
czuwaj
post
Post #6





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 15.10.2012
Skąd: Przemyśl

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


zamień kod
  1. if(!isset($username) or !isset($pass)){

na
  1. if(!empty($username) or !empty($pass)){

lub na
  1. if(isset($username) or isset($pass)){

powinno zadziałać!
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak, oczywiście.... nie istnieje $_POST['authusername'], to co należy zrobić? Olać.... brawo, postawa godna postępowania (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kyez
post
Post #8





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Dziękuję wszystkim. Problem rozwiązał się sam.. nie mam pojęcia jak? wczoraj nie działało, dziś działa.
Ale mam coś nowego, co myślę łapie się pod ten temat. Nie mam pojęcia gdzie robię błąd:

  1. require_once('/db.php');
  2.  
  3.  
  4.  
  5.  
  6. $username = $_POST['authusername'];
  7. $pass = $_POST['password'];
  8.  
  9.  
  10.  
  11.  
  12. if(!$_SESSION['logged']){
  13. if(isset($username)){
  14. $result = "SELECT user_id FROM users WHERE user_name = '{$username}' AND user_password = '{$pass}' LIMIT 1";
  15. if(mysql_num_rows($result) > 0) {
  16. $row = mysql_fetch_assoc($result);
  17.  
  18. $_SESSION['logged'] = true;
  19. $_SESSION['user_id'] = $row['user_id'];
  20. }
  21.  
  22. }
  23. }


Warning & Notice:

  1. Notice: Undefined index: logged in C:\Program Files\EasyPHP-12.1\www\my portable files\harc\auth.php on line 24
  2.  
  3. Warning: mysql_num_rows() expects parameter 1 to be resource, string given in C:\Program Files\EasyPHP-12.1\www\my portable files\harc\auth.php on line 27
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




mysql_num_rows przyjmuje wynik mysql_query() a nie treść zapytania.....

Co do NOTICE to pomyśl chwilkę.... przeczytaj komunikat i pomyśl.
Go to the top of the page
+Quote Post
kyez
post
Post #10





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Okej. Warning rozwiązany.
Co do notica.. dopiero zaczynam naukę i testowanie mechanizmów sesji, dlatego nie rozumiem..
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To nie chodzi o SESJE tylko o indeks tablicy, którego nie ma. Pomyśl.

ps: a w czasie myślenia poczytaj o ISSET()
Go to the top of the page
+Quote Post
kyez
post
Post #12





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Czyli jeśli dobrze rozumuję
  1. $_SESSION['logged'] = false;


powinno rozwiązać problem?
Go to the top of the page
+Quote Post
kallosz
post
Post #13





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


NOTICE masz tutaj:
  1. if(!$_SESSION['logged']){


zobacz czy taka zmiana pomoże
  1. if(!isset($_SESSION['logged']) || $_SESSION['logged'] != true){

Go to the top of the page
+Quote Post
kyez
post
Post #14





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Teraz skrypt nic nie wyświetla. Ale jak na początku ustalilem $_SESSION['logged'] na false to dzialało.. tylko nie wiem czy to jest bezpieczne itd.





Ten post edytował kyez 7.03.2013, 18:09:36
Go to the top of the page
+Quote Post
kallosz
post
Post #15





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


jeśli ustawiasz na false to nadpisujesz zmienną.

  1. $_SESSION['logged'] = (isset($_SESSION['logged'])) ? $_SESSION['logged'] : false;
Go to the top of the page
+Quote Post
kyez
post
Post #16





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Dobra. Ostatecznie mój kod ma postać:
  1. require_once('/db.php');
  2. $_SESSION['logged'] = false;
  3.  
  4. if(!$_SESSION['logged']){
  5. if(isset($_POST['authusername'])){
  6. $username = $_POST['authusername'] ;
  7. $pass = $_POST['password'];
  8. $result = mysql_query("SELECT user_id FROM users WHERE user_name = '{$username}' AND user_password = '{$pass}' LIMIT 1;");
  9. if(mysql_num_rows($result) > 0) {
  10. $row = mysql_fetch_assoc($result);
  11.  
  12. $_SESSION['logged'] = true;
  13. $_SESSION['user_id'] = $row['user_id'];
  14. echo '<p>Logowanie udane!<a href="biwak.php">Zrob biwak</a></p>';
  15. }else {
  16. echo '<p>Podany login i/lub hasło jest nieprawidłowe.</p><a href="index.php">Powrót</a>';
  17. }
  18.  
  19. }
  20. }
  21.  
  22. if(!isset($_POST['authusername']) or !isset($pass = $_POST['password'];)){
  23. echo 'Nie podaleś loginu lub hasla';
  24. }


Moje pytanie brzmi tak: Jak sprawić, aby skrypt stał się bezpieczniejszy. Wiem że to co napisałem nie jest specjalnie bezpieczne i pewnie byłoby łatwo to złamać.

Pozdrawiam i dzięki za wszystkie dotychczasowe odpowiedzi.


PS Mógłbyś mi wyjaśnić konstrukcję którą zastosowałeś ? Nigdy czegos takiego nie widziałem.
Go to the top of the page
+Quote Post
Damonsson
post
Post #17





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Równie dobrze, mógłbyś wywalić całe logowanie i dać każdemu dostęp, poziom bezpieczeństwa byłby niemal identyczny.

Zastąp funkcje mysql_* na PDO, lub mysqli


  1. (isset($_SESSION['logged'])) ? $_SESSION['logged'] : false

=
  1. if(isset($_SESSION['logged'])) { $_SESSION['logged'] } else { false };
Go to the top of the page
+Quote Post
kyez
post
Post #18





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 6.09.2011

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


Cytat(Damonsson @ 7.03.2013, 18:13:34 ) *
Zastąp funkcje mysql_* na PDO, lub mysqli


To znaczy? Nie rozumiem o co chodzi. I jak niby zwiększa to bezpieczeństwo? Dlaczego ten skrypt nie jest bezpieczny?
Go to the top of the page
+Quote Post
kallosz
post
Post #19





Grupa: Zarejestrowani
Postów: 272
Pomógł: 19
Dołączył: 29.07.2006

Ostrzeżenie: (10%)
X----


http://php.net/manual/en/book.pdo.php

PDO pozwoli Ci na wykonywanie bezpieczniejszych zapytań SQL.

  1. $result = mysql_query("SELECT user_id FROM users WHERE user_name = '{$username}' AND user_password = '{$pass}' LIMIT 1;");


Tutaj ktoś może Ci nieźle namieszać a dzięki poprawnemu zastosowaniu PDO unikniesz sql injection
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: 23.08.2025 - 07:39