selezionare dati da mysql mediante form

tivovi74

Utente Attivo
31 Gen 2012
58
1
8
Ciao ragazzi,
sono un neofita del php, sto cercando di scrivere un codice che permetta all'utente del sito di recuperare dati mediante la compilazione di un form, nel quale ha varie opzioni.

Cerco di spiegarmi meglio: è un sito per una agenzia immobiliare. Il nostro utente, mediante un form può selezionare una ricerca selezionando:

A) il comune in cui è ubicato l'immobile;
B) il quartiere
C) se è un ufficio o un appartamento;
D) il prezzo

per tutti i campi, può scegliere anche l'opzione tutti, in modo da ricevere tutti i dati presenti nel database relativi al campo non selezionato.

Con il form non ho problemi, per la pagina di elaborazione, invece, ho provato con if else, con if nidificati e con switch, ma non riesco ad ricomprendere tutte le opzioni.

C'è qualcuno che può darmi una mano?

Grazie.
 
Ecco il codice, avevo provato anche con if ed else, ma siccome non riusciva a gestire tutte le opzioni, ho riniziato da 0 provando con gli switch.
Per provare ho considerato solo 2 opzioni.

è possibile inserire uno switch multiplo? es. switch ($Comune) & ($Destinazione__urbanistica) ?
in questo modo potrei scrivere le possibili combinazioni nei case e dare un'istruzione precisa per ogni case.

Grazie mille

PHP:
<html>
<head>
<title>Prova risultato</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
 <?php
			  //collegamento a Mysql
			  $db = mysql_connect ('.................' , '..............' , '..............') or 
			  die (' Non è possibile stabilire la connessione, rivedere i parametri.'); 
			  //scelta del database
			  mysql_select_db ('...................', $db) or die (mysql_error ($db));
			  $Destinazione__urbanistica = $_POST['Destinazione'];
			  $Comune = $_POST['Comune'];
			  //effettua ricerca e salva risultato
			 switch ($Comune) {
			 	case 'tutti':
			 	$sql = " SELECT * FROM Immobili...................";
			break;
				case $Comune:
				$sql = "SELECT * FROM Immobili..................... WHERE Comune = '$Comune' ";
				break;
			}
			  $risultati = mysql_query($sql);
			 // mostra i risultati
			 echo '<table border="1">';
			 while ($row = mysql_fetch_assoc ($risultati)){
				 echo '<tr>';
			  foreach ($row as $value) {
				  echo  '<td>' . $value . '</td>';
				  }
				   echo '<tr/>';
			 }
			 echo '</table>';
			 ?>
            
</body>
</html>
 
Ultima modifica di un moderatore:
PHP:
<?php
//....
// se da <select> devi mettere anche un value="" e non servirebbe il trim
//comunque dato che servono per interrogare in un db sarebbero nesessari alcuni controlli soprattutto se provengono da un input text
$Destinazione__urbanistica = trim($_POST['Destinazione']);
$Comune = trim($_POST['Comune']);
$we=" WHERE 1=1";// questa condizione è sempre eseguita in quanto 1 è sempre uguale a 1, se rimane solo questa = a tutti
if($Destinazione__urbanistica != ""){$we. = " AND destinazione = '$Destinazione__urbanistica'";}
if($Comune != ""){$we. = " AND comune = '$comune'";}
$sql ="SELECT * FROM immobili $we";
//.....
?>

p.s.
racchiudi sempre il codice tra gli appositi tag (una delle tre iconcine, seconda riga ultime 3, barra formattazione post)
 
Grazie mille, provo e ti faccio sapere

PHP:
<?php
//....
// se da <select> devi mettere anche un value="" e non servirebbe il trim
//comunque dato che servono per interrogare in un db sarebbero nesessari alcuni controlli soprattutto se provengono da un input text
$Destinazione__urbanistica = trim($_POST['Destinazione']);
$Comune = trim($_POST['Comune']);
$we=" WHERE 1=1";// questa condizione è sempre eseguita in quanto 1 è sempre uguale a 1, se rimane solo questa = a tutti
if($Destinazione__urbanistica != ""){$we. = " AND destinazione = '$Destinazione__urbanistica'";}
if($Comune != ""){$we. = " AND comune = '$comune'";}
$sql ="SELECT * FROM immobili $we";
//.....
?>

p.s.
racchiudi sempre il codice tra gli appositi tag (una delle tre iconcine, seconda riga ultime 3, barra formattazione post)
 
ho provato, ma mi da comunque un errore:

Parse error: syntax error, unexpected '=' in D:\Inetpub\webs\faispazioit\ricerca_immobili.php on line 17

La riga 17 è questa:

PHP:
if($Destinazione__urbanistica != ""){$we. = " AND Destinazione = '$Destinazione__urbanistica'";}

