[PHP]Prosty panel rejestracji....

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

[PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

Witam, jestem tutaj nowy. Od niedawna uczę się PHP i zaczynam pisac proste skrypty. Niedawno zabralem sie za pisanie prostego panelu rejestracji i mam kłopot, otóż rejestracja się udaje aczkolwiek z logowaniem jest problem. Po wpisaniu loginu (tego poprawnego) pokazuje się napis

Kod: Zaznacz cały

Notice: Undefined variable: pass in C:\Program Files\Apache Group\Apache2\htdocs\rejestracja\log_proc.php on line 17
zle dane
a oto kod:

regist_dane.php

Kod: Zaznacz cały

<html>
<head>
<title>Rejestracja</title>
<center>
<body bgcolor="black" font color="white">
<form action="regist_proc.php" method="post">
<font color="white">LOGIN*: </font><input type="text" name="login_add"><br>
<font color="white">HASLO*: </font><input type="password" name="pass_add"><br>
<font color="white">Wiek*: </font><input type="text" name="wiek_add" ><br>
<font color="white">GG: </font><input type="text" name="gg_add" ><br>
<font color="white">E-mail*: </font> <input align="center" type="text" name="email_add"><br><br>
<font color="white">INFO: </font> <br><textarea rows="5" cols="50" name="info_add">Tutaj znajdowac moga sie, np: zainteresowania, miasto itp.</textarea><br>
<input type="reset" value="Wyczysc"><input type="submit" value="Register"></form>
<br><br>
<font color="white">Pola oznaczone "<b>*</b>" sa obowiazkowe !!</font>
</center>
</body>
</head>
</html>
regist_proc.php

Kod: Zaznacz cały

<html>
<head>
<title>Rejestracja</title>
<center>
<body bgcolor="black">
<font color="white">
<?php

$login_add = $_POST['login_add']; //*
$pass_add = $_POST['pass_add'];   //*
$wiek_add = $_POST['wiek_add'];   //*
$gg_add = $_POST['gg_add'];
$email_add = $_POST['email_add'];  //*
$info_add = $_POST['info_add'];


$str_login = strlen($login_add);
$str_pass = strlen($pass_add);
$str_wiek = strlen($wiek_add);
$str_gg = strlen($gg_add);
$str_email = strlen($email_add);
$str_info = strlen($info_add);

$file = ("users/$login_add.php");
if(file_exists($file)):
echo ("Taki login juz istnieje...");
elseif (($str_login == 0) || ($str_pass == 0) || ($str_wiek == 0) || ($str_email == 0)):
echo ("Nie wypelniles pol zaznaczonych * !!");
elseif (!file_exists($file)):
$ciag = "<?\n\$login  =  \"$login_add\";\n\$pass =  \"$pass_add\";\n\$email=  \"$email_add\";\n  ?> ";
$zapis = str_replace("$ "," $",$ciag);
$open = fopen("$file","w+");
fputs($open,"$zapis");
fclose($open);
echo ("Zarejestrowany zostales pomyslnie!");
else:
echo ("zle dane !");
endif;
?>
</body>
</head>
</html>
log_dane.php

Kod: Zaznacz cały

<html>
<head>
<title>Logowanie</title>
<center>

<body bgcolor="black" font color="white">

<form action="log_proc.php" method="post">
<font color="white">LOGIN*: </font><input type="text" name="login_check"><br>
<font color="white">HASLO*: </font><input type="password" name="pass_check"><br>
<input type="reset" value="Wyczysc"><input type="submit" value="Loguj"></form>
<br><br>

</center>
</body>
</head>
</html>
log_proc.php

Kod: Zaznacz cały

<html>
<head>
<title>Logowanie</title>

<center>
<?php
$login_check = $_POST['login_check'];
$pass_check = $_POST['pass_check'];

$file = ("users/$login_check.php");
if (!file_exists($file)):
echo('Podales zly login');
elseif (file_exists($file)):
include($file);
              if($pass==$pass_check):
              echo ("zalogowany jestes!");
              else:
              echo("zle dane");
              endif;

               
endif;
?>
</center>
</body>
</head>
</html>
Z góry dziękuję za pomoc.
koziolek
Przelotem
Przelotem
Posty: 387
Rejestracja: sob paź 21, 2006 10:07 pm
Kontakt:

Re: [PHP]Prosty panel rejestracji....

Post autor: koziolek »

podpowiem:

weź ostatni listing swojego kodu i sprawdź gdzie zdefiniowałeś zmienną $pass


ps. przeczytaj dokładnie opis błędu :)
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

ona jest zdefiniowana w pliku gdzie powinien byc user. Natomiast wlasnie w tym tkwi problem - nie mam pojecia co z tym zrobic :) Jak ja mam zdefiniowac w tym kodzie to niestety nie wiem :( Prosilbym o dokładniejszą podpowiedź :)
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: 123456 »

