プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になってばかりで恐縮ですがまたお願い致します。
ある条件文を作ったのですが完璧な動きをしないので
ソースをご覧の上でご指摘お願いします。

【ソース】
<?php
//SQL発行

$sql = "SELECT * FROM data2 WHERE ";
//条件1
if($itu_id == 0){
$sql .="";
}
if($itu_id !== 0){
$sql .= "itu_id = $itu_id ";
}
//条件2
if($doko_id == 0){
$sql .="";
}
if($doko_id !== 0){
$sql .=" && doko_id = $doko_id ";
}
//条件3
if($dou_id == 0){
$sql .="";
}
if($dou_id !== 0){
$sql .=" && dou_id = $dou_id ";
}
//条件4
if($nani_id == 0){
$sql .="";
}
-------
「条件1が0以外なら条件を追加して条件2へ」
「条件1が0だったらスルーして条件2へ」とう言うフローの
つもりです。今のところ0以外では正常に動いてくれます。条件が0の時にはエラーになります。
コーディングのミスに気付いていないのか、
もしくは構文そのものに間違いがあるのか
自分ではわかりません。
どなたかご指摘お願いします。
宜しくお願いします。

A 回答 (3件)

$sql に追加するところすべてにいえますが、



「$sql .= "itu_id = $itu_id ";」の$itu_id や $dou_id を
「$sql .= "itu_id = '".$itu_id."' ";」
としてみてはいかがでしょうか。
(シングルクォーテーションで囲む)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご指摘のとおり試してみましたが変りませんでした。
しかしクォーテーションは私が苦手としているところなので
コーディングにミスがあるのかもしれません。
もう少し試行錯誤してみます。

お礼日時:2005/03/30 06:37

条件1が0で、条件2が0以外の時を考えると


$sql = "SELECT * FROM data2 WHERE && doko_id = $doko_id "
となってしまう事がエラーの原因でしょう。(条件がすべて0以外ならSQLがWHEREで終わってしまいますし)

以下の感じでどうでしょう?
追加するSQLを保存する配列$conditionを準備し、条件が0以外ならSQLを追加します。
$conditionの個数が0以上なら" WHERE "と$conditionを" && "で繋げた文字列を追加します。

$sql = "SELECT * FROM data2";
$condition = array();
if($itu_id != 0){
 $condition[] = "itu_id = $itu_id";
}
if($doko_id != 0){
 $condition[] = "doko_id = $doko_id";
}
if($dou_id != 0){
 $condition[] = "dou_id = $dou_id";
}
if(count($condition) > 0){
 $sql = " WHERE ".join(" && ",$condition);
}

この回答への補足

丁寧なご回答ありがとうございます。
ググったどのページよりもスマートなコーディングだと
感じました。ただ残念ながら試しにコピペで置き換えてみたところ
今度は0以外でもエラーを返すようになってしまいました。
内容は「Parse error: parse error, unexpected T_VARIABLE in 」です。
どうやら29行目にセミコロンが抜けているとのことですが、
いくら探してもみつかりません。
ソースはコピペさせていただいたので間違いはないと思うんですが、
私の勘違いかもしれないのでお手数をおかけしますが念のため
何かないか見ていただけないでしょうか。

【ソース】
<?php
//フォーム送信内容を取得
$itu_id = 1 ;
$doko_id = 1 ;

//MySQLに接続
if( ! $conn = mysql_connect( 'localhost', 'card', 'UQbVGauchEoQ') ){
die( 'MySQL接続失敗' );
}

//データベースの選択
mysql_select_db( 'card', $conn );

//ヘッダ出力をします
header('Content-Type: text/html; charset=euc-jp');
?>
<HTML>
<HEAD>
<TITLE>mysql関数テスト1</TITLE>
</HEAD>
<BODY>

<?php
//SQL発行

$sql = "SELECT * FROM data2 ";
$condition = array();
if($itu_id != 0){
 $condition[] = "itu_id = $itu_id ";
}
if($doko_id != 0){
 $condition[] = "doko_id = $doko_id ";
}
if(count($condition) != 0){
 $sql = " WHERE ".join(" && ",$condition);
}

$rs = mysql_query( $sql , $conn );

補足日時:2005/03/30 06:31
    • good
    • 0
この回答へのお礼

度々ご回答ありがとうございます。
全角スペースとは・・・
自分では一生気づけなかったことでしょう。
しかしながら今度は$itu_id・$doko_id・$dou_idの
全てが0のときしか正常に表示されなくなってしまいました。
ただ、これ以上はご迷惑かと思うのでひとまずクローズしたいと思います。
しかし、join関数を使うところはスマートなコーディングを目指す上で非常に勉強になりました。
ありがとうございました。

お礼日時:2005/03/30 13:40

#2です。


コピーペーストした上、29行目でエラーが出るという事ですので、全角スペースが問題なのではないかと思います。
#2で示したサンプルソースのインデントは教えてgoo用に全角スペースになっています。
同様にインデント部分(32・35行目)も確認してみて下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!