Passare variabile in SELECT

criccroc

Utente Attivo
7 Gen 2011
44
0
6
Ciao a tutti, ho un piccolo problemino che provero' a spiegarvi:

ho un file in php che gestisce i dati in base ad una variabile ($per_pagina) ed in base ad essa visualizzerà XX record in una pagina HTML.

In questa pagina HTML c'e' un SELECT che permette la scelta all'utente:

<form method="POST" action="utenti.php">
<select name="per_pagina">
<option value="5">5</option>
<option value="10">10</option>
<option value="20" selected="selected">20</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
<input type="submit" value="SELEZIONA">
</form>

fin qui tutto chiaro e tutto funzionante. Per default si visualizzano 20 record per pagina.

Ora, il mio obiettivo è quello di MEMORIZZARE la scelta fatta dall'utente affinchè sia la nuova scelta il valore di default, ovvero: se l'utente clicca ad esempio su 10, quando il programma php richiama nuovamente la pagina HTML il valore di default deve essere impostato su 10 e non su 20 e cosi via.

In altre parole, il valore di default del SELECT deve essere lo stesso della variabile $per_pagina.

Inoltre vorrei che la selezione venga fatta in modo automatico appena si clicca sul nuovo valore scelto, anzichè cliccare su SELEZIONA.
Grazie.
Carlo.
 
Per memorizzare la scelta dell'utente puoi usare i cookie: https://www.mrw.it/php/guide/gestire-cookie_87.html.
Per inviare il form appena viene selezionata una opzione puoi usare Javascript. Modifica il form così:
HTML:
<form name="ppg" method="POST" action="utenti.php">
	<select name="per_pagina" onchange="document.ppg.submit()">
		<option value="5">5</option>
		<option value="10">10</option>
		<option value="20" selected="selected">20</option>
		<option value="50">50</option>
		<option value="100">100</option>
	</select>
</form>
 
Grazie Alessandro per la risposta!!!
Ho modificato il SELECT utlizzando il comando Javascript come da te consigliato.. GRAZIE era da parecchio che volevo risolvere questo problema. FUNZIONISSIMA!

Il secondo probema pero' e' rimasto irrisolto. Ti spiego meglio:

La pagina HTML richiama il programma PHP e ritorna nella stessa pagina HTML (per eventuali altre modifiche). Pertanto il problema non e' quello di MEMORIZZARE LA VARIABILE, ma fare in modo che l'utente legga nella casella del select il VALORE della variabile, ovvero:
se io scelgo 50, appena ritorno nella pagina devo avere come default 50 sul select.

Penso quindi che dovrei togliere il selected="selected" e sostituirlo in qualche modo con il valore della variabile cambiata (50).

Mi spiego ancora meglio: se ulilizzassi un INPUT TEXT potrei mettere come VALUE=$per_pagina e di conseguenza nella casellina ci sara' scritto 50.

Spero di essere stato un po piu chiaro.

Con l'occasione ti ringrazio anche per avermi dato il link riguardo i COOKIES che ora mi sono piu chiari ehehe..
A presto.
Carlo.
 
ciao
non ho usato i cookie perche non mi piaccono molto.
comunque usando le sessioni raggiungi quello che vorresti (almeno così mi sembra)

PHP:
<?php
if(!isset($_SESSION)){session_start();}
if(isset($_POST['per_pagina'])){
	$valore=(int)$_POST['per_pagina'];
	unset($_SESSION['pag']);
	$_SESSION['pag'][$valore]="selected";
}else{
	$_SESSION['pag'][20]="selected";
}
?>
<form name="ppg" method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
	<select name="per_pagina" onchange="document.ppg.submit()">
		<option value="5" <?php echo $_SESSION['pag'][5];?>>5</option>
		<option value="10" <?php echo $_SESSION['pag'][10];?>>10</option>
		<option value="20" <?php echo $_SESSION['pag'][20];?>>20</option>
		<option value="50" <?php echo $_SESSION['pag'][50];?>>50</option>
		<option value="100" <?php echo $_SESSION['pag'][100];?>>100</option>
	</select>
