2011-08-14 2 views
-1

J'ai cette instruction simple si elseif qui ne semble pas fonctionner.L'instruction IF ELSE et la requête Select ne fonctionnent pas

Les variables sont transmises à partir d'une sélection de case à cocher.

Si utilisé comme ceci il fonctionne juste pour la sélection de type.

Si j'utilise une instruction if + if, elle affiche les résultats pour la seconde sélection.

Des idées?

$man=$_GET['m']; 
$wom=$_GET['w']; 
$chd=$_GET['c']; 
$type1=$_GET['tip1']; 
$type2=$_GET['tip2']; 
$type3=$_GET['tip3']; 
$link=mysql_connect ("localhost", ".............", ".........") 
    or die("Nu s-a putut face conectarea la serverul SQL!"); 
mysql_select_db("......") or die("Nu s-a putut selecta baza de date!"); 

if (($type1)||($type2)||($type3)) 
{ 
$q="SELECT * FROM biju WHERE tip like '%$type1%' or tip like '%$type2%' or tip like '%$type3%'"; 
} 

elseif (($man)||($wom)||($chd)) 
{ 
$q="SELECT * FROM biju WHERE gen like '%$man%' or gen like '%$chd%' or gen like '%$wom%'"; 
}; 


$result=mysql_query($q); 
$nr=mysql_numrows($result); 
+0

L'exemple de code est vulnérable à [injection SQL] (http://unixwiz.net/techtips/sql-injection.html), ce qui est très grave [risque de sécurité ] (http://bobby-tables.com/). Pour corriger ce trou, passez de l'extension mysql périmée à [PDO] (http://php.net/PDO) et utilisez [instructions préparées] (http://www.php.net/PDO.prepared-statements), passer les valeurs en paramètres à l'instruction plutôt que de les interpoler directement dans la chaîne. Si vous avez besoin d'un didacticiel PDO, essayez ["Ecriture de scripts MySQL avec PHP et PDO"] (http://www.kitebird.com/articles/php-pdo.html). Le site que vous enregistrez peut être le vôtre. – outis

Répondre

1

La branche else if ne sera exécutée que si la première branche if ne revint pas vrai. C'est ainsi que fonctionne le if+elseif.

Après la condition if, vous faites la requête. Vous ne faites qu'une seule requête (avec la première ou la deuxième chaîne de requête de la condition). Vous devez déplacer $result=…; $nr=…; à l'intérieur de votre bloc if

+0

s'il vous plaît noter la vulnérabilité sqli dans votre code ainsi – knittl