Pagina 1 di 1

problema nella query, restituisce valori non richiesti

Inviato: 18/09/2012, 17:43
da mousemahout
Ciao!
Ho un database contenente dei prodotti.
Ho dei controlli per filtrare la ricerca tra questi prodotti.
Tutto funziona tranne quando faccio una scelta multipla nel senso quando cerco un record o un'altro record nello stesso campo. Credo che il problema sia nella query select * from prodotti where a='a' or a='b' ma non ne vengo fuori aiutatemi!
posto il codice:

Codice: Seleziona tutto

<pre>
<?php if(!isset($_POST['search'])){echo'
 <h4>RICERCA AVANZATA</h4>
 <form name="cerca" action="" method="post">
 <fieldset>
 <legend>Prodotto</legend>
<p>
        <label>
                <input type="radio" name="prodotto" value="tv" id="prodotto_0" />
                tv</label>
        <br />
        <label>
                <input type="radio" name="prodotto" value="mon" id="prodotto_1" />
                monitor</label>
        <br />
</p>
</fieldset>
<fieldset>  
    <legend>Tipo di schermo </legend>
     LCD<input name="lcd" type="checkbox" value="lcd" />  
      LED<input name="led" type="checkbox" value="led" />
      </fieldset>
      <fieldset>
    
    <fieldset>
   
  
    
  </fieldset>  
    <button name="search" type="submit">presentare</button>
  
</form>';}else {
    
    include'config.php';
    include'connect.php';

$prodotto=$_POST['prodotto'];
$lcd=$_POST['lcd'];
$led=$_POST['led'];

$condizione = " WHERE 1=1 ";


if(isset($_POST['prodotto'])){
    $condizione.=" AND prodotto='$prodotto'";    
}


if($led!=''&&$lcd!=''){ 
    $condizione .=" AND screen = 'led' OR screen = 'lcd'";}


if(isset($_POST['tv'])&&!isset($_POST['monitor'])){//è stato selezionato c1 
    $condizione .=" AND prodotto = 'tv' AND prodotto != 'mon'"; 
} 
if(isset($_POST['monitor'])&&!isset($_POST['tv'])){//è stato selezionato c2 
    $condizione .=" AND prodotto = 'mon' AND prodotto != 'tv'"; 
}

if(isset($_POST['lcd'])&&!isset($_POST['led'])){//è stato selezionato c1 
    $condizione .=" AND screen = 'lcd' AND screen != 'led'"; 
} 
if(isset($_POST['led'])&&!isset($_POST['lcd'])){//è stato selezionato c1 
    $condizione .=" AND screen='led' AND screen!='lcd'"; 
} 



$query=mysql_query("SELECT * FROM prodotti".$condizione);

//$query2=mysql_query("SELECT COUNT(*) FROM prodotti".$were);

if(mysql_num_rows($query)==0){echo 'La ricerca non ha prodotto alcun risultato.'.$pollici;}else{

while($a = mysql_fetch_assoc($query)){
    
    echo $a['descrizione'].'<br><img src="prodotti/'.$a['categoria'].'/'.$a['sottocategoria'].'/'.$a['sigla'].'/images/'.$a['immagine'].'">'.$a['sigla'].$a['pagina'].'<br>';
    };}
}
    

?></pre>

Re: problema nella query, restituisce valori non richiesti

Inviato: 19/09/2012, 19:25
da Andrea RBR-W
questa dicitura mi suona strana...


if($led!=''&&$lcd!=''){

cmq hai provato a farti mostrare la query priam di eseguirla? io di solito me la faccio mostrare e la metto in pasto a phpmyadmin in modo da capire se il problema è quello... ;)

Re: problema nella query, restituisce valori non richiesti

Inviato: 19/09/2012, 20:49
da Micogian
No, il codice if($led!=''&&$lcd!=''){ va letto in questo modo:

Codice: Seleziona tutto

if($led != '' && $lcd !=''){ 
che significa: "se $led è diverso da vuoto e $lcd è diversa da vuoto, inserisci la condizione seguente...

Ma così non devono essere vuoti entrambi i valori, non è che può esserci solo uno ?
In questo caso

Codice: Seleziona tutto

if($led != '' || $lcd !=''){ 

Re: problema nella query, restituisce valori non richiesti

Inviato: 20/09/2012, 12:51
da Andrea RBR-W
Micogian ha scritto:No, il codice if($led!=''&&$lcd!=''){ va letto in questo modo:

Codice: Seleziona tutto

if($led != '' && $lcd !=''){ 
che significa: "se $led è diverso da vuoto e $lcd è diversa da vuoto, inserisci la condizione seguente...

Ma così non devono essere vuoti entrambi i valori, non è che può esserci solo uno ?
In questo caso

Codice: Seleziona tutto

if($led != '' || $lcd !=''){ 
ah... cavolo... avevo interpretato '' (apice apice) come " (doppio apice)... è x quello ke nn capivo... :oops: