Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Przekazanie zmiennej do następnej strony
Forum PHP.pl > Forum > Przedszkole
kyez
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 smile.gif
john_doe
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

kyez
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ź.
Damonsson
Niemożliwe.

Daj na samym początku auth.php

  1. print_r($_POST); die;

i pokaż co pokazuje

pliki są w tym samym katalogu?
nospor
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ł wink.gif
czuwaj
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ć!
nospor
Tak, oczywiście.... nie istnieje $_POST['authusername'], to co należy zrobić? Olać.... brawo, postawa godna postępowania smile.gif
kyez
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
nospor
mysql_num_rows przyjmuje wynik mysql_query() a nie treść zapytania.....

Co do NOTICE to pomyśl chwilkę.... przeczytaj komunikat i pomyśl.
kyez
Okej. Warning rozwiązany.
Co do notica.. dopiero zaczynam naukę i testowanie mechanizmów sesji, dlatego nie rozumiem..
nospor
To nie chodzi o SESJE tylko o indeks tablicy, którego nie ma. Pomyśl.

ps: a w czasie myślenia poczytaj o ISSET()
kyez
Czyli jeśli dobrze rozumuję
  1. $_SESSION['logged'] = false;


powinno rozwiązać problem?
kallosz
NOTICE masz tutaj:
  1. if(!$_SESSION['logged']){


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

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



kallosz
jeśli ustawiasz na false to nadpisujesz zmienną.

  1. $_SESSION['logged'] = (isset($_SESSION['logged'])) ? $_SESSION['logged'] : false;
kyez
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.
Damonsson
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 };
kyez
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?
kallosz
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
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.