Newsgroup: it.comp.www.php
Titolo: filtrare i risultati di una query

Salve a tutti,
ho la necessitï¿œ di filtrare alcuni risultati pescati da un db mysql.
Io fatto come segue, ma essendo la selection box a valori multipli,
la variabile passata nella query prende solo un valore, l'ultimo.
Avete suggerimenti?
<?php
$scelte = array("18-25","25-30","30-35","35-45","45-55","55-65","65+");
$length = sizeof($scelte);
echo "<table>
<tr>
<td><form action='". $_SERVER['PHP_SELF']."' method='GET'>
   <select name='fascia' multiple>";
   for($i=0;$i<$length;$i++)
   {
     echo "<option>" . $scelte[$i] . "</option>";
   }
   echo "</select>
   <input type='submit' name='filtro' value='Filtra i risultati'>
   </form>
</td></tr>
</table>";
if($_GET["fascia"])
{$query = "select * from subscribers where (status=1) and (fascia='" . 
$_GET["fascia"] . "')";
echo $query;   /*solo per debug*/
}
else $query = "select * from subscribers where status=1";
/*qui ottengo una notice se fascia non ï¿œ passata nella query string
Undefined variable */
$result = mysql_query($query);
$num = mysql_num_rows($result);
$k=0;
echo "<form action='".$_SERVER['PHP_SELF']."' method='GET'>
      <table width='100%' 
style='font-family:arial;font-size:12px;border:1px solid grey;' 
cellspacing='0' cellpadding='6' border=0>
      <tr style='background-color:#c2c2c2;'>
      <th style='text-align:left;'>Nome</th>
      <th style='text-align:left;'>Email</th>
      <th width='150' style='text-align:left;'>Occupazione</th>
      <th width='100' style='text-align:left;'>Fascia di et&agrave;</th>
      <th width='100' style='text-align:left;'>Seleziona</th>
      </tr>";
while($iscritto=mysql_fetch_array($result))
{
   $k++;
    $bgc = ( $k % 2 ? 'd0' : 'd1' );
    echo "<tr class='".$bgc."'><td 
style='font-weight:bold;'>".strtoupper($iscritto['name'])."</td>
    <td>".$iscritto['email']."</td>
    <td>".strtoupper($iscritto['occupazione'])."</td>
    <td>".$iscritto['fascia']."</td>
    <td><input type='checkbox' value='".$iscritto['ID']."' 
name='selezionato'></td></tr>";
}
echo "<tr class='foot'><td colspan='2' align='right'><span>Mostro 
".$num." risultati</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input 
type='submit' value='Invia a tutti' name='send_all'></td>
           <td colspan='3' align='right'><input type='submit' 
value='Invia a selezionati' name='send_sel'>
           <input type='reset' value='Deseleziona selezionati' 
name='canc_sel'></td>
       </tr></table></form>";
?>
Grazie mille
Franz

 if($_GET["fascia"])
foreach ($_GET['fascia'] as $fascia) {
e poi costruisci la query con un OR per ogni fascia oltre la prima. 
E poi separa meglio il PHP dall'html. Il resto non l'ho nemmeno letto 
perche` era illeggibile.
Bye.

 perche` era illeggibile.
vedremo in seguito :) quando divento piu bravo :)
Grazie mille ale, sempre puntuale.
Franz

 vedremo in seguito :) quando divento piu bravo :)
No, ti consiglio di farlo subito, altrimenti poi prendi brutte abitudini 
e ci metti un sacco a dimenticarle.
Ti consiglierei anche di passare subito a PDO per le query, perche` sei a 
rischio injection, non facendo l'escape dei parametri.
le buone abitudini, prima le prendi e meglio e`. :)
Bye.

 
Ti ho già detto che ti adoro???
:)
Oh...naturalmente a livello professionale!!
Ora mi rimane da capire come inviare un messaggio
(newsletter) ai contatti selezionati con il tuo
codice.
Qualche link o consiglio?
Franz