Problema checkbox e ricerca avanzata

  • Creatore Discussione Creatore Discussione MARCO29
  • Data di inizio Data di inizio

MARCO29

Nuovo Utente
26 Apr 2013
4
0
0
Salve, avrei un problema con la creazione di una checkbox per ricerche avanzate, so che questo lo si puo' fare attraverso degli if e man mano comporre la query : il mio problema è praticamente come estrarre le caselle selezionate dalla checkbox e fare gli if . C'è qualcuno in grado di aiutarmi ?
 
spero sufficiente,
ciao
Marino

PHP:
form
  $ForLeft.="<input type='checkbox' name='chkbox1' value='X' /> chkbox1<br />";
  $ForLeft.="<input type='checkbox' name='chkbox2' value='X' /> chkbox2<br />";
  $ForLeft.="<input type='checkbox' name='chkbox3' value='X' /> chkbox3<br />";

query
  $sql = "select ......";
  $sql.= " from .......";

  $x = " where ";

  eventuali altre clausole
  if ($chkbox1 == "X") { $sql.= $x."chkbox1='X'"; $x = " and "; }
  if ($chkbox2 == "X") { $sql.= $x."chkbox2='X'"; $x = " and "; }
  if ($chkbox3 == "X") { $sql.= $x."chkbox3='X'"; $x = " and "; }
  eventuali altre clausole

  $sql.= " order by ....";
 
scusa ho aggiunto un pezzetto
Marino
PHP:
form 
  $ForLeft.="<input type='checkbox' name='chkbox1' value='X' /> chkbox1<br />"; 
  $ForLeft.="<input type='checkbox' name='chkbox2' value='X' /> chkbox2<br />"; 
  $ForLeft.="<input type='checkbox' name='chkbox3' value='X' /> chkbox3<br />"; 

dopo submit
  $chkbox1 = (isset($_POST['chkbox1']) ? "X" : " ");
  $chkbox2 = (isset($_POST['chkbox2']) ? "X" : " ");
  $chkbox3 = (isset($_POST['chkbox3']) ? "X" : " ");

query 
  $sql = "select ......"; 
  $sql.= " from ......."; 

  $x = " where "; 

  eventuali altre clausole 
  if ($chkbox1 == "X") { $sql.= $x."chkbox1='X'"; $x = " and "; } 
  if ($chkbox2 == "X") { $sql.= $x."chkbox2='X'"; $x = " and "; } 
  if ($chkbox3 == "X") { $sql.= $x."chkbox3='X'"; $x = " and "; } 
  eventuali altre clausole 

  $sql.= " order by ....";
 
ciao
attento agli AND
dai un occhio a questo
PHP:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	if(is_array($_POST['chkbox'])){
		foreach($_POST['chkbox'] as $chiave => $valore){
			$wh.=" AND chkbox".$chiave." = '".$valore."' ";
		}
	}else{
		$wh="";
	}
	$query="SELECT * FROM tabella WHERE 1=1 $wh ORDER BY pinco";
echo "<pre>";
var_dump($query);
echo "<pre>";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<input type="checkbox" name="chkbox[1]" value="X" /> chkbox1<br />
<input type="checkbox" name="chkbox[2]" value="X" /> chkbox2<br />
<input type="checkbox" name="chkbox[3]" value="X" /> chkbox3<br />
<input name="invia" type="submit" id="invia" value="invia">
</form>
</body>
</html>
e poi guarda
https://www.mrw.it/php/php-checkbox_11620.html
 
scusa borgo,
gli and mi sembrano correttamente gestiti dalla variabile $x anche se l'ultimo è di troppo ma se ci sono clausole successive, serve anche lui
altrimenti non ho capito

ciao
Marino
 
ciao
ho detto di stare attento agli AND perchè come hai schematizzato tu sembra che ogni condizione termini con AND
per cui sembra che querry possa diventare es.
SELECT * FROM tabella WHERE pinco='pallo' AND tizio='caio' AND ORDER BY sempronio
quindi o togli l'ultimo AND con sbstring o aggiungi (io l'ho messo prima) la condizione 1=1 (o qualsiasi altra uguaglianza) in modo che comunque la query diventi
SELECT * FROM tabella WHERE pinco='pallo' AND 1= 1 ORDER BY sempronio
o in caso non ci siano condizioni
SELECT * FROM tabella WHERE 1= 1 ORDER BY sempronio
 
Ultima modifica:
a me non sembra, $x parte con il valore " where "
e alla prima condizione vera, dopo averla utilizzata, viene sostituita da " and "
$x è anteposta ..... suddivido la riga per chiarezza

PHP:
  if ($chkbox3 == "X") { 

    $sql.= $x."chkbox3='X'"; 

    $x = " and "; }

ho preferito questa soluzione perché se non ci sono condizioni estraggo la tabella (uso e consumo mio)
 
Ultima modifica:
ciao
guarda che ho detto sembra, non che fosse errato
comunque scrivere
SELECT * FROM tabella WHERE 1= 1 ORDER BY sempronio
o
SELECT * FROM tabella ORDER BY sempronio
è uguale
l'unica differenza è il trattamento del chek che con il tuo sistema in caso di aggiunta/eliminazione di una chek devi fare due correzzioni, nel form e nello script di lettura
 
ciao
guarda che ho detto sembra, non che fosse errato
comunque scrivere
SELECT * FROM tabella WHERE 1= 1 ORDER BY sempronio
o
SELECT * FROM tabella ORDER BY sempronio
è uguale
l'unica differenza è il trattamento del chek che con il tuo sistema in caso di aggiunta/eliminazione di una chek devi fare due correzzioni, nel form e nello script di lettura

molte di più di due correzioni,
anche nella validazione, nei trattamenti specifici di quell'elemento e chi più ne ha più ne metta,
non credo che modi diversi portino ad un miglioramento dell'efficienza della programmazione, io preferisco leggere bene il codice
in ogni caso io correggo un solo script (!).... questo è il mio modo di pensare e lavorare
ciao
Marino
 

Discussioni simili