Gå til innhold

Lete i flat filer etter noe…


Anbefalte innlegg

Hei,

 

Jeg er usikker på hvordan jeg skal få til slik at PHP går igjennom alle filene i en mappe, og ser etter om den finner ”den” variabelen, og at den er lik en annen, som da er i filen som leter etter det. Jeg klarer ikke tenke ut en måte jeg skal gjøre det på. Blir som prinsippet til MySQL: SELECT * FROM brukere WHERE brukernavn=$brukernavn AND passord=$passord. Bare med flat filer. Noen som vil vise meg, eller gi tips?

Hvis dere lurer på hvordan filene blir bygd opp så skal de være slik:

 

<?php

$brukernavn = "Per";
$passord = "MD5HASH";

// osv...

?>

Takk.

Lenke til kommentar
Videoannonse
Annonse

Er dessverre litt sent nå, så jeg gir deg bare noen pekere:

(Sørg for å se på eksemplene!)

For å sjekke ut en mappe:

http://no.php.net/manual/en/function.opendir.php

 

For å lese en fil:

http://no.php.net/file <- tror denne er best i ditt tilfelle.

http://no.php.net/manual/en/function.readfile.php

 

For å lete igjennom arrayet som tilsvarer strengene i filen:

http://no.php.net/foreach

http://no.php.net/strstr

eller

http://no.php.net/manual/en/function.strpos.php <- raskere en strstr()

 

For å dele opp en streng i variabelnavn og variabelverdi:

http://no.php.net/explode

 

 

Håper dette hjelper, hvis ikke, beklager jeg at jeg ikke kan svare mer utfyllende nå.

 

P.S

En annen mulighet er å bruke array_search() og se etter verdien du vil matche.

F.eks. Du har passord "abc123" og vil se om det finnes i filen.

array_search('abc123',  $array_fra_file);

Endret av Nazgul
Lenke til kommentar

Hmmm...

Skjønner problemer, tror jeg. Filen er altså slik hele veien:

$brukernavn = "Per";
$passord = "MD5HASH";
$brukernavn = "Ole";
$passord = "OleMd5Hash";
osv...

HVa med å gjøre et søk etter rett brukernavn først, når den finner rett brukernavn, bruker du linjenumeret som det brukernavnet står i, til å sjekke passordet, som skal ligge i neste linje.

Lenke til kommentar

Beethoven; det er jeg også ute etter. At hver bruker har hver sin fil. Så når noen skal logge seg inn og skriver brukernavn og passord så søker evt. PHP koden gjennom alle filene som er i en mappe og ser om det er brukernavn og passord som passer sammen som oppgitt!

Lenke til kommentar

Det er veldig mye greiere når hver bruker har hver sin fil, da... Er filene navngitt etter brukernavn, eller ?

Her er vel hva zokra mener, kanskje:

bruker1.php:

id//3;
brukernavn//bruker1
passord//md5greie
realname//Bruker brukersen
// osv...

Evt så kan denne brukes på flere brukere:

id//brukernavn//passord//fullnavn//email
1//bruker1//md5pass//Bruker Brukersen//[email protected]
2//bruker2//md5pass//user userson//[email protected]
osv...

Da trenger man bare en fil for alle brukere. Synes det er mye greiere, og mye bedre og jobbe med.

 

En funksjon, som går ut fra første flatfil eksempel:

function getUserData($user) {
$readfile = file("$user.php");
$lines = count($readfile);
$line = 0;
while($line < $lines) {
$data = explode ("//", $readfile($line)); 
if($data[0] == "brukernavn") $brukernavn = $data[1];
if($data[0] == "passord") $passord = $data[1];
if($data[0] == "realname") $realname = $data[1];
$lines++;
} // End while
$retarray = array(brukernavn => "$brukenavn", passord=>"$passord", realname=>"$realname");
return $retarray;
}// End function

Er slett ikke testet. Kan bruke hva som helst som seperator. F,eks "|@-+!|"

Endret av kakkle
Lenke til kommentar

Hvordan har du navngitt filene ? Tilfeldig ? Etter brukernavn ?

Regner med at du ikke har navngitt dem etter brukernavn.

 

Hva har du prøvd ? Hvor står det fast ?

 

En liten oppskrift

Loop gjennom katalogen med filer.

Sjekk hver fil vha file(), explode(), om du finner rett brukernavn. (Vha av å sjekke om explode(" = ", file("filnavn")[linjepeker])[0] er $brukernavn)

Gjør det det, sjekk i samme filen om passordet stemmer.

 

Bør vel kanskje bytte ut $ tegnet i med noe annet, før du sammenligner.

 

Se på linkene som nazgul postet i første svar

Lenke til kommentar

Hmm...

Noe sånt:

<?php
$brukernavn = $_POST['user];
$passord = md5($_POST['pass']);
$mappe = "bruker/" // Husk "/" på slutten! Og at mappa er skrivbar!
$fil = $mappe.$brukernavn.".txt";
$innhold = file_get_contents($fil);

if (file_exists($fil)) {
if ($passord == $innhold {
echo "Hemmlig innhold";
} else {
echo "Feil passord";
}
} else {
echo "Fant ikke brukernavn";
}

?>

Og for ny bruker:

<?php
$brukernavn = $_POST['user];
$passord = md5($_POST['pass']);
$mappe = "bruker/" // Husk "/" på slutten!  Og at mappa er skrivbar!
$fil = $mappe.$brukernavn.".txt";

if (file_exists($fil)) {
echo "Brukernavn opptatt";
} else {
$handle = fopen($fil, "w");
fwrite($handle, $passord);
fclose($handle);
echo "Registring fullført. Vennligst logg inn.";
}
?>

Update:

<?php
$brukernavn = $_POST['user];
$passord = md5($_POST['pass']);
$nypassord = md5($_POST['nypass']);
$mappe = "bruker/" // Husk "/" på slutten!  Og at mappa er skrivbar!
$fil = $mappe.$brukernavn.".txt";
$innhold = file_get_contents($fil);

if (file_exists($fil)) && ($passord == $innhold) {
$handle = fopen($fil, "w");
fwrite($handle, $nypassord);
fclose($handle);
echo "Oppdatering fullført. Vennligst logg inn.";
} else {
echo "Feil passord";
}
?>

 

Jeg beklager hvis det er noen feil i koden... (Det gikk ganske fort i svingene :p )

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...