こんにちは。
いつもお世話になっております。
またわからない事が出てきてしまったので、どうか
ご指導よろしくお願いいたします。
簡単な検索機能をつくりたくて、思考錯誤
しております。
フォームから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を
使うべきではないのでしょうか・・・?
どうかご指導よろしくお願いいたします。
No.1
- 回答日時:
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]";
}
:
:
sisya様こんにちは。
ご指導ありがとうございます。
今回作りたいのは、検索画面で、
$a から$j までの10個の項目が対象なのです。
検索項目としては、
おそらく10×10-10の、90項目
になるのかしらと、あまりの多さにドキドキしています。
SQLテーブルの構造は、
メイン画面(ここに全部の項目の主キーと繋がる
数字が入っています)※これが10項目です。
売り上げテーブル(年度ごとの月別集計)
商品テーブル
仕入れ先
(略)
という形になっております。
何が検索したいのか、といいますと、たとえば
○年度の仕入先別の売り上げ高 とか
○年度から○年度までの○仕入先の、商品ごとの売り上げ高
などという形のものです。
ですので、検索対象のSQL文は、毎回何を
selectして、whereしてgroup byするかが微妙に代わってくるのです。
(SUMに入れる項目は毎回同じです。)
(・・うわ、なんだか怪しい外人さんみたいな文章に
なってしまいました。 すみません。)
やっぱり、毎回IF()の中に、10個の変数が
有るか無いか記述してやるしか方法は無いのでしょうか・・?
追伸
ええと、初心者なもので、頓珍漢なことをお聞きしていたら
すみません。
上記で教えて頂いた方法のコードなのですが、閉じ括弧) が足りなくは無いでしょうか・・・?
No.2ベストアンサー
- 回答日時:
こんにちは。
プログラムの世界には「美しい書き方」という言葉が時々使われます。
色々な意味を持っていますが、質問に書かれたやり方は「美しくない」に当てはまると思います。
ただ、美しい=良い、汚い=ダメ、とも言えませんが。
慣れてくれば自ずと出来るようになりますが、考え方を変えて、より楽が出来るように考えてはどうですか。
たとえば、今回のようなプログラムを私が書くとしたら、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"] == ""){
・・・・・・
慣れてくるに従って上手に処理できるようになりますよ。
campanella_77様こんばんは。
ご指導ありがとうございます。
教えて頂いた方法を参考にして、頑張ってみます。
・・・とっても見やすいですよね。
すごいです。
ご指導ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アップロードファイルを表示す...
-
PHPの構文で間違えが分からない
-
php エラー
-
PHPSpreadsheetを使って関数を...
-
PHPで画像の渡しが上手く行きま...
-
phpでcookieがうまく保存されない
-
PHP MySQLに画像を直接保存
-
PHP8を使うと、大量のWarningが...
-
PHPのセッション有効期限について
-
ページング phpの書き方がわか...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
-
phpに関わる所での、form actio...
-
ゆゆにゃ。
-
【初心者】XAMPPのapacheの(恐...
-
プログラミング言語で、使える...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
PHP8を使うと、大量のWarningが...
-
PHPで画像の渡しが上手く行きま...
-
PHPSpreadsheetを使って関数を...
-
PHP一覧表示した項目にリンクを...
-
フォームで戻った際に入力済み...
-
ワードプレスプラグイン MW WP ...
-
PHPについて。
-
jpgraphで表示されない
-
$_SESSIONについて教えて下さい。
-
クラス
-
phpに関わる所での、form actio...
-
PHP ページング データベース
-
php 入力画面から確認表示画面...
-
index.phpって何ですか? 具体...
-
アコーディオンPHPが上手くいか...
-
1 OR 1=1 は どんな論理(約束事...
-
reuterの記事をbeautiful.soup....
-
phpのメールフォームの完了画面...
-
PHPSpreadsheetによる書き出し...
おすすめ情報