• 締切済み

submitを押すといちいちページ最上部にいってしまい困っています

いま勉強のページを、携帯からも、PCからも見れるように、 javaスクリプトを使わずに作っています。 作りたいと思っているものは、 1.確認ページ  問題を書いて、その横にボタンを設置し、クリックすると答えが表示  されるといったもの。 2.問題ページ  1.の確認ページをベースとし、問題の下にテキストボックスを置き、  テキストに記述したものをpostしphpでmysqlから取得した答えと照合 し正解か否かを表示するもの という感じです。 今1を作っており、問題とボタンを設置し、クリックしたら答えが表示されるようにはなったのですが、 答えを見るボタンをクリックするたびに、ページ最上部に移動してしまい困っています。 phpでpostしたときにはページ最上部へ移動してしまうのでしょうか? どうしたらいいのか教えてください。 またソースが非常に汚く、 問題の追加ごとに手を加える部分が多くて面倒です。 なにかいい案があれば教えてください。 <?php if (isset($_POST["m"])) { $my_row = mysql_query("SELECT * FROM hou WHERE id='m'",$mysql_con); $m = mysql_fetch_array($my_row); $_SESSION["m"] = $m["free"]; } if (isset($_POST["m_del"])) { $_SESSION["m"] =array(); } if (empty($_SESSION["m"])) { print "<br />"; } else { echo $_SESSION["m"]; }?> <form action="000031.php" method="post"> <input name="m" type="submit" value="show"/> <input name="m_del" type="submit" value="隠す" /> </form>

  • PHP
  • 回答数1
  • ありがとう数5

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>phpでpostしたときにはページ最上部へ移動してしまうのでしょうか? いや、考え方がちがいます。 おなじページであっても理論上はあくまでも別ページに移動しているのです。 携帯でなければAjaxという手もあるのですが・・・ 場合によっては、idやnameをアンカーではっておいて actionにハッシュ付きで移動場所をしていすれば、先頭にいくのは なんとか避けられます。といっても今の画面をキープしたまま ということは難しいですけど <a id="hoge" name="hoge">hoge</a> <form action="自分#hoge"> ・・・・ </form>

nk0717
質問者

お礼

>おなじページであっても理論上はあくまでも別ページに移動しているのです。 とてもよくわかりました。 postなどをなんとなく使っているからこんな事態におちいってしまったわけですね。情けないです。 この知識を足がかりにいろいろがんばってみます。 アンカーでもつけてみます。 本当にありがとうございました。

