przegladanie tablicy o indeksach typu string

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.
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

przegladanie tablicy o indeksach typu string

Post autor: Dreen »

no wlasnie jak to sie robi?
ja potrzebuje to do skryptu logowania i zrobilem cos takiego:
[php]
<html>
<head>
<?php
$login = md5($_POST['login']);
$pass = md5($_POST['pass']);
$lnptable = array("2c58719eb675c9ece8b332cbc9c022d7"=>"a1e05ee2564dbf16b04f09a23d482d06", ...); // i tu kolejne hashe
$limit = count ($lnptable);
for ($i=1; $i<=$limit; $i++)
{
$current = current ($lnptable);
$key = key ($lnptable);
if ($login == $current && $pass == $key)
{
print ("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=panel.php?login=".$login."&pass=".$pass."\">);
break;
}
else
{
next ($lnptable);
}
}
?>
</head>
<body>
<div align=center>
Logowanie w toku...
</div>
</body>
</html>
[/php]

tyle ze wyskakuje mi blad w ostatniej linijce. czy ktos moze mi powiedziec lub chodziaz wytlumaczyc lopatologicznie jak to sie robi i/lub gdzie ja robie blad?
z zalozenia nie chce wykorzystywac sql'a

dopisek: aha i jeszcze wyskakujacy blad to parse
Cobretti
Posty: 18
Rejestracja: śr gru 17, 2003 11:05 am
Lokalizacja: Radom
Kontakt:

Re: przegladanie tablicy o indeksach typu string

Post autor: Cobretti »

[php]
<?PHP
$login = md5($_POST['login']);
$pass = md5($_POST['pass']);

$lnptable =array("2c58719eb675c9ece8b332cbc9c022d7"=>"a1e05ee2564dbf16b04f09a23d482d06");

// i tu kolejne hashe

foreach ($lnptable as $key=>$value)
{
if ($login==$value&&$pass==$key)
{
print ("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=panel.php?login=".$login."&pass=".$pass."\">");
break;
}
else
{
}
}
?>[/php]
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

Re: przegladanie tablicy o indeksach typu string

Post autor: Dreen »

pardon, nie dziala. skrypt w tej postaci:

[php]
<html>
<head>
<?php

$login = md5($_POST['login']);
$pass = md5($_POST['pass']);
$lnptable = array ("2c58719eb675c9ece8b332cbc9c022d7" => "a1e05ee2564dbf16b04f09a23d482d06");
foreach ($lnptable as $key => $value)
{
if ($login == $value && $pass == $key)
{
print ("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=panel.php?login=".$login."&pass=".$pass."\">);
break;
}
}

?>
</head>
<body>
<div align=center>
Logowanie w toku...
</div>
</body>
</html>
[/php]

i po pisaniu odpowiedniego loginu i hasla wypisuje parse error w linii 24.
Cobretti
Posty: 18
Rejestracja: śr gru 17, 2003 11:05 am
Lokalizacja: Radom
Kontakt:

Re: przegladanie tablicy o indeksach typu string

Post autor: Cobretti »

Jakbys zrobil tak jak napisalem to by dzialalo...
a dokladniej chodzi mi o linijke 12, pomiedzy > a ) musisz dac "
Przez to wlasnie jest ten blad.
Proponuje abys zaczal robic w jakims programie ktory odpowiednio kod koloruje, wtedy latwo takie bledy wychwycic.
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

Re: przegladanie tablicy o indeksach typu string

Post autor: Dreen »

hmmm tak ten blad sam zauwazylem troszke wczesniej ale chodzi o to ze jest jeszcze jeden, dzieki ktoremu wartosc warunku jest false zamiast true, dzieki czemu cala petla nic nie robi, dzieki czemu metatag nie zostaje dopisany.
Cobretti
Posty: 18
Rejestracja: śr gru 17, 2003 11:05 am
Lokalizacja: Radom
Kontakt:

Re: przegladanie tablicy o indeksach typu string

Post autor: Cobretti »

u mnie to dziala dobrze, zreszta zobacz sam:

Kod: Zaznacz cały

http://webmaster.ixadixa.site.pl/skrypty/php/logowanie1o.php
- tak to wyglada

Kod: Zaznacz cały

http://webmaster.ixadixa.site.pl/skrypty/php/logowanie1.php
- a tak dziala

Tylko zmienilem z _POST na _GET zeby mozna bylo podac dane linkiem.
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: przegladanie tablicy o indeksach typu string

Post autor: wixor »

To chyba idiotyzm, ale spróbuj ująć warunki w nawiasy:if((.........) && (........)) ........
Cobretti
Posty: 18
Rejestracja: śr gru 17, 2003 11:05 am
Lokalizacja: Radom
Kontakt:

Re: przegladanie tablicy o indeksach typu string

Post autor: Cobretti »

mala poprawka, niezdazylem wyedytowac mojego posta bo juz ktos cos powiedzial, wynik dzialania zobaczysz po wpisaniu takiego linka;

Kod: Zaznacz cały

http://webmaster.ixadixa.site.pl/skrypty/php/logowanie1.php?login=l&pass=p
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

Re: przegladanie tablicy o indeksach typu string

Post autor: Dreen »

w morde jeza nic juz z tego nie kumam - skrypt sypie sie wtedy, kiedy wpisuje wlasne hashe - nie ma znaczenia jakie, tylko kiedy je zmieniam z tych co sa od "p" i "l" - to jest jakas paranoja - sprawdzalem chyba z 10 razy i jestem na 100% pewien ze hashe wprowadzam poprawnie. a hashy tez probowalem pare.
albo jest cos o czym nie wiem, albo mam jakis wybrakowany serwer, albo to jest jakis konspiracyjny spisek przegladarki i serwera...
Dreen
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn paź 20, 2003 6:32 pm
Lokalizacja: Żywiec

Re: przegladanie tablicy o indeksach typu string

Post autor: Dreen »

problem juz rozwiazany.... wielkie dzieki dla Jakuba za pomoc i umozliwienie dojscia do bledu, ktorym bylo.... zamienienie wartosci $key i $value w warunku if miejscami ....


dobra to teraz mam jeszcze dwa pytania:

1) Jak zformulowac warunek zebym mogl cos tam wyswietlic jak mi podane haslo i login nie spasuja dla zadnych w tablicy?

