• 締切済み

条件で抽出したデータを12件、1ページ毎に表示

SQLで抽出したデータを12件ずつ、1ページ毎に表示させたいのですが・・・ 次ページへデータの続きをそのまま表示させるようにしたいのですが、うまくできません。 どなたか分かる方がいらっしゃいましたら、是非ご教授ください。 SELECT~WHERE(条件)を入れると次ページをクリックしてもデータを引っ張っていくのは難しいのでしょうか? 検索条件を抽出し、sessionで作成してみたのですが、データを引っ張ることが出来ず、エラーになってしまいます。 前ページ(print2.asp)より検索条件により 例:住所(add1)→福島県 または 住所(add2)→福島県、住所(add3)→いわき市 これをsessionに格納。 ----------------------------- <% '================================================================ ' 初期設定 '================================================================ MaxLog = 12 RecCnt = Request.QueryString("recnum") MovPge = Request.QueryString("pgenum") If (RecCnt = "") Then DefCNT = 1 DefPge = 1 Else DefCNT = CInt(RecCnt) SecCNT = DefCNT - CInt(MaxLog) DefPge = CInt(MovPge) End If '================================================================ ' データベース接続 '================================================================ Set db=Server.CreateObject("ADODB.Connection") db.connectionstring=application("strCString") db.Open '================================================================ ' レコードセット生成 '================================================================ Set rec = Server.CreateObject("ADODB.Recordset") If session("add2") = "" or IsNull(session("add2")) Then SQLS = "SELECT * FROM T_add WHERE 住所1 = '" & session("add1") & "' order by 世帯番号" Else SQLS = "SELECT * FROM T_add WHERE 住所1 = '" & session("add2") & "' AND 住所2 = '" & session("add3") & "' order by 世帯番号" End If With rec .ActiveConnection = db .CursorType = 1 .LockType = 1 .Open SQLS, , , ,&H0001 AllRec = .RecordCount End With %> <FORM METHOD="POST" ACTION="print3.asp" NAME="myform"> <br> <table cellspacing="0" cellpadding="1" width=80% height=100%> <% '================================================================ ' レコード数取得 '================================================================ If (CLng(AllRec) > 0) Then rec.AbsolutePosition = DefCNT recount = 1 Do While not rec.EOF If recount <> Fix(recount/2)*2 Then %> <tr> <% End If %> <td nowrap>〒<%=left(rec("現郵便番号"),3) & "-" & right(rec("現郵便番号"),4)%><br> 市原市<%=rec("現居所1")%> <%=rec("現居所2")%><br><br> <center><%=rec("氏名")%> 様</center><p> </td> <% If recount = Fix(recount/2)*2 Then %> </tr> <% End If DefCNT = DefCNT + 1 recount = recount + 1 rec.MoveNext If DefCNT = (DefPge * MaxLog + 1) Then Exit Do Loop Else Response.Write "<FONT COLOR=#FF0000><B>該当する項目が見つかりませんでした!</B></FONT><P>" End If rec.Close %> </table> <br> <INPUT TYPE="hidden" NAME="cnt" VALUE="<%=recount%>"> <% '======================================================================= ' ページ移動設定 '======================================================================= If (DefPge = 1) And (AllRec <= MaxLog) Then 'PrevLink = "前ページ" 'IndxLink = "<A HREF='print3.asp'>トップページ</A>" NextLink = "次ページ" ElseIf (DefPge = 1) And (AllRec > MaxLog) Then Response.Write "<DIV ALIGN=right>" Response.Write "[<A HREF='print3?recnum=" & DefCNT & "&pgenum=" & DefPge + 1 & "'>次ページ</A>]" Response.Write "</DIV>" ElseIf (DefPge <> 1) And (AllRec <= DefPge * MaxLog) Then Response.Write "<DIV ALIGN=right>" Response.Write "[<A HREF='print3?recnum=" & SecCNT & "&pgenum=" & DefPge - 1 & "'>前ページ</A>]" Response.Write "</DIV>" ElseIf (DefPge <> 1) And (AllRec > DefPge * MaxLog) Then Response.Write "<DIV ALIGN=right>" Response.Write "[<A HREF='print3?recnum=" & SecCNT & "&pgenum=" & DefPge - 1 & "'>前ページ</A>|" Response.Write "<A HREF='print3?recnum=" & DefCNT & "&pgenum=" & DefPge + 1 & "'>次ページ</A>]" Response.Write "</DIV>" End If db.Close: Set db = Nothing %>

みんなの回答

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

