Jump to content
php.lv forumi

Archives un poll


Lord

Recommended Posts

Sveiki!

1) LABOTS: 1. ir sanācis, paldies mounkuls. Tagad cīnos ar pārējiem diviem punktiem.

2) Veidoju lapas ierakstu arhīvu. Arī viss sanāk, taču jautājums ir, kā pastāstīt kodam, lai sarakstā neliek divus vienādus ierakstus, ja tie veikti vienā mēnesī, bet atstāj tikai vienu. Tas ir, lai sarakstā nebūtu, piemēram, divi February, 2010, ja tajā laikā veikti divi ieraksti.

<?php
//START archives SCRIPT
   $articlea = mysql_query("SELECT * FROM articles ORDER BY date ASC");
while ($archive = mysql_fetch_array($articlea, MYSQL_ASSOC)) {   
   $archdate = '' . date('F Y',$archive['date']) . '';
   $archlinkdate = '' . date('Y-m',$archive['date']) . '';
   echo "<p><ul>";
   echo "<li><a href=\"http://site.lv/index.php?archive=$archlinkdate\">$archdate</a></li>";
   echo "</ul></p>";
  }?>

3) Pēcāk ar $_GET taisos dabūt to 'archive' parametru, taču viņš būs formā, piemēram, 2010-02. Kā var dabūt atpakaļ to datumu uz sekundēm? Man datu bāzē visiem ierakstiem norādītas sekundes, kad ieraksts veikts. Droši vien tad pie tā 2010-02 attiecīgi pieskaitīšu 28 dienas un ar mysql query likšu atrast visu, kas ir veikts no 2010-02-01 līdz 2010-02-28. Tas būtu labākais variants? 2010-02 lieku GETā tāpēc, lai links izskatītos foršāk un lietotājam saprotamāk; ja ir kādi citi varianti, kā var padot GETā sekunžu skaitu, bet beigās, teiksim, ar .htaccess, pārveidojot URL, parādīt linkā datumu Y-m formā, būtu jauki, ja kāds par to pastāstītu.

Paldies!

Edited by Lord
Link to comment
Share on other sites

1. Tāpēc, ka POST datus paņem un veic INSERT jau tikai pēc visa.

2. Ar parastu IF būs vien jāpārbauda vai tajā mēnesī ieraksta nav, palūrot datubāzē.

3. Te nu varianti ir dažādi. GETā nebūtu liela jēga, bāzē gan arī ne, likt sekundes, ja to ieraksu drīkst būt tikai 1/mēnesī.

Laika formāti ir vairāki. PHP ir time() funkcija, varbūt der pat date(), ja jau tikai viens ieraksts mēnesī.

SQL ir ērti likt iekšā ar NOW(), un pat SELECT laukā tad var iznākt ērtāk.

Ar .htaccess tādiem mērķiem gan neiesaku aizrauties, ņemot vērā, ka to var PHP turpat bez problēmām paveikt. Ja ko sajauksi,testējot vismaz atradīsi pēc faila kur ziepes.

Link to comment
Share on other sites

Paldies par atbildi!

1) sanāca, paldies.

2) Ja nav ierakstu tajā mēnesī, tas jau automātiski tiek atlasīts, bet kā rīkoties, ja ir divi vai vairāk? Tad man sarakstā parādās vairāki vienādi mēneši, piemēram:

January 1970

March 1970

February 1971

February 1971

February 1971

June 1971

Tam IFam vajadzētu būt if(tāds mēnesis eksistē vairākiem rakstiem){ rakstīt mēnesi sarakstā tikai vienu reizi }, taču man nav ideju, kā tādu izgatavot.

3. vēl neesmu izmēģinājis, taču tūlīt ķeršos klāt.

Edited by Lord
Link to comment
Share on other sites

2. Nuuuu, man tas arī bija pats neskaidrākais punkts Tavai idejai..., jo:

* SQL pusē ir samērā labi visas lietas ar laika funkcijām, sevišķi ja pa rupjam ko vajag atlasīt.

* ja pareizi noprotu, Tev patreiz gadu un mēnesi glabā atsevišķās kolonnās, kas nav īpaši gudri.

