Jump to content
php.lv forumi

komentam raksta id


spynode

Recommended Posts

Teiksim man ir komentari mysql tabulaa, kur katram komentaaram ir lauks raksta_id. problema (tiesa neesmu parbaudijis, bet vajadzeetu taadai problemai buut) rodas, kad es dzeeshu rakstu (tiiri teoreetiski). Ja es izdzeeshu rakstu, tad tak naakamaa raksta id samazinaas pa 1. Tas noziimee, ka vinjam raadiisies izdzeestaa raksta komentaari (pienjemot, ka neesmu vinjus izdzeesis), un attieciigi katram naakamajam rakstam raadiisies komentaari no raksta, kas agraak bija vinja id vietaa. Kaa juus atrisinaatu shaadu probleemu ?

Link to comment
Share on other sites

nekas nekur nesamazinās, nefantazē :D

 

Lieta tāda, ka ja tu izdzēsīsi savu rakstu, tad tie tavi komentāri tā arī paliks karājoties gaisā nevienam rakstam nepiesaistīti. Šādos gadījumos pie saprātīgākām datubāzu pārvaldības sistēmām ir tāda lieta kā cascaded delete vai kā to sauc, kad tiek automātiski dzēsti arī tie ieraksti, kuri ir piesaistīti tavam rakstam. Ar MySQL attiecīgi, ja ir vēlme attīrīt savu datubāzi no šī raksta pilnībā, tad ir vērts pie reizes izdzēst arī visus komentārus ar attiecīgo raksta_id.

Link to comment
Share on other sites

tnx ;) .tachu rodas jauna probleema. paradoksaali, bet tas, ka id nemainaas man ttraucee vienai citai saita funkcijai. respektiivi ir izveidota primitiiva saita navigaacija celjoshanai no raksta uz rakstu apmeeram shitaa :

$nakam_raksts_id = $rid + 1;                                                                                  //  iepr. un nakam. raksts
       $iepr_raksts_id = $rid - 1;                                                                                   //  iepr. un nakam. raksts
       $nakam_raksts_kverijs = mysql_query ("SELECT virsraksts FROM raksti WHERE id=". $nakam_raksts_id);            //  iepr. un nakam. raksts
       $nakam_raksts_nos = mysql_fetch_array ($nakam_raksts_kverijs);                                                //  iepr. un nakam. raksts
       if (mysql_num_rows ($nakam_raksts_kverijs) != 0)                                                              //  iepr. un nakam. raksts
       {$nakam_raksts_out = "<a class=\"talak\" style=\"font-size: 18px;\" href=\"index.php?darbs=raksts&id=$nakam_raksts_id\">| $nakam_raksts_nos[0] |→<a>";}  //  iepr. un nakam. raksts
       else {$nakam_raksts_out = "";}                                                                                //  iepr. un nakam. raksts
       $iepr_raksts_kverijs = mysql_query ("SELECT virsraksts FROM raksti WHERE id=". $iepr_raksts_id);              //  iepr. un nakam. raksts
       $iepr_raksts_nos = mysql_fetch_array ($iepr_raksts_kverijs);                                                  //  iepr. un nakam. raksts
       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 = "";}

 

Tatad ja es izdzeshu kaadu rakstu par vidu teiksim starp 13. un 15., tad 14 .raksts iztruukst, un atrodoties 15. rakstaa es ar taada tipa navigaacijas palidziibu nevaru nokljuut uz 13., jo skripts domaa, ka vairaak rakstu nav. Kaa vareetu ciiniities ar shaadu probleemu ?

Link to comment
Share on other sites

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 +/-.

Link to comment
Share on other sites

Nu Venom baigi pacenties :D Respect.

 

Vienīgais, kam negribētu īsti piekrist ir 5-tajā punktā tā lieta par { } atmešanu, ja ir tikai viena rindiņa aiz ifa. Saskatu problēmu tajā, ka:

1) Bieži ir tā, ka sākumā zarā ir tikai viena rindiņa, bet vēlāk vajag pievienot vēl kādu. Tad gadās cīņas karstumā aizmirst ielikt { }.

2) Vieglāk, manuprāt, saprast koda loģiku, ja visi ifi tiek veidoti vienādi, nevis viens vienā veidā, otrs otrā. Tas arī palīdz nākamā minētā punkta - koda loģiskās strukturēšanas - izpildē.

Link to comment
Share on other sites

Bus stops at busstation,

Train stops at trainstation,

Work stops at... workstation.

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

Link to comment
Share on other sites

OK nu lekcija par koda kultuuru bija ljoti pamacosha paldies :). Tagad jautaajums par tavu risinaajumu. Cik es saprotu, man vajag parbaudit pec tam vai ir kads mazaks vai lielaks mainigais ieraksta (mysql_fetach_array) no tada tipa kverijijiem.