</form>
ho messo l'action alla stessa pagina, ma puoi cambiarlo puntando ad un'altra tricordandoti però di
inizializzare le sessioni e di usare $_SESSION['pag']
comunque prova, al massimo non funzia
p.s.
per la sessione del numero di pagine ho utilizzato la globale $session come array di array perchè se ad es.
la pagina che stai usando è una pagina riservata e stai già usando una sessione per autorizzarne l'accesso
non voglio che l'unset elimini tale sessione, ma solo quella relativa al numero di pagine

dimenticavo:
guarda che per fare quello che vuoi la pagina con <select> deve essere una pagina php, non html
 
Ultima modifica:
Ciao anche a te borgoitalia e grazie per la risposta.

Provero' quello che mi hai postato ma facciamola un attimo piu semplice cosi non creiamo confusione. Immaginate questa situazione:

php:
$per_pagina = 50;

html:
<select name="per_pagina" onchange="document.ppg.submit()">
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
</select>

Ora dimentichiamoci il come memorizzare le variabil o variabili che cambiano. Obiettivo:

Fare in modo che il SELECT selezioni automaticamente 50 anzichè 5 (per default prende il primo valore e, nel caso di selected sara' quello il valore di default).

Se utilizzassi il comando input (ad esempio) la cosa sarebbe semplicissima:
in HTML scrivero' una riga cosi:
<input type="text" name="pagine" value=[var.per_pagina]/>

Penso quindi che ci sia la possibilita', anche nel caso del select, di passare la variabile e selezionare una delle 4 scelte in modo automatico o da HTML o da JAVASCRIPT.

Forse bisogna modificare questa parte:
<option value="5" <?php echo $_SESSION['pag'][5];?>>5</option>
con una simile a questa:
<option value="5" [var.per_pagina]>5</option>
e via dicendo..

Ho provato cosi ma non funziona.
Ciao ciao
Carlo
 
Ultima modifica:
Io ti consiglio, all'invio, di memorizzare in un cookie chiamato per_pagina il valore selezionato e modificare in questo modo il form:
PHP:
<select name="per_pagina" onchange="document.ppg.submit()">
	<option value="5"<?php if($_COOKIE['per_pagina'] == 5) echo ' selected="selected"'; ?>>5</option>
	<option value="10"<?php if($_COOKIE['per_pagina'] == 10) echo ' selected="selected"'; ?>>10</option>
	<option value="20"<?php if($_COOKIE['per_pagina'] == 20) echo ' selected="selected"'; ?>>20</option>
	<option value="50"<?php if($_COOKIE['per_pagina'] == 50) echo ' selected="selected"'; ?>>50</option>
	<option value="100"<?php if($_COOKIE['per_pagina'] == 100) echo ' selected="selected"'; ?>>100</option>
</select>
P.S. Ti ricordo che l'impostazione del cookie deve essere effettuata prima di qualunque output.
 
penso che il mio problema non sia quello di memorizzare la variabile e in che modo farlo, lo ho gia risolto questo problema e funzionissima, anche se provero' l'utilizzo dei cookies.

parto da un presupposto, se funziona questo:
<option value="5"<?php if($_COOKIE['per_pagina'] == 5) echo ' selected="selected"'; ?>>5</option>

allora dovrebbe funzionare anche questo:
<option value="5"<?php if($'per_pagina == 5) echo ' selected="selected"'; ?>>5</option>

Correggetemi se sbaglio :)
nel frattempo lo provo eheh. ciaooo
 
ciao
guarda che se usi il mio sistema o quello di alex (da certi punti di vista si equivalgono cioè funziano) è lo stesso si tratta principalmente di stile di programmazione (a me piacciono le sessioni e gli array, a alex, data l'età, le caramelle:))
l'unico modo di ricordare i valori dopo i submit (e/o i reffresh) sono i cookie o le sessioni, salvo ricorrere (in questo caso assurdamente) a un db.
se provi il mio sistema (o quello di alex) vedrai che alla partenza viene selectatto il valore di default, poi il valore scelto dall'utente diventa, fino all'uscita dal bw nel mio caso o sino alla morte del cokie per alex, il valore di default (sino a che non lo cambia)
 
Ultima modifica:
sicuramente c'e' qualche errore di sintassi nella parte html che mi avete postato.
Ecco cosa ho fatto:
PHP:
//memorizzo le pagine in un cookie ed imposto la scadenza tra un'ora...
$pagine = $_POST['per_pagina'];
setcookie("pagine", $pagine, time()+3600);

fin qui tutto ok!! Infatti usando il comando
echo "pagine= " . $_COOKIE['pagine'];
visualizzo la scelta effettuata (ma questo come avevo gia detto era per me gia risolto).

E' qui che bisogna concentarsi :)
HTML:
<option value="5"<?php if($_COOKIE['pagine'] == 5) echo ' selected="selected"'; ?>>5</option>
<option value="10"<?php if($_COOKIE['pagine'] == 10) echo ' selected="selected"'; ?>>10</option>
<option value="20"<?php if($_COOKIE['pagine'] == 20) echo ' selected="selected"'; ?>>20</option>
<option value="50"<?php if($_COOKIE['pagine'] == 50) echo ' selected="selected"'; ?>>50</option>
<option value="100"<?php if($_COOKIE['pagine'] == 100) echo ' selected="selected"'; ?>>100</option>


tanto per cominciare c'e' un > che non dovrebbe esserci prima dei numeri, da qui deduco che il codice e' errato.
Comunque in questo modo NON FUNZIONA. Imposta il valore di default (il primo della lista).

Ricordo che il problema mio non e' COME memorizzare la variabile ma IN CHE MODO passarla al SELECT.

PS: io personalmente non amo inserire codice PHP in un file html ... ognuno ha i suoi difetti ehehehe.
 
Ultima modifica:
Scusami, ma prima memorizzi la scelta nella variabile $pagine e poi imposti la variabile $nome come valore del cookie... com'è possibile? Modifica il tuo codice così:
PHP:
$pagine = $_POST['per_pagina'];
setcookie("pagine", $pagine, time() + 3600);
 
Tra l'altro il mio codice funziona benissimo. Ho creato una pagina index.php contenente:
PHP:
<?php
if(!isset($_COOKIE['per_pagina']))
{
	setcookie('per_pagina', 5, time() + 3600, '/');
	$_COOKIE['per_pagina'] = 5;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
	<head>
		<title>Memorizzazione scelta</title>
		<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	</head>

	<body>
		<form name="memorizza" action="memorizza.php" method="post">
			<select name="per_pagina" onchange="document.memorizza.submit();">
				<option value="5"<?php if($_COOKIE['per_pagina'] == 5) echo ' selected="selected"'; ?>>5</option>
				<option value="10"<?php if($_COOKIE['per_pagina'] == 10) echo ' selected="selected"'; ?>>10</option>
				<option value="20"<?php if($_COOKIE['per_pagina'] == 20) echo ' selected="selected"'; ?>>20</option>
				<option value="50"<?php if($_COOKIE['per_pagina'] == 50) echo ' selected="selected"'; ?>>50</option>
				<option value="100"<?php if($_COOKIE['per_pagina'] == 100) echo ' selected="selected"'; ?>>100</option>
			</select>
		</form>
	</body>
</html>
E una pagina memorizza.php contenente:
PHP:
<?php
setcookie('per_pagina', $_POST['per_pagina'], time() + 3600, '/');
header('Location: index.php');
?>
E tutto funziona a meraviglia.
 
ora mi ucciderete perchè divento INSOPPORTABILE? ehehe Spero di no.

Caro Alessandro, ho provato a fare ESATTAMENTE come tu mi hai consigliato.
Infatti ho creato 2 files (index.php e memorizza.php) facendo copia incolla del tuo codice.

A prima vista SEMBRA che tutto funzioni ma in realta' tu non vai di nuovo sul select dopo che hai fatto la scelta.

Ti faccio notare che vicino al numero c'e' un ">" e questo mi fa pensare che il codice HTML non e' scritto correttamente.


Prova a vedere in realta' quello che accade direttamente sul mio sito:

http://www.bigemerald.com/shop.php

vedrai che c'e' un select dove scegliere la quantita' di negozi da visualizzare.

In alto a sinistra invece vedrai la scritta pagine=XX ma vedrai che nel select accade questo:
1) il simbolo > che non deve apparire
2) la scelta non cambia , resta sempre su 5.

borgo: si avevo capito questo ed e' corretta la sintassi, ma come vedrai non e' corretto perche appare nelle scelte.

Se vuoi possiamo anche sentirci su skype. Fatemi sapere :)
 
