query per ricerca specifica

Ciao a tutti, mi sto dilettando un pò con il classico combobox, quello con regioni, province e città.

Dunque oltre alle tre select che hanno i seguenti valori: regioni - provincie - citta, ho un campo input di ricerca con il valore ricerca.

Mi piacerebbe ottenere scrivendo 'arzano' e impostando la regione campania e provincia napoli, mi filtrasse soltanto 'Arzano' invece in questo modo mi filtra tutte le città che contengono la parola 'arzano' anche se non sono della campania.

Il problema è nella query credo che non saprei in che modo trasformare...

<?php
$colname_rs_ricerca = "-1";
if (isset($_GET['utenti'])) {
  $colname_rs_ricerca = $_GET['utenti'];
}
mysql_select_db($database_conn, $conn);
$query_rs_ricerca = sprintf("SELECT * FROM citta WHERE citta LIKE %s ORDER BY citta ASC", GetSQLValueString("%" . $colname_rs_ricerca . "%", "text"));
$rs_ricerca = mysql_query($query_rs_ricerca, $conn) or die(mysql_error());
$row_rs_ricerca = mysql_fetch_assoc($rs_ricerca);
$totalRows_rs_ricerca = mysql_num_rows($rs_ricerca);
?>

il database è così composto

Database: 'citta'

Struttura della tabella 'citta'

CREATE TABLE citta (

  id_citta int(11) NOT NULL AUTO_INCREMENT,

  id_provincia int(50) NOT NULL,

  citta varchar(100) NOT NULL,

  provincia varchar(3) NOT NULL,

  PRIMARY KEY (id_citta)

) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8112 ;

-- --------------------------------------------------------

Struttura della tabella 'provincie'

CREATE TABLE provincie (

  id_provincia int(11) NOT NULL AUTO_INCREMENT,

  id_regione int(255) NOT NULL,

  sigla varchar(2) NOT NULL,

  provincia varchar(255) NOT NULL,

  PRIMARY KEY (id_provincia)

) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=108 ;

----------------------------------------------------------

Struttura della tabella 'regioni'

CREATE TABLE regioni (

  id_regione smallint(6) NOT NULL AUTO_INCREMENT,

  regione varchar(50) NOT NULL,

  PRIMARY KEY (id_regione)

) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;

questo è il link della prova (provare con arzano)  http://www.gd83.altervista.org/combobox/paesi.php

Grazie mille a tutti in anticipo

inviato 6 anni fa
cloude
modificato 6 anni fa
X 0 X

Ho provato a seguire questa guida qui http://www.phpnews.it/articoli/query-con-filtri-dinamici/ che è proprio quello che volevo ottenere, utilizzando il database allegato.

Il problema è che non saprei gestire al pagina per i risultati, ho inserito la query della guida ma non ottengo nulla.

Ho qui una prova http://www.cb83.altervista.org/combobox/

risposto 6 anni fa
cloude
X 0 X

Non ho capito che difficoltà hai...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Grazie per la risposta Marios.

Dunque nella pagina dei risultati ho messo il codice con la query che si trova nel tutorial, quando scrivo una città non mi trova nulla, soltanto una 't'

Nella pagina principale oltre alle tre select ho un campo input con il valore 'nome_comune', non so dove effettivamente sbaglio...

risposto 6 anni fa
cloude
X 0 X

Puoi farci vedere il codice degli script che usi?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Dunque la pagina con le select è la seguente

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
<script type="text/javascript" src="lists.js"></script>

</head>

<body>
<form id="form1" name="form1" method="get" action="risultati.php">

    <input type="text" name="nome_comune" id="nome_comune" />
    <br />
    <br />
    <select name="regione" id="regione" onchange="loadList('provincia', getSelected(this));clearList('citta')" >
      <option value="0">scegli la regione</option>
    </select>
    <br />
<br />
    <select name="provincia" id="provincia" onchange="loadList('comune', getSelected(this))" >
      <option value="0">scegli la provincia</option>
    </select>
    <br />
    <br />
    <select name="comune" id="comune">
      <option value="0">scegli la citta</option>
    </select>
    <br />
    <br />
    <br />
    <input type="submit" name="cerca" id="cerca" value="cerca" />
  </p>
</form>
<script type="text/javascript">
//<![CDATA[
loadList('regione', 0);
var queueWatcher = setInterval(checkQueue, 200);
//]]>
</script>
</body>
</html>

quella con i risultati invece

<?php require_once('Connections/conn.php'); ?>
<?php
// tutti i comuni
$nome_comune = '';
$cod_provincia = 0;
$cod_regione = 0;
 
// i comuni che contengono il testo 'to'
$nome_comune = 'to';
$cod_provincia = 0;
$cod_regione = 0;
 
// tutti i comuni del Piemonte
$nome_comune = '';
$cod_provincia = 0;
$cod_regione = 1; // 1 = Piemonte
 
