praegune kellaaeg 18.06.2025 02:09:53
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
22.05.2014 10:33:18
funktsioon |
|
|
Miks see kood annab tulemuseks:
5, 4, 3, 2, 1,
T:
Aga mitte:
T: 6
php:
|
<? function test($count){ $count=$count+1; if($count>5){ return $count; } else{ test($count); } } echo "<br />T: ".test (0); ?>
|
Miks see kood üldse passib rida echo $count.", ";?
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
22.05.2014 11:14:38
|
|
|
Sest see on kirjutatud täpselt nii, et tulemus oleks:
5, 4, 3, 2, 1,
T:
Miks?
Lahkame veits koodi.
Iteratsioonil 1, ehk siis kui funktsioon välja kutsutakse:
$count = 1;
Järelikult läheb käiku else blockis olev test($count); Pane tähele. Siin ei ole returni, mis tähendab et see funktsioon ei tagasta midagi.
Iteratsioonil 2, ehk siis kui funktsioon kutsutakse välja juba rekursiivselt:
$count = 2;
Jälle läheb käiku else block. Sama teema, returni pole niiet midagi ei tagastata eelmisele funktsioonile.
JNE kuniks $count > 5;
Siis returnitakse 1 korra, ehk eelmisele funktsioonile ning siis kõik eelenvad funktsioonid prindivad tagurpiri $counti välja.
Ehk siis:
reaalne $count on siis igas funktsioonis +1.
test(0) -> test(1) -> test(2) -> test(3) -> test(4) -> test(5) (returnib, niiet echo ei jookse) -> test(4) lõpetab if blocki ning echob -> test(3) -> lõpetab if blocki ning echob -> test(2) -> lõpetab if blocki ning echob -> test(1) -> lõpetab if blocki ning echob -> jookseb lõpuks echo T:, test(0) ei tagasta midagi.
Kui sa tahad, et see teeks seda mida sa kirjeldad, siis:
<?
function test($count){
$count=$count+1;
if($count>5){
return $count;
}
else{
return test($count);
}
}
echo "<br />T: ".test(0);
?>
|
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
22.05.2014 11:25:34
|
|
|
Redikate, aah, niimoodi. Pole varem kordagi kasutanud PHP funktsioonis sellesama funktsiooni kutset ning ei mõistnud täpselt returni toimimist.
Tänan põhjaliku ja arusaadava vastuse eest!
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
22.05.2014 11:35:45
|
|
|
Antud juhul on muidugi rekursiivse funktsiooni kasutamine liiast ning võiks lahendada itereerimisega.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
22.05.2014 11:36:09
|
|
|
Selle asja nimi on rekursioon ehk inglise keeles recursion. Kui seda õigesti ja õiges kohas kasutada, siis on ta hea, aga kui hooletult kasutada, siis ei pea probleeme kaua ootama
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
22.05.2014 16:08:45
|
|
|
Redikate kirjutas: |
Antud juhul on muidugi rekursiivse funktsiooni kasutamine liiast ning võiks lahendada itereerimisega. |
Jah, see oli vaid lihtsustatud funktsioon. Tegelik funktsioon, mis vajab veel testimist, on see:
php:
|
<? function preparefile($file4prep,$filedir,$xcount,$imagesize){ $xcount=$xcount+1; if(! file_exists("../images/". $filedir. "/". $file4prep)){ if(preg_match("/_ver(\d+)\./", $file4prep, $matches)){ $explode= explode("_ver". $matches[1]. ".", $file4prep); $implode= implode("_ver". $matches[1]. $imagesize. ".", $explode); } else{ $implode= implode("_ver". $xcount. $imagesize. ".", $explode); } } else{ if(preg_match("/_ver(\d+)\./", $file4prep, $matches)){ $explode= explode("_ver". $matches[1]. ".", $file4prep); $matches[1]=$matches[1]+$xcount; $implode= implode("_ver". $matches[1]. $imagesize. ".", $explode); } else{ $implode= implode("_ver". $xcount. $imagesize. ".", $explode); } } return preparefile($file4prep,$filedir,$xcount,$imagesize); } else{ return "../images/".$filedir."/".$implode; } } $source_t=$_FILES['fupload'.$x.'_thumb']['tmp_name']; $target_t=preparefile($_FILES['fupload'.$x]['name'],$userdir,0,"_thumb"); $source=$_FILES['fupload'.$x]['tmp_name']; $target=preparefile($_FILES['fupload'.$x]['name'],$userdir,0,""); ?>
|
See on osa koodist, mis sisaldab veel mitmeid veatuvastusi failide sisestamisel ja salvestamisel. Kui see funktsioon veel läbib katsetena meelevaldsed sisendid, siis peaks sellega saama üle laadida vaid pilte ning selliselt, et iga isiku kohta on kataloogis eraldi kaust, mis sisaldab kõiki temaga seotud faile. Piltide juurkataloogis on veel tekstifail, mis loob seose kaustade ja kasutajate nimede vahel, kuna kasutaja nimed võivad sisaldada URL-i jaoks sobimatuid märke. Kasutaja nimest ja sisendfailidest trimmitakse ära URL-i jaoks sobimatud sümbolid.
Kuna kausta nimi on võimalikult sarnane kasutaja nimega, millest on välja trimmitud sobimatud märgid, võib juhtuda harukordne juhus, kus pärast trimmimist saavad kahe erineva inimese kausta nimeks URL-ina ühine kaust. Sellele pean lahenduse leidma.
Ja et pildid oleksid korrektselt vormindatud, laetakse pisipilt arvutist, kuid nimeks saab sellele suure pildi nimi + lõpus "_thumb", et failid asuksid koos. Samanimelised failid saavad eristamiseks juurde sõned "_ver[number]".
Selliselt saab brutaalselt pilte lisada, muuta ja kustutada ka otse veebikataloogist. Vahepeal oli mõte andmebaasi kasutada, et seal seosed luua, aga kui miski läheb kausta ja andmebaasi struktuuri vahel nihu, siis võib tulemuseks olla pehmelt öeldes puder ja kapsad.
PS! Mu loogika on vist vilets, sest vahepeal jookseb juhe kokku ja ei saa essugi aru, mis seni tehtud on. Peaks õppima kuidagi lihtsamaid funktsioone tegema või kuidagi mitme funktsiooni vahel asjad ära jaotama. Samas vihkan seda.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
22.05.2014 17:35:37
|
|
|
Ma pakuks, et need kaustanimed võiks olla lihtsalt numbrid, igal kasutajal oma, milleks mingeid veidraid kasutajanimelisi kaustu ilma täppideta? Sa hakkad ju kasutaja andmeid kusagil hoidma arvatavasti andmebaasis, siis pole ju mingit mõtet, et on kasutajanimeline, kasuta kasutaja ID näiteks. Ära lase kunagi kasutajal salvestada oma nimega faile ta võib sulle sinn tahta panna faili Minu metsikud rannapildid Muhumaal. Mina Malle Jüri ja koer 2000.jpg või veel sootuks midagi hullemat. Genereeri üleslaetavale failile unikaalne nimi, salvestad selle kasutaja piltide andmebaasi ja pildi originaal nimi läheb andmebaasi eraldi väljale. Võid anda kasutajale veel võimaluse pildinime muutmiseks siis läheks uus nimi sinna nime väljale.
Tutvu ka sellega, mis annab php abil failist kätte saada, et ei peaks failinime järgi laiendeid otsima vms. http://www.php.net/manual/en/function.filetype.php
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
22.05.2014 18:39:22
|
|
|
andrusny, puhtalt lihtsuse ja mugavuse mõttes. Kaustanimedest trimmitakse ebasobivad sümbolid välja, s.h kõik punktid, failinimedes punktid jäävad. Faili nimeks võibki olla kasutaja poolt täiesti suvalt valitud, peaasi, et neid olemasolevatega üle ei kirjutata. Muid andmeid failidega ei kaasnegi, vaid kasutaja-kaust-pildid kaustas.
Sinu lahendus oleks muidugi korrektsem.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
23.05.2014 15:28:13
|
|
|
See ei ole tegelikult lihtsus ja mugavus. Andmebaas ja juhuslikud failinimed teeks selle märksa mugavamaks. Kood oleks lihtsam, tõenäosus, et kunagi miskit pekki läheb, on väiksem jne. Baasi ja failide sünkist välja minemine - kuidas see juhtuma peaks? Kui sa just kedagi otse failikataloogi lammutama ei lase ja kogu ligipääs toimub vaid sinu rakenduse kaudu, siis ei saa seda olukorda tekkida. (Eeldusel, et sa korralikku koodi oled suutnud kirjutada)
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
23.05.2014 16:03:04
|
|
|
Noh väike mõte sellel ju on, ka ajalehed koostavad viimasel ajal urle kujut ajaleht.xx/artikkel/pets-käis-koplis-tüli-norimas ehk kui anda kellelegi link minudoomen.ee/kasutaja/püüdsin-kolme-kilose-haugi.jpg siis erinevalt kujust minudoomen.ee/pilt.php?user=t5346456&content=5645765756 saab juba lingist aimu, millega tegemist võib olla. Iseasi muidugi kas see tekst peaks just primaarvõti olema.
viimati muutis napoleon 23.05.2014 22:26:46, muudetud 1 kord |
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
23.05.2014 17:47:58
|
|
|
Asja mõte ongi selles, et faili nime või kausta kaudu saaks inimmõistuse abil aimu, millise pildi või millise kasutajaga on tegu. Kui see vabas vormis kausta või faili nimi peaks URL-is niikuinii olema, võib see samahästi olla seesamune nn primaarvõti.
Näiteks seesama phpBB foorumid - https://foorum.hinnavaatlus.ee/viewtopic.php?t=610971&start=0&postdays=0&postorder=asc&highlight=
Saa sa nüüd aru, kuhu see link viib. Peab enne avama. Inimmõistuse jaoks sõbralikud URL-id on paremad.
Oma kodukal olengi kasutanud primaarvõtmena ID numbrit ehk kuni ID-d ei muuda, võib URL-i lisada või eemaldada ükskõik mida, link avaneb -> http://liivanelord.planet.ee/?id=375&Windows_7 Kui seda "kommentaari" URL-is ei oleks, oleks märkimisväärselt ebamugavam neist linkidest ülevaade saada.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
sigakoer
Kreisi kasutaja
liitunud: 23.01.2004
|
28.05.2014 10:41:41
|
|
|
LiivaneLord kirjutas: |
PS! Mu loogika on vist vilets, sest vahepeal jookseb juhe kokku ja ei saa essugi aru, mis seni tehtud on. Peaks õppima kuidagi lihtsamaid funktsioone tegema või kuidagi mitme funktsiooni vahel asjad ära jaotama. Samas vihkan seda.  |
Asi on selles et sa ise kirjutad oma koodi keeruliseks. Paar väga olulist nõuannet sulle:
- Elimineeri korduv kood!!! Sul ei tohiks olla põhjust kirjutada samu ridu rohkem kui üks kord (või äärmisel juhul kaks). See on üks fundamentaalsemaid reegleid hea koodi juures. Korduv kood on maru suur vigade allikas ning teeb koodi pikemaks ja keerulisemaks kui see tegelikult on. Näiteks 11-12 ja 22-23 on täpselt ühesugused; kui rida 18 ühe rea võrra nihutada on 7-8 ja 17-19 ka täpselt samad; 34-36 ja 37-39 erinevad ka ainult "" ja "_thumb" osas. Tee need eraldi funktsioonideks ning see viimane string nagu "_thumb" anna funktsiooni parameetriks ning $move/$move_t võta väljundist. Kogu su keeruline if() lause kuivaks täitsa kokku.
- Kasuta arusaadavaid nimesid funktsioonide ja muutujate juures. Ära karda kasutada pikemaid ent arusaadavaid nimesid. Normaalsetel tööriistadel on autocomplete. Ära karda defineerida lühikesi ent arusaadava nimega funktsioone näiteks
"../images/".$filedir."/".$implode |
tarbeks.
- Tõenäoliselt on sul seal turvaauke, aga ei viitsi praegu täpselt süveneda.
|
|
Kommentaarid: 36 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
35 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
28.05.2014 18:59:07
|
|
|
sigakoer kirjutas: |
- Tõenäoliselt on sul seal turvaauke, aga ei viitsi praegu täpselt süveneda.  |
Kardan ka seda.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|