Newsgroup: it.comp.www.php
Titolo: Scusate se vi assillo...checkbox + scelte multiple

Salve a tutti!
Questo newsgroup è davvero mitico! Ho letto anche dei vecchi messaggi di
apprezzamento e sono d'accordo: in altri gruppi, coloro che sanno le cose
preferiscono tenersele per sè e non mi sembra molto giusto... Purtroppo io
non sono molto brava a programmare, perchè è da poco che ho iniziato ma
spero un giorno di poter anche io aiutare qualcuno, e non mi dispiacerà
affatto!
Passo ora ad esporre il mio quesito e spero che qualcuno abbia il tempo e la
pazienza di aiutarmi...
Ecco il mio problema:
avendo 2 checkboxes, l'utente potrebbe selezionarne una o l'altra o entrambe
e in base alla sua scelta verrebbe creata una query apposita.
Per semplificare il tutto (dato che non ci salto fuori) ho deciso di fare
semplicemente stampare una riga con scritta l'operazione che verrà eseguita.
Una volta risolto il problema, creerò la query esatta.
Ecco il listato del file ordine.php:
<html><head><title>Ordine</title></head><body>
<p><b>Ordina (è ammessa  più di una scelta):</b>
<form action="ordine.php" method="get" name="ordine">
<input type="checkbox" name="ordnome" value="nome">Per nome
<input type="checkbox" name="ordart" value="articoli">Per articoli
acquistati
<input type="submit" name="ok" value="Invia query">
</form>
<?php
 if ($ordnome)
 { print "ordina per nome";
  if($ordart)
  print " e per articoli";
 }
elseif ($ordart)
 { print "ordina per articoli";
  if($ordnome)
  print " e per nome";
 }
?></body></html>
Tutto funziona bene se l'utente effettua solo una scelta (o di ordinare per
nome o per articoli acquistati), ma i problemi cominciano quando seleziono
entrambe le alternative. Infatti, il risultato dovrebbe essere il seguente:
a) se seleziono prima "Per nome" e poi "Per articoli acquistati" dovrebbe
stamparmi "ordina per nome e per articoli" (come fa in realtà) per poter
creare la query ORDER BY nome, articoli;
MA
b) se seleziono prima "Per articoli acquistati" e poi "Per nome" dovrebbe
stamparmi "ordina per articoli e per nome" (e invece mi stampa di nuovo
"ordina per nome e per articoli"...)  per poter creare la query ORDER BY
articoli, nome;
Come faccio a far capire che un checkbox è stato selezionato prima
dell'altro? C'è un modo? É un errore nel ciclo if oppure è proprio sbagliato
in questo caso utilizzare i checkboxes? Mi sapreste dare un consiglio?
Vi ringrazio per l'eventuale risposta
ciao!
lady_l
ps (OT): questa sera sono finalmente riuscita a vedere in videocassetta il
film SYNAPSE con Tim Robbins e l'ho trovato fantastico! Voi l'avete visto?
Ve lo consiglio caldamente!

 in questo caso utilizzare i checkboxes? Mi sapreste dare un consiglio?
Non puoi. Quando la richiesta arriva al php, lui sa solo che sono stati
selezionati tutti e due, non in che ordine.
Io risolverei con un radio button del tipo
- Non ordinare
- Ordina per nome
- Ordina per articoli
- Ordina per nome e per articoli
- Ordina per articoli e per nome
Controlli il valore e prepari la query di conseguenza.
Bye.

Grazie della risposta...
Mi č venuta un'altra idea: non č possibile utilizzare al posto di 5 radio
buttons due menů con selezioni multiple (dei SELECT)?
Verranno riconosciute le scelte secondo l'ordine che voglio io?
E se prima faccio ordinare la tabella in base a un certo ordine
(visualizzando giŕ una prima tabella) e poi rifaccio la domanda
per ordinare in base a un altro criterio (visualizzando un'altra tabella),
puň essere una soluzione corretta?
Perchč in realtŕ le scelte in base alle quali posso ordinare la tabella non
sono soltanto 2, ma ben 4 e quindi fare tanti radio buttons quante sono le
possibilitŕ (credo siano 24 o forse anche di +...) risulterebbe troppo
caotico...
Grazie ancora!
ciao
lady_l


Non riesci a recuperare l'ordine con cui l'utente compila i campi di un
form.
Però puoi condizionare tu l'utente a darti l'ordine dei criteri con cui
vuole ordinare.
Ad esempio mettendo più menu a tendina (tipo: criterio 1, criterio2,
criterio3) ognuno dei quali elenca tutti i campi per cui si può ordinare,
più un valore nullo (default) che vuol dire che non è selezionato nessun
criterio.
Del tipo:
Ordina per: |[nessun ordine]| |[nessun ordine]| |[nessun ordine]|
            |articolo       | |articolo       | |nome           |
            |nome           | |nome           | |nome           |
            |prezzo         | |prezzo         | |prezzo         |
Ovviamente puoi mettere anche più di tre liste, ma secondo me già tre
criteri di ordinamento sono più che sufficienti nella maggior parte dei
casi, anche se i campi per cui ordinare fossero di più.
In tal modo l'utente seleziona i campi e tu ottieni, ad esempio:
criterio1 = articolo, criterio2 = prezzo criterio3 = nome
e tu puoi fare la tua query con sort by $criterio1, $criterio2 (ovviamente
eliminando eventuali criteri uguali e quelli non selezionati).
Se poi vuoi strafare, vicino a ogni menu a tendina metti un radiobutton
"ordine inverso" che se selezionato ti passa una variabile tipo
$ordine_criterio1=DESC.

 ha scritto nel messaggio
news:9uq062$371$1...@newsfeed.cineca.it...
