Filtrare dati tabella mysql ed estrarli

giancadeejay

Utente Attivo
26 Ott 2010
224
0
16
torino
Ciao a tutti...
Ho un problemino da risolvere..
Con un form volevo estrarre una determinata colonna dal mio db e filtrare i dati al suo interno.
Codice:
DATO1       DATO2        DATO3      DATO4       .....      DATO52
1                        BLU                0              SI                             23
1                        GIALLO          0               NO                          25
12                      ROSSO         8                SI                              28
1                       BIANCO         7               NO                            34

Il mio bisogno e' quello di filtrare i dati della colonna 52 e stamparli a video in una tabella.
form.php
Codice:
<h1>INSERISCI DATO8  PRODOTTO</h1><br><hr><br>
<br>
<form method="post" action="cerca.php">
<h2>dDATO8</h2>&nbsp&nbsp<input type="text" name="testo"><br><br>
<input type="submit" value="DISPONIBILE"><br><br>
</form>
cerca.php
Codice:
<?php
$cn = mysql_connect("localhost", "user", "");
mysql_select_db("my_DB", $cn);
//leggi il valore che ti provine dal form
$testo=trim($_POST['testo']);
$newpage = 'http://www.miosito/cerca/formcerca.php';
$wh="";
if(!empty($testo) && preg_match('/^[a-zA-Z0-9]{1,17}/',$testo)){
    $wh=" WHERE DATO8='".$testo."' ";//o se nel $_POSTO hai messo $box qui ci va $box
    //doveil nome del campo su cui fare la ricerca lo sai tu
    $sel = "SELECT* FROM completo $wh";
    //var_dump($sel); LO COMMENTI
    $query = mysql_query($sel, $cn );
    $quanti = mysql_num_rows($query);
    if ($quanti == 0){
        echo "<h2>HAI INSERITO UN CODICE ERRATO!</h2>";header('Refresh: 3; url=' . $newpage);
    }else{
        while($rs=mysql_fetch_array($query)){
            //ti converrebbe mettere il nome del campo che visualizzi es al posto di $rs[2] mettere $rs['pinco']
           echo "<tr> <h1><center>ECCO I DETTAGLI CHE HAI RICHIESTO:"."<br><br><hr>";
            echo "<td> " . $rs[8] . "</td>";
            echo "<td> " . $rs[5] . "</td>";
            echo "<td> " . $rs[9] . "</td>";
            echo "<td> " . $rs[29] . "</td>";
     
           echo "<td>" . $rs[52] . "</td></center></h1><br></tr>";
         
           
     }  
    }

}else{
    echo "<h2>NON HAI INSERITO NULLA!</h2>";header('Refresh: 3; url=' . $newpage);
}
mysql_close($cn);
?>

</table>
Cosi funziona e mi estrae cio che chiedo ma volevo filtrare la colonna52 e volevo mi tirasse fuori righe solo con un risultato predefinito..
Come posso fare??
Grazie a tutti.
 
ciao
ti schematizzo un metodo di filtraggio.
intanto rendi il name del campo di input un array associativo e mettendo quelli che ti servono
HTML:
<form method="post" action="cerca.php">
DATO1&nbsp&nbsp<input type="text" name="dato['01']"><br><br>
<!-- ecc--->
DATO8&nbsp&nbsp<input type="text" name="dato['08']"><br><br>
DATO9&nbsp&nbsp<input type="text" name="dato['09']"><br><br>
<!-- ecc--->
DATO52&nbsp&nbsp<input type="text" name="dato['52']"><br><br>
<input type="submit" value="DISPONIBILE"><br><br>
</form>
e in cerca.php
PHP:
<?php
//..connesione...
$dati_inviati=array_map("trim",$_POST['dato']);//array con i fari $_POST[xy] se inviati
$wh=" WHERE 1=1 ";//condizione SEMPRE VERA, serve evitare ti togliere l'eventuale AND in più
if(is_array($dati_inviati)){//verifico comunque che sia un array
    //ciclo l'array
    foreach($dati_inviati as $chiave => $valore){
        if(!empety($valore)){//hai inputato il dato
            //costruisco la condizione
            $dato="DATO".$chiave;//es. risulta DATO05 DATO06....
            //se il valore di $valore è intero non devo mettere gli apici
            if(is_int($valore)){
                $wh.=" AND $dato=$valore ";
            }else{
                $wh.=" AND $dato='".$valore."' ";
            }
        }
    }
    /*esempi di $wh
    se non hai inputato nulla $wh rimane == " WHERE 1=1 "
    se hai inputata es il DATO03 giallo e DATO25 ==23 $wh diventa
    == " WHERE 1=1 AND DATO03='giallo' AND DATO52=23 "
    */
}
//a questo punto fai la query
$query="SELECT * FROM  completo $wh";
//e estrai o tutti i valori se non hai imputato nulla
//o i valori filtrati (se esistono) secondo le condizioni che hai inputato
?>
adattalo alle tue esigenze e fai delle prove

