|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Roma
Messaggi: 16135
|
[Php]Lista di checkboxs, come farsi restituire l'ordine esatto di selezione?
Ho una specie di lista della spesa in cui l utente seleziona alcune checkbox ma al momento in cui mi viene restituito il risultato queste escono in ordine sparso, come far si che mi venga resituito l'ordine esattyo in cui l utente le ha selezionate?
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Vediamo di capire meglio il problema. Tu hai un form del tipo: Codice:
<form action="...." method=".."> <input type="checkbox" name="check1" value="1">Checkbox 1 <br> <input type="checkbox" name="check2" value="2">Checkbox 2 <br> <input type="checkbox" name="check3" value="3">Checkbox 3 <br> <input type="submit" value="Invia"> </form> Ci ho pensato un attimo. Delle soluzioni ci sarebbero ma ovviamente hanno bisogno di usare Javascript. La mia idea sarebbe questa (la butto lì, poi ditemi voi): Codice:
<script type="text/javascript">
<!--
var ord = 1;
function checkbox_onclick (c)
{
c.name = c.name.replace (/_ord.*$/, "");
c.name = c.name + "_ord" + ord;
ord++;
}
//-->
</script>
...ecc...
<form action="...." method="..">
<input type="checkbox" name="check1" value="1" onclick="checkbox_onclick (this); return true">Checkbox 1
<br>
<input type="checkbox" name="check2" value="2" onclick="checkbox_onclick (this); return true">Checkbox 2
<br>
<input type="checkbox" name="check3" value="3" onclick="checkbox_onclick (this); return true">Checkbox 3
<br>
<input type="submit" value="Invia">
</form>
Proviamo con questa sequenza di esempio: - l'utente seleziona check1 (diventa check1_ord1) - l'utente seleziona check3 (diventa check3_ord2) - l'utente deseleziona check1 (diventa check1_ord3 ma tanto non viene poi inviato) - l'utente seleziona check2 (diventa check2_ord4) Se l'utente invia il form, vengono inviati i valori di due checkbox: check2_ord4 e check3_ord2. A questo punto non dovrebbe essere difficile scoprire, dal lato server, che check3 è stato cliccato prima (ord2) e check2 dopo (ord4). Spero di essermi spiegato. Fatemi sapere cosa ne pensate!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Roma
Messaggi: 16135
|
no la cosa è un pò piu complessa e cioè ho 23 check tutte con lo stesso name e cioe: giocatori[] quindi un array, come posso fare? Javascript però mi da un qualcosa lato client, io dovrei fare in modo che la mail che invio a tutti rispetti l'ordine delle chekkature capisci?
Auguri anche a te ed aiutatemi!!!!!!!! |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ed è anche vero che quando si hanno tanti elementi simili in un form, si possono usare gli array, visto che php "vede" poi i dati postati come un array. Ma subito non ci avevo pensato che potevi aver fatto così. Rimedio subito. Ecco un codice, simile al precedente, ma che tiene in considerazione dei valori come array: Codice:
<script type="text/javascript">
<!--
var ord = 1;
function checkbox_onclick (c)
{
var name = "ord_" + c.name; /* compone nome "ord_<nome_checkbox>" */
if (c.checked)
document.all[name].value = ord;
else
document.all[name].value = "";
ord++;
}
//-->
</script>
...
<form action="...." method="post">
<input type="checkbox" name="check[1]" value="1" onclick="checkbox_onclick (this); return true">Checkbox 1<br>
<input type="checkbox" name="check[2]" value="2" onclick="checkbox_onclick (this); return true">Checkbox 2<br>
<input type="checkbox" name="check[3]" value="3" onclick="checkbox_onclick (this); return true">Checkbox 3<br>
<input type="checkbox" name="check[4]" value="4" onclick="checkbox_onclick (this); return true">Checkbox 4<br>
<input type="checkbox" name="check[5]" value="5" onclick="checkbox_onclick (this); return true">Checkbox 5<br>
<input type="hidden" name="ord_check[1]" value="">
<input type="hidden" name="ord_check[2]" value="">
<input type="hidden" name="ord_check[3]" value="">
<input type="hidden" name="ord_check[4]" value="">
<input type="hidden" name="ord_check[5]" value="">
<input type="submit" value="Invia">
</form>
Quando ricevi il post dal lato php, devi andare ad analizzare l'array ord_check per sapere quale è stato l'ordine. Ecco un esempio di un post stampato con il print_r del php (cioè ho fatto un print_r ($_POST); ): Codice:
Array
(
[check] => Array
(
[2] => 2
[4] => 4
[5] => 5
)
[ord_check] => Array
(
[1] =>
[2] => 2
[3] =>
[4] => 1
[5] => 3
)
)
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 07-01-2006 alle 21:59. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Roma
Messaggi: 16135
|
ehm, ho provato a mettere questo codice in una pagina ma non capisco perche non mi funziona. Lo script alla fine puo stare in una sola pagina no? Cmq gentilissimo un codice ad hoc, sei un grande
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Napoli (provincia)
Messaggi: 2372
|
Domanda: presumibilmente se una checkbox viene selezionata il valore di "ord" si incrementa, mentre quando viene deselezionata creerà un "buco", quindi non sarà possibile usare il contenuto del campo hidden per definire la "posizione precisa" nell'ordinamento, ma solo la posizione rispetto agli altri.
Altrimenti non ho capito niente
__________________
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Immaginiamo che dal POST si abbia questa situazione: Codice:
Array
(
[check] => Array
(
[1] => 1
[2] => 2
[4] => 4
[5] => 5
)
[ord_check] => Array
(
[1] => 1
[2] => 7
[3] =>
[4] => 8
[5] => 6
)
)
Codice:
$ord = $_POST['ord_check'];
$check_ordered = array ();
asort ($ord);
reset ($ord);
while (list($k, $v) = each ($ord))
{
if (is_numeric ($v))
array_push ($check_ordered, $k);
}
Codice:
Array
(
[0] => 1
[1] => 5
[2] => 2
[3] => 4
)
P.S.: Nello script Javascript che ho scritto nel post #4, ho usato document.all, che è supportato solo da IE. Il mio naturalmente era un esempio di base ma va modificato per supportare anche gli altri browser (che usano document.getElementById)!!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:51.











Raffo™ (io, non la birra) |
|








