Newsgroup: it.comp.www.php
Titolo: su un SELECT passare più variabili a volo

se ho un 
SELECT campo1 FROM tab1
WHERE campo1>5
AND campo2=$var1 
AND campo2=$var2
etcc...
praticamente il numero di AND deve poter essere 
variabile in base al numero di variabili che provengono da una selezione
multipla di un elenco a discesa;
e qual'č il sistema piů semplice per inglobare i dati della selezione
multipla (<select multiple ..) e passarli al SELECT sul db? 

On Mon, 14 Aug 2006 08:17:00 +0200, padew <aaaalllttt...@xcxc.xx>
wrote:

Chiami la scelta multipla come $scelta[]. A questo punto ti arrivera' una
roba come
	$scelta[0] = "'FI'"
	$scelta[1] = "'BO'"
	$scelta[2] = "'MI'"
e vai di foreach:
	$or	= '';
	foreach($scelta as $prov)
	{
		$sql .= $or . "prov=" . cleanup_prov($prov);
		$or	= ' OR ';
	}
oppure, se ti fidi di $scelta (e fai male ;-) )
	$provs = implode(',', $scelta);
	$sql	.= " AND prov IN ($provs)";
Devi controllare che l'array contenga qualcosa e che le varie voci siano
valide e non porcherie immesse da qualcuno che ti vuole male. All in all
penso che il foreach sia la scelta piu' pratica.
Ah, ho messo un OR perche' con l'AND la query tornava poco ;-)
Leonardo
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

a orecchio dovrebbe funzionare;
thank very much

 	}
cleanup cosa è o come va scritta
credo è per filtrare

 	$scelta[2] = "'MI'"
scusa se il nome normale è name="scelta"
faccio questo passaggio prima di usare
 $scelta = ($_POST['scelta']);
ora se icome si assegna invece  $scelta[]
cioè sul nome sarà:
name=$scelta[] (credo)
e poi così?
$_POST['$scelta[]']

credo è per filtrare
Esatto. Non l'ho scritta perche' cosa ti arrivera' in input lo sai solo
tu, sicche' avrei sprecato il mio tempo.
Nel caso delle province uno potrebbe fare dei controlli tipo
	function cleanup_prov($prov)
	{
		if (preg_match("/^'[A-Z][A-Z]'\$/", $prov))
			return $prov;
		return "'XX'";
	}
...per l'uso di preg_match (non sono sicuro di essermi ricordato giusta
la sintassi: CONTROLLA) puoi vedere il capitolo sul manuale del PHP.


 $scelta = ($_POST['scelta']);
Ehmmm. Mi sa che prima dovresti leggiucchiarti il manuale di PHP o un po'
di tutorial, o di esempi; mi sembra che tu ti sia tuffato nell'acqua alta
- sono d'accordo che cosi' o impari in fretta a nuotare o affoghi, ma non
era meglio prenderla piu' calma? :-)
Andando con ordine: in HTML, il nome del campo prevede le quadre:
<SELECT NAME="scelta[]" ...>
A questo punto ci pensa PHP a ricevere un array in $scelta. Ti basta fare
	$scelta = $_REQUEST['scelta'];
e sei lesto. Se scrivi nella pagina destinazione
	<?php
		print '<pre>';
		print_r($_REQUEST['scelta']);
		print '</pre>';
	?>
vedi anche cosa ti manda il browser... ricordati sempre che quello che ti
arriva e' quello che tu hai messo nell'HTML solo se tutto va bene. Ma, se
qualcosa va male (es.: io browser o io user sono un bastardo :-) ) dentro
a $scelta puoi trovare il vero distillato di merda immane dei frati dell'
eremo di Pimpandoli (1 goccia = 100 morti), sicche' occhio a prenderne il
contenuto e sbatterlo secco secco in una query SQL (cerca "SQL injection"
e "REQUEST variable poisoning" su Google se vuoi prenderti paura :-) ).


 e "REQUEST variable poisoning" su Google se vuoi prenderti paura :-) ).
avevo già letto qualcosa credo 
htmlspecialchars o qualcosa di simile , pero' non so se basta;
inoltre non ricordo se serviva modificarlo 

 usato: $_POST
Questo e` corretto. Io personalmente preferisco $_POST e $_GET a $_REQUEST.
Bye.

usato: $_POST
Be'. In effetti, la versione corretta e' la tua. Io pero' mi trovo
un po' piu' comodo con $_REQUEST: per me e' piu' facile modificare
i parametri durante il debugging. Tanto, penso che se uno mi vuole
mandare trojai, c'e' fior di tool che glielo fa fare comunque, e a
quanto so PHP popola _POST, _GET e _REQUEST simultaneamente.
Sono consapevole che e' un ragionamento da lazzarone, il mio :-)


 Il codice che ti hanno dato e` corretto.
mi funziona solo sscrivo:
<SELECT NAME="$scelta[]"
e poi
$scelta = $_POST['$scelta'];
perchč non lo so ma
solo cosě mi funziona

solo cosě mi funziona
Non e' che hai nel codice HTML un'altra variabile che si chiama
gia' "scelta"?
Se usi NAME="piripao[]", anziche' NAME="$scelta[]", funziona?


 Se usi NAME="piripao[]", anziche' NAME="$scelta[]", funziona?
ok come hai indicato;
dopo aver dato una ripulita a pezzi di codici doppione rifunziona ;
ringrazio entrambi