p.s.
quando posti del codice racchiudilo dentro gli opportuni bccode
HTML:
 se solo html o [PHP] se c'è del php
 
ciao
ti schematizzo un metodo di filtraggio.
intanto rendi il name del campo di input un array associativo e mettendo quelli che ti servono
HTML:
<form method="post" action="cerca.php">
DATO1&nbsp&nbsp<input type="text" name="dato['01']"><br><br>
<!-- ecc--->
DATO8&nbsp&nbsp<input type="text" name="dato['08']"><br><br>
DATO9&nbsp&nbsp<input type="text" name="dato['09']"><br><br>
<!-- ecc--->
DATO52&nbsp&nbsp<input type="text" name="dato['52']"><br><br>
<input type="submit" value="DISPONIBILE"><br><br>
</form>
e in cerca.php
PHP:
<?php
//..connesione...
$dati_inviati=array_map("trim",$_POST['dato']);//array con i fari $_POST[xy] se inviati
$wh=" WHERE 1=1 ";//condizione SEMPRE VERA, serve evitare ti togliere l'eventuale AND in più
if(is_array($dati_inviati)){//verifico comunque che sia un array
    //ciclo l'array
    foreach($dati_inviati as $chiave => $valore){
        if(!empety($valore)){//hai inputato il dato
            //costruisco la condizione
            $dato="DATO".$chiave;//es. risulta DATO05 DATO06....
            //se il valore di $valore è intero non devo mettere gli apici
            if(is_int($valore)){
                $wh.=" AND $dato=$valore ";
            }else{
                $wh.=" AND $dato='".$valore."' ";
            }
        }
    }
    /*esempi di $wh
    se non hai inputato nulla $wh rimane == " WHERE 1=1 "
    se hai inputata es il DATO03 giallo e DATO25 ==23 $wh diventa
    == " WHERE 1=1 AND DATO03='giallo' AND DATO52=23 "
    */
}
//a questo punto fai la query
$query="SELECT * FROM  completo $wh";
//e estrai o tutti i valori se non hai imputato nulla
//o i valori filtrati (se esistono) secondo le condizioni che hai inputato
?>
adattalo alle tue esigenze e fai delle prove

p.s.
quando posti del codice racchiudilo dentro gli opportuni bccode
HTML:
 se solo html o [PHP] se c'è del php
Ciao Borgo,
Scusami ma non ho capito nello script..come posso filtrare per arrivare ad estrarre cio di cui ho bisogno.
In pratica io,tramite un record a scelta che inserisco nel form di ricerca,devo estrarre solo i record con una caratteristica ben precisa nella colonna DATO52.

Spero tu mi possa dare una mano.
Grazie in anticipo
 
ciao
ti spiego
prima fai un form in cui metti i campi di input (da uno a più dipende da cosa vuoi filtrare), per esempio li ho elencati tutti, ma ti metti solo quelli che ti servono pensando anche a quelli che ti potrebbero servire in futuro.

nel form inputi i valori che ti interessa filtrare ad esempio nell'input di name="dato['52']" metti SI e lasci gli altri vuoti
all'input il php ti estrae tutti i record che hanno DATO52 == SI
però se tu volessi estrarre ad esempio i record c che abbiano DATO52 == NO e DATO03==giallo nel form inputerari
nell'input name="dato['52']" inputerai NO e
nell'input name="dato['03']" inputerai giallo
allora php ti estrarrà tutti e solo i record con DATO03==giallo AND DATO52==NO se esistono
veniamo al php
la prima riga vuota gli eventuali campi inputati con solo spazi
la seconda definisce una condizione che sarà sempre comunque vera (1 è sempre uguale a 1)
ora se non inputi nulla e dai il subimt la query di estrazione rimane
$query="SELECT * FROM completo WHERE 1=1"
e quindi ti estrarrò tutti i dati
veniamo al foreach
avendo nominati i campi di input in quel modo il $_POST risulterà (potrebbe risultare) così
$_POST['dato']['01'] con il valore che (se) hai inputato in dato['01']
$_POST['dato']['02'] con il valore che (se) hai inputato in dato['02']
...ecc
quindi verifica quali input sono stati riempiti e forna per prima il nome del campo che ti serve a quasto mett = al valore che hai inputato e lo aggiunge al WHERE 1=1
esempio WHERE 1=1 AND DATO52='NO'
aggiungendo altri se imputati es
esempio WHERE 1=1 AND DATO03='giallo' AND DATO52='NO'
da questo dovresti capire quell' 1=1, se non ci fosse dovrei fare uno script che togliesse il primo AND altrimenti avrei un errore di sintassi nella query es ...WHERE AND DATO52='NO'
spero di essere stato chiaro, fai delle prove
 

Discussioni simili