ん??? >>SELECT~WHERE(条件)を入れると次ページをクリックしてもデータを引っ張っていくのは難しいのでしょうか? >>SQLS = "SELECT * FROM T_add WHERE 住所1 = '" & session("add1") & "' order by 世帯番号" >>SQLS = "SELECT * FROM T_add WHERE 住所1 = '" & session("add2") & "' AND 住所2 = '" & session("add3") & "' order by 世帯番号" 「ページ読み込むたびに、SQL発行して、該当する全データ取ってきてる」 SQL文(及びASP構成)見る以上、そうなってますよね。 >>SQLで抽出したデータを12件ずつ、1ページ毎に表示させたいのですが・・・ 決まってること。は、1ページに12件。 なわけですから、 ・SQL文で、●件目~●件目を取得する。 の処理を書くか ・ASP構文で、取得してきた全データの中から、●件目~●件目を表示する の処理を書くか のどっちかかと思いますよ。 1ページに何件表示するのか 今、何ページ目にいるのか あたりの情報が常に取得できてれば可能ですよね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

    「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"]'

  • 複数のランダムクイズの表示がうまくいきません・・・。

    以下のようなプログラムを作成しましたが、表示が思うようにいきません。。 本当なら複数の問題をランダムで5問ずつ表示したいのですが、すべて表示することができず、1問のみだったり、3問のみしか表示されなかったりとバラバラです。 記述方法が悪いのでしょうか?どなたか分かる方いらっしゃいましたらご教授お願いします。 ------------------------- <% accessdb="cityquiz" cn="DRIVER={Microsoft Access Driver (*.mdb)};" cn=cn & "DBQ=" & server.mappath(accessdb) set rs = Server.CreateObject("ADODB.Recordset") sql = "select * from quiz" rs.Open sql, cn, 1, 3 total_records=rs.recordcount randomize random_number=int(rnd*total_records)+1 rs.MoveFirst do while not rs.eof and counter <> random_number counter = counter + 1 if counter= random_number then response.write rs("問題") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "1'>" & rs("1択") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "2'>" & rs("2択") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "3'>" & rs("3択") & "<br>" response.write "<input type='radio' name='Q1' vakue='" & rs("ID") & "4'>" & rs("4択") & "<br>" response.write "<br>" end if counter2 = counter + 2 if counter2= random_number then response.write rs("問題") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "1'>" & rs("1択") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "2'>" & rs("2択") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "3'>" & rs("3択") & "<br>" response.write "<input type='radio' name='Q2' vakue='" & rs("ID") & "4'>" & rs("4択") & "<br>" response.write "<br>" end if counter3 = counter + 3 if counter3= random_number then response.write rs("問題") & "(3)<br>" & counter3 response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "1'>" & rs("1択") & "<br>" response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "2'>" & rs("2択") & "<br>" response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "3'>" & rs("3択") & "<br>" response.write "<input type='radio' name='Q3' vakue='" & rs("ID") & "4'>" & rs("4択") & "<br>" response.write "<br>" end if ~略~ rs.movenext loop %>

  • シャッフルしたデータを正確に引き継ぎたい

    試験問題のプログラムを作っています。 MySQLに格納されている問題文と選択肢をシャッフルして表示し、ユーザーからは見えない選択肢aを選ぶと正解で得点が1カウントされるものです。 問題用紙のページではきちんと問題と選択肢が表示されるのですが、セッションを使い採点のページに進むとMySQLに入っている問題文と選択肢が大量に表示されてしまいました。 ユーザーが採点のページに進むとどの問題を間違えたのか確認できるように問題用紙のページと同じように表示させたいのですが、これはどのようにコードを書けばよいのでしょうか? どうぞよろしくお願い致します。 //問題用紙のページ <?php session_start(); ?> <form method="post" action="grading.php"> <?php $arr = array(); while ($row = mysqli_fetch_array($result)){ $arr[] = $row; } shuffle($arr); $cnt = 0; foreach($arr as $row){ if($cnt >= 3){break;} print $row['question']; print "<BR>"; $choices = array(); $choices['a'] = "<INPUT type=radio name=radi_".$cnt." value=a>".$row['choices_a']."<BR>"; $choices['b'] = "<INPUT type=radio name=radi_".$cnt." value=b>".$row['choices_b']."<BR>"; shuffle($choices); foreach($choices as $val){ print $val; } session_register('sesdata_q'); session_register('sesdata_a'); session_register('sesdata_b'); $_SESSION['sesdata_q'][] = $row['question']; $_SESSION['sesdata_a'][] = $row['choices_a']; $_SESSION['sesdata_b'][] = $row['choices_b']; print "<BR>"; $cnt++; } ?> <INPUT type="submit" value=" 採点 " name="grading"> //採点のページ <?php session_start(); $score = 0; $answer = $_POST['radi_0']; if($answer == 'a'){ $score++; } $answer = $_POST['radi_1']; if($answer == 'a'){ $score++; }print "3問中" . $score . "問正解"; print "<br>"; foreach($_SESSION['sesdata_q'] as $val){ print $val."<BR><BR>"; } foreach($_SESSION['sesdata_a'] as $val){ print $val."<BR><BR>"; } foreach($_SESSION['sesdata_b'] as $val){ print $val."<BR><BR>"; } ?>

    • ベストアンサー
    • PHP
  • DBを使用しないで条件にマッチしたもののみページング

    以前DBを使用しないページングについてお教えいただいた者です。 少し改良して降順ソートを出来るようになったのですが、 リスト表示の際にある条件に一致したもののみを表示する場合の やり方が分かりません。。。 現在は以下のようになっています。 ■sample.csv no0001,あああああ,20050101,ON no0002,いいいいい,20050102,OFF 略) no0020,ととととと,20050120,OFF ■index.php (800字オーバーしてしまうので、省略しています。) //ファイルを配列に格納 $rec = file("sample.csv"); //レコード数を取得して、最後尾の行番号を取得 $rec_number = sizeof($rec) -1; //ページ範囲を出力 for ( $i = $rec_number-$page*$max; $i > $rec_number-$page*$max-$max; $i -- ) { $data = explode(",","$rec[$i]"); if ($data[3]==("ON") && $data[2]<=date("Ymd")) { print $data[0].("<br>"); print $data[1].("<br>"); print $data[2].("<br><br>\n"); } } print "<a href=\"?page=".($page+1)."\">次のページへ</a>\n"; ?> CSVの各行の[3]が 「ON」となっていれば表示し、 「OFF」となっていれば表示しないようにし、 また、[2]が 今日以降の日付であれば表示しないようにしたいのですが、 for文の中に上記のようなif文を使ってしまうとオカシナことに なってしまいます。 (no0020が抜けただけで1ページ目に9件しか表示されません。本当は no0020が抜けたので、no0010までの10件を表示させたいのです。) 根本的な部分が間違っているような気がするのですが、 どのような考え方で作れば良いのか分かりません。 また皆様のお力をお貸しください。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • セッション

    セッションについて教えて下さい。 指定の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、パスワードをセッション変数にいれ、各ページで認証すると言う事をやりたいのですが、うまくいきません。 どこがわるいか、お教え下さい。 ※以前にも似たような質問をしているのですが、改善されずお手上げです。

  • 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>

  • ページを一度更新しないとSession値が渡らない。

    ASPで初めてプログラムしています。 A.asp → Err.inc → Err.asp というように、エラーがあったらErr.aspに 遷移するようにしているのですが、 Err.aspで更新ボタンを押さないとSession値が表示されません。 具体的に *** Err.inc *** <% Sub COMM_USER_ERROR(strMsg)   session("ErrMsg") = strMsg   'システムエラー表示   Response.Redirect("Err.asp")   Response.End End Sub %> *** A.asp *** If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then   Call COMM_USER_ERROR("不正なアクセスをしました") End If *** Err.asp *** <HTML>   (中略)   <%=session("ErrMsg")%> どうしたらよいか全くわかりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。

  • セレクトしたデータを更新させるにはどうしたらよろしいのでしょうか?

    更新されません。 セレクトしたデータをそのまま更新させようとしているからいけないのでしょうか? <% Dim DB,Rs,Cmd Set DB = Server.createobject("ADODB.Connection") On error Resume Next DB.open "mysql" DB.BeginTrans Set Cmd=Server.createobject("ADODB.command") Cmd.activeconnection=db Cmd.commandtext="select * from stb where id =1" Set Rs = Cmd.Execute i=cint(1) j="ADSL" Do until Rs.eof Rs("id"),value= i Rs("name").value= j Rs.update If DB.Errors.Count >0 then DB.Rollbacktrans response.write "エラー" for idx = 0 to 2 Response.write db.errors(idx).Description & "<br>" next else DB.commitTrans response.write "データが登録されました。" end if Rs.movenext Loop Rs.close DB.close set Cmd = Nothing set Rs = Nothing set db = Nothing %>

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

    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> 忙しいところすいませんが、ご教授願います。 よろしくお願いします。

  • サーバーからクライアントのMACアドレスを取得

    ASPを使用して、サーバーからクライアント側の ネット情報などを取得したいのですが、できるのでしょうか? 今現在WMIを使用してクライアントからサーバーのMACアドレスを 取得できているのですが、逆の事もできるのではと考えました。 <HTML> <HEAD> <TITLE>MACアドレスの表示</TITLE> </HEAD> <BODY> <Form method="post" name="form1"> <input type="hidden" name="h_MACaddress" value="<%= MACA %>"> <% Dim MACA ConnectString = "winmgmts:{impersonationLevel=impersonate}!root\cimv2" Query = "SELECT MACaddress " Query = Query & " FROM Win32_NetworkAdapterConfiguration" Query = Query & " WHERE IPEnabled=TRUE" On Error Resume Next Set IPConfigSet = GetObject( ConnectString ).ExecQuery( Query ) if Err <> 0 Then 'エラー発生表示 if Err.Number = -2147217405 then Response.Write "Error 0x80041003: Access Denied: " Response.Write "Check permissions and file security for this ASP file." Response.Write "<BR>" else Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if end if For each IPConfig in IPConfigSet 'MACアドレス取得処理 Response.Write("MACADDRESS: ") Response.Write(IPConfig.MACaddress & "<br>") MACA = IPConfig.MACaddress Next 'Response.write("aaa:" & MACA & "<BR>") 'MACアドレスの変数 Response.Write "<BR>" if Err <> 0 Then 'エラー発生表示 Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if %> </BODY> </HTML> プログラムはこのようなものを使用しております。 できるできないだけでも知りたいので、 分かる方いらっしゃいましたら教えていただけますでしょうか? 宜しく御願い致します。