Riesci ad individuare l'errore????

Grazie.


Grazie mille, provo e ti faccio sapere
 
Ultima modifica di un moderatore:
PHP:
$we.=

. e = vanno attaccati
 
ciao
hai aggiunto (o forse sono stato io senza accorgermene) uno spazio tra il punto e l'uguale
if($Destinazione__urbanistica != ""){$we. = " AND Destinazione = '$Destinazione__urbanistica'";}

toglilo
if($Destinazione__urbanistica != ""){$we.= " AND Destinazione = '$Destinazione__urbanistica'";}
e verifica anche l'altro
 
Grazie, sono riuscito ad eliminare l'errore, ora funziona, ma solo se sia il campo destinazione che quello comune sono selezionati con dei dati compresi nel database.
se ne lascio anche uno solo dei tutte su tutti, il risultato della ricerca è 0

Cosa posso fare?

Grazie.
 
ciao
dipende da come selezioni nel form i dati che ti interessano.
potresti fare due <select> dinamiche che ti estraggono solo i comuni e le destinazioni esitenti.
è evidente che se metti un comunne che non c'è deve darti 0 o non trovati
 
Certo, sicuramente, se scelgo un comune che non è in elenco, è giusto che mi dia 0
però, io vorrei riuscire a fare in modo che se non seleziono alcun comune, o alcuna destinazione, mi restituisca i valori con tutti i comuni o con tutte le destinazioni.
Vorrei che funzionassero un po' come i filtri, per cui se seleziono il dato, mi restituisce un valore pari a quello selezionato, altrimenti me li da tutti.

Spero di essere stato chiaro.....

Ti chiedo scusa, ma non so come spiegarmi meglio.......
 
ciao
quanti ti ho postato dovrebbe fare quello che chiedi
se non selezioni ne comune ne destinazione la query ti risulta
"SELECT * FROM immobili WHERE 1=1" quindi tutti di tutti i comuni e di tutte le destinazioni
se selezioni solo un comune (es. parma) ma non la destinazione
"SELECT * FROM immobili WHERE 1=1 AND comune='parma'" quindi tutti quelli di parma
se selezioni non un comune ma solo la destinazione (es. casa chiusa)
"SELECT * FROM immobili WHERE 1=1 AND destinazione='casa chiusa'" quindi tutti quelli con tale destinazione (sono quelli che rendono di più)
se selezioni il comune (es. parma) e la destinazione (es. casa chiusa)
"SELECT * FROM immobili WHERE 1=1 AND comune= 'parma' AND destinazione='casa chiusa'" quindi tutte le case chiuse di parma
eventualmente per provare metti subito dopo $sql
PHP:
//...
$sql ="SELECT * FROM immobili $we"; 
var_dump($sql);
//..... 
?>
dovrebbe darti
string(lunghezza) "SELECT ecc..."
così vedi se hai fatto tutto bene e se la query viene come vorresti nei vari casi
 
Grazie mille, adesso funziona perfettamente, ho fatto solo una piccola modifica

if($Destinazione__urbanistica != "tutte"){$we.= " AND Destinazione__urbanistica = '$Destinazione__urbanistica'";}
if($Comune != "tutti"){$we.= " AND Comune = '$Comune'";}

aggiungendo tutte e tutti ed inserendo gli stessi valori nel form, altrimenti lasciati vuoti non mi dava i risultati.

Ora provo ad inserire gli altri campi di ricerca, sperando di non fare casini col codice.....

Grazie ancora.





ciao
quanti ti ho postato dovrebbe fare quello che chiedi
se non selezioni ne comune ne destinazione la query ti risulta
"SELECT * FROM immobili WHERE 1=1" quindi tutti di tutti i comuni e di tutte le destinazioni
se selezioni solo un comune (es. parma) ma non la destinazione
"SELECT * FROM immobili WHERE 1=1 AND comune='parma'" quindi tutti quelli di parma
se selezioni non un comune ma solo la destinazione (es. casa chiusa)
"SELECT * FROM immobili WHERE 1=1 AND destinazione='casa chiusa'" quindi tutti quelli con tale destinazione (sono quelli che rendono di più)
se selezioni il comune (es. parma) e la destinazione (es. casa chiusa)
"SELECT * FROM immobili WHERE 1=1 AND comune= 'parma' AND destinazione='casa chiusa'" quindi tutte le case chiuse di parma
eventualmente per provare metti subito dopo $sql
PHP:
//...
$sql ="SELECT * FROM immobili $we"; 
var_dump($sql);
//..... 
?>
dovrebbe darti
string(lunghezza) "SELECT ecc..."
così vedi se hai fatto tutto bene e se la query viene come vorresti nei vari casi
 

Discussioni simili