// tutti i comuni della provincia di torino che contengono il testo 'to'
$nome_comune = 'to';
$cod_provincia = 1; // 1 = Torino
$cod_regione = 0;
 
$sql = "SELECT * 
        FROM comune c, provincia p, regione r
        WHERE
           c.COD_PROVINCIA = p.COD_PROVINCIA AND
           p.COD_REGIONE = r.COD_REGIONE AND
           ('$nome_comune' = '' OR c.DENOMINAZIONE LIKE '%$nome_comune%') AND
           ($cod_provincia = 0 OR p.COD_PROVINCIA = $cod_provincia) AND
           ($cod_regione = 0 OR r.COD_REGIONE = $cod_regione)
        ORDER BY c.DENOMINAZIONE";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<table border="1" cellpadding="1" cellspacing="1">
  <tr>
    <td>citta</td>
  </tr>
    <tr>
      <td><?php echo $nome_comune['citta']; ?> </td>
    </tr>
</table>
</body>
</html>
risposto 6 anni fa
cloude
modificato 6 anni fa
Mario Santagiuliana
X 0 X

Mi sembra evidente che non ti funziona. Non recuperi i dati che invii dal tuo form nella pagina risultati.php.

Cos'è questo: "Connections/conn.php"?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Connections/conn.php l'ho eliminato,era la connessione al database, che non serviva a nulla lì.

Ho provato così a recuparere i dati dal form, cambiando il nome di imput del form in 'ricerca' ma non va. 

     <?php
if (isset($_GET['ricerca'])) {
  $risultati_ricerca = $_GET['ricerca'];
}     
echo $risultati_ricerca; ?>

questo è il codice intero della pagina risultati

<?php
// tutti i comuni
$nome_comune = '';
$cod_provincia = 0;
$cod_regione = 0;
 
// i comuni che contengono il testo 'to'
$nome_comune = 'to';
$cod_provincia = 0;
$cod_regione = 0;
 
// tutti i comuni del Piemonte
$nome_comune = '';
$cod_provincia = 0;
$cod_regione = 1; // 1 = Piemonte
 
// tutti i comuni della provincia di torino che contengono il testo 'to'
$nome_comune = 'to';
$cod_provincia = 1; // 1 = Torino
$cod_regione = 0;
 
$sql = "SELECT * 
        FROM comune c, provincia p, regione r
        WHERE
           c.COD_PROVINCIA = p.COD_PROVINCIA AND
           p.COD_REGIONE = r.COD_REGIONE AND
           ('$nome_comune' = '' OR c.DENOMINAZIONE LIKE '%$nome_comune%') AND
           ($cod_provincia = 0 OR p.COD_PROVINCIA = $cod_provincia) AND
           ($cod_regione = 0 OR r.COD_REGIONE = $cod_regione)
        ORDER BY c.DENOMINAZIONE";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<table border="1" cellpadding="1" cellspacing="1">
  <tr>
    <td>citta</td>
  </tr>
    <tr>
      <td> 
     <?php
if (isset($_GET['ricerca'])) {
  $risultati_ricerca = $_GET['ricerca'];
}     
echo $risultati_ricerca; ?> </td>
    </tr>
</table>
</body>
</html>
risposto 6 anni fa
cloude
X 0 X

Non funziona perchè via GET non invii nessuna variabile "ricerca".

Il tuo get invia queste variabili:

nome_comune

regione

provincia

comune

cerca

Corrispondenti al tuo form :)

Prova a mettere al posto di "ricerca" "nome_comune".

risposto 6 anni fa
Mario Santagiuliana
X 0 X

L'avevo modificato il valore del campo input della ricerca, quindi le variabili che invio adesso sono:

ricerca

regione

provincia

comune