[php]<?php
include($file);
if($pass==$pass_check)
?>[/php]
To jest dobrze. Parser nie widzi zmiennej wiec trzeba popatrzeć jak wygląda plik z hasłem.
[php]<?php
$ciag = "<?\n\$login = \"$login_add\";\n\$pass = \"$pass_add\";\n\$email= \"$email_add\";\n ?> ";
?>[/php]
Czy Twój serwer ma włączoną obsługę short tag'ów?
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

co to jest short tag jak mozna wiedziec ? (siedze w php jakies 1,5 tygodnia i nie jestem jeszcze w pelni obeznany) :) ale raczej obsluguje bo podobny skrypt sciagalem z neta i dzialalo.
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: 123456 »

<?php - full tag
<? - short tag

Skoro masz tak dlugą stycznosc z php to pewnie nie za duzo rzeczy zmieniles w pliku php.ini. Domyslnie te krotkie znaczniki sa wylaczone i pewnie dlatego nie dziala (tak tylko typuje)

Zmien na pelen tag w tym miejscu, gdzie generujesz zawartosc pliku z haslem:
[php]<?php
$ciag = "<?php\n\$login = \"$login_add\";\n\$pass = \"$pass_add\";\n\$email=
\"$email_add\";\n ?> ";
?>[/php]
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

No nie moge ! Problem wlasnie byl ukryty w tagu hehehe ;) Musze powiedziec ze do bystrych nie naleze ale coz skad mialem wiedziec ;) Dziekuje bardzo za pomoc na przyszlosc zapamietam :)

EDIT:

Mam kolejny problem :) Zupelnie nie wiem jak sie zabrac do pisania skryptu aby zalogowana osoba mogla poruszac sie swobodnie po stronie. Prosze o pomoc :)
marimarek
Nowy
Nowy
Posty: 29
Rejestracja: ndz mar 18, 2007 12:30 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: marimarek »

HaWaJ pisze:No nie moge ! Problem wlasnie byl ukryty w tagu hehehe ;) Musze powiedziec ze do bystrych nie naleze ale coz skad mialem wiedziec ;) Dziekuje bardzo za pomoc na przyszlosc zapamietam :)

EDIT:

Mam kolejny problem :) Zupelnie nie wiem jak sie zabrac do pisania skryptu aby zalogowana osoba mogla poruszac sie swobodnie po stronie. Prosze o pomoc :)
Nie wiem czy to dobry sposób, ale ja z niego korzystam i mi dobrze służy, logowanie oparłbym na sesjach, poczytaj trochę o tym. :)
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

W sumie w sesjach sa globalne ale na pcozatek warto sprobowac ;) Pozniej sie bede bawil cookies.

EDIT:

a wiec troche o nich poczytalem....i niewiem jak dokladnei zarejestrowac aby na innych podstronach to dzialalo....cos tam probowalem:

log.proc.php

[php]
<?php
$login_check = $_POST['login_check'];
$pass_check = $_POST['pass_check'];

session_start();
session_register($log);
$file = ("users/$login_check.php");
if (!file_exists($file)):
echo('Podales zly login');
elseif (file_exists($file)):
include($file);
if($login==$login_check && $pass==$pass_check):
echo ("Zalogowales sie <b>".$login."</b>!<br><br><br>");
echo '<a href="index.php">Strona Glowna</a>';
else:
echo("Zly login lub haslo");
endif;

endif;
?>[/php]

index.php

[php]<?php
session_start();

$login_check = $_SESSION['log'];

IF (!isset($_SESSION['log'])):
echo("Nie masz uprawnien do ogladania tej strony...");
ELSE:
echo ("Panie ".$login_check." jestes zalogowany :)");
endif;

?>[/php]
marimarek
Nowy
Nowy
Posty: 29
Rejestracja: ndz mar 18, 2007 12:30 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: marimarek »

Nie potrafię Ci powiedzieć co masz źle w Twoim kodzie, ale mogę ci powiedzieć jak ja bym to zrobił.
[php]<?php
if (tutaj jakaś warunek sprawdzający, czy dane podane w formularzu i w bazie danych, bądź gdzie indziej się zgadzają)
$_session['login']=$_POST['login'];
?>[/php]
Później po przejściu na następną stronę wystarczy sprawdzić warunek:
[php]<?php
if ($_session['login'] != NULL)
echo "Użytkownik $_session['login'] jest zalogowany";
else echo"Użytkownik jest wylogowany";
?>[/php]
Podejrzewam, że formularz do logowania sam umiesz zrobić, więc go nie piszę, jeszcze taki błąd znalazłem, który sam kiedyś popełniałem w pliku loc.proc.php funkcja session_start() musi być zawsze w pierwszej linijce kodu(całego kodu html, a nie tylko skryptu php)

Kod: Zaznacz cały

<?php 
session_start();?>
<html>
<head>
</head>
<body>
tutaj skrypty, które pisałem wyżej
</body>
</html>
?>[/php]

EDIT- Przeczytałem dokładniej twojego posta i doszedłem do wniosku, że ci chyba chodziło tylko o to jak zrobić, żeby przy przechodzeniu między stronami użytkownik był dalej zalogowany, ale na to pytanie też odpowiedziałem. :)
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