Io nel codice sorgente della tua pagina vedo:
PHP:
<option value="5"<?php if($_COOKIE['per_pagina'] == 5) echo ' selected="selected"'; ?>>5</option>
                <option value="10"<?php if($_COOKIE['per_pagina'] == 10) echo ' selected="selected"'; ?>>10</option>
                <option value="20"<?php if($_COOKIE['per_pagina'] == 20) echo ' selected="selected"'; ?>>20</option>
                <option value="50"<?php if($_COOKIE['per_pagina'] == 50) echo ' selected="selected"'; ?>>50</option>
                <option value="100"<?php if($_COOKIE['per_pagina'] == 100) echo ' selected="selected"'; ?>>100</option>
Mentre in realtà dovrei vedere solo il codice HTML. Evidentemente il tuo server non interpreta correttamente il codice PHP. Potresti postare i sorgenti della pagina shop.php?
 
ciao
ho provato anche io, ma vedo solo l'html (IE + fire), comunque nella select c'è (ne prendo una sola)

<option value="10">&gt;10</option>
che non so da dove salti fuori

dimentivavo: lo script di alex (strano a dirsi) ma è vero che funzia
 
Ehm... io continuo a vedere il codice PHP. Quindi Google Chrome può leggere il codice PHP delle pagine anche se il server lo processa prima, fantastico! Corro subito a scaricare il CMS che gestisce Google! :D