Perciò ho recuperato i dati con ['ricerca'] però non va :(

risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

L'avevo modificato il valore del campo input della ricerca, quindi le variabili che invio adesso sono:

ricerca

regione

provincia

comune

cerca

Perciò ho recuperato i dati con ['ricerca'] però non va :(

risposto 6 anni fa
cloude
X 0 X

Non può non funzionare, o ci dai gli script sbagliati (non avevi avvertito di aver modificato).

Ti do un consiglio: scrivi meglio i tuoi script. Elimina o commenta le parti di codice che nulla hanno a che fare con quel tuo script.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Hai ragione scusa, ho fatto un pò di confusione...

Comunque riposto meglio le due pagine, la prima quella con il campo input e le select son le seguenti:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
<script type="text/javascript" src="lists.js"></script>

</head>

<body>
<form id="form1" name="form1" method="get" action="risultati.php">

    <input type="text" name="ricerca" id="ricerca" />
    <br />
    <br />
    <select name="regione" id="regione" onchange="loadList('provincia', getSelected(this));clearList('citta')" >
      <option value="0">scegli la regione</option>
    </select>
    <br />
<br />
    <select name="provincia" id="provincia" onchange="loadList('comune', getSelected(this))" >
      <option value="0">scegli la provincia</option>
    </select>
    <br />
    <br />
    <select name="comune" id="comune">
      <option value="0">scegli la citta</option>
    </select>
    <br />
    <br />
    <br />
    <input type="submit" name="cerca" id="cerca" value="cerca" />
  </p>
</form>
<script type="text/javascript">
//<![CDATA[
loadList('regione', 0);
var queueWatcher = setInterval(checkQueue, 200);
//]]>
</script>
</body>
</html>

questa invece è la pagina che riceve i risultati

<?php
// tutti i comuni
$nome_comune = '';
$cod_provincia = 0;
$cod_regione = 0;
 
// i comuni che contengono il testo 'to'
$nome_comune = 'to';
$cod_provincia = 0;
$cod_regione = 0;
 
// tutti i comuni del Piemonte
$nome_comune = '';
$cod_provincia = 0;
$cod_regione = 1; // 1 = Piemonte
 
// tutti i comuni della provincia di torino che contengono il testo 'to'
$nome_comune = 'to';
$cod_provincia = 1; // 1 = Torino
$cod_regione = 0;
 
$sql = "SELECT * 
        FROM comune c, provincia p, regione r
        WHERE
           c.COD_PROVINCIA = p.COD_PROVINCIA AND
           p.COD_REGIONE = r.COD_REGIONE AND
           ('$nome_comune' = '' OR c.DENOMINAZIONE LIKE '%$nome_comune%') AND
           ($cod_provincia = 0 OR p.COD_PROVINCIA = $cod_provincia) AND
           ($cod_regione = 0 OR r.COD_REGIONE = $cod_regione)
        ORDER BY c.DENOMINAZIONE";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<table border="1" cellpadding="1" cellspacing="1">
  <tr>
    <td>citta</td>
  </tr>
    <tr>
      <td> 
     <?php
if (isset($_GET['ricerca'])) {
  $risultati_ricerca = $_GET['ricerca'];
}     
echo $risultati_ricerca; ?> </td>
    </tr>
</table>
</body>
</html>

resta solo la pagina che mi fa il change quando seleziono una regione per popolare provincia e città, ma non credo che servi per risolvere il problema.

risposto 6 anni fa
cloude
X 0 X

Il codice che hai inviato deve funzionare.

La parte di codice SQL è inutile, potresti anche cancellarla al momento...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Questa parte qui devo eliminarla?

<?php
$sql = "SELECT * 
        FROM comune c, provincia p, regione r
        WHERE
           c.COD_PROVINCIA = p.COD_PROVINCIA AND
           p.COD_REGIONE = r.COD_REGIONE AND
           ('$nome_comune' = '' OR c.DENOMINAZIONE LIKE '%$nome_comune%') AND
           ($cod_provincia = 0 OR p.COD_PROVINCIA = $cod_provincia) AND
           ($cod_regione = 0 OR r.COD_REGIONE = $cod_regione)
        ORDER BY c.DENOMINAZIONE";
?>

Ho provato ad eliminare è uguale, mi stampa nei risultati qualsiasi cosa scrivo, qui la prova che sto facendo http://www.cb83.altervista.org/combobox/

per il momento ho reinserito l'SQL.

risposto 6 anni fa
cloude
modificato 6 anni fa
X 0 X

Il codice sql a cosa ti serve? A niente, inizializzi quella variabile che non viene poi usata nel tuo script.

Lo script sta funzionando correttamente, che problema hai?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Lo script che filtra le città funziona lo so, però io volevo ottenere un'altra cosa, cioè fare una ricerca in base a quello che scrivo oppure setto nelle select.

Per esempio esistono le citta arzano e marzano, e volevo che scrivendo arzano mi filtrasse solo 'arzano' oppure ad esempio selezionando solo lombardia e milano mi fitrasse tutte le città di milano.

Praticamente vorrei ottenere cioè che succede qui http://truemetal.it/modules.php?name=Concerti&file=index

se scrivo 'pino scotto' mi cerca tutte le date dei concerti in tutta italia, se poi metto la select solo su 'milano' mi trova solo i concerti per milano e così via...

risposto 6 anni fa
cloude
X 0 X

Ma tu quella cosa la stai già facendo. Hai creato un form. Ora i dati che prelevi con quel form li devi utilizzare, non vedo dove sta il problema.

Forse ti mancano un po' di elementi di programmazione. Inizia a studiare questi corsi:

http://www.phpnews.it/corsi/

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Lo script allora non è funzionante come volevo io, bisogna lavorarci ancora su a quanto pare...

Ok grazie per il link, vedo cosa riesco a combinare... e grazie per la pazienza  8)

risposto 6 anni fa
cloude
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda