フォームからデータを取得したif文の判定

このQ&Aのポイント
  • ローカルでasp.netの勉強中にフォームでの判定に躓いた際の質問です。PHPを使用することも可能です。性別を配列にし、functionでフォームを表示させていますが、選択後に初期値のチェックが入らない問題が発生しています。デフォルトの値にチェックを入れるにはどうしたら良いでしょうか?
  • フォームで性別を選択しない場合はデフォルトの値にチェックが入る仕組みにしたいです。現在のコードは、選択後に初期値でのチェックが入らず困っています。どう対応すれば良いでしょうか?
  • ローカルでasp.netの学習中にフォームでの判定の問題に直面しました。性別を配列にして、functionでフォームを表示させていますが、選択後に初期値でのチェックが入りません。デフォルトの値にチェックを入れるためにはどうすれば良いでしょうか?
回答を見る
  • ベストアンサー

フォームからデータを取得したif文の判定

こんにちは。 今ローカルでasp.netの勉強をしているのですが、フォームでいきない躓きました・・・PHPはある程度使うことができます。 性別を配列にして functionでフォームを表示させているのですが、選択後に初期値でcheckが入りません・・・ 性別のラジオボタンを何も選択しなければ、デフォルトの値にチェックが入ります。 何がなんだかわからないので、ご教授をよろしくお願いします。 ソースは dim sexArr '性別の選択用配列 sexArr = Array("男性", "女性") '配列設定 ' 配列からラジオボタンの作成 function getRadio(name, selectedVal, valArr, defaults) getRadio = "" if selectedVal = "" Then selectedVal = defaults END if For i = 0 to UBound(valArr) getRadio = getRadio & "<input type=""radio"" name=""" & name & """ value=" & i & " " if selectedVal = i Then getRadio = getRadio & "checked" response.Write("あああ") else response.Write(selectedVal) response.Write("いいい") response.Write(i) END if getRadio = getRadio & ">" getRadio = getRadio & valArr(i) NEXT END Function 表示部分に <% = getRadio("sex", Request.Form("sex"), sexArr, 0) %> としています。 デバック用に <% For i = 0 to 3 if Request.Form("sex") = i Then response.Write("あああ") else response.Write("いいい") END if NEXT response.Write( Request.Form("sex")) %> っとfaunctionを使わずにifをしてみましたが、結果は同じでした。 わかり難い文章で申し訳ございませんが、どうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

これは ASP.NET じゃなくて ASP ですよね? VBScript も使ってますし。 ASP は何年も触っていないのでズバリな回答はできませんが、解決へ向かうためのヒントだけでも。 (1) getRadio 関数で受けた引数は意図する値になっているか確認。 function getRadio(name, selectedVal, valArr, defaults) の次の行にでも Response.Write(name) & "<br/>" & vbCrLf Response.Write(selectedVal) & "<br/>" & vbCrLf Response.Write(defaults) & "<br/>" & vbCrLf For hoge = 0 To UBound(valArr) Response.Write(valArr(hoge)) & "<br/>" & vbCrLf Next なんてデバッグ出力用のコードを書き足してみてください。 これを実行し、ブラウザに表示された値を見て、自分が意図している値かどうかを判断します。 (2) 意図している HTML と、実際に出力された(意図しない結果になる)HTML とを比べてみてください。 意図している HTML は手書きまたは WYSWIG なツールで静的な HTML を作ってください。 これらを比べれば、ASP が出力する HTML のどこがおかしいのかがわかります。 どこがおかしいのかが分かれば、該当する VBScript のコードが分かります。

amountainblast
質問者

お礼

回答ありがとうございます。自己解決したので、回答を見るのを忘れてました。 デバッグ用の出力はして、値は正常でした。 原因は何かわからなかったので、 判定のところに if valArr(selectedVal) = valArr(hoge) then と要素でチェックを掛けてやれば、動きました。 お礼が遅くなり申し訳ございませんでした。

