Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Everything posted by Venom

  1. $path='/direktorija/ar/failiem/'; $dir=opendir($path); if (!isset($_POST['editfile'])) $_POST['editfile']=''; echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post"><select name="editfile">'; while(false!==($item=readdir($dir))) { switch ($item) { case '.': case '..': continue; default: if (is_dir($path.$item)) continue; echo '<option value="'.htmlspecialchars($item).'" '.($_POST['editfile']==$item?' selected="selected" ':'').'>'.$item; break; } } echo '</select>'; if (!empty($_POST['editfile'])) { if (isset($_POST['save']) && !empty($_POST['editable'])) { $fh=fopen($path.$_POST['editfile'],'w'); fwrite($fh,stripslashes($_POST['editable'])); fclose($fh); chmod($path.$_POST['editfile'],0755); } echo '<br><textarea style="width:90%;height:500px" name="editable">'.htmlspecialchars(@file_get_contents($_POST['editfile'])).'</textarea><br /><input name="save" value="save" /> '; } echo '</form>'; rakstīts tepat textareā, varētu būt kļūdas whatever sākums tev iraid
  2. <?php $conf=array( 1=>array('diagonal','sound','aux_in'),//tv 2=>array('sound','power','resistance'),//muz.centrs ); $dict=array( 'diagonal'=>'Diagonāle', 'sound'=>'Skaņa', // utt. ); /* tabula: id|cat_id| un visu iespējamo parametru kolonnas - sound|aux_in|power utt. */ $q=mysql_query('SELECT * FROM preces LIMIT 20'); while($r=mysql_fetch_assoc($q)) $apply=$conf[$r['cat_id']]; //tiek izvēlēti kuri lauki jāizvada foreach($apply as $param) echo '<li>'.$dict[$param].': '.(($r[$param]!='')?$r[$param]:'--').'</li>'; /* katram raksturparametram tiek izvadīts "Tulkojums" un, ja att. kolonā kaut kas iepildīts (varētu būt arī 0), tad att. vērtība - citādi --*/ ?>
  3. Venom

    sorteeshana

    tur uz rīkjoslas ir tāds butōns A>Z vai Z>A klikšķini uz kolonnas vai iezīmē vajadzīgos datus un tad uz kādu no tiem
  4. strip_tags() vietā var lietot htmlspecialchars(), lai tagu stringi atrādītot tieši kā uzrakstīti (<script> tiks pārveidots par <script>, tā kā šeit forumā)
  5. vajadzīgi, bet \ PO jau PO, bet gan tev kā kodētajam, gan man kā lasītājam, gan php kā pārsētājam būtu vieglāk/ātrāk/produktīvāk ja būtu ar apostrofiem tas ir ieteikums, nevis piespiedu bezalternatīva
  6. 2Gacha - kāpēc JĀBŪT? (кого-кого ...?) 2bubu - vai tad {} iekš [] kaut kas svarīgs? parasts chars, tāpatās kā kaučkāds [.]
  7. basic string syntax $x=1; echo 'This is $x'; outputs: This is $x echo "This is $x"; outputs: This is 1 echo '\n'; outputs: \n echo "\n"; outputs: [newline symbol] tas, kas ir iekš "" tiek papildus nopārsēts un ja tajā atrodas mainīgie un papildus specsimboli (\* variācijas, heksadecimālās un oktālās vērtības) - tie tiek aizstāti pret attiecīgo. Kad tu raksti \ iekš "", tad pārseris gaida, ka tālāk būs kāds specsimbols un to "apēd", tāpēc, kad gribi ierakstīt iekš tekstuālo \ iekš "", tev tas papildus jāslasho "\\", bet tā kā priekš regekspa daži simboli jānoslašo papildus, tas viss var izaugt kā "\\\\." (beigu rezultātā - \. ) ekvivalents '\.' (nb. izņēmums iekš apostrofiem ir '\\', jo ja būtu '\', tad no sākuma tiktu nostripslashots [\'] par ['] un beigās sanāk nepabeigts strings - ' (sāk stringu kodā) ' (ir iekš stringa, vērtībā) [nav beidzamā stringa slēdzējapostrofa kodā - kļūda]. echo "<input name=\"name\" />"; man ir grūtāk raxtīt, nekā echo '<input name="name" /> - what about u?
  8. "/[0-9~!@#\$%\^&\*\(\)\-_\+=\{\}\[\];:\'\"\\\|><,\.\/\?\\s\\n\\r\\t]/"== '/[0-9~!@#$%^&\*\\-_\+={};:\'"|\.!?\/\s'."\n\t\r".']/'
  9. Vienkārši taisi post uz to pašu lapu, piem. echo '<input name="smth" value="'.(!empty($_POST['smth']):htmlspecialchars($_POST['smth']):'').'">'; Lai dati paliktu pie back pogas iesaka formai lietot $_GET, kas pats par sevi nav neko labs variants.
  10. nu, piem. <form name="the" ...> <input name="in" onclick="func()"> </form> <script> function func() { document.the.in.value='Tas un tas'; //resp.document.formas nosaukums.ievadlauka nosaukums.propertijs } </script>' vai arī <input onclick="this.value='Šis unn tas'"> this ir atsauce uz tekoši aktīvo objektu - resp. onlcik aktivizē pašu inputu vai arī <input onclick="func(this)"> ... function func(elt) { elt.value='šis un tas par šo un to'; } vai arī <input id="smth" onclick="byid()"> ... function byid() { elt=document.getElementById('smth'); elt.value='Šis un tas par Meriju'; } ja ievadlauks ir textarea, tam varētu būt .text, nevis .value ja strādā ar <select>, der atcerēties [select objekts].selectedIndex - kurš option ir izvēlēts, [obj].value ir att. vērtība - tas kas <option value="..."> ar [obj].options[[obj].selectedIndex].text var dabūt tekošā elementa <option> leibla tekstu
  11. 2Gacha - nebija vieglāk rakstīt APOSTOFOS, nevis pēdiņās? mazāk backslashotu nāktos!
  12. Venom

    Enter par <br>

    tad vismaz $text=str_replace(array("\r\n","\n",'<br>'),'<br />',$text);
  13. varbūt der virzīties no pretējā - pārbaudīt vai ir vismaz 1 simbols, kas nav burts e.g. [0-9~!@#$%^&*()_+=-/.\?!]
  14. VenMySQL klases gabals: function p4q($tmp,$html=0)//prepare data to place in query { if ($html) return mysql_escape_string(htmlspecialchars($tmp)); return mysql_escape_string($tmp); } function pp4q($tmp,$html=0)//prepare $_POST data for query { if (empty($_POST[$tmp])) return; if (get_magic_quotes_gpc()) $_POST[$tmp]=stripslashes($_POST[$tmp]); return $this->p4q($_POST[$tmp],$html); }
  15. fputs(), bet tā ir tā pati. Būtībā nav (atskaitot dažādus move_uploaded_file()). a kas tev fwrite-ā nepatīk? varbūt nav vaina saglabāšanā, bet kā tu to mainīgo glabā? varbūt apsk. f-jas explode, serialize? NB: ja ir pieejams php manuālis *.chm formātā, tad apskatot kādas f-jas paskaidrojumu, zemāk var atrast linkus uz saistītām/līdzīgām f-jām.
  16. Venom

    Problēma!

    Tā uz ātro ieskatījos: function set_err($mess = '') { $this->errors[]=$mess; //nav ko lieki izsaukt funkcijas, kur var iztikt ar operatoru return false; } tad $this->set_err('whateva'); return false vietā var rakstīt uzreiz return $this->set_err('whateva'); un arī "Can not create table \"$database\"!" vieglāk un labāk rakstīt 'can not ...'.$database.'!' hints1: tā kā varētu būt, ka bieži tiek rakstīts failā, tad derētu nevis uzticēties lockiem (kuru winos nav, bet rakstīt no sākuma temp failā un pēc tam pārlikt to par vajadzīgo) hints2: tā kā tik un tā streso RAMu ar faila lasīšanu un explodēšanu - varbūt uzreiz apskaties serialise/unserialise f-jas? iekš php, ja masīvs ir tukšs tad if(masīvs) arī atgriešz false, resp. if(!count($this->errors)) { return false; } #192 $err = $this->errors; #193 $this->errors = array(); #194 return $err; var pārrakstīt kā $tmp=$this->errors; $this->errors=array(); return $tmp; NB: foreach($data as $d) { foreach(array_keys($d) as $key) echo $key.' => '.$d[$key].'<br>'; vietā lieto print '<pre>'.print_r($data,1).'</pre>'; iekš VenPad-a snippets "chk"
  17. `backticks` tiek lietotas, ja gribi tabulai/laukam piešķirt nosaukumu ar norezrvēto SQL/funkcijas nosaukumu. Piem ja gribi nosaukt lauku par `text`,`max` utml
  18. Venom

    Problēma!

    klasi pārāk gari skatīties, kad vēl darbs nedarīts stāv ;) + kaučkādi gatavie varianti laikam ir (Sqlite?) no redzēta orderBy: forā count() nevajadzētu izmantot, it īpaši, ja masīva var būt tūkstošiem elementu (nosacījums tiek novērtēts, lasi - count tiek pārrēķināts pie katra for cikla), + tad, kad jāizskrien masīvs, vienmēr labāk būtu izmantot predekrementu - --$i (n.b. šajā gadījumā arī inkrementu būtu jāizmanto ar "pre" - ++$i), resp. $tmp=count($this->result); while(--$tmp>-1) $sortarr[$i]=$this->result[$i][$colname]; un atkal jau foreach(array_keys() ... ) izskatās ļoti aizdomīgi - tā, it kā array_keys() tiktu izsaukts pie katra caurgājiena if ($order=='ASC') else ..., ja vien nedomā izmantot kādu citu orderēšanas veidu multisortā laikam gan derētu ieskatīties.
  19. Prasi, un tev būs atbildēts!
  20. ir papildus headers, resp. var norādīt alternatīvos nosaukumus vairākos kodējumos title*baitu prioritāte*=kodējums'val.iso-kods'title (resp.utf-8 tas varētu būt title*2=utf-8'lv'āšā.doc). Bet, of coss, visi pārlūki to pārsvarā ignorē (daži mailparseri gan havo). Problēma ir tajā, ka paša pārlūka save dialogs apstrādā faila nosaukumu kā ANSII. Pamēģini vienkārši nolinkot failu (noņem attachment headerī) - droši vien paņems un atvērs. Priekš IE bija kaučkāds patčs, kas iespējoja unicode rakstīšanu adreslogā (visādiem www.glāžšķūņurūķīši.lv) un att. failu nosaukumos. Droši vien nāksies izmantot iconv('utf-8','windows-1257//TRANSLIT',$filename);
  21. Venom

    Problēma!

    nu re kā cilvēkis sāka rosīties ;) savu mysql klasi lietoju jau kādu otro gadu un arvien atrodu ko pielabot, nesen atkal piesēdos un samazināju kodu par ~30 rindām (pie tam vēl pievienojot funkcionalitāti) Att. uz tā tur else izmantošanu: ja nav $mode, tad $tpl ir $this->file if(!$mode) { $tpl = file($this->file); $tpl = join(' ',$tpl); } else { $tpl = $this->file; } $tpl vienmēr ir $this->file, ja vien ne $mode izņēmums $tpl=$this->file; if(!$mode) { $tpl = file($this->file); $tpl = join(' ',$tpl); }
  22. Venom

    Problēma!

    Tomēr ir šādas tādas pretenzijas - semantiskas:iekš php class un function raxtīt maziem burtiem saprātiskas: redzot $this->file drīzāk rodas asociācijas ar $this->filename. Prasās $this->contents vai tml. f-jai setValue nav nekāda pamata - kāpēc gan nevarētu pa tieši bliezt klases instancē ($parser->tags=array..., $parser->values=..., $parser->replace()) f-ju replace atbrīvotu no liekā else un vispār - priekš kam value-siem un tag-iem būtu jāizmanto atsevišķi masīvi - vot saputrošos, ka man $tags[123] ir '%%head%%' un uzlikšu $values[121]='<title>...</title>' - labāk pa tiešo masīvs[mainīgais]=vērtība manā variantā clase būtu kaut kas līdzīgs: class Parse { var $file; var $contents; var $tags; function Parse($file='',$tags=array()) { static $tpl=array(); if ($tags) $this->tags=$tags; if ($file && !isset($tpl[$file])) $tpl[$file]=@join('',@file($this->file=$file)); return $this->contents=@$tpl[$file]; } function replace($tags=array(),$file='') { if ($file!=$this->file) $this->Parse($file); if ($tags) $this->tags=$tags; //variants ā - $tags['mainīgais']='vērtība'; foreach($this->tags as $key=>$value) $this->contents=str_replace('%%'.$key.'%%',$value,$this->contents); return $this->contents; //variants bē - $tags['%%mainīgais%%']='vērtība'; return $this->contents=str_replace(array_keys($tags),array_values($tags),$this->contents); } } (un arī tas nav beigu variants) padomā arī pie tā, kā esmu izveitojis parametrmainīgos - vienu un to pašu instanci var izmantot vairāku failu pārsešanai (pie tam kešojot template izejkodu), vai piemērot jaunos mainīgus tam pašam failaum utt.
  23. Venom

    Problēma!

    laikam atkārtošos, bet kāpēc gan nē, viss jaunais ir labi aizmirsts vecais $fh = fopen($file,'r'); $tpl = fread($fh,filesize($file)); fclose($fh); ir viena no pierastākām konstrukcijām, visās valodās. (Piem Pascal: AssignFile(handle,FileName); ... CloseFile(handle);) @join('',@file($file)); dara to pašu: atver hanldu uz failu kamēr nav faila beigas, nolasa to rindu pa rindai un saglabā masīvā aizver handlu un pēc tam ar join vēl saliek kopā - varētu būt pat lēnāk, nekā ja ar fread no handla tiek vienkārši nolasīts viss līdz galam vai handla datu beigām, nevis katrs ceļa chars pārbaudīts uz vienādību \0 vai \n vai kā nu tur. Vēl viens visai ātrs variants iraid ob_start(); include 'template.php'; //nb - esmu ļoti pret .inc un .tpl paplašinājumiem, cik tādu (svešu) esmu nolasījis... $tpl=ob_get_clean(); vai var pat nepārsēt katru templatre atsevišķi, bet nobliezt visu beigās: <?php ob_start(); include 'header.tpl'; include 'some.htm'; include 'some.php'; un citādi ?> <b>samaisīts htmls</b> ar %%template%% mainīgiem<?php utt. arī php var izmantot echo '%%template_mainīgais%% teikumā utt';, piem. while($r=mysql_fetch_array($q)) echo '%%date%%'.$r['date'].'%%/date%%'; un kaut kur pašās beigās: $allhtml=ob_end_clean(); include 'template_apstrāde.php'; foreach($template_var as $key=>$val) $allhtml=str_replace('%%'.$key.'%%',$val,$allhtml); echo $allhtml; flush(); un var pat to visu $allhtml norepleisotu saglabāt failā fwrite($fp=fopen('cache/'.md5($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']),'w'),$allhtml); fclose($fp); bet pirms sākt ob_start() pašā sākumā pārbaudīt if (time()-filemtime($cachefile=md5(_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']))<1800) //e.g. kešs tiek atjaunots katras 3 stundas { include $cachefile; exit; }//citādi tiek izpildīts tālākais kods - notiek pārsēšana un ieglabāšana kešfailā ?>
×
×
  • Create New...