Domanda:
paginazione php?
Flicker
2008-01-04 12:50:55 UTC
Sto provando a realizzare un guestbook e ho un po' di difficoltà con la paginazione di record su diverse pagine.
ho letto i tutorial su internet ma non riesco a capire come vengono generate le nuove pagine php. deduco che si creino con questo codice

$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];

ma get non era un metodo per passare i dati alternativo a post? e in questo caso page non dovrebbe essere una variabile da inizializzare? Perchè bisogna specificare (int) prima del secondo GET?

non ho bisogno di soluzioni preimpostate, vorrei capire...
Quattro risposte:
anonymous
2008-01-05 03:24:51 UTC
Sì, get è un metodo per passare i dati.



Il codice postato controlla solo se "page" passato come get è diverso da 0. In realtà è un pò schifoso perché ha i seguenti problemi:



- Se 'page' non è specificata genera un warning col PHP5

- Se passo ?page=0, $current_page mi viene impostata a 1

- Se passo ?page=-2 (o qualsiasi numero negativo), $current_page viene impostata ad un numero negativo



Un cracker sicuramente prova subito a passare un numero negativo a page...



Personalmente userei questo codice:



$current_page = isset($_GET['page']) && $_GET['page'] > 1 ? (int) $_GET['page'] : 1;



Specificare (int) si chiama casting: forzi la variabile ad un tipo specifico. Mettiamo che usi $current_page in una query e non fai il casting; un cracker potrebbe scrivere:



?page=1%3BUPDATE+user+

SET+password%3D%27123%27--



tentando di impostare tutte le password della tabella user a '123'. Questa tecnica si chiama SQL injection: impostare i parametri in modo da eseguire comandi SQL arbitrari.



Con il casting, $current_page sarebbe stato uguale al numero 1.
Kongoji
2008-01-04 22:07:16 UTC
1) In PHP le variabili posso essere usate anche senza inizializzarle

2) Il $_GET è un'array contenente i parametri passati alla pagina attraverso un url.

Se ad esempio chiamo da browser guestbook.php?nomeacaso=pippo,

nell'array $_GET di guestbook.php troverò che $_GET["nomeacaso"] avrà valore "pippo"

3) L'istruzione che hai scritto è un if in forma contratta che assegna a $current_page il valore del parametro "page" (se questo gli è stato passato), altrimenti gli assegna "1".

In pratica se hai un url del tipo guestbook.php?page=3, quell'if assegnerà a $current_page il valore 3, mentre se richiami guestbook.php senza il parametro page, allora $current_page sarà uguale a 1.

4) Il parametro "page" conterrà il numero della pagina da visulaizzare, per questo viene fatto il cast int su $_GET["page"], perchè il parametro "page" è previsto che sia un numero
zedda_piras25
2008-01-04 23:35:18 UTC
$_GET è l'array che contiene i parametri passati in modo get

index.php?page=2

ad esempio è un modo per passare il parametro page = 2 alla pagina index.php



quando scrivi

$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];

stai dicendo che se non viene passato nessun parametro di nome page si assume come valore di default 1

la traduzione sarebbe

$current_page prende il valore 1 se non c'è niente dentro $_GET['page'] altrimenti prende il valore di page all'interno dell'array $_GET trasformato in intero (inutile dato che in php i cast non sono necessari)

se vuoi essere sicuro che venga passato un numero invece che

index.php?page=bla

dato che uno nell'indirizzo della pagina ci scrive quello che vuole puoi usare la funzione is_numeric($var) che restituisce false se $var non è un numero



in pratica stai solo passando un valore, a che ti serve sta cosa? solo a sapere quale pagina aprire

in modo che la pagina index.php cambi a seconda dei parametri che gli passi



metti caso che salvi i commenti di un post in un database con un attributo che è l'indice del post

farai una cosa del genere:



chiami la pagina index.php?page=x

con x = l'indice del post

con la query

select * from posts where id = x

prendi il post da stampare e con

select * from commenti where commento_post = x

prendi i commenti al post che hai appena stampato



tutto qua, dato che vuoi fare un guestbook non credo sia strettamente necessaria una cosa del genere dato che probabilmente vuoi semplicemente stampare tutti i commenti che vengono lasciati al sito
Chintan
2008-01-04 20:58:49 UTC
$_GET è un array..

probabilmente vuole far riportare l'indice della pagina...

ma ha poco senso.. non bisogna prima contare i record dell'array, magari con count...

bo io odio php soprattuto alle 22 XD


Questo contenuto è stato originariamente pubblicato su Y! Answers, un sito di domande e risposte chiuso nel 2021.
Loading...