Newsgroup: it.comp.www.php
Titolo: ordine cronologico articoli

Ciao, ho uno script che visualizza dei dati dal database (nomi di articoli e 
relativa data di pubblicazione);
ho messo un pulsante che ordina gli articoli dal pi� vecchio al pi� recente.
C'� una maniera per fare in modo che cliccando una volta il pulsante ordina 
gli articoli dal pi� vecchio al pi� recente
e cliccando una seconda volta inverti l'ordine e cos� via.
Grazie 

 e cliccando una seconda volta inverti l'ordine e cos� via.
Usa una variabile no?
Se la variabile � 1 ordini in ASC, se � 0 ordini in DESC.
Quando clicchi sul pulsante inverti la variabile.

 ha scritto nel 
messaggio news:h8qklb$uuh$1...@peregrinotuc.motzarella.org...

Questa � la parte dello script che riguarda l'ordinamento;
Il pulsante (ordina_data) fa parte di un form con metodo post.
Mi puoi fare un esempio?
include "config_db.php";
if(isset($_POST['ordina_data'])){
  $query = "SELECT * FROM file_rassegna_stampa ORDER BY 
dataora_pubblicazione ASC";
  $res = mysql_query ($query) or die (mysql_error());
}
else{
  $query = "SELECT * FROM file_rassegna_stampa ORDER BY 
dataora_pubblicazione DESC";
  $res = mysql_query ($query) or die (mysql_error());
}

 }
Non testato:
$ordina_data = $_POST['ordina_data'];
$new_ordina_data = !$ordina_data;
$ordine = ($ordina_data == 1) ? "ASC" : "DESC";
$sql = " SELECT ...... ORDER BY ".$ordine;
<input type='button' name='ordina_data' value='<?=$new_ordina_data?>' />

 e cliccando una seconda volta inverti l'ordine e cos� via.
Prendi una variabile booleana: se TRUE, l'ordine e' ASC, altrimenti e' DESC e la
inizializzi a TRUE
Quando clicki il pulsante fai in modo che venga passato anche il valore della
variabile booleana (vedi tut se con un INPUT type=hidden, con $_SESSION[] o come
vuoi.
All'inizio della tua procedura, prima inizializzi la variabile al default, poi
verifichi se ti viene passata in un qualche modo ($_POST, $_SESSION o altro), se
ti viene passata, la neghi.
Fatto cio', esegui la query sui dati basandoti sul valore della variabile booleana.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Nessun animale e` stato molestato per creare questo messaggio.

 ha scritto nel 
messaggio news:h8r76q$m5r$1...@peregrinotuc.motzarella.org...

Non funziona ma grazie lo stesso 

 $ordina_data = $_POST['ordina_data'];
Questa riga la sostituirei con:
if(!isset($_POST["ordina_data"]))
	$ordina_data = 1;
else
	$ordina_data = $_POST["ordina_data"];
o se vuoi farlo con l'operatore ternario:
$ordina_data = (isset($_POST["ordina_data"]))?$_POST["ordina_data"]:1;
Enrico

 Non funziona ma grazie lo stesso
Come no? Ho provato ora.
Se poi mi dicessi almeno cosa c'� che non va,
magari lo risolviamo.....

 Questa riga la sostituirei con:
Ci sono svariati modi per fare quello che chiede l'utente.
Il mio pezzo di codice serviva a dare "una dritta", giusto
per far capire in che direzione muoversi, non era di certo
una pappa pronta.

 una pappa pronta.
Ed il mio era una possibile correzione per rendere il codice un po' pi� 
completo e funzionante anche con il minimo delle informazioni.
Enrico

 completo e funzionante anche con il minimo delle informazioni.
Per�, senza voler polemizzare in alcun modo, non vedo i vantaggi
di controllare, in questo caso, la presenza o meno di $_POST ed
impostare un eventuale valore di default.
Nel mio codice, viene usato l'operatore ternario per verificare
la presenza di 1 in $_POST['ordina_data'].
Se manca l'1, ordina in un modo, altrimenti ordina nell'altro.
Indipendentemente dai casi, l'ordine sar� corretto.
Inoltre, usando una negazone della variabile, se manca $_POST
la sua negazione sar� automaticamente 1, altrimenti se presente
e pari a 1, la negazione sar� 0. Qu� hai la dimostrazione:
$ cat prova.php
<?
    $new_ord = !$ordine;
    echo $new_ord;
?>
ale@ale-netbook:~$ php prova.php
1
$ordine non esiste, la sua negazione per� vale 1.
Perch� tu vai ad impostare un valore di default?

 Non funziona ma grazie lo stesso
Se scrivi qui si presume che tu conosca o voglia imparare il PHP. Non ti 
verranno dati (o non dovrebbero essere dati) script gia` pronti e 
funzionanti, e nessuno si mettera` a fare debug di script che magari hai 
scaricato da Internet.
Da come hai scritto finora in questo thread immagino che quello script non 
l'abbia scritto tu, anche perche` altrimenti gia` con la prima risposta di 
Pipino avresti dovuto avere una traccia da seguire per risolvere il tuo 
problema.
Bye.

Alessandro Pellizzari ha scritto:

cattivo ma giusto!

 Perch� tu vai ad impostare un valore di default?
Secondo me (opinione personalissima) � pi� corretto "logicamente". Ora, 
se funziona anche bene senza � ok, ma io preferirei essere sicuro.
Enrico

 cattivo ma giusto!
Scusate, ma in questi giorni sono talmente pieno di lavoro che la 
diplomazia mi scarseggia... :)
Bye.

 Non funziona ma grazie lo stesso
