Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Everything posted by Venom

  1. te jau nav nebija runas kam taisnība, kam nē - vairāk "kā būtu labāk"
  2. mjā, pēc dizaina un vecuma var redzēt, ka būs kas pārdabisks
  3. I doubt it hardly. php+MS Access - iespējams, bet "caur dirsu" Vieglāk paņemt MySQL ar phpMyAdmin, bet no accessa slēgties MySQL datubāzei caur ODBC.
  4. a) * ja serveris pieļauj, uzlikt cron/ar uzdevumu, kas izsauks att. skriptu, kurš nodzēsīs vajadzīgo B) pamatpierasījumos atlasīt tikai tos ier., kas jaunāki par 2 ned. (ja dzēšana nav obligāta) c) * katru dienu pie katras lapas ielādes dzēst kaut kā baisi (var radīt lielu slodzi uz mysql), es izmantotu šito te: @include_once('timeout.php'); if (empty($timeout)) { $fp=fopen('timeout.php','w'); fwrite($fp,'<?php $timeout='.strtotime('+2 weeks').'; ?>'); fclose($fp); } elseif (gmmktime()>=$timeout) { mysql_query('DELETE LOW_PRIORITY FROM table WHERE `tstamp`<NOW()'); @unlink('timeout.php'); } kas notiek: tiek pievienots fails timeout.php, kurā būtu jābūt $timeout mainīgajam, kas ir timestamps tam brīdim, kad ieraksts tika dzēsts pēdejoreiz+2 nedēļas att. ja $timeout nav/tukšs, šāds fails tiek noģenerēts, ja ir, tiek pārbau'dīts, vai tekošais laiks nav pārsniedzis norādīto, un, ja ir, tiek dzēsti ieraksti + pats tiemout.php fails (viņš tiks noģenerēts no jauna pie nākošās lapas ielādes)
  5. nice one. Piezīmēm var piekrist, bet tas vairāk ir atkarīgs no pieraduma. Es uzskatu, ka tad kad vajadzēs, tad jau gan par {} neaizmirsis, jo par tādu nepieciešamību tik un tā norāda indentācija (kļūda no tās pašas kategorijas, kā agrāk cīņas karstumā gadījas == vietā = ierakstīt), tā paša indentācija parāda, ka operācija ir augstāknorādā pārbadudījuma izpildījums, turklāt tiek saudzēti pirksti: if () { _ } izmantotās pogu operācijas - i,f,space,shift pieturot,(,),enter,shift pieturot,{,},left arrow,enter,enter,arrow-up, space/tab - kad if () _ ir - i,f,space,shift pieturot,(,),enter, space/tab
  6. att. uz 1/2/3 tabulu racionalizācija prasa tomēr likt 1/2/3 (pie tam column tips ir unsigned tinyint/char(1), nevis enum) 100 ieraksti ar image/png ~ 900B 100 ieraksti ar 1 ~ 100B failu nosaukumi bez .xxx dēļ tā paša iemesla (katram ierakstam tiek ietaupīti 4 baiti) imagetype switchot var pašā selektā - SELECT ELT(FIELD(`type`,1,2,3),'image/jpeg','image/png','image/gif') as `type` tāpat ar paplašinājumiem [ CONCAT(`imagefile`,'.',ELT(FIELD(`type`,1,2,3),'jpg','png',''gif)) ] vienīgais es visus jpeg pārsaucu par jpg (nu nepatīk man 4 burtu paplašinājumi) pie tam, visu vajadzīgo info, uploadu un apstrādi nodrošina pašveidota klase, tā kā būtībā viss tiek novest līdz $VenImage->upload('formas elt-ta name',1 (noģenerēt tumbnailu)); [NB: bet es sevi pieķeru pie tā, ka baigi visu optimizēju un universalizēju, piem. pēdējā CMS ko rakstīju (iLink Lite - ar rakstu, attēlu, piesaistņu piev./upd./thumbnailošanu; vairāku autoru autorizāciju; bezgalīgi atzarojamo izvēļņu (vairāku) radīšanu caur webu; ar wysiwg iespājām; mailu spam aizsardzību; pie tam viss vairākās valodās) neieskaitot standarta wysiwg js, kas nav manis paša rakstīts un pats par sevi ir ap 200kb (arī apgraizīts no liekā) - aizņem 65 Kb un pie tam apm. 2 minūtēs es varu nomainīt visu no dizaina līdz izvēļņu loģikai. Tādi traki esam]
  7. Nu tad izvēlies no visiem pieejamiem, vienkārši norādot kārtas numuru, e.g.: "SELECT virsraksts FROM raksti LIMIT ".$kartas_numurs.",1" izvéléties visus pieejamos virskrakstus (neatkarīgi no Id), no tiem atgriezt n-to NB: koda profesionalitātes paaugstināšanai/optimizācijai 1) īsāki mainīgo nosaukumi (vēlams līdz 6-8 simb) 1.a) mainīgo nosaukumi angliski, vai vismaz anglificēti (nekad nezini ar kādu vajadzēs apmainīties kodiem, un vispār jāmācas tā anglene). 2) iekš php vērtības 0 un 0.0, "", '', NULL pielīdzināmas false, bet nenulles vērtības (arī -1.2) tiek uzskatītas par true, tāpēc if (mysql_num_rows ($nakam_raksts_kverijs) != 0) vēlams rakstīt kā if (mysql_num_rows ($nakam_raksts_kverijs)) (pirmajā gadījumā tiek izpildīts numr_rows, tā vietā atgriesta vērtība un vērtība salīdzināta ar 0, rezultāts tiek atgriests un novērtēts if-ā; otrajā - tiek atgr. num_rows vērtība un nodota if-am - viena operācija ietaupīta) 3) "<a class=\"talak\" style=\"font-size: 18px;\" href=\"index.php?darbs=raksts&id=$nakam_raksts_id\">| $nakam_raksts_nos[0] |→<a>" tu pats neesi nomocījies addslashojot " iekš ""? vai nav vieglāk '<a class="talak" style="font-size: 18px;" href="index.php?darbs=raksts&id='.$nakam_raksts_id.'">| '.$nakam_raksts_nos[0].' |→<a>' 4) HMLT entītijām jāliek tomēr tas ; beigās, resp. → jāraksta kā → (un tāpat ar visādiem € © utt. es zinu, IE rāda, bet daži citi pārlūki - nē) 5) no šitādām konstrukcijām: if (mysql_num_rows ($iepr_raksts_kverijs) != 0) // iepr. un nakam. raksts {$iepr_raksts_out = "<a class=\"talak\" style=\"font-size: 18px;\" href=\"index.php?darbs=raksts&id=$iepr_raksts_id\">←| $iepr_raksts_nos[0] |<a>";} // iepr. un nakam. raksts else {$iepr_raksts_out = "";} vēlams izvairīties. Šajā gadījumā vissam vieņmēr jābūt ok, bet kad būs vairāki else nosacījumi, var gadīties, ka neviens no tiem neizpildīsies un mainīgais $iepr_raksts_out vispār netiks definēts (es ceru, tev iekš php.ini erro_reporting=E_ALL?). Bet šajā gadījumā es atkal piesiešos liekām operācijām, resp. {} atsviešanai, it īpaši, ja iekš {} ir tikai viens nosacījums $iepr_raksts_out=''; if (mysql_num_rows ($iepr_raksts_kverijs)) $iepr_raksts_out = '<a classs ... /a>'; ir daudz īsāk un novērš to, ka mainīgais var tikt nenodefinēts 6) forums nesaglabā visu koda formatējuma, bet no tā cik saglabā, var saprast, ka viš tev navaid īpaši identots (noformēts ar atsrapēm). Mans ieteikums mācīties taisīt atstarpes, loģiski strukturējot kodu, pie tam vēlams } novietot tieši zem { un tajā atrodošos operācijas novirzīt pa labi ar vismaz 1 atstarpi: if (...) { _$a=1; _if (...) _{ __$b=1; __$c=2; _} } It īpaši šito novērtēsi koda redaktorā, kuram ir funkcija kad {} var "salocīt" ar +/-.
  8. labojums: bildes ieteicams tomēr glabāt failos, bet mysqlā tikai to nosaukumus un/vai norādes uz tipu/direktoriju. Es parasti izmantoju variantu ... type imagefile thumb.. sense ... 1 ... img001....1..........1 ....2 ... img002....0..........2 1. tips nozīmē jpg/gif/png/bmp utt. (parasti tikai 1ie 3) 2. - bildes nosaukums bez paplašinājuma 3. vai ir noģenerēts tumbnails 4. bildes "nozīme", resp. glabājamo direktoriju pārslēgs fs struktūra: sense\bildes fails sens_thumb\bildes thumbs ar tādu pašu nosaukumu plusi ir vairāki a) mazāka datu bāze (neglabājot failus iekš tās) - vieglāka portabilitāte (paskatīšos es uz tevi, kad vajadzēs gatavo db pārnest uz maksas hostingu, kur piekļue mysql tikai ar phpMyAdmin no localhost :blink: B) gribam nomainīt mapju struktūru - lūdzu (tikai skriptā jāieraksta $opt['sense'][1], piem.) c) gribam bildei nomainīt formātu? nomainam type d) uzreiz no mysql pieprasījuma var saprast, vai ir thumbs un attiecīgi ģenerēt ilustrācijas utml
  9. Pag, pag. Tu gribi lai tas source.php "nokopējās" un izpildās uz _mana_ datora? Ka tik tu nejauc servera un klienta tehnoloģijas. Ko tev tas script.php izpilda?
  10. navaid (vārds, pretējs iraid) Bet var paņemt priekšā kādu profesionālu saita statistikas/skaitītāju sistēmu, kur uzdevums diezgan līdzīgs - ieskaitīt katru personu tikai vienreiz
  11. Venom

    PHP Search

    Jā kaut kur pa ceļam connection aprāvās ;) Augstākminētā koda vietā es izmantotu if (!strpos(strip_tags($text),$key)===false) vienkārši optimizācijas pēc, jo strstr atgriež veselu stringa gabalu (resp. tas var būt xxKb teksts, kurā pēdējais vārds ir meklējamais), bet strpos - pirmo pozīciju (vai false, ja netika atrasts, bet jāuzmanās, jo pozīcija var būt 0-tā, tāpēc ===) Vispārējā veidā tekstu starp tagiem meklētu ar regulāro izteikumu, līdzīgu šitam gabalam [nav mēģināts, jo parasti tekstu arī neiezīmēju]: /\<[^>]+\>(.*)(\<\/[^>]+\>|\<[^>]+\>)/sm * teksta gabals, kas sākas ar < un tam seko vismaz viens burts, pēc tam >, pēc kura "teksts starp tagiem", un tags tiek vai nu aizvērts - </ kuram seko vismaz viens burts, tad seko > - vai tiek atvērts jauns tags (lai iegūtu arī tekstu no <option...>teksts <option...> u.l.); teksts starp tagiem var būt vairākās līnijās * Pamainot to uz kaut ko līdzīgu '/\<[^>]+\>(.*)('.$meklejamais teksts.')(.*)(\<\/[^>]+\>|\<[^>]+\>)/ism' varam izmantot nomainīšanu, kas saglabā arī atrastā teksta keisu (case, piemirsās tas lv vārds) preg_replace($preg,'\\1<b>\\2</b>\\3') (of course, te jautājums par tekstu, kas sakrīt, bet atkārtojas vairākkārt, droši vien jāizmanto /U vai jāpiedomā klāt str_replace preg_replace-am kā otro parametru) Pregu var izmantot arī MySQL pieprasījumā, jo MySQLam ir tāda fiška kā SELECT ... WHERE `kolonna` REGEXP 'reg.izteiksme', resp. var uzreiz atlasīt tikai tādas kolonnas, kur teksts ir "starp tagiem" un mazināt slodzi, ja kāds searchā ievada "href"
  12. ja nav HTTP_X_FORWARDED_FOR spēkā stājas sessiju un it īpaši cūkiju izmantošana
  13. Venom

    pazinjojumi

    ignorējam postu (aizgājis otrreiz)
  14. Venom

    pazinjojumi

    un vēl universālāk (ķipa "a man garāk" ;) ): <script type="text/javascript"> function ud(a) { pth=a.href.split('='); return confirm('Tiešām dzēst ierakstu ar numuru '+pth[pth.length-1]+'?'); } </script> <a href="?del=5" onclick="return ud(this)">here</a> visiem linkiem jāpievieno tas onclick="return ud(this)" un jānodrošina, ka tas numurs ir pēc pēdejā "=" iekš linka. bet tas tomēr neatceļ situāciju ar javascript atslēgšanu 2 rumpels: 3 bet - 1. ja saprati, ka confirm pas atgriež true/false atšķirībā via bija nospiests OK/Cancel, tad priekš kam lieki dublēt? 2. priekš kam liekais mesage variablis? 3. priekš kam liekiem {} apkārt vienoperāciju if darbībām (return ...)
  15. Venom

    pazinjojumi

    2 rukits: JavaScript izpildās uz TAVA datora/mobilā/whatever, TAVA pārlūkā php izpildās uz MANA(mana hostera) servera/datora JavaScript TU - SEV vari atslēgt PHP varu atslēgt tikai ES Un arī ja tev ir tā pārbaude ar JavaScript, es aizeju kaut kur uz (piemērs IE)Tools>Internet Options>Security>Custom Level>Scripting\Active Scripting->Disable un tava pārbaude ļauj man bliezt visu ko kā vien gribu. Ar php es izmantotu šādu variantu: <form onsubmit="return parbaude()" method="post" action="delete.php"> <script> document.write('<input type="hidden" name="js_enabled" value="yes" />'); </script> <input type="checkbox" name="deletable[]" value="<šeit elementa unikāls id>" /> <input type="checkbox" name="deletable[]" value="<šeit elementa unikāls id>" /> ... </form> delete.php: if (!empty($_POST['js_enabled'])) { //uzskatām, ka JavaScript bija ieslēgts, jo viņš ir izrakstījis to slēpto lauku dzēšam } else { /* uzsākam/atsākam sesiju - mehānismu kas ļauj nodot datus no vienas php lapas uz citu, neizmantojot klienta pārlūku */ if (!session_id()) session_start(); $_SESSION['deletable']=array(); $_SESSION['deletable']=$_POST['deletable']; //apstrādājam formas (sk. zemāk) atbildes if (!empty($_POST['yes']) && $_SESSION['delete']) { //dzēšam nost, piem no MySQL to var darīt šādi mysql_query("DELETE FROM tabula WHERE id IN (".join(',',$_SESSION['deletable']).")"); } if (!empty($_POST['no'])) else { //tika atbildēts ar nē, atsviežam lietotāju atpakaļ uz iesākuma lapu (redirect) header('Location: index.php'); } ?> <form method="post" action="delete.php"> Vai tiešām dzēst iepriekš izvēlētos elementus? <input type="submit" name="yes" value="Jā" /> <input type="submit" name="no" value="Nē" /> </form> <?php } Resp. ja lietotājam ir bijis JavaSript, netiek vaicāts "vēlreiz", ja nav bijis - ar pašu php noģenerējam papildus formu, kas vēlreiz pavaicā vai to-to dzēst vai nē.
  16. Absolute paranoia. Mani 8 padomi kā liegt lietotājiem manipulēt ar svarīgiem datiem: 1. Ienāk balsošanas lapā - atveras sessija [session_start()], tajā glabājas pārbaude, cik reizes ir nobalsojis (resp. if ($_SESSION['voted']) neakceptē) - tādā veidā neļaujam balsot vairākkārt vienas pārlūka sesijas ietvaros (pirms balsot vēlreiz pārlūks jāaizver un jāatver no jauna). 2. Mēģina saglabāties kūkijs / ar to pašu fīču pārbaudi. 3. Iekš db saglabājas un tiek pārbaudīts pilns $_SERVER [...] REMOTE_ADDR, HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP salikums (IP ko saņēmis serveris/ IP, kuru nododis proxy/IP, ko var nosūtīt pārlūks savas pieklājības pēc). 4. Ja saitā ir kāda ielogošanas sistēma, tad ielogotiem lietotājiem izdara savu ierakstu par nobalsošanu un pārbauda otrreizējo ievadu pēc tās. 5. $_SERVER['HTTP_REFERER'] pārbaude (ķipa lai balsotu tikai no tava saita) 6. Formas mainīgo nosaukumu dinamizēšana, piem. izvadot izmantot <input name="'.session_id().'_balsot" /> un pārbaude if (!empty($_POST[session_id().'_balsot'])), un/vai ieviešot formas elementu nosaukumos arī random elementu, kas mainās katru reizi norefrešojot lapu: apstrādājam iepriekšējo nohashoto submitu, ja tāds ir bijis - if (!empty($_POST[$_SESSION['hash'].'_balsot'])) pārbaudām rezultātus un ieglabājam, uzstādot attiecīgos "flag"us sesijās un cūkijos noģenerējam jauno hashu $_SESSION['hash']=session_id().rand(0,100); izvadām formu elementus nosaukumiem piesaistot jaunu $_SESSION['hash'] 7. ievadām kūkijā/sessijā papildus taimoutu (par kuru tiek paziņots lietotājam, ķipa next vote in 30 seconds). 8. atbildes variants tiek ievadīts pašrocīgi/no attēla. 2. un 3. ne vienmēr dod vēlamo rezultātu (piem 2. var arī liegt nobalsot citai personai, kas pārlogojusies tajā pašā datorā, ja tas ir daudzmaz "publisks"/viens logins mājas datorā), 4. var pieļaut vienam un tam pašam/i nobalsot divas reizes - ielogotam/i un neielogotai, bet, manuprāt, 1. vismaz var atsist "vēlēšanos" balsot vairākkārt (jāver ciet browseris, jāiet uz adresi, jāizvēlas variants, jāspiež submits, atkārtot). 5 un 6 minimizē "leeching" iespējas balsot no cita saita/simulēt HTTP pieprasījumus/refreshus. 7. iet papildus "iebiedēšanai", bet arī var nostrādāt. 8. tāpat nogurdina, bet ir diezgan efektīvs (sk. lmt sms servisu).
  17. Lowercase? Pamēģini šito: preg_replace('/('.$str.')/im','<b>\\1</b>',$text);
  18. Venom

    PHP Search

    > 2.Pārbaudīt vai meklējamais vārds ir tekstā - strstr(strip_tags($text),$key) Es izma
  19. preg_replace('/'.$str.'/im','<b>'.$str.'</b>',$text), lai mani parauj!
  20. atšķirībā no tā, kāda veida aizliegums uz "ārzemēm" ir tavam ISP, varētu noderēt arī vienkārši to nodublēt ar *.lv domēnu (te var noderēt www.from.lv)
  21. mana pieeja: ar DW uztaisīt "dizainu" ar "table layoutu" (XHTML) pēc tam ar VenPad un rociņām kur iespējams palabojam kodu (aizvietojam tabulas ar div utml)
  22. trešais variants: rakstu tabulai pievienot kolonnu "komentāru skaits" (UNSIGNED INT DEFAULT 0) un pie komentāra pievienošanas (atsevišķā tabulā) to atajunot ar UPDATE raksti SET `comment`=`comment`+1 WHERE rakstaID=''tādsuntāds'. Vismazāka slodze taisot SELECT * FROM raksti.
  23. 1. variants: no sākuma ielasi nosaukumus masīvā, tad to sizkārto (izmanto asort() / natcasesort() utml), pēc tam izvadi 2. variants lasi nosaukumus no kāda 'dir /0 sortorder N' komandas atgrieztā, bet tur papildus jāpārsē + uz hosķingiem varētu neiet
×
×
  • Create New...