Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Stemugram
HV kasutaja
liitunud: 02.12.2001
|
13.02.2011 20:53:47
PHP-s abi vaja |
|
|
Oleks abi vaja.
Mul on siin terve rida vanuseid ja need oleks vaja teha päevadeks.
Vanused on kirjas erinevat moodi:
24
1,5
8h
1/4h
6,5n
8k
9a10n
12a4k5n3p7h
2a21p
jne.
Kui tähte pole lõpus siis on aasta.
k - kuu
n - nädal
p - päev
h - tund
Kuidas nüüd teha PHP-s function mis arvutaks siis vanused päevatäpsusega.
Miskit ma siin olen pusinud aga ei oska päris lõpuni teha.
Spoiler 
function vanusP2evades($vanus)
{
$P_tund = '24'; // päev 24 tundi
$P_p2ev = '1'; // päev 1
$P_n2dal = '7'; // nädal 7 päeva
$P_kuu = '30,4369'; // kuu 30,4369 päeva
$P_aasta = '365,2425'; // aasta 365,2425 päeva
$vanusP = '';
{
// kui rida on tühi või sisaldab kriipsu '-', siis
if (trim($vanus) == '' OR trim($vanus) == '-')
{
// siis näitame, et vanust pole
$vanusP .= '-';
}else{
// kui rida pole tühi, siis kontrollime,
// kas rida sisaldab ainult numbreid
// ja et neid numbreid peab olema 1-3 tk
if (preg_match("'^\d*[0-9](|.\d*[0-9]|,\d*[0-9])?$'", $vanus))
{ // kui jah siis teisendame vanuse päevadeks
$vanusP .= $vanus*$P_aasta;
}else{
//SIIT EDASI LÄHB JUBA JAMAKS
// kui sisaldab ka tähti, siis kontrollime, kas rida sisaldab a
if (preg_match('/a/', $vanus)!==0){
// kui a esineb, siis teeme rea A kohalt katki
$splitted = preg_split('/a/', $vanus);
// arvutame esimese poole vanuse päevades
$v1 =$splitted[0]*$P_aasta;
$vanusP .= $v1;
}elseif (preg_match('/k/', $vanus)>0){
$splitted = preg_split('/k/', $vanus);
// arvutame esimese poole vanuse päevades
$v1 =$splitted[0]*$P_kuu;
$vanusP .= $v1;
}elseif (preg_match('/n/', $vanus)>0){
$splitted = preg_split('/n/', $vanus);
// arvutame esimese poole vanuse päevades
$v1 =$splitted[0]*$P_n2dal;
$vanusP .= $v1;
}elseif (preg_match('/p/', $vanus)>0){
$splitted = preg_split('/p/', $vanus);
// arvutame esimese poole vanuse päevades
$v1 =$splitted[0]*$P_p2ev;
$vanusP .= $v1;
}elseif (preg_match('/h/', $vanus)>0){
$splitted = preg_split('/h/', $vanus);
// arvutame esimese poole vanuse päevades
$v1 =$splitted[0]/$P_tund;
$vanusP .= $v1;
}
}
}
}
return 'Vanus on: '.$vanusP.' päeva';
}
|
PS! Tegu pole kooli ülesandega
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
13.02.2011 21:38:01
|
|
|
hea oleks need vanused kõigepealt sekunditeks arvutada ja siis time() -st maha lahutada.
ja mis vanused need üldse on? mis liigaastatest saab?
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
13.02.2011 22:04:26
|
|
|
tegelt ma ei saa üldse sellest ülesandest aru, kuid sul oleks vaja kõigepealt kogu see asi lahku lüüa. ma ei ole regulaaravaldistes eriti kodus, kuid midagi sellist:
$vanused = array(
'24',
'1,5',
'8h',
'1/4h',
'6,5n',
'8k',
'9a10n',
'12a4k5n3p7h',
'2a21p'
);
foreach($vanused as $vanus) {
preg_match_all('/(([0-9]|,|\/)+[a-z])|([0-9]|,|\/)+/', $vanus, $matches);
echo '<pre>';
var_dump($matches[0]);
} |
ka siis saad need stringid seal numbrite taga juba sekunditega asendada jne
EDIT: muutsin avaldist!
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Stemugram
HV kasutaja
liitunud: 02.12.2001
|
13.02.2011 22:47:55
|
|
|
Mul on tead surmaaeg ning inimese vanus (kui vanalt suri).
Vanused on kirjas erinevalt - mõned aasta täpsusega, mõned nädala täpsusega, mõned kuu täpsusega jne.
Nüüd oleks vaja mul need vanused viia ühte formaati, et keskmisi vanuseid arvutada ning ka umbkaudne sünniaeg teada saada.
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
13.02.2011 22:54:05
|
|
|
arvuta kõigepealt sekunditeks see inimese vanus. siis saadki ühte formaati!
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Stemugram
HV kasutaja
liitunud: 02.12.2001
|
13.02.2011 23:43:35
|
|
|
keevitaja kirjutas: |
arvuta kõigepealt sekunditeks see inimese vanus. siis saadki ühte formaati! |
No jah, seda ma siin teemas üritasingi küsida. Algselt küll tahtsin teha päevadeks aga võivad ka olla sekundid.
Kuidas see kood peaks täpselt välja nägema?
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
14.02.2011 00:13:01
|
|
|
aga kus sa jänni jääd? see kood mis ma kirjutasin, lööb ju ilusti lahti kõik. tulemusest peaksid sa juba oskama saada kätte nii numbri kui ka tähemärgi. või ei oska?
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Stemugram
HV kasutaja
liitunud: 02.12.2001
|
14.02.2011 00:16:14
|
|
|
Sealt edasi ei oska jah.
Peab vist mingi tsükli tegema mis kontrollib tähti ja teisendab numbrid õigesti.
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
14.02.2011 00:36:07
|
|
|
äkki see abiks. võimalik, et on ka parem viis.
tervet koodi ma nüüd kirjutama ei hakka. see võtab ikka aega
$vanus = '12a4k3p';
preg_match_all('/([0-9]+)/', $vanus, $number);
preg_match_all('/([a-z]+)/', $vanus, $string);
$vanus = 0;
for($i = 0;$i < count($string[0]);$i++) {
switch($string[0][$i]) {
case 'a':
$sekundid = 60*60*24*365;
break;
case 'k':
$sekundid = 60*60*24*30;
break;
case 'p':
$sekundid = 60*60*24;
break;
}
$vanus = $vanus + ($sekundid * $number[0][$i]);
}
echo $vanus; |
või siis paned need sekundid arraysse ja annad key-ks selle tähemärgi. nii vist oleks mõistlikum
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Stemugram
HV kasutaja
liitunud: 02.12.2001
|
14.02.2011 21:39:08
|
|
|
Tänud,
sain selle tööle nii nagu vaja.
-------
Ühe asjaga jäin ikka hätta. Nimelt osa vanuseid on ka murdudena aga need oleks vaja enne sekunditeks arvutamist saada komaga arvuks. Kuidas seda teha?
Välja näevad need sellised:
1/4
3/4p
8 3/4
4a2 1/2k
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
15.02.2011 21:42:38
|
|
|
$vanus = '4a2 1/2k';
preg_match('/[0-9]+\/[0-9]+/', $vanus, $matches);
eval("\$murd = $matches[0];");
echo $murd; |
ja siis tee ennem oma arvutusi seal $vanus sees str_replace asendus...
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
16.02.2011 17:35:14
|
|
|
PHP abi vaja.
Väga huvitav keiss, peale session_regenerate_id(true); ja session_destroy(); saab paar korda back nupule klõpsides sessioni tagasi. Ehk veebilehitseja suudab kuidagi meelde jätta sessiooni sess_kwdwkldwkdwd sisu ja kirjutada see uude sess_cfjeldcqldchehfvedwe. Tundub kuidagi brauseri põhine "iseärasus" olevat.
Ok, kui kasutaja sulgeb lehe pole probleemi, aga kui lahti jääb saab mõni teine sisse logida .. Kas selle vastu rohtu on? Välja logimine käib logout.php kaudu ja siis redircib index.php.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
16.02.2011 18:29:38
|
|
|
Oled kindel, et sul back nupuga session taastub? Arvan, et tegu lihtsa vahemälu lehega, mida browser näitab ja session on kinni, et kui kasutaja sealt tagasiklõpsitud lehelt teeb midagi sellist mis sisselogimist nõuab siis see ei toimi.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
16.02.2011 19:34:00
|
|
|
kopeeri see eelmise lehe url ära ja back nupu asemel paste browserisse. siis vaevalt see anomaalia toimib
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
16.02.2011 21:19:18
|
|
|
andrusny kirjutas: |
Oled kindel, et sul back nupuga session taastub? Arvan, et tegu lihtsa vahemälu lehega, mida browser näitab ja session on kinni, et kui kasutaja sealt tagasiklõpsitud lehelt teeb midagi sellist mis sisselogimist nõuab siis see ei toimi. |
Kusjuures on küll. Sessioni uues küpsises on vana sessiooni inf olemas (kontrollitud) ja lehel saab kõike teha ja toimetada ...
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
16.02.2011 21:37:37
|
|
|
aga suudad sa seda anomaaliat uue koodiga kah esile kutsuda. ehk siis teed ainult paar lehte, mis nende sessioonidega toimetab.
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
16.02.2011 22:35:08
|
|
|
Aga kui jätad selle üldse ära
session_regenerate_id(true);
ja lihtsalt hävitad sessioni. Või siis teed selle hoopis sessioni loomisel, mitte enne hävitamist. See on üks kahtlane koht, pole kasutanud kuid tundub, et annab uuele sessionile unikaalse ID, ja ma ei saa aru miks sa selle uue ID ennem session hävitamist teed?
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Timukas0
HV kasutaja