A więc tak:

log_proc.php

[php]
<?php session_start();?>
<html>

<head>

<title>Logowanie</title>

<center>
<?php
$login_check = $_POST['login_check'];
$pass_check = $_POST['pass_check'];

$file = ("users/$login_check.php");
if (!file_exists($file)):
echo('Podales zly login');
elseif (file_exists($file)):
include($file);
if($login==$login_check && $pass==$pass_check):
$_session['login']=$_POST['login_check'];
echo ("Zalogowales sie <b>".$_session['login']."</b>!<br><br><br>");
setcookie($login,"$login_check",time()-3600);
echo '<a href="index.php">BLAAA</a>';
else:
echo("Zly login lub haslo");
endif;

endif;
?>
</center>

</body>

</head>

</html>
?>[/php]

index.php

[php]<?php
<html>

<head>

<title>Logowanie</title>

<center>
<?php
if($_session['login']!= NULL):
echo "uzytkownik ".$_session['login']." jest zalogowany!";
else:
echo "Musisz sie zalogowac aby przegladac ta strone!";
endif;

?>
</center>

</body>

</head>

</html>
?>[/php]

Wpisalem tak jak mowiles i wyskakuje błąd (po przejsciu na index.php z linku w 22 lini log_proc.php):

Kod: Zaznacz cały

Notice: Undefined variable: _session in C:\Program Files\Apache Group\Apache2\htdocs\rejestracja\index.php on line 9
Musisz sie zalogowac aby przegladac ta strone!
Pisze ze nie zdefiniowano tej sesji
marimarek
Nowy
Nowy
Posty: 29
Rejestracja: ndz mar 18, 2007 12:30 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: marimarek »

Błąd wyskakuje dlatego , ponieważ w pliku index.php, nie umieściłeś funkcji session_start();, która musi być wywołana. Jeszcze w dokumencie log_proc.php zgubiłeś <body>, ale to szczegół. :)

EDIT- zresztą w pliku index.php też pominołeś <body>.
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

Dodalem <body> i session_start(); w index.php (na poczatku) i dalej wyskakuje to samo :)
marimarek
Nowy
Nowy
Posty: 29
Rejestracja: ndz mar 18, 2007 12:30 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: marimarek »

HaWaJ pisze:Dodalem <body> i session_start(); w index.php (na poczatku) i dalej wyskakuje to samo :)
Wklej tutaj jeszcze raz te 2 kody po wszystkich zmianach, ale ja jak na razie nie wiem co może być źle. A jeśli kod, który napisałeś nie jest skróconą wersją to jeszcze przydałoby się na początku umieścić:

Kod: Zaznacz cały

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
I między znacznikami <head></head> przynajmniej:

Kod: Zaznacz cały

<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
Jeszcze co do rzeczy które pewnie są dobrze, ale ja ich nie robie to wydaje mi się, że po else nie musi być : i że warunku if nie ma potrzeby zakańczać endif.
HaWaJ
Nowy
Nowy
Posty: 159
Rejestracja: pt kwie 06, 2007 5:12 pm

Re: [PHP]Prosty panel rejestracji....

Post autor: HaWaJ »

log_proc.php

[php]
<?php session_start();?>
<html>

<head>

<body>

<title>Logowanie</title>

<center>
<?php
$login_check = $_POST['login_check'];
$pass_check = $_POST['pass_check'];

$file = ("users/$login_check.php");
if (!file_exists($file)):
echo('Podales zly login');
elseif (file_exists($file)):
include($file);
if($login==$login_check && $pass==$pass_check):
$_session['login']=$_POST['login_check'];
echo ("Zalogowales sie <b>".$_session['login']."</b>!<br><br><br>");
setcookie($login,"$login_check",time()-3600);
echo '<a href="index.php">BLAAA</a>';
else:
echo("Zly login lub haslo");
endif;

endif;
?>
</center>

</body>

</head>

</html>
?>[/php]

index.php

[php]<?php session_start();?>
<html>

<head>

<body>

<title>Logowanie</title>

<center>
<?php
if($_session['login']!= NULL):
echo "uzytkownik ".$_session['login']." jest zalogowany!";
else:
echo "Musisz sie zalogowac aby przegladac ta strone!";
endif;

?>
</center>

</body>

</head>

</html>
?>[/php]
marimarek pisze: Wklej tutaj jeszcze raz te 2 kody po wszystkich zmianach, ale ja jak na razie nie wiem co może być źle. A jeśli kod, który napisałeś nie jest skróconą wersją to jeszcze przydałoby się na początku umieścić:
Kod:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

I między znacznikami <head></head> przynajmniej:
Kod:
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">

Jeszcze co do rzeczy które pewnie są dobrze, ale ja ich nie robie to wydaje mi się, że po else nie musi być : i że warunku if nie ma potrzeby zakańczać endif.
To rowniez nic nie daje
ODPOWIEDZ