Newsgroup: it.comp.www.php
Titolo: filtrare query in base ad array

salve a tutti,
ho un array di questo genere:
$giocatori = array("id","calciatore","ruolo","reti");
ogni valore di array corrisponde al nome del rispettivo campo di una 
tabella mysql "giocatori", ma attenzione la tabella ha un numero 
maggiore di campi, i quali ho deciso che non si devono trovare nell'array.
adesso vorrei stampare a video una tabella html che in modo automatico 
si ricava nomi campi e records.
il codice per la tabella e' gia' funzionante, devo solo creare un 
"filtro" adeguato.
il risultato, in poche parole, e' quello di estrarre tutti i nomi dei 
campi (e i relativi records) della tabella ma mostrare a video soltanto 
quelli che sono presenti nell'array.
posso agire (magari!) a livello di select sql o devo impostare un "if 
... else" in mezzo al loop for ... , in modo da dirgli di ignorare i 
campi che non sono nominati nell'array?
come faccio? ;)
saluti
sp-

 campi che non sono nominati nell'array?
Entrambe le soluzioni sono attuabili, la scelta dipende molto dalla
complessita' del database ed eventuali join necessari per effettuare la
selezione.
La prima soluzione puoi implementarla cosi':
<?php 
$giocatori = array ("pippo", "pluto", "topolino");
$sSQL = "SELECT * FROM tblGiocatori WHERE " .
		"(Nome = '" . implode("') OR (Nome = '", $giocatori) . "')";
print ($sSQL);
// da testare, da adattare e mancano i controlli di sicurezza
?>
La secondo e' elementare, te la lascio come compito per casa.
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Votami! 
http://www.phpclasses.org/vote.html
L'uomo, conscio di sbagliare, persevera.

 La secondo e' elementare, te la lascio come compito per casa.
eheheh
ciao
sp-

dunque, la query "tecnicamente" non da' errore:
// array della tabella "giocatori"
$giocatori=array("id","calciatore","ruolo","reti");
// costruisco la select base
$sSQL = "SELECT * FROM giocatori";
// aggiungo il resto
$sSQL.= " WHERE "."(Nome='".implode("') OR (Nome='",$giocatori)."')";
                      ^-----------------------^
ma il fatto e' che non va fatta sui records, | ma sui nomi dei campi.
(ammetto di non aver capito "Nome" ----------| a che corrisponda, 
probabilmente al nome del campo?).
difatti:
$giocatori = array ("pippo", "pluto", "topolino");
sono dei nomi, mentre :
$giocatori=array("id","calciatore","ruolo","reti");
sono i nomi dei campi della tabella giocatori.
quindi ho pensato che probabilmente la cosa era anche piu' semplice del 
previsto, e penso di aver ragione, visto che per far questo mi e' 
sufficiente fare un implode dell'array con i campi e inserirlo nella select:
SELECT " . implode(",",$giocatori) . " FROM giocatori";
ed in effetti funziona a dovere.
pero'..... c'e' un pero'... :)
il fatto e' che il nome dell'array dal quale "pescare" la lista dei 
nomicampi adesso ha un nome "artificiale", ovvero qualcosa tipo:
$grid_nometabella = array("id","calciatore","ruolo","reti");
e il nome della tabella non e' fisso ma viene passato per GET.
difatti a inizio pagina c'e'
$tab=$_GET["table"];
quindi, scrivo il codice nuovo:
$tab=$_GET["table"];
$gridTab="$" . "grid_" . $tab;
$sqlString = "SELECT " . implode(",",$gridTab) . " FROM " . $tab;
$query = mysql_db_query($dbname,$sqlString);
$res = mysql_num_rows($query);
che non va, perche' la variabile $gridTab non viene letta nella maniera 
giusta.
se invece la select la scrivo cosi':
$sqlString = "SELECT " . implode(",",$grid_giocatori) . " FROM " . $tab;
funziona.
ma allora come faccio a dire a php che la variabile generata $gridTab 
corrisponde al nome dell'array $grid_nometabella?
sp-

 corrisponde al nome dell'array $grid_nometabella?
Premettendo che mi sembra inutile in riferimento al codice che hai
postato (la variabile $grid_nometabella puo' avere un nome generico),
puoi usare il seguente codice:
<?php 
$_GET["table"] = "pippo"; // valore fittizio di test
$tab = $_GET["table"];
$var_name = "grid_" . $tab;
$$var_name = array ("id", "calciatore", "ruolo", "reti");
print_r ($grid_pippo);
?>
Rif:
http://www.php.net/manual/en/language.variables.variable.php
-- 
I am what I am, I do what I can
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
Vuoi supportarmi? 
http://url.repository.biz/go/3E


 
http://www.php.net/manual/en/language.variables.variable.php
ma perche' io non le trovo ste pagine, uffa (giuro che le cerco eh)
c'e' anche il commento di un tipo che ha usato eval, che e' la prima 
cosa alla quale ho pensato :-/
sp-

dunque, sbagliavo a scrivere l'eval.
scrivevo :
$gridTab = 'grid_' . $tab;
eval ('$$gridTab = $'.$gridTab.';');
$sqlString = "SELECT " . implode(",",$$gridTab) . " FROM " . $tab;
ma sono uno scemo :) dovevo scrivere :
$gridTab = 'grid_' . $tab;
eval ('$$tb = $'.$gridTab.';');
$sqlString = "SELECT " . implode(",",$$tb) . " FROM " . $tab;
cioe' evitare il doppio $$gridTab nell'eval :)
funzia.
yeppaaaaaa! grazie setec :)
sp-

una curiosita' sugli array...
ho notato che un array del genere non da' errori:
$var = array ("uno","due","tre",);
cioe' con una "," di troppo dopo "tre".
funziona lo stesso perche' e' come se ci fosse un valore nullo dopo 
l'ultima virgola o sarebbe meglio metter solo tabacco nelle mie sigarette?
sp-