liitunud: 20.03.2007
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
17.02.2011 02:08:52
|
|
|
möh? sessiooni andmed on ikka serveris. sessiooni id ehk hash on küpsises. juhul kui küpsised on keelatud, siis saab hashi edasi anda ka get või post abil, kuid see ei ole turvakaalutlustel eriti hea mõte!
<?php
session_start();
if($_GET['destroy'] == 'true') {
session_regenerate_id();
session_destroy();
header('Location: '. $_SERVER['PHP_SELF']);
}
$_SESSION['test']++;
echo $_SESSION['test'].'<br />';
echo session_id().'<br />';
echo '<a href="' . $_SERVER['PHP_SELF'] . '?destroy=true">destroy</a>'; |
kui nüüd võtta ära session_regenerate_id(); siis sessiooni andmed hävitatakse, kuid sessiooni id jääb samaks!
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
17.02.2011 09:21:40
|
|
|
Ennem käis sessiooni hävitamine põhimõttel, kus kasutaja litsus nuppu ning käivitas isset($_POST) mis siis omakorda lasi käiku destroy ja regenerateid. Kõik toimis. Back nupuga ei saanud midagi teha. Nüüd, aga kasutades jquery akent suunan index.php liikluse logout.php, kuid sealt sama asi käima lasta saab hiljem 3 .. 4x back nupust sessioni taastada (samas kõik see sessioonide majandus käib nii nagu varem!). See kõlab küll ebaloogiliselt aga nii see on.
Siin pole küsimus ka küpsistes. Kui kasutaja logib välja, tema sessioon sess_aaaaaaaaaaaaa kustutatakse logout.php skriptiga serverist ja edasi index.php tagasi suunates genereerib server uue sess_bbbbbbbbbbbbbbb sessiooni. Too on muidugi tühi ja ei sisalda kasutaja nime ja paroole vms. mis on vaja sisse logimiseks. JA nüüd kui klõpsata hoolega back nuppu suudab mingi krd X ime läbi brauser sess_aaaaaaaaaaaaaaaa sisu sess_bbbbbbbbbbbbbbbbbb kopeerida ja leht taastub. Brauser PEAB seda infi kuskil hoidma ...
Tundub et kui 1 post saatmine uue sessiooniga ära teha, kaob ka probleem.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
17.02.2011 10:28:07
|
|
|
siis järelikult seda sessiooni ikka ei tapeta ära. muud võimalust pole.
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
karu
HV kasutaja
liitunud: 08.08.2002
|
17.02.2011 10:34:16
|
|
|
Le Inc kirjutas: |
Siin pole küsimus ka küpsistes. Kui kasutaja logib välja, tema sessioon sess_aaaaaaaaaaaaa kustutatakse logout.php skriptiga serverist ja edasi index.php tagasi suunates genereerib server uue sess_bbbbbbbbbbbbbbb sessiooni. Too on muidugi tühi ja ei sisalda kasutaja nime ja paroole vms. mis on vaja sisse logimiseks. JA nüüd kui klõpsata hoolega back nuppu suudab mingi krd X ime läbi brauser sess_aaaaaaaaaaaaaaaa sisu sess_bbbbbbbbbbbbbbbbbb kopeerida ja leht taastub. Brauser PEAB seda infi kuskil hoidma ... |
browser ei saa sess_x faili kirjutada, seda teeb sinu skript. Kui need andmed tulevad POST/GET kaudu siis jah, browser peab need andmed meeles.
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
17.02.2011 10:54:49
|
|
|
mnjah, eks ta loogish ole, uurime asja edasi.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
17.02.2011 10:56:11
|
|
|
prindi kogu aeg testimise käigus mingi sessioonis hoitav väärtus ja sessiooni id välja!
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
17.02.2011 13:43:51
|
|
|
tsitaat: |
Kui need andmed tulevad POST/GET kaudu siis jah |
Selles võibki konks olla, back lehel on ju kunagi sisse logitud, kuid logimine on valesti ülese ehitatud, peale logimist post data kustutamata jäetud ja kui nüüd lähed bäck nupuga tagasi on POST data alles ja genereeribki uuesti logina.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
|