質問

質問者:earlgyreprince 複数の値を1つのフォームで受ける効率的な方法
困り度:
  • 困ってます
複数の値を1つのフォームで受ける効率的な方法
1つのフォームに氏名・年齢・電話番号の3つの項目があり、それぞれ
検索用のテキストボックスと検索ボタンが配置されています。
氏名のテキストボックスと検索ボタンを"A"
年齢のテキストボックスと検索ボタンを"B"
電話番号のテキストボックスと検索ボタンを"C"として
検索キーを入力して検索ボタンを押下して次のフォームに移ります。

その受けるフォームを現在、作成しているのですが
受け取った値がAであれば氏名で、Bであれば年齢で、Cであれば電話番号で
それぞれSQLにてデータベースのテーブルより検索して表示させるフォームを作りたいのですが
受け取った値がいずれの値なのかを判断して表示させる方法が思いつきません。

また、検索するテーブルも5つあります。
効率のいい記述をご教示願います。

ASPの時は以下の記述をしておりました。
長いのでRS1だけまで表記しました。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ LANGUAGE="VBScript" %>
<HTML>
<HEAD>
<TITLE>検索結果一覧</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
</HEAD>
<CENTER>
<%

If Request.Form("年齢") <> "" Then
sqldata1 = "select * from テーブル1 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc"
sqldata2 = "select * from テーブル2 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc"
sqldata3 = "select * from テーブル3 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc"
sqldata4 = "select * from テーブル4 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc"
sqldata5 = "select * from テーブル5 where 年齢='" & Request.Form("年齢") & "' order by ファイル日付 desc"
End If

Dim Conn,SQL1,RS1,SQL2,RS2,SQL3,RS3

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.ConnectionTimeout = 5000
'Conn.open "driver={SQLServer};Server=raichou;UID=ID;PWD=PW;Database=NAME"
Conn.open "NAME","ID","PW"

SQL1 = sqldata1
Set RS1 = Server.CreateObject("ADODB.Recordset")
RS1.Open SQL1, Conn,3,3

%>
<span style="font-size:24pt;color:#ff0033"><B>検索結果一覧</B></span>
<TABLE border="3" BORDERCOLOR="#9999ff" cellspacing="1" cellpadding="1">
<TR>
<TD><span style="font-size:10pt;color:#993333">氏名</span></TD>
<TD><span style="font-size:10pt;color:#993333">電話番号</span></TD>
<TD><span style="font-size:10pt;color:#993333">年齢</span></TD>
</TR>
<%
Do while Not RS1.EOF
%>
<TR>
<TD><span style="font-size:10pt;color:#000000"><%=RS1("氏名")%></span></TD>
<TD><span style="font-size:10pt;color:#000000"><%=RS1("電話番号")%></span></TD>
<TD><span style="font-size:10pt;color:#000000"><%=RS1("年齢")%></span></TD>
<TD align="center">
<FORM action="view.asp?table=テーブル1" method="post">
<input type="hidden" name="id" value="<%=RS1("ID")%>">
<input type="submit" value="詳細">
</form>
</TD>
</TR>
<%
RS1.MoveNext
Loop

RS1.close
Set RS1=Nothing

Conn.close
Set Conn=Nothing
%>
</TABLE>
<BR>
<INPUT TYPE="button" value="戻る" onClick="javascript:history.back();">
</CENTER>
</BODY>
</HTML>
質問投稿日時:2007/06/28 18:04
質問番号:3123279
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:NeilMania 3つのパラメーターに対してSQLの AND OR を使うのもいいと思います。

頑張ってください!
回答日時:2007/06/29 07:01
回答番号:No.5
この回答への補足 3つのパラメーターに対してSQLの AND OR を作成して作ってみようと思います。ありがとうございました☆
この回答へのお礼 この回答にお礼をつける(質問者のみ)

回答

 

回答者:NeilMania String name = request.getParameter("氏名");
String year = request.getParameter("年齢");
String telephoneNumber = request.getParameter("電話番号");

で値を受け取り値があるかどうかをif,else if何かで
チェックをする。
その際、値が0文字以上であればなどとする。
if(name.length() >= 0)をなど使えば出来るかと思います。

値があるのであれば、その値にマッチする値を
DBから引っ張り出す。

マッチした値を引っ張りだすのであれば、ループを使わず
SQL like構文か何かを使えば出来るかと。

色々とやり方があると思いますが、Javaの知識がないので、俺が今イメージできるのはこれぐらいです。すいません。
JavaScriptを使わなくても出来ると思います。

あとは他の人の回答をお待ちくださいm(_ _)m
回答日時:2007/06/29 06:49
回答番号:No.4
この回答への補足 アドバイスをヒントにJSPを作成してみましたがソースが長く記載出来なかった為、新しくQNo.3125889にて投稿させて頂きました。
宜しければご教示下さいませ。
この回答へのお礼 実はif(name.length() >= 0)が分かったので助かりました。
1度作成してみようと思います。

