PDA

Visualizza versione completa : prev_next_links PHP script


quipo.it
26-05-2001, 10.53.15
Ciao a tutti.
Ho cercato un po' sulla rete uno script PHP che gestisse i link alle pagine precedenti e successive, mettendo un limite al # di pagine restituite. Ovvero qualcosa del tipo:

<- ... 5 | 6 | 7 ... ->

Non avendolo trovato, ho deciso di scrivermelo da solo, e a quanto sembra funziona discretamente. Non l'ho ancora testato proprio a fondo, ma finora non ho rilevato bugs.
Ho deciso di renderlo disponibile a chi voglia utilizzarlo sotto la licenza GPL (x Echo... ho copiato il disclaimer che ho trovato sulle tue classi...;)).
Lo script potete trovarlo a questo link (http://www.ciaoweb.net/fisarmonis/dolomiti/download/prev_next_links.zip).
Sono graditi commenti / suggerimenti / segnalazioni di bachi, ed eventualmente modifiche per renderlo "db indipendent"... Ciauz!

Etabeta
26-05-2001, 14.24.16
se ho tempo lo provo....ma prima dovrei fare un paio di cosette per echo2k ;) savé...abbi fede ;)

quipo.it
27-05-2001, 11.47.54
Ho corretto un piccolo bug e razionalizzato il codice (ho ridotto a 1/4 il core della funzione).
Ora è molto più veloce, non dovendo più fare molti controlli che prima faceva ;).
Pare non ci siano più problemi. Nel caso però ne riscontraste, segnalatemeli, please...

PS: mi ricorda tanto quando programmavo in C, sempre alla ricerca di un modo più chiaro e più efficiente di risolvere i problemi... 'sto PHP mi piace sempre di più! :)

EcHo2K
28-05-2001, 13.05.25
eta...non ti preoccupare per quel lavoro...ho gia' risolto, poi al limite migliora quello che ho fatto io :)

sono pronto al rilascio del USERS COMPONENT versione 0.1, devo solo completare la funzione di modifica di un utante gia' inserito...e scrivere tutta la documentazione...caxxx :P

quipo, mo lo scarico e lo testo :) comunque per quanto riguarda la GPL la trovi su
http://www.gnu.org/copyleft/gpl.html

anche se per le librerie e' meglio la LGPL
http://www.gnu.org/copyleft/lesser.html

con la GPL costringi chi usa il tuo codice a rilasciare il SUO codice sotto GPL, invecie con la LGPL un progrmmatore puo' usare le tue librerie e ed utilizzare una licenza proprietaria per il suo codice.

quipo.it
28-05-2001, 14.06.52
Originally posted by EcHo2K
quipo, mo lo scarico e lo testo :) comunque per quanto riguarda la GPL la trovi su
http://www.gnu.org/copyleft/gpl.html

anche se per le librerie e' meglio la LGPL
http://www.gnu.org/copyleft/lesser.html

con la GPL costringi chi usa il tuo codice a rilasciare il SUO codice sotto GPL, invecie con la LGPL un progrmmatore puo' usare le tue librerie e ed utilizzare una licenza proprietaria per il suo codice.

Grazie 1000! E' che devo ancora capirlo questo mondo del sw libero. Però mi attira un casino e sto cercando di entrarci dentro anch'io in maniera attiva, per quel che posso...

PS: avevo dimenticato di liberare la memoria dopo la query... aggiunto anche quello!

EcHo2K
28-05-2001, 18.00.16
ho dato un'okkiata allo script...bene mio giovane jedi molto bene :D

un solo piccolo particolare...

immagina di avere una tabella con 10.000 record...

$numresults=mysql_query("select * from $table where $where");
$numrows=mysql_num_rows($numresults);

che succede sul database? la queri impieghera' molto tempo, e se per caso il database e' su un altro server ci saranno pure problemi per l'occupazione di banda, il tutto per calcolare il numero di pagine totali.

per ottimizzare la cosa c'e' un'altra soluzione...ti ci vuoi divertire o te la dico? :)

