Jump to content
php.lv forumi

Lynx

Reģistrētie lietotāji
  • Posts

    228
  • Joined

  • Last visited

Everything posted by Lynx

  1. Lynx

    Esmu piemirsis

    Tavā piemērā pietiek ar ", tieši ļoti labi html kodu sanāk izvadīt: echo '<div id="test">dgdg</div>'; Ja parastās pēdiņas vajag izvadīt tad jaeskeipo \' Bet godīgi sakot, tas viss ir ļoti labi aprakstīts iekš www.php.net pie echo apraksta: http://lv.php.net/manual/en/function.echo.php
  2. Lynx

    Esmu piemirsis

    Šajā topikā tas ir izdiskutēts tepat mūsu forumos: http://php.lv/f/index.php?showtopic=8096, tas tālāk aizved uz: http://reinholdweber.com/?p=3 Protams, ir jāskatās vai pēkšņi pārakstīt visu savu kodu izmantojot effektīvākas metodes ir izdevīgāk, jo ātrdarbības pieaugums ir mazs. Bet ļoti lieliem projektiem ieguldītās cilvēka darba stundas noteikti atmaksājas procesora noslodzes stundu samazināšanā. Bet rakstot no 0 es ievēroju praktiski visus šos te principus. Kaut kur arī redzēju labu tabulāru salīdzinājumu, kur bija veikti uz vairākām mašīnām dažādi testi un vilkts ārā vidējais laiks un parādīts procentuālais uzlabojums izpildes ātrumā starp katru metodi.
  3. Hako: maini css klašu definīcijas un pēti izmaiņas uz katra browsera līdz attēlojas uz visiem vienādi :) Vismaz es tā daru. Internetā var atrast arī tutoriāļus ar info, ko IE nočakarē un kā atrisināt biežākās problēmas. Vienkārši IE neievēro ļoti daudz standartus un attēlo savādāku rezultātu nekā citi browseri. Es patiešām ceru, ka tas, ka beidzot IE 8 iziet acid 2 testu nozīmē, ka viņi labosies un atvieglos izstrādātāju dzīvi nākotnē, jo pašlaik, manuprāt tiek bezjēdzīgi tērēts laiks uz IE untumiem gan css, gan js.
  4. Lynx

    Esmu piemirsis

    hmm, tu vispār testēji savus variantus? 1ais nestrādā. Ātrākais variants un kuru es arī defaultā izmantoju rakstot kodu ir echo 'teksts ',$mainigais,' teksts'; Vienas pēdiņas tāpēc, ka starp viņām netiek meklēti mainīgie, kamēr starp " tiek meklēts vai ir mainīgie un šim procesam patērēts ilgāks laiks. Un komati apkārt mainīgajam nozīmē, ka php izvadīs mainīgo uzreiz nemeiģinot viņu apvienot ar citu mainīgo. Tas gan darbojas tikai echo gadījumā.
  5. mysql_num_rows ir salīdzinoši daudz lēnāks par vienkārši mainīgā palielināšanu, nekad neizmantot * :), kā arī pēc dotajiem piemēriem nav jēgas izmantot fetch_array, ja piekļūstam vērtībām tikai ar kollonas nosaukumu. Šeit pietiek ar fetch_assoc, es darītu šādi: <?PHP $i = 0; $query = mysql_query('SELECT lauks_1, lauks_2 FROM tabula_1'); while($row = mysql_fetch_assoc($query)) { ++$i; if($i === 1) { echo 'Virsraksts'; } echo $row['lauks_1'],' ',$row['lauks_2'],'<br />'; } ?> Tāpat iesaku, nekad neveidot divus identiskus querijus. Labāk pirmā querija atgrieztos datus ielikt array un tad vērsties pie array. Jo gandrīz vienmēr datubāze ir tas elements, kas visvairāk bremzē ātrumu un vērsties pie array būs salīdzinoši ātrāk.
  6. Nu nezinu, manuprāt īsti labi nav šāda vienota funkcija. 1) Defaultā būtu jaliek magic_quotes off, kaut vai ar ini_set(), ja nav pieeja php.ini - ir pierādīts ka viņas ilgtermiņā rada liekas problēmas. 2) Gandrīz katrs gadījums, kad jāpārbauda kāda ienākošā vērtība ir unikāls tapēc vienotas funkcijas, vismaz tik primitīvas nav labas. Vienkāršāk katram gadījumam ir uzrakstīt savus noteikumus. Piemēram, ja id vajag kā int varam viņu vienkārši typecastot, kas ir daudz ātrāk: $id = (int)$_GET['id']; Ja zinam, ka id ies uz db pieprasījumu, tad arī lietojam real_escape_string. Jo tikai pēc php versijas čekot būtu muļķīgi, ja nu nav eneiblots myqsl. Un, manuprāt, ja hostam vēlaizvien stāv php < 4.4 tā jau ir nolaidība.
  7. Lynx

    array

    Hmm, interesanti, blackhalt, šo te ir kādā veidā iespējams exploitot, vai arī tas ir vienkārši ļoti liels skaitlis citā pierakstā? Teorētiski jau pēc noteikšanais vai is_numeric sql kverijam tiek lietots real_escape_string un datubāze neatgriezīs nevienu ierakstu, jo tāds id neeksistē. Bet nu es to is_numeric izmantoju pilnīgi visos projektos pie $_GET['id'] pārbaudēm.
  8. Lynx

    array

    Imho, pēc viņa pirmā posta un tālākā parauga ar friendly urls viņš domā šādi: $data= explode("/", $url); //$url mainigais, kur tev glabajās apstrādāts $_SERVER['QUERY_STRING'] if(in_array($data[0],$pages) && is_numeric($data[1])) //uzreiz paņemam vērtības no masīva { echo 'ir skaitlis'; } Manuprat kaut kā neloģiski, es šādā gadijumā rīkotos šādi: $pages = array('video','archive'); if(in_array($data[0],$pages)) { include($data[0].'php'); } //un tagad ieksh video.php if(isset($data[1]) && is_numeric($data[1])) { //izvelkam info ierakstam ar id 22 } else { //defaultaa lapa, kur atrodas visu video saraksts vai errors, ka nav defineets id }
  9. marcis, ORDER BY Desc nestrādā - tad jau vispār nebūtu jautājums. Pārveidojot tos pašus datus vieglāk uzskatāmos sanāk: 9 10 1 2 3. Kā redzi 2as dažādas secības dati wrapojas. Ar desc būtu 10 9 3 2 1 Aleksandrs, tieši tā - tapēc arī ir šis topiks. Pameiģināšu realizēt andrisp variantu.
  10. Tas mounkuls minētais variants, manuprāt, izskatās šādi, pats izmantoju: function create_pass($length = 10) { $pass = ''; $chars = 'AaBbCcDdEeFfIiJjKkLlMmNnOoPpQqRrSsTtUuWwXxYyZz1234567890'; for ($i = 0; $i < $length; $i++) { $pass .= $chars{mt_rand(0, strlen($chars)-1)}; } return $pass; }
  11. Saskāros ar interesantu problēmu, ir šāds te sql pieprasījums: SELECT something FROM karte WHERE id BETWEEN 4850 AND 4860 OR id BETWEEN 4950 AND 4960 OR id BETWEEN 50 AND 60 OR id BETWEEN 150 AND 160 OR id BETWEEN 250 AND 260 Pamatvajadzība ir, ka tieši šādā secībā kā rakstīts pieprasījums dati tiek atgriezti attiecīgi sāk 4850-4860, tad 4950-4960, tālāk seko 50-60 etc. Mysql automātiski bez nekādiem norādītiem ORDER BY saliek sākot no zemākā: 50-60, 150-160, 4850-4860. Pētiju manuāli, iespējas šo fīču atcelt neatradu, varbūt kāds ir meiģinājis kaut ko līdzīgu veidot? Ja tas nav iespējams tad veidošu ar php, vienkārši tikai ar mysql būtu ērtāk, varbūt pat ātrāk?
  12. Heh lol, interesanti parādija alerts 10 un arī firebug neklusēja: func is not a function [break on this error] func(x); Varbūt firebug pašam kāds bugs, itkā jaunākais 1.05?
  13. updatePage nē, tikai saliktajai, kas tiek ņemta no funkcijai padotajām vērtībām, jo ar FF 2.0.0.11 firebug ziņo: callback_func is not a function [break on this error] if(callback_func) { callback_func(request.responseText); } eval variants strādā kā vajag un izpilda izsaukto funkciju.
  14. Delfins, tevis teiktais tieši tas pats, ko es teicu :) Vienkārši ši te diskusija uzvirzija uz pareizajām sliedēm kā risināt problēmu: Gatavs piemērs, nezinu kā ir ar to eval izmantošanu, bet citus piemērus pagaidām neesmu atradis: function get(page, target, callback_func) { request = createRequest(); request.onreadystatechange = function() { if(request.readyState == 4 && request.status == 200) { if(callback_func) { eval(callback_func + '(request.responseText)'); } else { updatePage(request, target); } } } Paldies visiem! Edit. bubu, pārakstījos, sorry - bija domāti sinhronie
  15. Mhm bet tas ir diezgan neelastīgi, attiecīgi viena iespējamā response funkcija visiem izsaukumiem :) Mana ideja, kad rakstīju bija šāda get(page, callback_func) { } un attiecigi uz request.onreadystatechange = function callback_func(); un ja nav noradiita atseviski tad izpildam defaulto updatePage. vienīgi japaeksperimentee kā to korekti palaist. Cik saprotu asinhronos pieprasījumus taisīt gan nevarēs freezo visu browseri tapēc meiģināšu radīt augstāk minēto callbacku sistēmu, paldies!
  16. Pirmais variants neder, jo ir ļoti neelastīgs. Manā gadijumā ideja ir šāda: 1) funkcija get() veic datu ajax pieprasījumu. 2) piemēram funkcija asd1() { izsauc get('lapa1.php); sanemot ajax response apstradā saņemtos datus, iespējams izsauc citas funkcijas etc. un veic sarežģītas operācijas. 3) cita funkcija asd2() { arī izsauc get('lapa2.php); un atkal atbildi vēlas apstrādāt pa savam. Attiecīgi bija ideja radīt lielāku fleksibilitāti. Globālie mainīgie piederās pie watch() funkcijas iespējamā risinājuma pēc tutoriāļiem. Atbilde uz bubu edit: Hmm izskatās, ka patiešām šeit laikam viss ērtāk būtu veikt sinhrono pieprasījumu, pavisam aizmirsu. + Papētīšu callbackus arī varētu nostrādāt. Paldies
  17. Hmm te arī rodas problēma meiģinot padot saņemots datus kā argumentu, jo pielīdzinot funkciju mainīgajam rezultāts ir undefined, jo dati vēl nav saņemti. Isumā piemērs šeit: Response text atgriežam ar return: function get(page) { request = createRequest(); request.onreadystatechange = function(){ updatePage(request); } request.open("GET", page, true); request.send(null); function updatePage(request) { if(request.readyState == 4 && request.status == 200) { return request.responseText; } un funkciju izsaucam, piemēram šādi: var res = get('blabla.php'); rezultāts veicot alert(res) ir undefined, jo get() vēl nav atgriezis atbildi pielīdzināšanas brīdī. Tapēc ir jaizmanto kāda gaidīšanas funkcija, kas paziņo ka ajax rezultātu ir atgriezis un viņu var izmantot. Bet kā jau minēju watch() īsti labi nestrādā uz Operas uz FF viss izcili.
  18. Esmu saskāries ar interesantu problēmu meiģinot izveidot advancētāku ajax response handlošanu. Parastais variants(cik es esmu pētijis tutoriāļus, lai atrisinātu jauno problēmu) ir, ka response mēs vienkārši ar innerHTML ievietojam lapā. Izrāvums no koda: function get(page, target) { request = createRequest(); request.onreadystatechange = function(){ updatePage(request, target); } function updatePage(request, target) { if(request.readyState == 4 && request.status == 200) { if(target = document.getElementById(target)) { target.innerHTML = request.responseText; Manā gadijumā šis variants vairs neder un es vēlos panākt to ka request.responseText tiek piesaistīts mainīgajam, lai funkcijas get() izsaucošā funkcija uzreiz atbildi varētu apstrādāt. Papētiju resursus internetā un nonācu pie šādas metodes, mantojot watch funckiju: //šis te kods ir iekš augstāk minētās get() if(request.readyState == 4 && request.status == 200) { global.response = response; //atbilde tiek pielikt pie global objekta, negribēju likt zem window. global.request_ready = 1; } //talak aiz funkcijas, kas izsauc get(); global.watch("request_ready", function(){ //varam piekluut global.response un apstradaat global.unwatch("request_ready"); global.request_ready = 0; }); Izskatās labi, bet ir dažas problēmas: 1) neiet uz Operas 2) pēc koda spriežot un dēļ globālo mainīgo izmantošanas šķiet, ja tiks izsaukti 2i ajax pieprasījumi paralēli rezultāti varētu sajukt vai kopā kaut kas nojukt. Attiecīgi jautājums: kādu metodi Jūs izmantojat, lai apstrādātu atbildi un kāds būtu labākais variants kā šeit rīkoties lai panāktu vēlamo rezultātu? Vēlamās idejas shēma īsumā: 1)funkcija asd() izsauc funkciju get() 2)funkcija get() veic ajax pieprasījumu sagaida atbildi un izdara savu maģiju, lai asd() varētu effektīvi saņemt datus 3)funkcija asd() saņem ajax atbildi kā mainīgo un apstradā tālāk.
  19. Pētiju webservera mysql statistiku un uzdūros nepatīkamai lietai: Handler_read_rnd un Handler_read_rnd_next uzrādīja nepieklājīgi lielas vērtības. Ar samazināšanu nebūtu problēmu, ja vienīgi es zinātu kuri ir tie queriji, kas lasa nākamo ierakstu vai pareizi neizmanto indexus. Iet cauri 10+ lielākiem, mazākiem projektiem un pārbaudīt katru aizdomīgo pieprasījumu galīgi nav ne vēlēšanas, ne laika. Un loģiski rodas jautājums vai nav kāds veids kā effektīvi atrast vainīgos pieprasījumus. Ne mysql manuāli, ne googlee neko nemin par queriju atrašanu, tikai izlabošanu. Tātad jautājums: vai ir kāds veids kā effektīvi(log faili, pamodificējot db klasi, etc) noteikt kuri queriji ierakstās iekš Handler_read_rnd_next uzskaites.
  20. Ir iespējams iztikt bez eval, es savā jaunākajā uz Ajax bāzētajā projektā izmantoju šādu metodi: Lapā, kura tiek atgriezta no ajax pieprasījuma pašā augšā ir: <div id="include_js" style="display:none;">alert('aa');</div> Skripts kurš veic ajax pieprasījumu pēc pozitīvas atbildes saņemšanas pārbauda, vai eksistē include_js un, ja eksistē ieliek sourcā: if (request.readyState == 4 && request.status == 200) { if (document.getElementById('include_js')) { var head = document.getElementsByTagName("head")[0]; script = document.createElement('script'); script.id = 'upload'; script.type = 'text/javascript'; //script.src = document.getElementById("include_js").innerHTML; // izmantojot šo pašu metodi varam inkludot arī veselu sourci head.appendChild(script) document.getElementById(script.id).innerHTML = document.getElementById("include_js").innerHTML; } } Testējis esmu gan uz FF 2.0 tikai.
  21. Ah perfekti, tieši tas ko meklēju un nevarēju atrast. Paldies. bubu, teorētiski ar pamatiem viss ir kārtībā. Vienkārši gribēju dzirdēt citu viedokli par to, kuru no datubāzes relāciju tipiem tieši izmantot šajā, tagu gadījumā. Jo kā izrādās pēc raksta pirmais variants arī nav slikts pieliekt palildus fulltext indeksu tieši uz lieliem datu apjomiem, pārsteidz ātrdarbībā visus pārējos, jo var iztikt bez unioniem un joiniem. Imho man tik lieli datu apjomi nedraud, tapēc sliecos patiesi izmantot tavu, jeb 3o variantu.
  22. Meklēju internetā resursus, un diemžēl neatradu nekur materiālus kā realizēt tagu meklēšanas sistēmu(pieļauju, ka izmantoju nepareizos tagus :) ). Pats izdomāju tādus kā divus variantus, bet vēl aizvien nezinu, kuru būtu vislabāk lietot un vai tie ir ērtākie, labākie risinājumi. 1) Attiecīgi ziņu tabulai pa kuru notiks meklēšana izveidot papildus lauku "tags(varchar)" un tur savadīt iekšā tagus, pēc tam meklējot vienkārši vērsties pie tā lauka ar LIKE %% 2) Izveidot tabulu "tags" un caur to linkot tagus uz vajadzīgo rakstu apmeram šādi id, news_id, tag un pēc tam meklējot izvadīt rakstus, kas atbilstu vajadzīgajam tagam. Šādi varētu arī veidot tagu popularitāti(kā manīts lielos portālos) un automātisko tagu pievienošanos(?). Varbūt kādam ir pieredze šādas sistēmas veidošanā un var padalīties ar to?
  23. Heh vienkāršāk nekā biju gaidījis, pilnībā biju aizmirsu par eval. Paldies.
  24. Pētiju ilgi manuāli un eksperimentēju ar $$mainigo_apvienoshanu un oop, bet tāpat nevaru atrisināt problēmu. Strādāju pie dinamiskas sistēmas un ir nepieciešams kaut kādā veidā saglabāt kodu mainīgajā $A. Katru reizi izsaucos mainīgo $A, kods, ko tas glabā tiktu izpildīts. Īsumā tas izskatītos šādi(lieki piebilst, ka neiet, bet nu lai parādītu ideju): $kods = $db[mainigais1] * $db[mainigais2]; //abi mainiigie nav defineeti ... while($db = mysqli_...) { $kods; // izpildam kodu, ar jau mainigajiem, kas izvilkti no datubaazes } Pašlaik vienīgi šādu effektu sanāca panākt izveidojot atsevišķu failu, kur stāv iekšā kods un to inklūdot while loopa, bet imho noteikti ir labāks risinājums, kuru es vēlos noskaidrot, jo šajā gadijumā mums sanāk reizes 30 inklūdot pāris rindiņas, kas milzīgi palielina ielādes laiku.
  25. Tieši tā, bet manā gadijumā tas būtu overkills, lietot šādas bibliotēkas, esmu pārliecināts, ka to requestu var izdarīt ar max 3 rindiņām izmantojot c++ standarta bibliotēkas vai funkcijas, bet c++ manuālis msdn.microsoft.com, atšķirībā no php.net manuāļa tāds nepārskatāms un nav koda piemēri. Itkā atradu http://msdn.microsoft.com/library/default....nternetopen.asp Viena funkcija, lai atvērtu konekciju, otra, lai aizsūtītu, 3ā, lai noslēgtu. Tagad, spēlējos, bet nav ne jausmas, vai esmu uz pareizā ceļa.
×
×
  • Create New...