Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[PHP] Ubogi, ale własny system logowania - nie działa

Ostatnio zmodyfikowano 2013-05-15 08:06
Autor Wiadomość
xevuel
» 2013-05-14 22:33:36
Dalej nie działa prawidłowo... Tym razem jednak coś mam nie tak z wyszukiwaniem hasła i loginu chyba...
Piszesz że coś zmieniłeś, ale nie piszesz jakie były tego efekty. Pokazujesz błąd z linii 58, podczas gdy kod który dajesz ma ich raptem 35. Uważasz że coś nie działa, ale nie informujesz nas, co zachowuje się inaczej niż oczekiwałeś, nie wiemy też które warunki się spełniają, a które nie. Sprecyzuj...

//edit: Czemu używasz strstr, zamiast
===
?
druga sprawa -
if ($bool_haslo=true and $bool_login=true)
P-82969
Kopczak1995
Temat założony przez niniejszego użytkownika
» 2013-05-14 22:46:46
@Up Jasne... Wybacz jestem już z lekka rozkojarzony. Siedzę i męczę się nad tym co zrobiłem już którąś godzinę.
Już nie pokazuje się błąd z tą nieszczęsną linią 58. Pokażę całokształt z pominięciem zbędnego kodu HTML składającego się na wygląd strony. Mam po drodzę za dużo divów stąd ta tajemnicza liczba "58" mimo, że powinna być mniejsza. No to mam tak
Strona główna - index.php:
<form action="przekierowanie.php" method="POST">
<b style="color: green">LOGOWANIE</b></br></br>
Login: <input type="text" name="login" />
Hasło: <input type="password" name="haslo" />
<input type="submit" value="Wbijamy :)" />
</form>
Ta strona przerzuca mnie do strony "przekierowanie.php", a tam mam taki kod php:
<?php
ini_set('display_errors', 1);
error_reporting (E_ALL & ~E_NOTICE);

$login=$_POST['login'];
$haslo=$_POST['haslo'];

$Lista_login = file('dane/lista_loginy.txt');
$Lista_haslo = file('dane/lista_hasla.txt');

$bool_login=false;
$bool_haslo=false;

for($n=count($Lista_login);$n>=0;$n--)
{
if(strstr($Lista_login[$n],$login)==1)
{$bool_login=true;}
}
for($n=count($Lista_haslo);$n>=0;$n--)
{
if(strstr($Lista_haslo[$n],$haslo)==1)
{$bool_haslo=true;}
}

if ($bool_haslo=true and $bool_login=true)
{
echo "Przekierowanie!!!";
//header('Location: http://www.lekcje-php.ugu.pl/magiczna_stronka.php');
}
elseif ($bool_haslo=false or $bool_login=false)
{
print"Błędne hasło lub nazwa użytkownika! Zostaniesz przekierowany na stronę główną.";
print"Jeżeli nie chce Ci się czekać kliknij <a href=\"index.php\">tutaj.</a>";
header("Refresh: 5; url=http://www.lekcje-php.ugu.pl/index.php");
}
?>
Domyślnie ma ona przeglądnąć pliki tekstowe lista_loginy.txt oraz lista_hasla.txt i sprawdzić, czy wpisane na poprzedniej stronie dane w formularzu są zgodne.
Błąd jest chyba taki, że wychodzi mi ciągle true dla wartości, które są false (specjalnie źle wpisuję za każdym razem), a mimo to program(?) zachowuje się jakby było okej i jedzie dalej. Nie wiem zupełnie czemu...

Mam nadzieję, że podałem wystarczająco dużo informacji.

@Up Eee... Tego nie zauważyłem X_X Karygodny błąd przypisania... Chwilka i zmienię...

Edit Okej już zmieniłem, ale mam inny błąd. Wpisałem poprawne dane i pokazuje teraz że źle wpisałem...
Edit2 A i nie używałem === o którym mówisz, bo tak jakby dopiero zaczynam i żadnego kursu wcześniej nie robiłem :P strstr jako 1 znalazłem w necie i tyle.
//Edit No, ale żeby nie było to powiem, że z książki leciałem, ale nagle wpadłem na to jak mógłbym takie prymitywne logowanie zrobić i zacząłem się w to bawić. Nie spodziewałem się jednak, że cały wieczór mi to zajmie... A i tak nie działa... Bywa :P
P-82970
xevuel
» 2013-05-15 07:19:46
Pisane z palca:
<?php
ini_set('display_errors', 1);
error_reporting (E_ALL & ~E_NOTICE);

$login=$_POST['login'];
$haslo=$_POST['haslo'];

$Lista_login = file('dane/lista_loginy.txt');
$Lista_haslo = file('dane/lista_hasla.txt');

foreach($Lista_login as $key => $value)
{
   if($value === $login)
   {
      if($Lista_haslo[$key] === $haslo)
      {
         $zalogowany = true;
         break;
      }
   }
}
Funkcja header() nie zadziała. Dlaczego, możesz przeczytać w manualu. Przykładowym rozwiązaniem problemu jest np. użycie ob_start. Widzę że jednak działa, czyli zapewne masz w php.ini włączone output_buffering :) I jeszcze jedna rzecz. Większość użytkowników nie lubi przekierowań, bo nie mają wpływu, gdzie zostaną umieszczeni. Dlatego często parametr action formularza ustawia się na aktualny URL, i tylko przy udanej akcji (zalogowaniu się etc.) wypędza się użytkownika gdzie indziej. Przykładowo cpp0x.pl - żeby się zalogować, nie trzeba odwiedzać 10 innych stron. Owszem, tu jest Ajax, ale mniej więcej to samo można osiągnąć i bez niego :)
P-82984
Kopczak1995
Temat założony przez niniejszego użytkownika
» 2013-05-15 08:06:37
Dzięki wielki ludzie, a w szczególności @xevuel'u :) W końcu mi działa... Gdzieś czytałem o pętli
foreach
, ale jeszcze nie zdążyłem zgłębić istoty jej działania. Mój błąd bo nie jest wcale taka głupia :P

@Up
Wcześniej próbowałem robić tak, że jak jest w porządku to mnie wywala gdzieś w kosmos, a w przeciwnym wypadku pozostaje się na stronie, ale miałem z tym sporo problemów i w końcu wybrałem wersję z tą dodatkową stroną :P Teraz jednak spróbuję zrobić to jak mówisz bo już mi wszystko działa :)
P-82985
1 « 2 »
Poprzednia strona Strona 2 z 2