関連するQ&A

  • Ifが正常に動作しない。

    下記のコードで、login.htmlからデータを適当に入力し てかえってくる処理が全て、空の表示になってしまう。 Ifが正常に動作しません、正常に動作するようにするにはどうすればいいのでしょうか? <login.html> <html> <body> <table> <tr> <td>id:</td> <td><input type="text" name="id"></td></tr> <tr><td>password:</td> <td><input type="password" name="pass"></td></tr> </table> <form methed="post" action="http://session.asp"> <input type="submit" name ="sb" value="login" > </form> </body> </html> session.asp <html> <body> <% if session("id")="" Or session("id")= null then if request("pass")="" Or request("id")= null then response.write "空" elseif request("pass")= "1234" then session("id")="login" response.write "ログインしました。" else response.write "違う" end if else response.write "ログインしました" response.write session("id") end if %> </body> </html>

  • フォームのチェックボックスの値を次のページで読み込む方法

    「1.htm」のフォームでチェックボックスを作成し、 「2.asp」で結果を出力しようとしています。 が、複数チェックを入れるとエラーになります。 どこがまちがっているのでしょうか。 どなかたご教授ください。 宜しくお願いします。 ****1.htm**** <form method="POST" action="2.asp"> <INPUT type="checkbox" name="koumoku" value="1">1<br> <INPUT type="checkbox" name="koumoku" value="2">2<br> <INPUT type="checkbox" name="koumoku" value="3">3<br> </form> ****2.asp**** <% koumoku = Request.Form("koumoku") If koumoku = 1 then Response.Write "<p>1111</p>" End If If koumoku = 2 then Response.Write "<p>2222</p>" End If If koumoku = 3 then Response.Write "<p>3333</p>" End If ****エラーメッセージ****** 型が一致しません。: '[string: "1, 2, 3"]'

  • フォームのValue値

    万年カレンダーを作ってるのですが、やりたいこととしてはform内のバリュー値を、if文で変数(日付)に変更してそれをFrom内のバリューに置き換えたいのですが、ifででた変数がValueにおきかえれません。 <form method="POST" action="jan_Edit.asp" id=submit> <!--<input type="hidden" name="HDN" Value =<% = SBMT %> >--> <input type="submit" value="PreviousYear" id=SUB1 name=SUB1> <input type="submit" value="PreviousMonth" id=SUB1 name=SUB1> <input type="submit" value="ThisMonth" id=SUB1 name=SUB1> <input type="submit" value="NextMonth" id=SUB1 name=SUB1> <input type="submit" value="NextYear" id=SUB1 name=SUB1> </form> dim SUB1 SUB1 = Request.querystring("SUB1") if SUB1="ThisMonth" then Response.Write("AA<br>") SUB1 = "" elseif SUB1="PreviousYear" then Response.Write("bb<br>") SUB1=YY1 ' YY1は去年です elseif SUB1="PreviousMonth" then Response.Write("cc<br>") SUB1=MM1 'MM1は一か月前です elseif SUB1="NextMonth" then Response.Write("dd<br>") SUB1=MM2 'MM2は一か月後です elseif SUB1="NextYear" then Response.Write("ee<br>") SUB1=YY2 'YY2は一年後です end if

  • 九星を求めるプログラム

    こんにちは、いつもお世話になっています 練習で次のようなプログラムを作ったのですがうまく値が帰ってきません。何を入れても、「あなたは九紫火星です」が戻ってきます。どこが間違っているのか教えていただけますと非常に助かります… 九星の計算はここを見てください http://homepage1.nifty.com/luck/newpage41.htm htmlにはフォームがあって、生年月日を入力するようになっています。 誕生日 <INPUT TYPE=radio NAME=nengo VALUE=showa CHECKED>昭和 <INPUT TYPE=radio NAME=nengo VALUE=heisei >平成 <INPUT TYPE=text NAME=nen VALUE="" SIZE=3>年 <INPUT TYPE=text NAME=gatu VALUE="" SIZE=3>月 <INPUT TYPE=text NAME=hi VALUE="" SIZE=3>日 で、aspでは、 NENGO=Request.Form("nengo") NEN=Request.Form("nen") GATU=Request.Form("gatu") HI=Request.Form("hi") HIKAKU1=DateSerial(1985,GATU,HI) HIKAKU2=DateSerial(1985,2,3) If HIKAKU1<=HIKAKU2 Then NEN=NEN-1 End If Kyu1=Mid(NEN,1,1) Kyu2=Mid(NEN,2,1) Kyu=Kyu1+Kyu2 If Kyu>10 Then Kyu=Kyu+1 End If Select Case Kyu Case 1 Response.Write "あなたは一白水星です" Case 2 Response.Write "あなたは二黒土星です" Case 3      (略) Case 8 Response.Write "あなたは八白土星です" Case Else Response.Write "あなたは九紫火星です" End Select      ・      ・      ・     (続きは関係ないので省略) すみませんがよろしくお願いします。

  • ページング値渡しについて

    sea_clear_sky8です。 [環境] OS 98SE PWS [質問内容] ページングの値渡しの際がうまくいきません。 忙しいところすいませんがよろしくお願いします。 次のページっていうのをボタンで作って、次の10件が表示させるように させたいのです。 下記ソースのvar frm = document.GetElemntById("myForm");の部分で オブジェクトでサポートされていないプロパティまたはメソッド ですとエラーがでます。 それからコンパイル後、SQLエラーと表示されます。 このSQLエラーというのは下記ソースのエラー処理で行っている SQLエラーというのが表示されています。 [ソース] [bunkatsu1.html] <html> <body> <form action="bunkatsu1.asp" method="post"> 名前:<input type="text" name="nm"> <input type="hidden" name="page_num" value="0"> <input type="submit" name="exec" value="検索"> </form> </body> </html> [bunkatsu1.asp] <html> <script type="text/javascript"> <!-- function myClick() { var frm = document.GetElemntById("myForm"); frm.action ="bunkatsu1.ASP"; frm.method= "get"; frm.submit(); } // --> </script> <body> <% On Error Resume Next Dim DB,CMD,RS,AllCnt '接続処理 Set DB = Server.CreateObject("ADODB.Connection") DB.Open "mysql" If Err.number <> 0 then Response.Write "接続エラー" Response.End End If ' LIMITを使ったSELECT文を実行 Set CMD = Server.CreateObject("ADODB.Command") CMD.ActiveConnection = DB CMD.CommandText = "select * from test_t " & _ "where name like '%" & Request("nm") & "%' " & _ "order by id " & _ "limit " & Request("page_num")*10 & ",10" Set RS = CMD.Execute If Err.number <> 0 then Response.Write "SQL実行エラー" Response.End End If ' 結果出力 Response.Write "<table border=1>" Response.Write "<tr><td>id</td><td>name</td></tr>" Do Until RS.EOF Response.Write "<tr>" Response.Write "<td>" & RS("id") & "</td>" Response.Write "<td>" & RS("name") & "</td>" Response.Write "</tr>" RS.MoveNext If Err.number <> 0 then Response.Write "次データ取得エラー" Response.End End If Loop Response.Write "</table>" ' 検索条件に該当する全データの件数取得 CMD.CommandText = "select count(*) from test_t " & _ "where name like '%" & Request("nm") & "%' " Set RS = CMD.Execute If Err.number <> 0 then Response.Write "SQL実行エラー" Response.End End If AllCnt=RS(0) ' ページ数表示 if AllCnt>10 then Response.Write Abs(Int(-1*(AllCnt/10))) & "ページ中の" Response.Write Request("page_num")+1 & "ページ目を表示<br>" end if ' 前の10件 if Request("page_num")<>0 then end if ' 次の10件 if ((Request("page_num")+1)*10) < AllCnt then response.write "<form id=""myForm"" method=""post"">" response.write "<input type=""Submit"" value=""次の10件&gt;"" onclick=""myClick();"">" response.write "<input type=""HIDDEN"" name=""num"" value=""&request(""num"")&"">" このTEXTボックスはHIDDENのNUMに何が入っているか確認するための ものです。 response.write "<input type=""text"" name=""test"" value=""&=request(""num"")&"">" response.write "<input type=""HIDDEN"" name=""page_num"" value=""&request(page_num)+1&"">" このTEXTボックスはHIDDENのPAGE_NUMに何が入っているか確認するための ものです。 response.write "<input type=""text"" name=""test1"" value=""request(page_num)+1&"">" response.write "<input type=""submit"" value=""更新"">" response.write "</form>" end if ' レコードセット解放 RS.Close ' 切断 DB.Close ' オブジェクト解放 Set CMD=Nothing Set RS=Nothing Set DB=Nothing %> </body> </html> 忙しいところすいませんが、ご教授願います。 よろしくお願いします。

  • セッション

    セッションについて教えて下さい。 指定のID、パスワードでログインしようと思っています。 ソースを記載しますので、お教え下さい。 ID:aaa パスワード:111とします。 [送り側フォーム] <form action="/test2.asp" method="POST" id=form1 name=form1> <input type="text" name="id" value=""><br> <input type="password" name="passwd" value=""> <input type="submit" value="LOGIN" id=submit1 name=submit1> </form> とし、 [受け取り側、認証 test2.asp ] <% If Session("user_test") <> "1" Then Response.Redirect "/test.asp" Response.End() End If %>ここで認証を判断し、認証できなければtest.aspへもどるとし、 Dim id, passwd id = Request.Form("id") passwd = Request.Form("passwd") Session("user_login") = "id" Session("user_login") = "passwd" IF id = "aaa" and passwd = "111" THEN Session("user_test") = 1 Response.Write ("OK") ELSE Response.Write ("ちがうよ") END IF %> ID、パスワードをセッション変数にいれ、各ページで認証すると言う事をやりたいのですが、うまくいきません。 どこがわるいか、お教え下さい。 ※以前にも似たような質問をしているのですが、改善されずお手上げです。

  • フォームの値をうまく出力できない

    フォーム(1.htm)で、質問と答えと入力し、 その結果を次のページ(2.asp)で表示させるASPを作成しました。 以下のように作成したいのですが、うまくいきません。 どうしたらいいのでしょうか。 宜しくお願いします。 ・質問と答えは10個入力されるとはかぎらない ・例えば7個入力されたとき、question1からquestion7まで入力されるとはかぎらない(question2が空欄で、question9に入力される場合もある) ・どのように入力された場合でも、qとaの画像は、q1.gif・a1.gifから 連続で表示されるようにする。 ・フォームで入力されたところを上から順番にq1.gif~、a1.gif~の画像を使って、2.aspに表示させる。 ****1.htm***** <form method="POST" action="2.asp"> <input name="question1" type="text"> <input name="answer1" type="text"> … <input name="question10" type="text"> <input name="answer10" type="text"> </form> ****2.asp************ question1 = Request.Form("question1") answer1 = Request.Form("answer1") … question10 = Request.Form("question10") answer10 = Request.Form("answer10") Response.Write ("<table>") Response.Write ("<tr>") Response.Write ("<td><img src= q1.gif></td>") Response.Write ("<td>" & question1 & "</td>") Response.Write ("</tr>") Response.Write ("<tr>") Response.Write ("<td><img src= a1.gif></td>") Response.Write ("<td>" & answer1 & "</td>") Response.Write ("</tr>") … Response.Write ("<tr>") Response.Write ("<td><img src= q10.gif></td>") Response.Write ("<td>" & question10 & "</td>") Response.Write ("</tr>") Response.Write ("<tr>") Response.Write ("<td><img src= a10.gif></td>") Response.Write ("<td>" & answer10 & "</td>") Response.Write ("</tr>") Response.Write ("</table>")

  • 対象データの取得方法

    formで送信する入力データのチェックをしたいです。 データは配列になります。(phpで作成) phpの宣言は省略します。 ◆送信側 <form method="post" action="xxxxx.php" target="_top" name="test_form"> for(i=0;i<=10;i++){ <input type="text" name="inputno[<?=$i?>]" value="<?=$inputno[$i]?>"> } <input type="submit" value="送信" onclick="return(inputck());"> </form> ◆js処理 function inputck(){ for(i=0;i<10;i++){ if(document.test_form.inputno[i].value.match(/[^0-9]/g)){ alert("整数値を入力してください"); return(false); } } } という感じなのですが、jsのif文(inputno[i]?)がおかしいみたいでうまくいきません。 配列でなければ大丈夫なので…。 記述方法を教えてくださいm(__)m

  • VBScript

    現在ASPをもとにWebサイトを作成しています。 「Microsoft VBScript コンパイラーエラー(0X800A03F6) 'End'がありません。」と出るのですが、どこが原因なのでしょうか? <%@ LANGUAGE="VBSCRIPT" %> <% ' #################### ' ### データ送信用 ### ' #################### StrUsername = Request.Form("username") StrUruby = Request.Form("uruby") StrDatofbirth = Request.Form("dayofbirth") StrEmail1 = Request.Form("email1") StrEmail2 = Request.Form("email2") StrGender = Request.Form("gender") StrPostnumber = Request.Form("postnumber") StrAddress = Request.Form("address") StrTel1 = Request.Form("tel1") StrTel2 = Request.Form("tel2") StrSchool = Request.Form("school") StrFaculty = Request.Form("faculty") StrDepartment = Request.Form("department") StrSurvey = Request.Form("survey") StrComment = Request.Form("comment") StrDesiredjobtype = Request.Form("desiredjobtype") if username = "" then username = "未入力" end if if uruby = "" then uruby = "未入力" end if if dayofbirth = "" then dayofbirth = "未入力" end if if email1 = "" then email1 = "未入力" end if if email2 = "" then email2 = "未入力" end if if gender = "" then gender = "未入力" end if if postnumber = "" then postnumber = "未入力" end if if address = "" then address = "未入力" end if if tel1 = "" then tel1 = "未入力" end if if tel2 = "" then tel2 = "未入力" end if if faculty = "" then faculty = "未入力" end if if department = "" then department = "未入力" end if if survey = "" then survey = "未入力" end if if comment = "" then comment = "未入力" end if if desiredjobtype = "" then desiredjobtype = "未入力" <!-- ERRORカウンタの初期化 errnum = "" ' ### ' ### sqlインジェクション対策 ### ' ###] if errnum <> "" Then Response.Redirect "http://localhost/tesut/chkerr.asp?errnum="+ errnum End If <!-- パラメータ LIST = Array(username,uruby,dayofbirth,email1,email2,gender,postnumber,address,tel1,tel2,school,faculty,department,survey,comment,desiredjobtype) <!-- 検出項目(SQLコマンドで使用される特殊記号の検出) CHECK_1 = Array("<",">","&","'","+","-","*","/","%",";","--","(",")","\","""",",") <!-- ハンドリング要素 ERROR = Array("A","B","C","D") For j = 0 to UBound(LIST) tmpData = UCase(LIST(j)) For i = 0 to UBound(CHECK_1) If Instr(tmpData,CHECK_1(i)) > 0 Then errnum = errnum + ERROR(j) Exit For End If Next Next if errnum <> "" Then Response.Redirect "http://localhost/tesut/chkerr.asp?errnum="+ errnum End If <!-- POSTで遅れないのでセションに保存 Session.Contents("username") = username Session.Contents("uruby") = uruby Session.Contents("dayofbirth") = dayofbirth Session.Contents("email1") = email1 Session.Contents("email2") = email2 Session.Contents("gender") = gender Session.Contents("postnumber") = postnumber Session.Contents("address") = address Session.Contents("tel1") = tel1 Session.Contents("tel2") = tel2 Session.Contents("school") = school Session.Contents("faculty") = faculty Session.Contents("department") = deaprtment Session.Contents("survey") = survey Session.Contents("comment") = comment Session.Contents("desiredjobtype") = deairedjobtype Response.Redirect "http://localhost/tesut/check.asp" <!-- xssの記号検出処理 Function XssChk(Str) err = 0 If Instr(Str,"<") > 0 Then err = err + 1 End If If Instr(Str,">") > 0 Then err = err + 1 End If If Instr(Str,"&") > 0 Then err = err + 1 End If If Instr(Str,"'") > 0 Then err = err + 1 End If If Instr(Str,"""") > 0 Then err = err + 1 End If XssChk = err End Function %>

  • Request.Querystringについて

    ASPについて教えてください。 基本的な質問です。プログラム初心者です。 プログラムを前の方へ辿っていっても、 以下のスクリプトでRequest.QueryStringする"YM"や"MOVE"が定義されているところが見当たりません。 環境変数?にもそのようなものは、無さそうなのですが。 この"YM"や"MOVE"はどのようなものと考えれば良いでしょうか? スクリプトなので上から順番に処理されていくと理解していたのですが、 そもそも間違いでしょうか? <% sYM = Request.QueryString("YM") If sYM = "" Then iYear = Year(Now()) iMonth = Month(Now()) Else iYear = Left(sYM,4) iMonth = Right(sYM,2) End If sMove = Request.QueryString("MOVE") If sMove <> "" Then If sMove = "Next" Then ix = 1 Else ix = -1 End If iTmp = DateSerial(iYear, iMonth + ix, 1) iYear = Year(iTmp) iMonth = Month(iTmp) End If iLastDay = Day(DateSerial(iYear, iMonth + 1, 1 - 1)) iDay = 1 - Weekday(DateSerial(iYear, iMonth, 1)) + 1 Response.Write "" Response.Write "" Response.Write "" sPrg = "calendar.asp?YM=" & iYear & Right("00" & iMonth, 2) Response.Write "" Response.Write "" Response.Write "" For x = 0 To 6 If x = 0 Then sCol = "#EECCCC" Else sCol = "#EEEEEE" End If Response.Write "" Next For y = 0 To 5 Response.Write"" For x = 0 To 6 If x = 0 Then sCol = "#FFCCCC" Else sCol = "WHITE" End If If Date() = DateSerial(iYear, iMonth, iDay) Then sCol = "#FFE6CC" fToday = True Else fToday = False End If If iDay > 0 Then Response.Write "" Else Response.Write "" End If iDay = iDay + 1 If iDay > iLastDay Then Exit For End If Next Response.Write "" If iDay > iLastDay Then Exit For End If Next Response.Write "

専門家に質問してみよう