関連するQ&A

  • $_SESSION['submit']の自動生成

    <form>タグの中にあるsubmitボタンをクリックすると、post先の.phpに、$_SESSION['submit']変数が自動生成されると聞いたので、テストプログラムを作ってみましたが、自動生成されません。 具体的には、test02.phpのprint_r($_SESSION);において、何も表示されません。 つまり、$_SESSION['submit']が作られていません。 詳しい方、ご教授をおねがいします。 test01.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test01</title> </head> <body> <?php print <<< EOH1 <form action="test02.php" method="post" name="form1"> <table> <tr> <td>会社名</td> <td> <input type="text" name="company" size="30" value="東京電気株式会社"> </td> </tr> </table> <br> <input type="submit" value="登録" name="submit">&nbsp;<input type="reset"> </form> EOH1; ?> </body> </html> test02.phpのソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <?php session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <title>test02</title> </head> <body> <?php print_r($_SESSION); if(isset($_SESSION['submit'])) { dispRequest(); } if(isset($_SESSION['submit'])) { unset($_SESSION['submit']); session_unset(); session_write_close(); } function dispRequest() { if (isset($_REQUEST['company'])) { echo "会社名:", $_REQUEST['company'], "<br>\n"; } else { echo "companyが未定義<br>\n"; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • php5.2.9に変更後に不具合について

    php初心者です。 レンタルサバ―なのですが、php4.4.7からphp5.2.9に変更後うまくいかなくて困っています。 header("Location: http://○○○/top.php");がうまく飛びません。 ページを実行すると真っ白の画面になってしまいます。 以前のバージョンですと、問題なく動いていました。 下記を見てください。 どうしたらよいのでしょうか? <?php mysql_query('SET NAMES ujis'); require_once( "function.php" ); session_start(); if ( $_REQUEST[ "SUBMIT" ] != "" ) { if ( ( $_POST[ "VALUE_ID" ] != "" ) && ( $_POST[ "VALUE_PW" ] != "" ) ) { $k_id = $_POST[ "VALUE_ID" ]; $k_pw = $_POST[ "VALUE_PW" ]; $con=mysql_connect('aaa','aaa','aaa') or die("MySQL接続エラー: ".mysql_error()); mysql_select_db('aaa',$con); $sql= "select * from あああ where id='$k_id' and pw='$k_pw'"; $result=mysql_query($sql); $rows=mysql_num_rows($result); if($rows==1){ while($row=mysql_fetch_array($result)){ $d_id = $row["id"]; $d_pw = $row["pw"]; } } } } if ( !isset( $_SESSION[ "D_ID" ] ) ) { $_SESSION[ "D_ID" ] = ""; } $_SESSION[ "D_ID" ] = $d_id; if ( !isset( $_SESSION[ "D_PW" ] ) ) { $_SESSION[ "D_PW" ] = ""; } $_SESSION[ "D_PW" ] = $d_pw; if ( !isset( $_SESSION[ "K_ID" ] ) ) { $_SESSION[ "K_ID" ] = ""; } $_SESSION[ "K_ID" ] = $k_id; if ( !isset( $_SESSION[ "K_PW" ] ) ) { $_SESSION[ "K_PW" ] = ""; } $_SESSION[ "K_PW" ] = $k_pw; if ( ( $_SESSION[ "D_ID" ] == "" ) || ( $_SESSION[ "D_PW" ] == "" ) ) { print( "<br><center>○○○○○○○○<br>" ); print( "<br>○○○○○○○○○○○○○○○○<br>" ); print( "<br>○○○○○○○○<br>" ); print( "<br><a href=\"index.html\">[ BACK ]</a></center>" ); exit(); }elseif( CheckID_PW( $_SESSION[ "K_ID" ], $_SESSION[ "K_PW" ], $_SESSION[ "D_ID" ], $_SESSION[ "D_PW" ] ) == false ) { print( "<br><center>○○○○○○○○<br>" ); print( "<br><center>○○○○○○○○○○○○○○○○<br>" ); print( "<br><center>○○○○○○○○" ); print( "<br><br><a href=\"index.html\">[ BACK ]</a></center></body>" ); } else {header("Location: http://○○○/top.php");} ?>

    • 締切済み
    • PHP
  • 2つのsubmitボタンがあるときに

    最初に書いたボタンが優先され 単にリターンキーを押したときに 最初のsubmitボタンが反応します。 後のsubmitボタンが反応するようにするにはどうしたらいいのでしょうか? つまり下記のPHPをブラウザに表示させているときにリターンキーを押したときには submit2 is pushed. と表示させるにはどうしたらいいのでしょうか? <form method="post" action="<?=$PHP_SELF?>"> <input type="text"/><br/> <input type="checkbox"/><br/> <input type="radio" name="radio"/><br/> <input type="submit" name="submit" value="submit1" tabindex=-1/><br/> <input type="submit" name="submit" value="submit2" tabindex=1/><br/> </form> <?php if(isset($_POST['submit'])) { echo$_POST['submit'].' is pushed.'; } ?>

    • ベストアンサー
    • PHP
  • phpがうまく動きません。

    phpで4択のクイズを作りたいのですが 正解のラジオボタンを選んでもカウントされないのと 答え合わせを押すと正解だった箇所を赤く表示したいのですがなんて書けばよいのか どこにそのコードを入れるのかよくわかりません <状態> ・5つのデータがmyadminに保存されています ・データベースの内容は表示されます。 ・答え合わせを押すと正解のラジオボタンを選んだ数が表示されるようにしたいです ・保存ボタンは閉じても答えを保存するためにあります ・q_noは8ケタ固定であり、左から5つ目までは固定であと3桁は999問入れられるよう設定してあります ・q_ansはデータベースに答えの値(1~4)が入れてあります ・データベース名はproblemです <省略> $res_set = mysql_query($sql); while ($row=mysql_fetch_array($res_set)){ ?> <form method="POST" action="H2102.php"> <?php echo $row['q_no'] . " "; ?> <br> <?php echo $row['q_text'] . " "; ?><br><br> <br> <?php echo "ア"; ?> <input type="radio" name="q_ans" value="1"> <?php echo $row['q_point1'] . " "; ?> <br><br><br> <?php echo "イ"; ?> <input type="radio" name="q_ans" value="2"> <?php echo $row['q_point2'] . " "; ?> <br> <br><br> <?php echo "ウ"; ?> <input type="radio" name="q_ans" value="3"> <?php echo $row['q_point3'] . " "; ?> <br><br><br> <?php echo "エ"; ?> <input type="radio" name="q_ans" value="4"> <?php echo $row['q_point4'] . " "; ?> <br><br><br> <br> <input type = "submit" name="save" value="保存"> <?php if(isset($_POST['save'])){ $_SESSION['save'] = $_POST['q_ans']; //保存すると選んだ回答を保存 } ?> <?php } ?> </form> <form method="POST" action="H2102.php"> <input type = "submit" name="ans" value="答え合わせ"> <?php //正解かどうかをチェック if(isset($_POST['ans'])){ $a = $_SESSION['a']; if($row['q_no'] == $_POST['q_no'] && $_POST['q_ans'] || $_SESSION['save'] == $row['q_ans'] ){ $_SESSION['a'] = $a + 1; //q_noが一致かつ保存した値または選んだ解答(値)が一致していれば1問につき1つカウントする $a = $_SESSION['a']; } echo $a; //カウントされているかをチェック } ?> <input type = "submit" name="del" value="カウント初期化"> <?php if(isset($_POST['del'])){ session_unset(); } ?> </form> <br> <?php } ?> 足りない情報があれば追記します

    • 締切済み
    • PHP
  • 会員専用のログインページを作っているのですが、分からない事があります。

    会員専用のログインページを作っているのですが、分からない事があります。 1.フォームにIDとPASSWORDを入力 2.login.phpで会員データーベースに入りIDとPASSWORDが存在すれば会員専用ページに移動 ----form.html---- <form action="" method="post"> <table> <tr> <td>あなたのID:</td> <td><input type="text" name="usrid" size="15" value="<?php echo htmlspecialchars($_POST['usrid']); ?>" /></td> </tr> <tr> <td>パスワード:</td> <td><input type="password" name="usrpw" size="16" value="<?php echo htmlspecialchars($_POST['usrpw']); ?>" /></td> </tr> <tr> <td><input type="submit" value="ログイン" /></td><td> </td> </table> </form> ----login.php---- //MYSQLに接続 require_once('sql.php'); //セッションを開始します。 session_start(); $_SESSION["usrid"] = ""; //自分のID $_SESSION["usrpw"] = ""; //自分のPASS //変数の初期化 $usrid = ''; //ユーザーID $usrpw = ''; //パスワード //POSTされたとき if ($_SERVER["REQUEST_METHOD"]=="POST") { //ログインボタンが押されたとき if (isset($_POST["submit"])) { //POSTされたデータを取得 $usrid = htmlspecialchars($_POST["usrid"], ENT_QUOTES); //ID $usrpw = htmlspecialchars($_POST["usrpw"], ENT_QUOTES); //パスワード //入力内容チェック if (strlen($usrid)==0){$error = "ユーザIDが入力されていません";} if (strlen($usrpw)==0){$error = "パスワードが入力されていません";} //エラーがない場合 if (strlen($error)==0){ //meiboテーブルをチェック $mysql->query("SELECT usrid,usrpw FROM meibo"); if ($mysql->rows()>0){ //行が存在した場合 $row = $mysql->fetch(); if ($row["usrpw"] == $usrpw){ $_SESSION["usrid"] = $usrid; header("Location: http://$host/php/page.php"); exit; } } } $error = "ユーザIDかパスワードに誤りがあります"; } } 教科書を参考に作ったコードです。 フォームにIDとPASSを入力後ログインボタンを押してもそのままフォーム画面のままになってしまいます。 data.txtだと比較的簡単に出来たのですがMYSQLを使いだしたとたん分からなくなってしまいました。 どなたか親切な方、お教えください。

    • ベストアンサー
    • PHP
  • PHP ログインシステムについて

    お世話になります 現在ローカルで下記PHPのテストを行っています PHP初心者の為、セキュリティ面並びに不具合が心配で書き込みさせて頂きました 恐れ入りますがおかしな点がないかチェックして頂けませんでしょうか 宜しくお願いいたします データベースのバージョンはMySQL 5.5です ***************************************** <?php session_start(); $error_message = ""; if (isset($_POST["login"])) { $id = htmlspecialchars($_POST['id']); $password = htmlspecialchars(base64_encode(pack('H*', sha1($_POST['password'])))); $_SESSION['id'] = $_POST['id']; $_SESSION['password'] = $_POST['password']; $db = mysql_connect("***","***","***"); if (!$db) { die('接続失敗です。'.mysql_error()); } mysql_set_charset("utf8"); $db_selected = mysql_select_db("***", $db); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } $result = mysql_query("SELECT * FROM ***"); if (!$result) { die('クエリーが失敗しました。'.mysql_error()); } function x($result) { return mysql_real_escape_string($result); } while ($row = mysql_fetch_assoc($result)) { if($id == $row['id'] && $password == $row['password']){ header("Location:./instance.php"); } } $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_destroy(); $error_message = "ユーザ名もしくはパスワードが違っています。"; } ?> <html> <head><title>ログイン</title> <meta http-equiv=Content-Type content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> </head> <body> <?php if ($error_message) { print '<font color="red">'.$error_message.'</font>'; } ?> <form action="login.php" method="post"> ID:<input type="text" name="id"><br /> PASS:<input type="password" name="password"><br /> <input type="submit" name=login value="認証"> </form> </body> </html>

    • 締切済み
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • 携帯のCookie…

    今、携帯サイトをつくっているのですが… エラーで大変困っております。携帯のCookieが問題ではないかと思っているのですが、何卒アドバイスをお願い致します。 ■症状 ローカル環境では問題なく動いていたのに、実際の携帯(PHPのバージョン5.25、動作確認はauとソフトバンクの最近の機種、おそらくCookieが使える)でテストすると… 年齢入力→送信ボタンを押す→(少しサーバが動いた後)→入力が消えてもう一度同じページに→めげずにもう一度入力送信→今度はうまく行って次のページへ。 ■コードの大まかな流れ 年齢をテキストで入力してもらい、フォームでPOST送信、action=PHPSELFで一旦戻り、送信ボタン(Submit値)を押していれば、入力にエラーがないか確認、エラーがあれば表示、なければSessionで値を受け渡し、次ページへ。 ■実コード <?php //エラー処理 if (isset($_POST["submit"])) { if(isset($_POST["age"])) { $age = mb_convert_kana($_POST["age"], "a", "shift_jis"); $error = array(); if (is_numeric($age) == false) { $error[] = "年齢は数字で入力してください!"; } elseif ($age < 1 || $age > 120) { $error[] = "年齢は1~120才の範囲で入力してください!"; } if(!count($error)){ session_start(); $_SESSION['age'] = $age; header("Location: http://~.php"); exit; }} ?> <html> <head> 以下本文、フォーム

    • 締切済み
    • PHP
  • PHPでテスト形式のプログラムを作ってます

    ラジオボタンA,B,C,Dを使って選択し、NEXTボタンを押したら次の問題を表示し、回答をSESSIONの配列に書き込むプログラムを作っています。 クリックしたときにprint_r($_SESSION)で配列を表示するようにしたのですが、配列の番号と中身がそのときクリックしたときの一つしか表示されないので全部きちんと入っているのか分かりません。 きちんとSESSIONに保存されているのでしょうか? <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <p>&nbsp;</p> <p> <?php $qno=$_POST["next"]; if($qno==null){ $qno=1; }else{ $qno++; } ?> </p> <p>&nbsp; </p> <form method="post" action="session.php"> <input TYPE="radio" NAME="answer" VALUE="1" CHECKED>ア <input TYPE="radio" NAME="answer" VALUE="2">イ <input TYPE="radio" NAME="answer" VALUE="3" CHECKED>ウ <input TYPE="radio" NAME="answer" VALUE="4">エ <input type="submit" name="submit" value="Next"> <input type="button" value="最初から" onClick="location.href='session.php'"> <input type="button" value="Back" onClick="history.back()"> <input type="hidden" name="next" value="<?php print $qno?>"> </form> <TEXTAREA readonly cols="100" rows="20" name="e"> <? mb_language("uni"); mb_internal_encoding("utf-8"); //内部文字コードを変更 mb_http_input("auto"); mb_http_output("utf-8"); $db=mysql_connect("localhost","接続ID","パスワード"); mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定 mysql_select_db("データベース名"); //データベースに接続 if (!$con = mysql_connect("localhost", "接続ID", "パスワード")) { echo "接続失敗" ;   exit ; } //データベースを選択 if (!mysql_select_db("データベース名", $con)) { echo "データベース選択失敗" ;   exit ; } $sikenbango=111; if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$qno'",$con)) { echo "SQL失敗<BR>" ;   exit ; } //検索した結果を全部表示 while ($row = mysql_fetch_array($res)) { echo $row["mondai"]; echo "<BR>" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </textarea> <?php session_start(); if (!isset($_SESSION[$mondaibango])) { $_SESSION[$mondaibango] = array(); } if (isset($_POST['submit'])) { $qno = intval($_POST['next']); if (($qno >= 1)and($qno <=80)) { $_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加 // データベースへも保存したければここに記述 print_r($_SESSION); } } else { $qno = 0; } if ($qno == 80) { // 全問題終了時の処理 } else { $qno=$_POST["next"]; if($qno==null){ $qno=1; }else{ $qno++; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • シャッフルしたデータを正確に引き継ぎたい

    試験問題のプログラムを作っています。 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

専門家に質問してみよう