* ja glabātu piemēram PHP timestamp, tas būtu tas laiks sekundēs, taču kopš 1970. gada tiko sākta Jaunā Gada, jeb 1. janvārā 00:00.

Paštuko par šo visu un tad jau izdomāsi ko īsti ir labāk, sevišķi tad, ja ir plānots tur ko bīdīt arī tālāk uz priekšu lai paplašinātos, kad tas mēnesis kā intervāls ierakstam īsti var arī nederēt.

Link to comment
Share on other sites

Tam IFam vajadzētu būt if(tāds mēnesis eksistē vairākiem rakstiem){ rakstīt mēnesi sarakstā tikai vienu reizi }, taču man nav ideju, kā tādu izgatavot.

Te nebūs tā vienkarši, atkarīgs ko vēlies tajā IF nosacījumā.

Jo rakstīt tikai vienu reizi nozīmē:

* pārbaudīt vai ir jau ierakst tajā mēnesī

* izlemt ko darīt ar tiem ierakstiem, kuri ir

* izdarīt to (nerakstīt jaunu/dzēst esošo vai esošos).

Link to comment
Share on other sites

Nē, nē, nē, man datu bāzē tiek glabāts tajās sekundēs, tad es ar

$archdate = '' . date('F Y',$archive['date']) . ''; pārveidoju tās sekundes uz, piem., February 2010 formātu, taču man listā tādi parādās vairāki, ja tajā mēnesī ir vairāki izveidoti raksti.

Mērķis ir tāds, ka no

January 1970

March 1970

February 1971

February 1971

February 1971

June 1971

tiek dabūts

January 1970

March 1970

February 1971

June 1971

Pēc uzspiešanas uz kādu no mēnešiem tiek atlasīti raksti attiecīgajā mēnesī. Tieši tad arī tiek parādīti tie trīs raksti, kas bija 1971. gada februārī. Bet kā tieši ar to IFu pateikt, lai tiek novākti tie liekie divi(tas ir šajā piemēra gadījumā) February 1971?

Link to comment
Share on other sites

Nu to jau īstenībā pareizāk darīt būs nevis ar IFu, bet uzreiz SQL vaicājumā kā intervālu, tad atlasīs tikai to, kuru prasīsi:)

Plus tur arī varēsi uzlikt papildu kādu vēl nosacījumu, ja to vajadzēs.

Un tieši tāpēc iesaku apgūt vairāk par SQL laika fukcijām.

Tad sāksi saprast kāpēc foršāk ir likt INSERTojot laiku ar SQL, piemēram NOW()

Edited by mounkuls
Link to comment
Share on other sites

Tas laikam vairāk attiecināms uz to trešo punktu, taču neskaidrības ir ar otro. Es īsti nezinu, kā lai izstāstu lielo sāpi. Man datu bāzē ir kaudze ar rakstiem, kuriem katram ir savs izveidošanas laiks. Lai izveidotu skatāmu arhīvu, izvelku laiku, pārveidoju to "F Y" formātā un padodu to <li> sarakstā, tātad šādi:

January 1970

March 1970

February 1971

February 1971

February 1971

June 1971

Taču gadās(kā arī parādīts augstāk), ka vienā mēnesī ir uzrakstīti vairāki raksti, bet mērķis ir katru mēnesi norādīt sarakstā tikai vienu reizi. Tātad kaut kā ar if būtu jāpanāk, ka if(F Y kādam rakstam == F Y vēl kādam rakstam){ pasniegt <li> šim attiecīgajam F Y tikai vienu reizi, nevis tik, cik reāli rakstu tajā laikā ir }. Tātad pēc if augstāk minētajam sarakstam jāparādās:

January 1970

March 1970

February 1971

June 1971

Edited by Lord
Link to comment
Share on other sites

m8t, varbūt es to nepareizi izmantoju, bet

January 1970

March 1970

February 1971

February 1971

February 1971

June 1971

gadījumā lapā uzrādās

January 1970

January 1970

January 1970

January 1970

January 1970

January 1970

Varbūt, ja Tu ienāktu Skype, es varētu atrakstīt precīzi, kādā veidā kods tiek ievietots.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...