2) Czy jest jakis prosty sposob aby uzyskac tylko indeks pozycji w tablicy znajac tylko nazwe tablicy i wartosc pozycji o szukanym indeksie ?
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: przegladanie tablicy o indeksach typu string

Post autor: wixor »

Odpowiedź na pierwsze pytanie:
[php]<?php
$login = md5($_POST['login']);
$pass = md5($_POST['pass']);

$lnptable
=array("2c58719eb675c9ece8b332cbc9c022d7"=>"a1e05ee2564dbf16b04f09a23d482d06");

// i tu kolejne hashe
$success=false;
foreach ($lnptable as $key=>$value)
{
if (($login==$key) && ($pass==$value))
{
$success=true;
if(!headers_sent())
{
header("Location: panel.php?login=".$login."&pass=".$pass);
exit;
}
else
{
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=panel.php?login=".$login."&pass=".$pass."\">";
break;
}
}
}
if(!$success)
die("Błędna nazwa użytkownika lub hasło");

?>[/php]
Odpowiedź na drugie pytanie:
[php]<?php
$i=0;
foreach($a as $k=>$v) if(($k==$x) && ($v==$y)) break; else i++;
if($i==count($a))
//Nie znaleziono takiego klucza...
else
//Klucz znaleziono, jegu numer jest w $i
?>[/php]
Wojciech Kocjan
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: sob gru 14, 2002 10:51 am

Re: przegladanie tablicy o indeksach typu string

Post autor: Wojciech Kocjan »

A czy nie lepiej zrobic to calkiem inaczej (prosciej):

[php]<?php
$login = $_POST['login'];
$pass = md5($_POST['pass']);

$lnptable=array();
$lnptable['login1']="hash1";
$lnptable['login2']="hash2";

if ($lnptable["$login"]=="$pass") {
// wyslij headera do panel.php
}
elseif (empty($lnptable["$login"])) {
echo 'Podany uzytkownik nie istnieje';
}
else {
echo 'Bledne haslo';
}
?>[/php]

A login i pass usera przechowuj w sesji, zamiast podawac do metoda GET w pliku panel.php - o wiele wygodniej.
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: przegladanie tablicy o indeksach typu string

Post autor: wixor »

Geniusz w prostocie........ że też na to nie wpadłem :cry:
ODPOWIEDZ