Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
TheRoot
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 30 grudnia 2010, 13:16
Post
przez TheRoot » czwartek, 30 grudnia 2010, 13:27
Code: Zaznacz cały
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2"/>
<title>sesje - test</title>
</head>
<body>
<form action='index.php' method='post' enctype='multipart/form-data'>
<div>
Login: <input type='text' name='login' maxlength='8' size='6' /><br /><br />
Haslo: <input type='password' name='haslo' maxlength='8' size='6' /><br />
<input type='submit' value='Zaloguj Się' />
</div>
</form>
<?php
if ((isset($_POST['login']) && isset($_POST['haslo'])) || $_SESSION['zalogowany'] == 1)
{
$_POST['login'] = addslashes(strip_tags($_POST['login']));
$_POST['haslo'] = addslashes(strip_tags($_POST['haslo']));
if((!empty($_POST['login']) && !empty($_POST['haslo'])) || $_SESSION['zalogowany'] == 1)
{
if((($_POST['login'] == "Kaszal") && ($_POST['haslo'] == "qw")) || $_SESSION['zalogowany'] == 1)
{
echo "Zostales Zalogowany jako ".$_POST['login'];
$_SESSION['zalogowany'] = 1;
echo " Co chcesz teraz zrobić ? <br /><br /><a href='index.php'>Odswierz</a><br />";
echo "<a href='index.php?akcja=wyloguj'>Wyloguj Się</a>";
}
else
echo "Bledne dane";
}
else
echo "Nie podano loginu lub/i hasla";
}
?>
</body>
</html>
Przed zalogowaniem wypluwa mi błąd w 30 linii, jeżeli podam błędne dane to 38, a po zalogowaniu i naciśnięciu odśwież w 33 i 34.
Code: Zaznacz cały
Notice: Undefined index: login in ścieżka ...
itp.
Co trzeba zrobić aby pozbyć siętych błędów oraz dlaczego ?
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » czwartek, 30 grudnia 2010, 14:13
Która to jest linia 30, bo możliwe, że u mnie inaczej to numeruje lub też coś przy wklejaniu się zmieniło. Jakiego serwera używasz? Jakiego edytora używasz?
U mnie takie coś:
Code: Zaznacz cały
<?php
session_start();
echo '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>sesje - test</title>
</head>
<body>
<form action="testowy.php" method="post" enctype="multipart/form-data">
<div>
Login: <input type="text" name="login" maxlength="8" size="6" /><br /><br />
Haslo: <input type="password" name="haslo" maxlength="8" size="6" /><br />
<input type="submit" value="Zaloguj Się" />
</div>
</form>
';
if ((isset($_POST['login']) && isset($_POST['haslo'])) || $_SESSION['zalogowany'] == 1)
{
$_POST['login'] = addslashes(strip_tags($_POST['login']));
$_POST['haslo'] = addslashes(strip_tags($_POST['haslo']));
if((!empty($_POST['login']) && !empty($_POST['haslo'])) || $_SESSION['zalogowany'] == 1)
{
if((($_POST['login'] == "Kaszal") && ($_POST['haslo'] == "qw")) || $_SESSION['zalogowany'] == 1)
{
echo "Zostales Zalogowany jako ".$_POST['login'];
$_SESSION['zalogowany'] = 1;
echo " Co chcesz teraz zrobić ? <br /><br /><a href='index.php'>Odswież</a><br />";
echo "<a href='index.php?akcja=wyloguj'>Wyloguj Się</a>";
}
else
echo "Bledne dane";
}
else
echo "Nie podano loginu lub/i hasla";
}
echo "
</body>
</html>";
?>
Działa.
Ogólnie taki błąd nie powinien się pojawić, dopóty dopóki nie odwołasz się do NIEISTNIEJĄCEGO $_POST, jednak w tym kodzie nie powinno być takiego problemu.
TheRoot
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 30 grudnia 2010, 13:16
Post
przez TheRoot » czwartek, 30 grudnia 2010, 16:30
Używam Wampserver pod win7 i raczej problem w takim razie z konfiguracją serwera.
Linia 30 jest zaraz pod otwarciem znacznika php dokładniej w linii sprawdzającej czy dane tablice ( $_POST['login'] i haslo ) istnieją.
TheRoot
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 30 grudnia 2010, 13:16
Post
przez TheRoot » piątek, 31 grudnia 2010, 01:06
Sprawdziłem i to jest wina serwera. Coś nie tak z konfiguracją (może ma ktoś polecić jakis serwer na 64bit win7 ?).
A teraz takie pytanie dodatkowe: Jaka funkcja byłaby najlepsza do sprawdzania czy dana nazwa (string) znajduje się wewnątrz tablicy ?
sprawdzałem in_array() lecz chyba nie do końca dobrze pasuje. Może array_key_exists ? lub jakieś propozycje ?
Morfidon
Administrator
Posty: 1332 Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:
Post
przez Morfidon » piątek, 31 grudnia 2010, 11:48
Niestety nie miałem nigdy Win7 więc w tym temacie nic nie polecę.
in_array () powinno sprawdzić, czy istnieje podana wartość w tablicy, a array_key_exists , czy istnieje podany klucz w tablicy. Więc in_array() powinno działać do tego, aby sprawdzić, czy string znajduje się wewnątrz tablicy.
TheRoot
Nowicjusz
Posty: 4 Dołączył(a): czwartek, 30 grudnia 2010, 13:16
Post
przez TheRoot » piątek, 31 grudnia 2010, 12:20
Tak in_array działa już sprawdzałem ale nie byłem pewien czy jest coś lepszego i czy to jest prawidłowo użyte.