2011-08-14 4 views
-1

elseif文がうまくいかない場合は、この単純な記述をしてください。IF ELSE文とSelectクエリが機能しない

変数はチェックボックスから渡されます。

このように使用すると、タイプ選択のためだけに機能します。

if + ifステートメントを使用すると、2番目の選択の結果が表示されます。

アイデア?最初if分岐はtrueを返していなかった場合

$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

サンプルコードは[SQLインジェクション](http://unixwiz.net/techtips/sql-injection.html)の脆弱性があります。これは非常に重大な[セキュリティ上のリスク](http://bobby-tables.com/)。この穴を修正するには、旧式のmysql拡張機能を[PDO](http://php.net/PDO)に切り替え、[prepared statements](http://www.php.net/PDO.prepared-statements)を使用してください。その値を文字列に直接補間するのではなく、パラメータとしてパラメータに渡します。 PDOチュートリアルが必要な場合は、「PHPとPDOでMySQLスクリプトを書く」(http://www.kitebird.com/articles/php-pdo.html)を試してみてください。あなたが保存したサイトはあなた自身のものかもしれません。 – outis

答えて

1

else if枝にのみ実行されます。それはちょうどif+elseifの仕組みです。

ifの条件の後で、クエリを実行します。単一のクエリ(条件の最初のクエリ文字列または2番目のクエリ文字列のみ)を実行します。 ifブロック内に$result=…; $nr=…;を移動する必要があります

+0

あなたのコードのsqli脆弱性にも注意してください – knittl

関連する問題