ricerca dinamica partendo dalla scelta del database

  • Creatore Discussione Creatore Discussione gian21
  • Data di inizio Data di inizio

gian21

Nuovo Utente
16 Mag 2013
23
0
0
buonasera
una domanda che mi sta perseguitando da giorni
vorrei sapere come fare una ricerca dinamica avendo tre campi
(categoria , regione , prezzo) la ricerca dinamica la so fare nn ci sono problemi
l'unico problema che mi assilla e il fatto che il campo categoria e una select con 3 scelte
barca, postobarca, imbarco
e ognuna di esse e un database ognuno con i propri campi
come posso selezionarli da una semplice select???

questo e quello che ho fatto fin ora

PHP:
cat = $POST['cat'];
if ( $cat == 1)
{
$conditions = array();
foreach($_POST['search'] as $key =>$value){
     if(!$value) continue;
     // nel caso di select, puoi mettere un option con value nullo
     switch($key){
         case 'reg':
              $conditions[] = "regione LIKE '%".mysql_real_escape_string($value)."%'";
	    break;
		 case 'przini':
              $conditions[] = "prezzo >= '".mysql_real_escape_string($value)."'";
		break;
		case 'przfin':
              $conditions[] = "prezzo <= '".mysql_real_escape_string($value)."'";
		break;
     }
}
$sql_conditions = implode(' AND ', $conditions);
$query = "SELECT *,DATE_FORMAT(data,'%d-%m-%Y') as data1  from postobarca WHERE $sql_conditions"; 
?>


ragazzi sto alle prime armi potete spiegarmelo anche con un codice capirei perfettamente grazie
 
ciao
non so se ti confondi, ma dici 3 db diversi, non intendi per caso 3 tabelle diverse?
se intendi tre tabelle diverse basta che in base alla select tu determini il nome della tebella (non so se fanni riferimento allo switch che hai postato), comunque schenaticamente:
PHP:
<?php
//....
switch ($_POST['nome_select']){
	case "barca":$nome_tabella="barca";
	break;
	case "posto barca":$nome_tabella="posto_barca";
	break;
	case "imbarco":$nome_tabella="imbarco";
	break;
	default: $nome_tabella="barca";
	break;
}
//poi nella selct
$query = "SELECT *,DATE_FORMAT(data,'%d-%m-%Y') as data1  from $nome_tabella WHERE $sql_conditions";
//...
?>
non so se devi anche modificare le clausole del where, se si puoi fare degli switch annidati

p.s.
se intendevi proprio 3 db diversi (ma credo improbabile) devi agire anche su dati di connessione
 
si scusa ho sbagliato a scrivere sono 3 diverse tabelle
io ho provato a fare cosi ma mi da una pagina bianca senza nessun errore
te lo posto

PHP:
switch ($_POST['cat']){
    case "3":$nome_tabella="barca";
    break;
    case "1":$nome_tabella="postobarca";
    break;
    case "2":$nome_tabella="imbarcocerco";
    break;
} 
$conditions = array();
foreach($_POST['search'] as $key =>$value){
     if(!$value) continue;
     // nel caso di select, puoi mettere un option con value nullo
     switch($key){
         case 'reg':
              $conditions[] = "regione LIKE '%".mysql_real_escape_string($value)."%'";
	    break;
		 case 'przini':
              $conditions[] = "prezzo >= '".mysql_real_escape_string($value)."'";
		break;
		case 'przfin':
              $conditions[] = "prezzo <= '".mysql_real_escape_string($value)."'";
		break;
     }
}
$sql_conditions = implode(' AND ', $conditions);
$query = "SELECT *,DATE_FORMAT(data,'%d-%m-%Y') as data1  from $nome_tabella WHERE $sql_conditions"; 

?>

purtroppo nn capisco bene cosa sbagli penso anche gli swhich annidati ma nn li so proprio fare
 
ciao
per caso non ti sei dimenticato
PHP:
<?php
//.....
$sql_conditions = implode(' AND ', $conditions);
$query = "SELECT *,DATE_FORMAT(data,'%d-%m-%Y') as data1  from $nome_tabella WHERE $sql_conditions"; 
$ris=mysql_query($query);//questa
//....
?>
?
poi per gli switch nidificati guarda questo schema
PHP:
<?php
switch($pinco){
	case "1":
		switch($pallo){
			case "A": $a="aaaa";//e altre istruzioni
			break;
			case "B": $a="bbbb";//e altre istruzioni
			break;
		}
		//e altre istruzioni
	break;
	case "1":
		switch($pallo){
			case "A": $a="ccccc";//e altre istruzioni
			break;
			case "B": $a="ddddd";//e altre istruzioni
			break;
		}
		//e altre istruzioni
	break;
	//ecc.....
}
//....
?>
questo se le condizioni del where cambiano in funzione della prima scelta ($pinco), se invece rimangono le stesse è inutole la nidificazione
 
allora penso che la ramificazione nn mi servi perche e lo stesso where per tt e tre le tabelle
cmq non me lo sono dimenticato quell ultima parte di codice
perche c'è l ho messo alla fine
ti faccio vedere

PHP:
<?php
include('connessione.php');
include ('tutto.php');
/* fine costruzione query */
switch ($_POST['cat']){
    case "3":$nome_tabella="barca";
    break;
    case "1":$nome_tabella="postobarca";
    break;
    case "2":$nome_tabella="imbarcocerco";
    break;
} 
$conditions = array();
foreach($_POST['search'] as $key =>$value){
     if(!$value) continue;
     // nel caso di select, puoi mettere un option con value nullo
     switch($key){
         case 'reg':
              $conditions[] = "regione LIKE '%".mysql_real_escape_string($value)."%'";
	    break;
		 case 'przini':
              $conditions[] = "prezzo >= '".mysql_real_escape_string($value)."'";
		break;
		case 'przfin':
              $conditions[] = "prezzo <= '".mysql_real_escape_string($value)."'";
		break;
     }
}
$sql_conditions = implode(' AND ', $conditions);
$query = "SELECT *,DATE_FORMAT(data,'%d-%m-%Y') as data1  from $nome_tabella WHERE $sql_conditions"; 

?>
 <div style="position:absolute; left:30%; top:60%;">
 <?
 $risultato = mysql_query($query)
or die("Errore!! Nessun Campo selezionato per la ricerca  " /*. mysql_error()*/); 
?>
 </div>
 <?
$num=mysql_num_rows($risultato);
IF ($num == 0) 
 {  ?>
 <div style="position:absolute; left:30%; top:60%;">
 <?
 echo ("Nessun annuncio presente con questa selezione di ricerca.");
 }
 ?>
 </div>
 <?
 include ("ricregionihtm.php");
     exit();
?>
<?
include("ricregionihtm.php");
?>
<div style="position:absolute; left:7%; top:33%;">
<a href="INDEX.php"><b><font face="Arial" size="2" color="DIMGRAY">Home page  ></font></b></a>
<b><font face="Arial" size="2" color="003c69">Elenco di Postobarche</font></b><br>

<div style="position:absolute; left:7%; top:42%;">
<img src="postobarca_box.png">
</div>
<div style="position:absolute; left:25%; top:38%;">
<b><font face="Arial" size="3" color="003c69">Affina la tua Ricerca</font></b><br>
</div>
<b><font color="black" face="arial" size="2" style="left: 60%; top:64%;  position:absolute">Ordina per :</b></font>
<b><font color="black" face="arial" size="2" style="left: 70%; top:64%;  position:absolute">||</b></font>
<a href="ordinaprezzoposto.php"><b><font color="003c69" face="arial" size="2" style="left: 66%; top:64%;  position:absolute">prezzo</font></b></a>
<a href="postobarca.php"><b><font color="003c69" face="arial" size="2" style="left: 71%; top:64%;  position:absolute">data</font></b></a>
<font face="Arial" size="1" color="gray" style="left: 7%; top:66%;  position:absolute">__________________________________________________________________________________________________________________________________________________________________________________________</font>
<TABLE cellspacing="1" cellpadding="12" border=1 bordercolor="LIGHTGRAY" style="left: 7%; top:69%; position:absolute; border: 1px solid #ffffff;">
<TR id="row1">
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">data ins.</font></TH>
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">foto</font></TH>
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">id</font> </TH>
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">ubicazione</font></TH>
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">categoria</font></TH>
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">tipologia</font></TH>
<TH style="border: 1px solid #CDCDCD; background-color:003c69;"><font face="arial" color="white">prezzo</font></TH>
</TR>
<?php
$i=1;
while( $tmp = mysql_fetch_array($risultato))
 {
?>  
   <tr id="row1">  
   <TD style="border: 1px dotted #708090"><b><font face="arial" size="2"><?php echo date($tmp["data1"]); ?></font></b></TD>
   <TD align="center" style="border: 1px dotted #708090"><img src="ADMIN/open.php?id=<?php echo $tmp["id"]; ?>" width="120" height="90">
   <br><br>
   <FORM action="singolo1.php?id=<?php echo $tmp['id'] ?>" method="post" name="ricerca"> 
   <input type="image" img src="botton-vai-annuncio.png">
   </form>
   </TD>
   <TD style="border: 1px dotted #708090;"><b><font face="arial" size="2"><?php echo ($tmp["id"]); ?></font></b></TD>
   
   <TD style="border: 1px dotted #708090;"><p align="center"><b><font face="arial" size="2"><?php echo ($tmp["regione"]); ?>/<?php echo ($tmp["provincia"]); ?></font></b></TD>
   <TD style="border: 1px dotted #708090;"><b><font face="arial" size="2"><?php echo ($tmp["cat"]); ?></font></b></TD>
    <TD style="border: 1px dotted #708090;"><b><font face="arial" size="2"><?php echo ($tmp["tip"]); ?></font></b></TD>
	<TD style="border: 1px dotted #708090;"><p align="right"><b><font face="arial" color="003c69" size="3"><?php echo number_format($tmp["prezzo"]); ?>,00</font></b></TD>
	</TR>  
<?php
 }
 ?>
<b><font color="003c69" face="arial" size="3" style="left: 7%; top:64%;  position:absolute">Postobarca trovati : <? include("contricpost.php") ?></b></font>
</TABLE>
<?
?>


ma purtroppo nulla ancora pagina bianca
 
ciao cmq ho risolto il problema dello switch e funziona perfettamente
l'unica cosa e che essendo tre tabelle diverse hanno anche campi diversi quindi io vorrei far uscire per ogni diversa tabella i propri rispettivi campi...come posso fare?
 

Discussioni simili