Strona 1 z 1

Sesje

Napisane: czwartek, 30 grudnia 2010, 13:27
przez TheRoot

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 ?

Re: Sesje

Napisane: czwartek, 30 grudnia 2010, 14:13
przez Morfidon
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.

Re: Sesje

Napisane: czwartek, 30 grudnia 2010, 16:30
przez TheRoot
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ą.

Re: Sesje

Napisane: piątek, 31 grudnia 2010, 01:06
przez TheRoot
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 ?

Re: Sesje

Napisane: piątek, 31 grudnia 2010, 11:48
przez Morfidon
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.

Re: Sesje

Napisane: piątek, 31 grudnia 2010, 12:20
przez TheRoot
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.