Scherzi a parte, è una cosa piuttosto curiosa...
 
Cari ragazzi, intanto vi ringrazio perchè partecipate al mio problema,
io personalmente comunque resto dell'idea che il problema non si risolve con i cookies o similari riguardo la variabile. QUELLA FUNZIONA!

La dimostrazione pratica la potete vedere ora sul sito:
Ho rimesso tutto come era prima, se selezionate dal menu il valore vedrete che tutto fuziona correttamente (si visualizzeranno 5,10,20,50 o 100 negozi per pagina in base alla scelta effettuata), tranne il VALORE che dovrebbe cambiare in base alla scelta fatta.

Quindi il problema non sta sulla variabile, ma come impostare il select in base alla variabile!

Pertanto credo che bisogna intervenire o in JAVASCRIPT oppure inserire ulteriori comandi in SELECT.

Guardate questa parte di codice.. che FUNZIONA nel caso in cui tramite una SELECT si seleziona la situazione sentimentale:

<option value="[var.rel_single]" [var.Single]>[var.rel_single] </option> <option value="[var.rel_taken]" [var.Taken]>[var.rel_taken] </option>
<option value="[var.rel_looking]" [var.Looking]>[var.rel_looking]</option>

le tre variabili sono: Single, Impegnato, In cerca di..

cosi facendo in base alla scelta effettuata viene memorizzato PER DEFAULT i valore scelto.

Ora bisogna provare a mettere questo semplice codice nel mio semplice programma :)

A chi ci riesce, iscrizione gratis sul mio sito (ahahah tanto e' gia gratuita di suo ahah) :)
 

Discussioni simili