Autor Zpráva
Skreaver
Profil *
Zdravím Vás,

chcel by som sa opýtať,či je možne vykonať prihlásenie v php pomocou vytvoreného súboru. Tak je, že si vytvorím súbor kde budem mať IP adresy ako login a heslo, ktoré im zadám ja a následne pri prihlasovaní sa budu porovnávať IP a heslo.

Ak je to možne, tak ako.Bol by som vďačný za každú radu.

ďakujem.
Joker
Profil
Možné to samozřejmě je. Zhruba tou metodou nastíněnou v dotazu.

Taky by šlo mít všechny uživatele uložené v jednom souboru, třeba v XML, případně CSV a podobně.
Možností je spousta.
Skreaver
Profil *
Joker:
Hmm, ďakujem.

A vedeli by ste mi priblížiť ako na to ? poprípade napísať zdroják v skratke?
Joker
Profil
Skreaver:
A vedeli by ste mi priblížiť ako na to ?
Ano, když řeknete jak si to asi představujete a s čím je problém.
Skreaver
Profil *
Joker:
Tak spravím klasický formulár pre prihlásenie. Avšak stále nechápem, ako po zadaní loginu a hesla dokážem porovnať danú ip adresu a heslo ku nej zadané. Teda ako mám hľadať podľa príkazov v danom súbore ,či už xml alebo csv.
Joker
Profil
Skreaver:
nechápem, ako po zadaní loginu a hesla dokážem porovnať danú ip adresu a heslo ku nej zadané
Typicky by se asi sekvenčně procházely záznamy až by se našel uživatel daného jména a pak by se porovnalo heslo a IP.
Případně lepší XML parser by uměl najít záznam k danému jménu podle XPath dotazu.

Když dám příklad, dejme tomu XML:
<uzivatele>
  <uzivatel jmeno="pepa">
    <heslo>955db0b81ef1989b4a4dfeae8061a9a6</heslo>
    <ip>1.2.3.4</ip>
  </uzivatel>
  <!-- další uživatelé -->
</uzivatele>
CSV by mohlo být třeba jméno;heslo;IP, tj.:
pepa;955db0b81ef1989b4a4dfeae8061a9a6;1.2.3.4
Pro XML:
1. Načte se XML
2. Procházejí se značky <uzivatel>
3. Pokud atribut jmeno = danému uživateli, porovná se, zda IP == obsah značky <ip> a v tomhle případě md5(heslo) == obsah značky heslo
4. Pokud ano, uživatel je autorizován
Ukázka, jak se v PHP dá pracovat s XML: SimpleXML

Pro CSV:
1. K načtení csv se dá použít fgetcsv
2. Ve vráceném poli se projdou řádky až se najde ten, kde první položka odpovídá jménu uživatele
3. Zkontrolují se ostatní položky
Skreaver
Profil *
Joker:
Dakujem veľmi pekne.

Idem niečo poskúšať. Prajem zatiaľ pekný večer.


taak už som niečo urobil,len teraz nevime ako mam prehľadávať samotný súbor. V podstate kroky 2 a 3.
o_O
Profil
Na načtení souboru existují funkce fopen() (pro starší verze PHP, 4 a méně), nebo file_get_contents() (pro PHP5), na procházení polí pak for() a foreach().
Joker
Profil
Skreaver:
Pokud jde o ty formáty co jsem popsal, tak v odkazech jsou příklady
Skreaver
Profil *
foreach ($xml->uzivatelia->uzivatel as $uzivatel) {
   echo $uzivatel->ip;
}

co ja na tomto zápise zle?
Invalid argument supplied for foreach() in /3w/xf.cz/s/skreaver/skuska.php on line 10

malo by mi to vypísať IP adresy uzivatelov nie?


hmm,dal som to bez toho uzivatelia na zaciatku a uz to funguje : )


Dobrý deň,

tak nejak som to všetko zbúchal,samozrejme za vašej pomoci. Len ešte jedna chybička krásy. Môj súbor vyzerá napr. takto:

<uzivatelia> 

 <uzivatel > 
 <ip>127.6.2.1</ip> 
 <heslo> 123</heslo> 
 </uzivatel> 

 <uzivatel> 
 <ip>127.6.2.8</ip> 
 <heslo> 1234</heslo> 
 </uzivatel> 

 <uzivatel> 
 <ip>127.6.2.17</ip> 
 <heslo> 12345</heslo> 
 </uzivatel> 

</uzivatelia>


A zdrojový kod takto:

<?php 

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

if ($login && $heslo) 
{ 
$xml = simplexml_load_file("uzivatelia.xml"); 

foreach ($xml->uzivatel as $uzivatel ) { 
 if ($login == $uzivatel->ip & $heslo == $uzivatel->heslo ) 
 { 
 echo "zadali ste správne heslo"; 
 } 
 elseif ($login != $uzivatel->ip || $heslo != $uzivatel->heslo) 
 { 

 echo "Zadané údaje sú nesprávne, prosím skontrolujte IP adresu alebo heslo"; 
 } 
} 


} 

elseif (($login && $heslo) == false){ 

echo "Nezadali ste udaje"; 

} 

?> 

a problém je v tom,že ak zadám zlé heslo,alebo ip ,tak mi hlásku "zadali ste nespravne......." vypise tolko krat,kolko mám uzivatelov v subore. ako mam urobit aby len raz ?
Tori
Profil
Před foreach si dejte proměnnou, třeba $hesloJeOk, s hodnotou false. Pokud v cyklu najdete správné heslo, nastavíte $hesloJeOk na true a ukončíte cyklus (break). Pokud se správné heslo nenajde, tak prostě cyklus projde všechny uživatele a v $hesloJeOk zůstane ta výchozí hodnota. A až potom piště nějakou hlášku uživateli.
Skreaver
Profil *
Tori:
Dakujem :)


Dobabral som to,ešte raz prepáčte:

<?php

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

if ($login && $heslo)       
{
$xml = simplexml_load_file("uzivatelia.xml");

$heslo_je_OK = 0;

foreach ($xml->uzivatel as $uzivatel ) {
      if ($login == $uzivatel->ip & $heslo == $uzivatel->heslo )
       {
       $heslo_ke_OK = 1;
       echo "zadali ste správne heslo";
       break;
       }
       
        elseif ($login != $uzivatel->ip || $heslo != $uzivatel->heslo)  
      {
        continue;
        
        }
    
}
echo "Zadané údaje sú nesprávne, prosím skontrolujte IP adresu alebo heslo";
}

elseif (($login && $heslo) == false){

echo "Nezadali všetky údaje";

}

?>

Moderátor Str4wberry: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Tori
Profil
Skreaver:
řádek 16 vyhoďte, ř.20-24 jsou zbytečné. Až na ř.27 podle hodnoty v $heslo_je_ok vypíšete buď jednu nebo druhou hlášku.
skreaver
Profil
Diki moc,

všetko funguje : )Všetkým ďakujem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0