Miten saisi tehtyä sellasseen jutun että se kattois tiedostosta pass.dat kenellä on minäkin päivänä synttäri pass.datin sisältö:
13 = päivämäärä
4 = kuukausi
1990 = vuosi
Hyvinkää = asuinpaikka
e1eeac2da35a30fdeb3c2e8f4524e0ac = salasana (md5)
edit!! siis jokasella käyttäjällä on oma kansio missä on pass.dat
Kannattaa tutustua date-funktioon.
Edit: Kyllä tulee hidas synttäriskripti, jos on paljon käyttäjiä. Myslillä tuo onnistuisi yhdellä kyselyllä ;)
Esimerkkiä kiitos!
Yksittäisen käyttäjän syntymäpäivän tarkistaminen onnistuu suunnilleen seuraavasti:
Mutta pitäis saada toi silleen että se tutkis kaikkien kansioitten pass.dat tiedostot ja kattois kenel on synttärit
Funktiot joihin tahdot tutustua:
glob / opendir & readdir
eipä ollu paljoo apua noista linkeistä
Ootko jo saanu top-listan valmiiks? :P
https://www.ohjelmointiputka.net/keskustelu/4936-mitä-tästä-pitäisi-muuttaa
Suurinpiirtein oon saanu miten niin
Kunhan ajattelin...
Joko tutustuit esittämiini funktioihin? Periaate on seuraava:
while(tiedosto-on-kunnon-kansio) { avaase lue pass.dat muuttujaan tarkista pvm }
tiedosto-on-kunnon-kansio = if (is_dir($filu) && $filu!=".." && $filu!="."). En ole varma tajuaako is_dir hylätä nuo kaksi viimeistä ehtoa automaagisesti.
Ei tajua hylätä.
OFFTOPIC:
Itselle on jostain jäänyt käyttöön "hidas regexpi"
if(!ereg("^\\.",$filu) && is_dir($filu))
ja nyt testasin tolla T.M.:n scriptillä kuinka suuri ero on nopeudessa tuohon tsurigan esimerkkiin
if($filu!=".." && $filu!="." && is_dir($filu))
ja tulos oli aikalailla sama:
regexpillä: Keskimäärin 377087 kierrosta per sekunti vertailuoperaattoreilla: Keskimäärin 379299 kierrosta per sekunti
while( if (is_dir($filu) && $filu!=".." && $filu!=".")) { avaase $tiedot = file($tiedosto); if (intval(date("d")) == intval($tiedot[0]) && intval(date("m")) == intval($tiedot[1])) { echo "synttärit!"; } }
mitä tohon avaase kohtaan pitää pistää
Xuvo kirjoitti:
mitä tohon avaase kohtaan pitää pistää
https://www.ohjelmointiputka.net/oppaat/opas.
Tuolta Hakemiston tiedostojen läpikäyminen. Oletetaan, että $filu-muuttujaan haetaan kaikki sen kansion tiedostot ja kansiot, jossa käyttäjien kansiot sijaitsevat. Tiedoston polku on silloin tietenkin $filu."/pass.dat". $tiedot-muuttujaan pitää lukea tiedot file-funktiolla antamalla parametriksi tuo äsken mainittu pass.dat-tiedoston polku.
Ainiinku näin
while( if (is_dir($filu) && $filu!=".." && $filu!=".")) { $tiedosto "$filu."/pass.dat""; $tiedot = file($tiedosto); if (intval(date("d")) == intval($tiedot[0]) && intval(date("m")) == intval($tiedot[1])) { echo "synttärit!"; } }
Mikä mättää ku tulee Parse error: parse error, unexpected T_IF in W:\www\test.php on line 2
Tuolta toiselta riviltä taitaapi puuttua yhtäsuuruusmerkki. Kannattaa hankkia syntaksivärityksellinen tekstieditori, silloin tuollaiset huomaa helposti.
Xuvo kirjoitti:
Ainiinku näin
while( if (is_dir($filu) && $filu!=".." && $filu!=".")) { $tiedosto "$filu."/pass.dat""; $tiedot = file($tiedosto); if (intval(date("d")) == intval($tiedot[0]) && intval(date("m")) == intval($tiedot[1])) { echo "synttärit!"; } }Mikä mättää ku tulee Parse error: parse error, unexpected T_IF in W:\www\test.php on line 2
Sä et taida osata PHP:tä? Toi on kyllä vähän päin peetä :P
kenkku kirjoitti:
Xuvo kirjoitti:
Ainiinku näin
while( if (is_dir($filu) && $filu!=".." && $filu!=".")) { $tiedosto "$filu."/pass.dat""; $tiedot = file($tiedosto); if (intval(date("d")) == intval($tiedot[0]) && intval(date("m")) == intval($tiedot[1])) { echo "synttärit!"; } }Mikä mättää ku tulee Parse error: parse error, unexpected T_IF in W:\www\test.php on line 2
Sä et taida osata PHP:tä? Toi on kyllä vähän päin peetä :P
No voiks sä korjata sen. Mä oon kyl kehitelly jo uuden systeemin
Whileen if on turha, enkä tarkoittanut sitä ihan niin, mutta toimii se niinkin. Muuttujien ympärille ei tarvita mitään hipsuja. Ja sitten, luet php:n manuaalista daten käytön, yhdistät pass.datin rivit 0 ja 1 (laita vaikka samalle riville päivä-kuukausi-vuosi) ja vertailet sopivaa daten muotoa siihen riviin.
Mä oon nyt tehny sellasseen systeemin että se tulostaa esim 31.07.txt tiedostosta sen päivän synttäri sankarit ja rekisteröinnissä se tekee tiedoston käyttäjän syntymäpäivän mukaan ja kirjottaa tiedostoon käyttäjän nimen mutta miten saan sen tallentamaan aina seuraavalle riville eikä vanhan nimen päälle?
Ihan hyvä ratkaisu, jos syntymäpäivä kysytään jo rekisteröityessä. Kun avaat tiedoston kirjoittamista varten, käytä "w"-parametrin sijaan "a":ta. Silloin vanhat tiedot jäävät tiedoston alkuun.
$tiedosto = fopen("31.07.txt", "a");
mutta tallentaako toi seuraavalle riville aina uuden käyttäjän nimen. Sit ois viel sellanen kysymys että voisko joku tehä mulle sellasseen koodin että jos ei oo siltä päivältä tiedostoa niin se ei valittais mitään vaan sanois vaikka ei synttäri sankareita
<?php if(!file_exists($paivamaara.".txt")) print "Ei syntymäpäiväsankareita tänään!"; ?>
Eli jos tiedosto $paivamaara.txt ei ole olemassa, printataan ilmoitus.
<?php $tt = fopen("./".date("d.m").".txt", "r"); while (!feof($tt)) { if(!file_exists("./".date("d.m").".txt")) print "Ei syntymäpäiväsankareita tänään!"; $rivi = fgets($tt, 1024); echo "$rivi"; } fclose($tt); ?>
Mikäs tässä mättää ku tulostaa vaan Warning: fopen(./31.07.txt): failed to open stream: No such file or directory in W:\www\index.php on line 45
Warning: feof(): supplied argument is not a valid stream resource in W:\www\index.php on line 47
Ei syntymäpäiväsankareita tänään!
Warning: fgets(): supplied argument is not a valid stream resource in W:\www\index.php on line 49
Sei pysty avaa tollasta tiedostoa, ota alusta ./ pois, jos se on samassa kansiossa niin niittei tartte ja laita ton rivin perään seuraava: or die("Tiedostoa ei löytynyt!");
minkä rivin perään?
$tt = @fopen(date("d.m").".txt", "r") or die("Tiedostoa ei löytynyt!");
Tulee Warning: fopen(./01.08.txt): failed to open stream: No such file or directory in W:\www\index.php on line 44
Tiedostoa ei löytynyt!
no nyt toi vetää dessun sekasi
Pahis lyhenteet sulla, design kenties? Ota die pois ja käytä jotain totuusarvomuuttujaa, jonka mukaan teet tiedoston lukemiset. Ite lukisin ihan tyyliin @file(.. . Saattaa aika sotku olla sulla se kansio jos pidät noita päivämäärätiedostoja samassa koodien kanssa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.