Jump to content
php.lv forumi

Galeriju dzēšana


rudzis

Recommended Posts

Ir aptuveni izveidota galeriju sistēma, bet problēmas ir ar atsevišķu galeriju dzēšanu. Vienkārši sāk aptrūkties idejas, kā lai to visu sataisa.

 

1. Tātad, kad tiek izveidota galerija, tad failā "../data/users/1/gal.txt" tiek ierakstīts "galerijas_nosakums|1\n" (Cipars aiz nosaukuma ir pieejas tiesības, kas šobrīd nav svarīgi).

 

2. Kad izveidotajā galerijā ielādē bildi, to ieliek direktorijā "../data/users/1/gal/" un nosauc par piem. "1_1.jpg", kur pirmais vieninieks ir galerijas numurs un otrs - bildes numurs. Katrai galerijai bilžu skaits sākas no 1.

Uzreiz arī failā "../data/users/1/gal/$index.txt" tiek ierakstīts bildes faila nosaukums ("1_1.jpg\n"), lai tās pēc tam var ērti indeksēt. Tas arī šobrīd nav tik svarīgi.

 

($index - galerijas ID)

 

Galerijas dzēšana

 

Kad ar $_GET tiek padots id, kuru galeriju jādzēš, tiek noskaidrots, vai šī ir pati jaunākā, un ja ir, tad vienkārši tiek izdzēsts tās nosaukums no to faila ../data/users/1/gal.txt, izdzēsts bilžu indeksa fails (../data/users/1/gal/$index.txt) un izdzēstas visas šīs galerijas bildes (kuru nosaukums sākas ar galerijas ID), bet jā šī nav jaunākā, un ir kaut kur pa vidu, tad sākas problēmas.

 

Teorētiski vajadzētu visu galeriju, kuru ID ir lielāki, index failu nosaukumus katru par vienu samazināt, un arī šo galeriju bildes pārsaukt ar mazākiem pirmajiem cipariem.

 

Mēģināju šo visu īstenot ar dažu for ciklu palīdzību, bet nevarēju atrast kompromisu starp abiem gadījumiem: dzēšamā galerija ir pati jaunākā vai pati vecākā UN dzēšamā galerija ir kaut kur pa vidu.

 

Droši vien grūti saprast šos manus murgus, bet nu paskaidroju kā mācēju. Es tiešām vairs nezinu kur likties. Te taču nav nekā pārāk sarežģīta, bet tomēr nevaru viens pats izdomāt.

 

P.S. Nesitiet pa lūpām!

Edited by rudzis
Link to comment
Share on other sites

A kāpēc jāsmazina citu galeriju indeksu numuri, ja dzēš ārā?

Dari tāpat kā mysql uz AUTO_INCREMENT kolonnu - visu laiku palielina skaili. Dzēšot rindas ārā nekas nenotiek, tb par jaunu liktais ieraksts +1 no pēdējā ieliktā, neatkarīgi no izdzēstajiem robiem pa vidu.

Link to comment
Share on other sites

turi failā pēdējo direktoriju

$last_file='last.txt';

$last=(int)file_get_contents($last_file);

pie pievienošanas taisi e.g.

fwrite($fh=fopen($last_file,'w'),++$last);

fclose($fh);

 

bet kad tiek padots $_GET['id'], tad pārbaudi, vai tas nau robs un ja kas - nobīdi uz turpmāko galeriju, e.g.

 

//ja tiek padots -vērtība vai kaut kas lielāks par lielāko direktoriju

if (($_GET['id']=(int)$_GET['id'])<0 || $_GET['id']>$last)

$_GET['id']=1;

 

//kamēr neeksistē direktorija, palielinam numuru par 1

while (!file_exists('../data/users/'.$_GET['id']))

++$_GET['id'];

Link to comment
Share on other sites

dzees vienkaarshi. ielasi faila saturu un ar while

 

ideja taada: ciklaa ej cauri visam faila saturam. ja dzeeshmaas galerijas parametrs sakriit ar to kas ir failaa, tad uztaisi jaunu mainiigo ar dzeeeshamaas galerijas ID ..

 

$lines = file("galerijas.txt");
$result = '';
foreach ($lines as $line_num => $line) {
  if ($line != '$galerijas_id') $result .=  $line; else $del_id = $line;
}

failu galerijas.txt vaig parrakstiit. tajaa ierakstaam $result mainiigaa saturu.

un $del_id buus rindinja, kuru gribam dzeest

un ja buus padots shkiiibs ID, tad $del_id nemaz nebuus

 

respektiivi

if ($del_id){
  //dzeesham visu
}else { // neritiigs id }

 

ceru ka noderees .. un ceru ka domu gaajienu izprati

Link to comment
Share on other sites

A kāpēc jāsmazina citu galeriju indeksu numuri, ja dzēš ārā?

Dari tāpat kā mysql uz AUTO_INCREMENT kolonnu - visu laiku palielina skaili. Dzēšot rindas ārā nekas nenotiek, tb par jaunu liktais ieraksts +1 no pēdējā ieliktā, neatkarīgi no izdzēstajiem robiem pa vidu.

21085[/snapback]

Nu varētu jau arī šādi, un, visticamāk ka tā arī darīšu, bet gribējās tomēr tā tīri - lai viss sabidās, un nav to tukšumu.

 

P.S. Nākamajā postā mēģināšu parādīt, kā es to visu iedomājos.

Edited by rudzis
Link to comment
Share on other sites

ja gribi bīdīt - tad vieglāk

a ) numurēt attēlus pēc citādāka principa, t.i. vienkārši 001.jpg, 002.jpg utt

b ) tomēr turēt pēdējā albūma numuru

c ) ja tiek dzēsts albūms, e.g. 4 no 10, tad visiem albūmiem, sākot ar 5 līdz 10 (kuru noskaidrojām b ) daļā), bīdīt numur "uz leju" par viens un neaizmirst pārrakstīt augstāko numuru failā uz 9

 

tāpat, ja tomēr nu dikti gribēsi bīdīt numurus arī failiem direktorijā, būs vieglāk no 001.jpg dabūt to numuru ar parastu (int) operāciju

Link to comment
Share on other sites

--- ../data/users/$id/ ---

 

/gal/
gal.txt

 

--- gal.txt saturs ---

 

pirmaa galerija|2
naakamaa galerija|2
pr0n galerija|1

(cipari ir pieejas tiesības (nav svarīgi))

--- ../data/users/$id/gal/ ---

 

1_1.jpg
1_2.jpg
1_3.jpg
1_4.jpg
2_1.jpg
2_2.jpg
1.txt
2.txt
...

1.txt un 2.txt saturs ir tie paši bilžu failu nosaukumi - katrā failā savi.

 

Galerijas nosaukuma dzēšana no faila "../data/users/$id/gal.txt" notiek apmēram šādi:

$del = $_GET['del']; // dabonam ciparu
$gal_f = file("../data/users/$id/gal.txt");
$gal = fopen("../data/users/$id/gal.txt", "w"); // atveram
for($s = 0; $s < count($gal_f); $s++) {
if($s != $del - 1) { // ja rinda nav dzeeshamaa...
fwrite($gal, $gal_f[$s]); // ...rakstam atpakalj
}}
fclose($gal);

 

Pēc šī ir kods, kurš vismaz mēģina izdarīt svarīgāko - aizpildīt robus ID, rīneimojot indeks failiņus un bilžu failus. Mans kods ir pārāk perverss, turklāt nestrādā, ja dzēšamā galerija ir pa vidu, tāpēc nav pat jēgas rādīt.

 

Tagad vajadzēti to kodu uzrakstīt, bet īsti nezinu kā panākt, lai aizpildītu caurumus VIRS dzēšamā ID. bubu, nu gribās man sirdsmieru - lai nav to tukšumu :)

Edited by rudzis
Link to comment
Share on other sites

Hoorey! Es to paveicu! :) Ar while gāju cauri galerijām, kas jaunākas par dzēšamo (sākot ar jaunāko), tur pat ar for cikla palīdzību nomainīju vajadzīgos failu nosaukumus, un beigās vēl izdzēsu tās bildes, kuru galerija bija jādzēš.

Link to comment
Share on other sites

Vot šito es nesaprotu :) Kas cilvēkiem ir pret tiem "caurumiem".

Pazīstu citus, kas ir kategoriski pret AUTO_INCREMENT, jo dzēšot ārā ierakstus rodās "caurums" un tas ir nesmuki. vot i principi!!

21103[/snapback]

 

It seviskji tipa, ja ir tabula ar vairaakiem simtiem tuukstoshu ierakstu, tad kaads obligaati visus tos caurumus ieveeros :) Kas vinji tieshaam pie katras dzeeshanas taisa "update table set id=id-1 where id>$deleted"? :)

Neenu labi, ja ir tabula ar liidz 10 ierakstiem un katru vakaru pirms guleetieshanas ieraksti tiek apskatiiti un apmiiljoti, un apchubinaati, tad, protams, tas caurums starp 5 un 7 ir ljoti nesmuks un traumeejoshs, un droshi vien tabulas iipashniekam nelabus sapnjus izraisoshs :D

Link to comment
Share on other sites

Es jau ar atstātu ar caurumiem ;) kaut vai tādēļ, ka pazūd saite uz to konkrēto ierakstu.

A ja nu kāds ielinkojis?

21140[/snapback]

 

Nu jā. Es pie tam aizmirsu piebilst, ka id pārupdeitošana jāveic visās saistītajās tabulās, ja tādas ir :DDD

Link to comment
Share on other sites

×
×
  • Create New...