ps.
l'ho scoperta dopo che sono stato cazziato da Billow perche'lo script per le news che avevo fatto metteva a dura prova il server del database :) ed era esattamente come il tuo script :)

quipo.it
28-05-2001, 18.05.57
Se parli della funzione mysql_free_result($numresults), beh, l'ho già aggiunta (vedi thread sopra), ma forse tu intendi qualcosa del tipo:
"select ID from table"
anziché
"select * from table"...
e sai una cosa? Hai perfettamente ragione! :p

Se invece ti riferivi ad altre ottimizzazioni ancora, fammi divertire ancora un po' :D (ma dimmi anche che non pensavi solo a quanto detto qui sopra, ovvero che c'è ancora spazio per miglioramenti ma questi non sono tra quelli che ti ho detto ora... ;))

quipo.it
28-05-2001, 19.10.37
Aggiornato lo script... C'è altro che posso fare?

Etabeta
28-05-2001, 20.05.34
haemmm...mi faresti un piacere? sarò scemo ma non sono riuscito ad integrarlo in una pagina :D
fammi una pagina di esempio, e se ho tempo te lo trasformo per database access ;)

quipo.it
29-05-2001, 08.51.18
Prova a vedere questo file di testo (http://www.ciaoweb.net/fisarmonis/dolomiti/download/esempio.txt), forse ci capisci qualcosa di più...

EcHo2K
29-05-2001, 10.08.06
e se la tabella nonha un campo ID?

c'e' un altra cosa che puoi fare con SQL per ridurre al minimo il carico sul DB ed avere il conteggio dei record...

quipo.it
29-05-2001, 22.19.22
Premesso che nell'ultima versione dello script è l'utente a decidere la colonna su cui fare l'indicizzazione (parametro $key, che in generale può essere "ID"), credo di aver capito cosa intendi dire:
ovvero usare la funzione COUNT(*); però non mi restituisce un valore giusto: a volte anzi non restituisce nemmeno la metà del valore atteso :confused:

Ecco cosa scrivo:

$numrows=mysql_query("select COUNT(*) from $table where $where");

Dove sbaglio?

EcHo2K
30-05-2001, 15.37.14
okkio che quando fai il mysql_fetch_array non so cosa ritorna perche' non sono stato capace di trovare nulla sul sito di PHP

io personalmente uso il $row=mysql_fetch_row in quel caso e mi vado a prendere $row[0], li dentro c'e' il risultato della count...non so perche' ma ritorna 2 celle...quindi esiste anche $row[1].

ti posso giurare che fin'ora non ho avuto problemi, ne con mysql ne con ODBC

----

scusa sono bacato nel capo, ho visto ora...

nella riga che mi hai scritto dentro $num_rows non ci trovi il numero delle righe, ma il result ID

la meniera corretta e' questa:

$query="SELECT COUNT(*) FROM $table WHERE $where";
$res=mysql_query($query,$conn)
or die("errore nell'eseguire la query");
$row=mysql_fetch_row($res);
$num_rows=$row[0];

a questo punto in $num_rows hai effetivamente il numero dei record della tabella.
Se riesci a sostituire mysql_fetch_row con mysql_fetch_array fammi un fischio!

[Edited by EcHo2K on 30-05-2001 at 15:43]

quipo.it
30-05-2001, 16.24.18
Ehi, ma COUNT(*) restituisce un array??? Ma perché non lo scrivono chiaramente sul manuale???
Grrr... ci ho perso un'ora! Alla fine mi è venuta l'illuminazione...
Una cosa non mi è chiara: cosa indica esattamente l'asterisco? Se io metto COUNT(1) cosa mi restituisce? Forse il # di righe non Nulle della 1a colonna?

---

PS: Scusa Echo, ho scritto quanto sopra prima di vedere il tuo ultimo post... comunque ho risolto così:

$numrows=mysql_query("select COUNT(*) from $table where $where");
$numrows=mysql_fetch_array($numrows);
$numrows=$numrows[0];

Da me funge...