【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

こんにちは。
いつもお世話になっております。

またわからない事が出てきてしまったので、どうか
ご指導よろしくお願いいたします。

簡単な検索機能をつくりたくて、思考錯誤
しております。
フォームからPOSTで受け取る変数の数は
10個あります。
それぞれの変数が ””でなければ、受け取った
変数を元に、SQL文がかわってゆく。
という事がしたいのです。
10個もあるので、たとえば
変数が$_POST["a"]から$_POST["j"]まであった時に
if文を使うとすると
if($_POST["a"] != "" && $_POST["b"] == "" && $_POST["c"] != "" (略)){
$stt = "検索したい予定のSQL文1";
}elseif($_POST["a"] == "" && $_POST["b"] != "" && $_POST["c"] != "" (略)){
$stt = "SQL文2";



と言う風に、ものすごいにはなると思うのですがifを
つなげていけば良いのかな、と思うのです。

PHPの基礎HPなどを検索してみると、SWITCHを
使えば、多岐に分岐するIF文を、見やすくできる、
と書いてあったので、使ってみたいのですが、書き方の
説明によると
switch(変数){
case 値1:
 条件を満たす時の処理1
break;
case 値2:
 条件を満たす時の処理2
default:
}
と紹介してあったのですが、今回わたしがしたい場合の
条件分岐だと、変数は一つではなく、ある変数は空でこの変数は値が何か入っていて、またもう一つの変数は
空で・・・の時は、このSQL文、というように
させたい場合には、switchでどうかけばよいのか
わからないのです。
それとも、こういう条件分岐の場合は、switchを
使うべきではないのでしょうか・・・?

どうかご指導よろしくお願いいたします。
 

A 回答 (2件)

switch文の書き方~とありますが、


今回のような問題にswitch文は向かないと思います。

どのようなSQL文をご希望なのかが判らないので
詳しくは回答できませんが、
以下のように宣言されている要素によって
SQL文を動的に組み立てると良いと思います。

$Query = "select * from testtable whele";
# aの値が存在する時
if(isset($_POST["a"]) and !empty($_POST["a"]){
$Query .= " A = $_POST[a]";
}
# bの値が存在する時
if(isset($_POST["a"]) and !empty($_POST["a"]){
$Query .= " B = $_POST[b]";
}
  :
  :
    • good
    • 0
この回答へのお礼

sisya様こんにちは。

ご指導ありがとうございます。

今回作りたいのは、検索画面で、
$a から$j までの10個の項目が対象なのです。
検索項目としては、
おそらく10×10-10の、90項目
になるのかしらと、あまりの多さにドキドキしています。

SQLテーブルの構造は、
メイン画面(ここに全部の項目の主キーと繋がる
数字が入っています)※これが10項目です。
売り上げテーブル(年度ごとの月別集計)
商品テーブル
仕入れ先
(略)
という形になっております。
何が検索したいのか、といいますと、たとえば
○年度の仕入先別の売り上げ高 とか
○年度から○年度までの○仕入先の、商品ごとの売り上げ高

などという形のものです。
ですので、検索対象のSQL文は、毎回何を
selectして、whereしてgroup byするかが微妙に代わってくるのです。
(SUMに入れる項目は毎回同じです。)
(・・うわ、なんだか怪しい外人さんみたいな文章に
なってしまいました。 すみません。)

やっぱり、毎回IF()の中に、10個の変数が
有るか無いか記述してやるしか方法は無いのでしょうか・・?

追伸
ええと、初心者なもので、頓珍漢なことをお聞きしていたら
すみません。
上記で教えて頂いた方法のコードなのですが、閉じ括弧) が足りなくは無いでしょうか・・・?

お礼日時:2005/04/08 13:39

こんにちは。


プログラムの世界には「美しい書き方」という言葉が時々使われます。
色々な意味を持っていますが、質問に書かれたやり方は「美しくない」に当てはまると思います。
ただ、美しい=良い、汚い=ダメ、とも言えませんが。

慣れてくれば自ずと出来るようになりますが、考え方を変えて、より楽が出来るように考えてはどうですか。

たとえば、今回のようなプログラムを私が書くとしたら、HTMLのフォームでは以下のように記述します。

<BODY>
<form method="POST" action="./enc2.php">
a:<input type="text" name="val[]"><BR>
b:<input type="text" name="val[]"><BR>
c:<input type="text" name="val[]"><BR>
d:<input type="text" name="val[]"><BR>
e:<input type="text" name="val[]"><BR>
f:<input type="submit" value="send">
</form>
</BODY>

で、どこに値が入っているかは、

$item = array("a" , "b" , "c" , "e" , "f");
$matchKey = array( );
$matchVal = array( );

for($i = 0;i < count($_POST[val]);i++){
if ($_POST["val"][$i] != "")
$matchKey[] = $i;
$matchVal[] = $_POST["val"][$i];
}

for($j = 0; isset($matchKey[$j]); $j++){
print $matchKey[$j] . "の項目が記入されています";
print "値は、" . $matchVal[$j];
print "です";
}


これを参考にしてみてください。

この方法の方が修正が楽でしょうし、間違いも少なくなるでしょう。

私は switch は、あまり使いません。理由は単にifの方が個人的に見やすいから。というだけです。
switchの方が見やすいというのであれば、switchを使えばいいでしょうし、その程度の理由です。

それと、if の条件式でやるか別の if でやるかも個人差が出てくるでしょう。たとえば、以下のようにやる人もいるかもしれません。

if ($_POST["a"] != ""){
if ($_POST["b"] == ""){
if ($_POST["c"] == ""){
・・・・・・

慣れてくるに従って上手に処理できるようになりますよ。
    • good
    • 0
この回答へのお礼

campanella_77様こんばんは。
ご指導ありがとうございます。

教えて頂いた方法を参考にして、頑張ってみます。
・・・とっても見やすいですよね。
すごいです。


ご指導ありがとうございました。

お礼日時:2005/04/08 21:17

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