Newsgroup: it.comp.www.php
Titolo: Aiuto per form di ricerca

Ciao a tutti,
non sono esperto in php, ho costruito un database dal quale vorrei
ovviamente estrapolare delle informazioni, ho creato i diversi form di
inserimento dati, ed ora mi trovo di fronte alla costruzione del form
di ricerca, le chiavi sono tre; diciamo tre menù a tendina,
selezionando la prima mi dovrebbe dare un preview della query in base
alla voce scelta, subito dopo dovrebbe esserci la seconda tendina che
dopo la selezione mi dovrebbe tirare fuori i risultati derivati dalla
selezione sulla tendina e sulla selezione al primo menù a tendina,
identica cosa per la terza.
Vi ringrazio tantissimo
KiF

 Vi ringrazio tantissimo
niente di strano, la grossa differenza sta nel fatto se intendi o meno
ricaricare la pagina ad ogni selezione dalla n-esima tendina
se sě: puoi mettere ad ogni tendina l'attributo onchange=submit e
costruire la pagina tramite i dati post. Se non sai come chiedi.
se no: devi passare da ajax, quindi ti esorto a chiedere in un gruppo
appropriato (it.comp.lang.javascript ad esempio)

 appropriato (it.comp.lang.javascript ad esempio)
Mi andrebbe più che bene la prima soluzione, però non so come fare e
non ho trovato nulla per me comprensibile on line. Stavo pensando ad
una soluzione con diversi frame, uno per ogni step di ricerca. Mi
potresti aiutare (se hai del codie da consigliarmi sono ben accette)?
Grazie
KiF

 Grazie
google , tra gli altri, mi restituito questo
http://marc.info/?l=php-db&m=100705471816907&w=2


Ti ringrazio ma del codice molto simile a quello che mi hai
consigliato l'ho già copiato e personalizzato, il mio problema rimane
comunque quello di effettuare selezioni successive e di avere un
risultato della singola query derivata dalla selezione, so di essere
insistente ma sono incasinato.
Grazie 1000
KiF

 
Devi (praticamente) triplicare tre volte il codice che hai scritto...
Posto S1, S2 e S3 le tre combobox
all'inizio riempi la prima con una query modello select distinct campo1 
from query
per la seconda farai
if($_POST['S1'] != 'none') {
   Select distinct campo2 where campo1="' . $_POST['S1'] .'";';
così per la terza (devi ovviamente eseguire le query per riempire le 
combobox)
Per la visualizzazione del risultato basta verificare cosa hai ottenuto 
dalla compilazione $_POST
$sql =' Select ... from xxxx where 1=1';
if($_POST['S1']!= 'none') $sql .= ' AND campo1="' . $_POST['S1'] . '"';
if($_POST['S2']!= 'none') $sql .= ' AND campo2="' . $_POST['S2'] . '"';
if($_POST['S3']!= 'none') $sql .= ' AND campo3="' . $_POST['S3'] . '"';
Ovviamente *devi* eseguire tutti i vari controlli per evitare sql-inj
	Francesco

 wrote:

Posto di seguito il mio codice purtroppo nella seconda combo non
riesco ad avere il valore della prima selezione (mi appare vuoto come
da mio controllo con echo). Help please
KiF
<?php
include("config.inc.php");
$db = mysql_connect('localhost', '', '');
if($db == FALSE)
die("Errore nella connessione. Verificare i parametri nel file
config.inc.php");
else
echo "Connesso al db";
mysql_select_db($db_name, $db)
or die("Errore nella selezione del database. Verificare i parametri
nel file config.inc.php");
echo "<strong><center>Form di ricerca</strong>";
$phpself = $_SERVER['PHP_SELF'];
echo "<br>";
echo "$phpself";
echo "<br>";
echo "<form action=\"$phpself\" method=\"post\">";
$query = mysql_query ("select * from obiettivi_operativi");
echo "<br>";
echo"<select name=\"S1\">";
//metto i risultati della query in un array e poi faccio un ciclo
while($row = mysql_fetch_array($query))
{
    echo "<option value=\"".$row['id_obiettivi']."\">".$row
['id_obiettivi']." - ".$row['nome']."</option>";
}
echo"</select>";
echo "<br>";
$s1 = $_POST['S1'];
echo "il valore di pippo: $s1";
/*$query1 = mysql_query ("select * from ob_op_linee_attivita where
id_obiettivi ="' . $_POST['S1'] '"");
// where id_obiettivi = '".$_POST[asse]"'");
echo "$query1";
echo "<br>";
echo"<select name=\"lineeattivita\">";
while($row = mysql_fetch_array($query1))
{
    echo "<option value=\"".$row['id_oblinee']."\">".$row
['id_oblinee']." - ".$row['lineeattivita']."</option>";
}
*/
echo"</select>";
?>

 
Questo codice andrebbe leggermente migliorato!
Premesso che manca la fine del form ma prova ad aggiungere all'inizio 
dello script un print_r($_POST): la prima volta dovrebbe essere vuoto, 
poi selezioni il valore in S1, premi submit e dovrebbe visualizzare il 
valore selezionato. Se qui ci siamo, andiamo avanti!
	Francesco


Ok ci sono. Ora ho l'errore sulla query che non riesco a capire, la
posto nuovamente:
$query1 = mysql_query ("select * from ob_op_linee_attivita where
id_obiettivi = "' . $_POST['S1'] '"");
posto anche l'errore:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in
\home\sistemao\search3.php on line 31
Ti ringrazio tantissimo

 Ti ringrazio tantissimo
Manca un punto, un apice e devi eliminare una virgoletta!
 > id_obiettivi = "' . $_POST['S1'] . '"');
Ricorda di aggiungere i vari controlli x evitare sql-inj!
	Francesco


Ok grazie, ora mi ritrovo nella situazione in cui a seguito del submit
del form in base alla scelta della prima finestra mi vengono
"pilotate" le altre due (e questo va bene) però il primo menù a
tendina mi appare con la selezione di default (ovviamente per il fatto
che viene ricaricato per intero la pagina php) il che pregiudica il
funzionamento di tutto, ho intuito che occorrerebbe utilizzare
javascript, mi potreste aiutare nuovamente.
Grazie
KiF

 
Hai intuito male!
Quando carichi i contenuti delle select box, devi settare come "default" 
  l'eventuale voce selezionata:
Riprendendo dal tuo codice:
echo "<form action=\"$phpself\" method=\"post\">";
$query = mysql_query ("select * from obiettivi_operativi");
echo "<br>";
echo"<select name=\"S1\">";
//metto i risultati della query in un array e poi faccio un ciclo
while($row = mysql_fetch_array($query))
{
    echo '<option ' . ($_POST['S1'] == $row['id_obiettivi'] ? ' SELECTED 
  ' : '') . ' value="' . $row['id_obiettivi'] . '">' . 
$row['id_obiettivi']." - ".$row['nome']."</option>";
}
echo"</select>";
Ovvero
while($row = mysql_fetch_array($query))
{
    if($_POST['S1'] == $row['campo']) {
        $sel = ' SELECTED ';
    else {
        $sel = '';
    }
    echo '<option ' . $sel . '  value="' . $row['id_obiettivi'] . '">' . 
$row['id_obiettivi']." - ".$row['nome']."</option>";
}
Vedi:
http://www.w3.org/TR/html401/interact/forms.html#adef-selected
	Francesco