Trovo giusto che il codice fornito in un ng non debba essere per forza 
perfetto o testato ma visto che le righe sono poche e che nessuno se n'� 
ancora accorto... mi permetto di farti notare dove il codice non funziona: 
per una semplice distrazione si � confuso l'uso di due variabili 
($new_ordina_data e $ordina_data), basta sostituire $new_ordina_data nella 
condizione della terza riga e il codice diventa
$ordina_data = $_POST['ordina_data'];
$new_ordina_data = !$ordina_data;
$ordine = ($new_ordina_data == 1) ? "ASC" : "DESC"; # 3a RIGA MODIFICATA!
$sql = " SELECT ...... ORDER BY ".$ordine;
oppure, come � stato fatto notare da qualcuno, risparmiare l'uso della 
variabile $new_ordina_data e rendere il codice pi� compatto cos�
$ordina_data = $_POST['ordina_data'];
$ordina_data = !$ordina_data; # 2a RIGA MODIFICATA!
$ordine = ($ordina_data == 1) ? "ASC" : "DESC";
$sql = " SELECT ...... ORDER BY ".$ordine;
o volendo esagerare a discapito della leggibilit�
$sql = " SELECT ...... ORDER BY ".(!($_POST['ordina_data']) ? "ASC" : 
"DESC");
Facilit� e leggibilit� a volte significano un codice compatto e chiaro in 
poche righe di codice, altre volte un codice pi� lungo e ricco di 
spaziature, commenti, variabili di appoggio... dipende dai casi e dallo 
stile di programmazione.
Ciao a tutti.
@ctarus 

 $sql = " SELECT ...... ORDER BY ".$ordine;
Che non cambia niente, non pu� non funzionare a causa della terza riga,
per altro non errata.
Commentiamo il codice:
---------------------
# Prendo il parametro passato in POST
$ordina_data = $_POST['ordina_data'];
# Nego il valore
$new_ordina_data = !$ordina_data;
# Se il parametro passato come post (E NON QUELLO NEGATO)
# e' == 1 allora ordino in ASC, altrimenti ordino in DESC
$ordine = ($ordina_data == 1) ? "ASC" : "DESC";
# Faccio la query
$sql = " SELECT ...... ORDER BY ".$ordine;
# Preparo la form con ordinamento invertito rispetto a quello attuale
<input type='button' name='ordina_data' value='<?=$new_ordina_data?>' />
------------------------
In pratica, al primo giro (niente POST) ordino in DESC dato che
$ordina_data � vuoto e di conseguenza NON uguale ad 1.
Intanto preparo la form con un "not null" ovvero 1.
La form quindi far� il submit del parametro "ordina_data" pari a 1.
Al secondo giro, $ordina_data sar� 1 e di conseguenza ordiner� in ASC.
Intanto, faccio il NOT 1, ovvero 0, e lo passo come argomento della form.

 Intanto, faccio il NOT 1, ovvero 0, e lo passo come argomento della form.
Sul fatto che "non fosse errata in assoluto" ti chiedo scusa, ho letto il 
post su un monitor piccolo ed effettivamente mi era sfuggita l'ultima riga 
relativa al bottone.
Sul fatto che "non pu� non funzionare/non cambi niente" non ci metterei la 
mano sul fuoco. Proprio grazie alla mia svista di cui sopra ho provato 
l'esempio e mi sono reso conto che NON funzionava.
Non volevo peccare di presunzione e non voglio insistere cercando di 
dimostrare che un codice funzionante sia sbagliato. Semplicemente prima sono 
partito dalla considerazione che la dichiarazione di MC "Non funziona" forse 
significava che... il codice non stava funzionando come ci si aspettava. E 
visto che il silenzio tacito di altri mi portava a pensare che l'errore 
fosse "saltuario", ho provato il pezzo di codice fornitoci con browser 
diversi in condizioni diverse.
Ne ho tratto la conclusione che il motivo fosse che $_POST['ordina_data'] 
pu� restituire una stringa (*) o null (a seconda della configurazione server 
e delle ristrettezze/caratteristiche imposte dal browser client) che 
confrontata "direttamente" con un intero ($ordina_data == 1) pu� fallire 
oppure meno. Se invece si applica prima la negazione, con una variabile 
intermedia o meno, il risultato � (!STRINGA, !NULL, !0...) l'intero 1 che 
pu� essere valutato dall'operatore ternario senza problemi. Dopo aver 
constatato che la semplice modifica mi faceva passare sia ASC sia DESC (e 
non solo DESC come nel tuo esempio peraltro validissimo) ho deciso di 
postare.
(*) avendo a disposizione un codice parziale non potevo nemmeno escludere 
che un'altra svista avesse portato a usare GET nel metodo del form e POST 
nel codice PHP... nel qual caso la stringa di ritorno di POST � vuota...
Tutto quanto sopra nell'attesa di sapere cosa esattamente non andasse, come 
tu hai gi� chiesto di specificare e per cui non hai ottenuto ancora 
risposta.
Ciao.
@ctarus