ありがとうございました☆

回答

良回答10pt

回答者:momozange 画面設計に無理があるような気がしますが、そのまま実現するならば3つの入力項目のうち
値が取得できたものを使用すればよいでしょう。

入力フォームにそれぞれ
'name', 'age', 'tel'
という名前を設定し、すべての項目に対しgetParameterした結果、1文字以上存在したものを使用すればよいと思います。
# その場合、2つ以上に値が入力されていた場合は最初に検査したパラメータになりますが。

もっともこの場合、入力フォームをひとつ用意し、ラジオボタンやコンボボックスで
「どの項目で検索するか」をユーザに選択させたほうが画面設計としてはスマートです。
その辺の設計変更は考慮できないのでしょうか。
回答日時:2007/06/29 00:05
回答番号:No.3
この回答への補足 ありがとございます。
確かに画面設計に考慮が必要かと思います。

1文字以上存在したものを使用する方法も考えていたのですが、お恥ずかしいながら記述が分からなかったので。。。

少し考えてみますが思いつかなければ1文字以上存在したものを値として使用する方法でしよと思います。

ありがとうございました!
この回答へのお礼 アドバイスをヒントにJSPを作成してみましたがソースが長く記載出来なかった為、新しくQNo.3125889にて投稿させて頂きました。
宜しければご教示下さいませ。

回答

 

回答者:NeilMania いまいちやりたい事がわかりませんが…

<form action="次のページ" method="post">
氏名:テキストボックス 検索ボタン
年齢:テキストボックス 検索ボタン
電話番号:テキストボックス 検索ボタン
</form>

この値を次のページで受け取る? JSPなど。

String name =request.getParameter("氏名")
String year = request.getParameter("年齢")
String telephone = request.getParameter("電話番号")



受け取った値で

SQL のlike構文か何かやりたいのでしょうか?

俺もJavaをはじめたばかりなので、人に教える知識がないため
あくまで俺の推測です。
回答日時:2007/06/28 21:47
回答番号:No.2
この回答への補足 ありがとうございます。
記述している段階でわかりづらいとは思っていました。。。
すみません。

要はメインに検索ボタンとテキストボックスが3つあり、submitさせた
値を次のフォームで受け取り5つのテーブルで一致したデータをループさせて順に表示させるというのを作りたかったのですが。。。

分かりましたでしょうか?
この回答へのお礼 この回答にお礼をつける(質問者のみ)

回答

 

回答者:STICKY2006 こんばんは。

。。。条件が曖昧すぎます。

投稿はJavaだし、でもJavaScriptでやりたさそうでし、でも、ASPとか書いてあるし。。。

とりあえず、「Java」と「JavaScript」は別物なので、勘違いされて覚えているのでしたら一度調べなおすことをオススメします。


正直、JavaScriptで。。。DBの接続やらなにやらは考えづらいのでJavaScriptとASPのコラボを増やしたいとかでしょうか???

それ前提で。



ボタン作ります。

<input type ="button" name ="bt1" value ="氏名検索ボタン" onClick ="next_page(1)">
<input type ="button" name ="bt2" value ="年齢検索ボタン" onClick ="next_pate(2)">


JavaScriptの処理作ります。

<script type ="text/JavaScript">
<!--
function next_pate(a){
document.form.action ="つぎのぺーじ?check=" + a;
document.form.method ="post";
document.form.target ="_self";
document.form.submit();
}
-->
</script>


でもって、後は、ASP側で、submitがかかった後の値を受け取ってSQLの処理に持っていってやるとかですね。

テーブルに関しては。。。ビューで全部くっつけておけば。。。?などでしょうかね。


不明点については
formの属性だとか、methodのget、postだとか、submitあたりを調べてみてください。
回答日時:2007/06/28 19:21
回答番号:No.1
この回答への補足 分かりづらくてすみません。

やりたい事はメインに検索ボタンとテキストボックスが3つあり、submitさせた値を次のフォームで受け取り5つのテーブルで一致したデータをループさせて順に表示させるというのを作りたいと思っています。

ASPの時に作っていたものをJSPに変更したいと思い、ASPの時のソースを載せました。

「Java」と「JavaScript」が違う事は存じております。
JAVAは経験が浅いのでどう記述を変えたらいいのか分らなかった次第です。

まず、前の値をどのボタンからsubmitされたかを判断する記述がIf Request.Form("年齢") <> "" Thenの部分ですが、これをJSPに変えたらどうゆう記述になるのか等のほとんどが分りかねる為、ご質問させて頂きました。

宜しくお願い致します。
この回答へのお礼 この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示