query con mysql, checkbox e php

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ciao a tutti
ho un problema con uno script che ho trovato in rete che mi permette di selezionare dei dati attraverso dei checkbox e poi mi restituisce tutti i dati corrispondendti dal db. Fin qui tutto bene ma se vado a cambiare la query e ci inserisco ad esempio "order by prezzo", la query me la svolge ma non mi permette più di selezionare dalle checkbox e mi dice che non può eseguire la query, mentre io vorrei cambiarla.
di seguito il codice

PHP:
<?php
$nomeDB = "*****";
$connessione=@mysql_connect("","","")
or die ("Connessione al Server non possibile.");
@mysql_select_db($nomeDB,$connessione)
or die ("Connessione al DB non possibile.");

echo "<B>Elenco</B><br><br>";
echo "<i>Tipo Quantità Prezzo Genere</i><br><br>";
$q = "SELECT * FROM catalogo";
$condizione = "";
if ($_POST['c1'] == "colla")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." OR ";
}
$condizione = $condizione." genere = 'colla' ";
}

//qui di seguito tutti gli "if" per ogni relativo checkbox, e poi

if ( $condizione <> "" )
{
$q = $q." WHERE ".$condizione;
}


$id_ris=@mysql_query($q)
or die ("Non è possibile eseguire la query!");
$num_libri=mysql_num_rows($id_ris);
// Si sposta sul primo record
mysql_data_seek($id_ris,0);
for( $i=0; $i<$num_libri; $i++ )
{
$record=mysql_fetch_array($id_ris);
//echo $i;
//echo ",";
//echo $record[0];
//echo ",";
//echo "&nbsp &nbsp";
echo "<b>$record[1]";
echo ",";
echo "&nbsp &nbsp";
echo $record[2];
echo ",";
echo "&nbsp &nbsp";
echo $record[3];
echo ",";
echo "&nbsp &nbsp";
echo $record[4];
echo "<br>";
}
?>

ho pensato che il problema possa essere

PHP:
if ( $condizione <> "" )
{
$q = $q." WHERE ".$condizione;
}

spero qualcuno possa aiutarmi, grazie
 
Ultima modifica di un moderatore:
ciao
se credi che il problema sia li correggi in
PHP:
//........
if ( $condizione != "" )
{
//....
!= vuol dire: diverso da

p.s.
quando posti del codive racchiudilo tra gli appositi tag (nella barra di formattazione II° riga a dx)
 
ciao
riguardando meglio c'è qualcosa che non mi quadra tra questi if, inoltre dove valorizzi $condizione a parte =""?
PHP:
<?php
//...
$condizione = "";//metti a vuoto la variabile
if ($_POST['c1'] == "colla"){
	if ( $condizione == "" ){//se la variabile $condizione è vuota
	//cosa fai ? qui cosa c'è?
	}else{//questo else è relativo al secondo if?
		//ma se condizione non viene in qualche maniera riempita di qui non passi mai
		$condizione = $condizione." OR ";
	}//questa è la graffa di chiusura del secondo if con else?
	$condizione = $condizione." genere = 'colla' ";//non avendo riempito condizione $condizione diventa == " genere = 'colla' "
}//questa è la graffa di chiusura del primo if?
//qui di seguito tutti gli "if" per ogni relativo checkbox, e poi

if ( $condizione != "" ){//da quello che hai scritto sopra (ti sei dimenticato qualcosa nella tastiera?) $condizione non sarà mai diversa da vuota
	$q = $q." WHERE ".$condizione;
}
//...
?>

p.s.
inndentate il codice
 
grazie per avermi risposto
purtroppo mi sto imbarcamenando per cercare un modo x collegare un form con delle checkbox ad un db e visualizzare solo ciò che viene spuntato. Ho trovato in rete questo script che sembrava ottimo, ma non mi permette di modificare la query. Io mi intendo di db ma no di php e non so come fare.
Non è che mi proporresti un modo, anche perchè cercando nel forum e in rete non sono riuscito a trovare ciò che mi serviva. Grazie mille
 
ciao
dimmi se ho capito bene:
hai diverse check C1, C2, C3 ecc...
a cui ciascuna corrisponde un valore es.
C1 -> colla
C2 -> mastice
C3 -> hattac
in funzione del check selezionato vuoi che il WHERE della query divenga
es. selzionato C1 e C3
.... WHERE genere ='colla' OR genere ='hattac'
con tutte le combinazioni possibili, è così?
 
perfettamente!
questo è il codice
PHP:
<input name="c1" value="colla" type="checkbox">colla
però vorrei avere la possibilità di modificare la mia query, inserendo order by prezzo ad esempio o limit 1 per visualizzare solo un campo alla volta, anche perchè se il codice lo lascio così com'è mi fa vedere a video tutti i campi che io spunto, ma non mi permette di modificare in nessum modo la query perchè mi da errore.
perciò se io lascio la query così
PHP:
$q = "SELECT * FROM catalogo";
funziona e mi fa vedere solo ciò che spunto, ma se la modifico
PHP:
$q = "SELECT * FROM catalogo order by prezzo";
mi va in errore.
grazie mille
 
ciao
per prima cosa, sei sicuro di avere nella tabella il campo chiamato 'prezzo', verifica che non si chiamo (es.) 'Prezzo', la query è semplicissima e non dovrebbe darti errore.
se poi hai pazienza fra un po' ti posto come dovresti fare per il where
 
grazie di tutto!
non vorrei approfittare della tua pazienza ma visto che si avvicna natale e siamo tutti piu buoni..., avrei anche bisogno (me ne sono accorto ora...) che devo filtrare i risultati della query tra piu tabelle. Queste tabelle hanno gli stessi medesimi campi ma si chiamano in maniere differenti. Per intenderci: i campi sono uguali x tutti e sono tipo, quantità, prezzo e genere ma le tabelle si chiameranno tabella1, tabella2 ecc...
è possibile visualizzare i dati raccolti da ogni tabella in modo tale che mi faccia vedere a video i risultati per ogni tabella?
cioè
tabella1 : tipo, quantità, prezzo e genere
tabella 2:tipo, quantità, prezzo e genere
grazie ancora...
 
ciao
ti metto tutto insieme anche per la seconda domanda.
io farei nel form di ricerca una select con cui selezioni la tabella chi ti interessa
PHP:
<?php
//.....
$tabella=" tabella_1 ";//comunque selezioni una

if(isset($_POST['tabella'])){//è stato selezionato c1
	$tabella= $_POST['tabella'];
}
$condizione = " WHERE 1=1 ";//in pretica se tutti i check vuoti la condizione E' SEMPRE SODDISFATTA quindi presenta tutti
if(isset($_POST['c1'])){//è stato selezionato c1
	$condizione .=" OR genere='".$_POST['c1']."' ";
}
if(isset($_POST['c2'])){//è stato selezionato c2
	$condizione .=" OR genere='".$_POST['c2']."' ";
}
//ecc.... per i vari check
/*
in funzione di qule check ha selezionato la variabile $condizione potra assumere i valori
" WHERE 1=1 " nesseuna selezione
" WHERE 1=1 OR genere='colla' "
" WHERE 1=1 OR genere='colla' OR genere='mastice'"
con tutte le combinazioni possibili
per cui la query diventa
*/
$q="SELECT * FROM $tabella $condizione ORDER BY prezzo";
//....
?>
se invece devi selezionare su tutte le tabelle devi passare all join (ma forse devi studiare un altro po')

p.s.
guarda che il codice è un'idea schematica quindi perfettibile
ps al p.s.
la prossima volta: un problema => un post
 

Discussioni simili