$nentries = mysql_query ("SELECT virsraksts FROM raksti LIMIT ".$rid.",-1" );
       $lentries = mysql_query ("SELECT virsraksts FROM raksti LIMIT ".$rid.",1" );

Kada veidaa PHP parbauda vai ir kads lielaks mainigais par doto, un ka varetu apzimet nakamo (vai iepriekshejo) eksistejosho mainigo pec dota (ka vinju definee) ?

Aa nu to vai ir es varetu parbaudit elementari

$nentry = mysql_fetch_array ($nentries);
$lentry = mysql_fetch_array ($lentries);
if ($nentry)  {un*} 
if ($lentry) {un*}

un* - ?. Ka es varetu panakt, ka ja ir kaads lielaks eksistejosh raksta id par doto (vai mazaaks, tad izvadam to un to, bet ja nav tad to un to...

Nu es ceru, ka jus sapratat. Ja ne pacentishos izklaastiit saprotamaak.

Edited by spynode
Link to comment
Share on other sites

Ja pašreizējais raksta id tev ir $rid, tad tev ir jāpārbauda, cik ierakstus atgriež:

$nentries = mysql_query ("SELECT virsraksts FROM raksti LIMIT ".$rid-1.",1" );

un

$lentries = mysql_query ("SELECT virsraksts FROM raksti LIMIT ".$rid+1.",1" );

 

LIMIT [sākot no kura], [cik gab]

Link to comment
Share on other sites

... trīs pieprasījumu/rinu vietā

 

 

tālāk rakstu skaitu var izmantot lai izvadīt rakstus pa lapām, ķipa: 1...5 6...10 ...

 

pieņemam, ka lapas nr. tiek nodots caur $_GET['page'], tad:

 

/* nodefinējam lapas nr, ja nav uzstādīts (0), vai nolasām esošo pārvēršot to par integer (ja ņu kādam prātā ienāks adresslauciņā ar rociņām paspēlēties */

 

$_GET['page']=(empty($_GET['page'])?0:(int)$_GET['page'];

 

/* cik raksti vispār iraid

ja raksti tiek pievienoti relatīvi reti, tad iesaku izmantot kešošanu sesijā (of course, ja ir saprašana un tiek izmantoti vēl citur projektā, piem.:

 

if (empty($_SESSION['artcnt']))

$_SESSION['artcnt']=...

 

un tālāk $artcnt vietā izmantojām tieši šo variābli */

 

$artcnt=mysql_num_rows(mysql_query("SELECT COUNT(*) FROM raksti"));

 

$perpage=10;//cik rakstus rādīt lapā

$pages=ceil($artcnt/$perpage);

 

 

//izvadām to 1..10

for ($tmp=0;$tmp<=$pages;++$tmp)

echo ($_GET['page']==$tmp?'›':''). //iezīmējam tekošo lapu ar >

($tmp*perpage+1).' - '. //1,11,21...

( ($tmp+1)*perpage>$artcnt? $artcnt:($tmp+1)*perpage).' ';

//10,20 vai, pēdejam - piem. 24

 

if (empty($_GET['raksta_id']))

- ja neskatāmies konkrētu rakstu, tad atlasām rakstu kopsavilkumus kā

"SELECT * FROM raksti LIMIT ".($_GET['page']*$perpage).','.$perpage;

//0,10 ; 10,10 ; 20,10 utt.

 

universāli, vecīt

Link to comment
Share on other sites

veel man radas shitaada ideja

$nentries = mysql_query ("SELECT * FROM raksti WHERE id > ".$rid);
       $lentries = mysql_query ("SELECT * FROM raksti WHERE id < ".$rid);
       $nentry = mysql_fetch_array ($nentries);
       $lentry = mysql_fetch_array ($lentries);
       $nout = "";
       if ($nentry) $nout = "<a class=\"talak\" style=\"font-size: 18px;\" href=\"index.php?darbs=raksts&id=$nentry[0]\">| $nentry[2] |→<a>";
       if ($lentry) $lout = "<a class=\"talak\" style=\"font-size: 18px;\" href=\"index.php?darbs=raksts&id=$lentry[0]\">←| $lentry[2] |<a>";

 

Straadaa tikai vienaa virzienaa, kad meklee nakamo lielako rakstu. Mazakais raksts nezinkapeec vienmeer ir pats mazaakais raksts (peec id) kaads ir datubaazee. Any ideas kapeec taa ? Man shitais variants liekas visvieglakais un pasham visertakais. Varetu pateikt kapec neiet id < ".$rid shitas variants ?

Es sapratu, ka man jadabun pedejais ieraksts no $lentries resursa (elementari dooh). Kaa ?

Edited by spynode
Link to comment
Share on other sites

×
×
  • Create New...