• ベストアンサー

PHPで、ボタンを押すと同じページに表示するには?

PHPとDBを学習し始めて半月です。 わからないところができましたので質問いたします。 PHPでデータベースからデータを取り出し、表示するプログラムを作っています。 データベースには、「ID」と「PASS」、「時刻1」、「時刻2」が数人分登録されています。 PHPで、「渡されたIDとPASSのレコードにある時刻1と時刻2を表示する関数time()」をつくり、テストして正しく動作しました。 フォームからIDとPASSを送信してログインし、main.phpに入るところまで作りました。 main.phpで、「時刻を表示」というボタンを押すと、そのボタンの下に時刻1と時刻2を表示するようなプログラムを作りたいのですが、仕組みをどうすればいいのか悩んでいます。 主な疑問は、 ・ボタンのactionは何にすればいいのか ・同一ページに表示する方法 ・ボタンを押す~引数を渡す~関数を実行する、までの流れ です。 分かりにくかったら申し訳ありません。 よろしくお願いします。

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

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

  • ベストアンサー
  • mono05
  • ベストアンサー率100% (1/1)
回答No.3

同一ページとは 画面遷移してもいいんですよね? だとしたらactionをmain.phpにして つまり自分自身を呼び出します ちなみにphpないぞう関数にもtime()があるので 変えたほうがいいかもです。 端的にかくとこんな感じですかね? ------------------------------ <?php if($_REQUEST['disp_time']) { $data = disp_time(); } //じさく関数 function disp_time() { return array('time1'=>'はちじ','time2'=>'さんじ'); } ?> <html> <body> <form action="main.php"> <input type="submit" name="disp_time" value="じかんひょうじ"> </form> <?if($_REQUEST['display_time']):?> じかん1:<?=$data['time1']?><br> じかん2:<?=$data['time2']?><br> <?endif;?> </body> </html> ------------------------------

maa_rico
質問者

お礼

わかりやすい回答ありがとうございました。 自作関数の名前を変えて、教えていただいた例を参考にコーディングしてみます。

その他の回答 (2)

  • t_netbug
  • ベストアンサー率34% (15/44)
回答No.2

スイマセン…。下の$timeは気にしないでください…。 ソースをいきなり書いてしまうのもどうかと思って消した時に、一緒に消し忘れた変数です。 $timeは表示したいデータが格納されている変数だと思って下さい( >_<)

maa_rico
質問者

補足

回答ありがとうございました。 質問にミスがありました。自作関数time()は、 「渡されたIDとPASSのレコードにある時刻1と時刻2を表示する関数time()」 ↓ 、「渡されたIDとPASSのレコードにある時刻1と時刻2を返す関数time()」 一人あたり何件もデータがある仕様なので、返ってくるデータは配列です。 今更で申し訳ないです。 >if( ! is_null($_POST['a2'])){ //時刻を表示をクリックするとa2に>値が入ってくる これはa2に関数の結果が入るということでしょうか? >//日付と時刻を表示する処理 ここで自作関数time()を実行でしょうか?

  • t_netbug
  • ベストアンサー率34% (15/44)
回答No.1

actionはsubmitで良いと思います。 以下におおざっぱですが書いてみます。 2種類?のsubmitボタンにname属性を付加 ex) <input name="a1" type="submit" value="login"> <input name="a2" type="submit" value="時刻を表示"> php側では if( ! is_null($_POST['a2'])){ //時刻を表示をクリックするとa2に値が入ってくる //日付と時刻を表示する処理 //表示したいデータを変数に格納 } あとは表示したい個所に$timeを記述してあげるだけだと思います。

関連するQ&A

  • PHP+mySQL認証画面

    サーバーの引っ越しで新しいサーバーにてプログラムの動作確認を行っています。 管理者パネルに入るのに、PHPで作成した認証プログラムでログインしようとすると、入力しても何度も聞いてきて入れません。 旧 MySQL5.0.22   phpMyAdmin2.8.2.4 新 MySQL5.1.69 phpMyAdmin3.5.8.1  IDとパスワードはデータベースで設定。 管理者パネルで変更できるようになっている。 $sv = "**"; $dbname = "**"; $user = "**"; $pass = "**"; ログイン認証 //データベースに接続する $conn = mysql_connect($sv,$user,$pass) or die("接続エラー"); mysql_select_db($dbname) or die("データーベース接続エラー"); $sql = "SELECT id, pass FROM pass_t WHERE pno=1"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $db_user_id=$row['id']; $db_password=$row['pass']; } if(!isset($_SERVER["PHP_AUTH_USER"]) || $_SERVER["PHP_AUTH_USER"] != "$db_user_id" || $_SERVER["PHP_AUTH_PW"] != "$db_password") { header("WWW-Authenticate: Basic realm=\"login\""); header('HTTP/1.0 401 Unauthorized'); echo "ユーザー名またはパスワードが間違っています。<br>"; echo "もう一度はじめからやり直してください。"; exit; } 細々変えて試してみましたが駄目でした。 まだまだわからないことだらけの初心者なので、どうにもならずで 解決策がありましたらぜひ教えて頂けますと幸いです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • ボタンの表示/非表示

    phpとSQLiteにてデーターベース入力画面を作っています。 ユーザーidに権限の有無をつけて 権限の付与されたidの人だけ「削除」というボタンを表示し、 データ削除処理を行い、 もし権限の付与されていない人が閲覧した場合は、ボタンが非表示になっているという画面を作りたいと思っています。 何かいいアイデアはありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの関数の動き方が分かりません。

    PHPの関数の動き方が分かりません。 Wordpressというブログシステムを使っていますが、 問題が発生しております。 (メニューが2重表示される,関数の2重呼び出しはないことを確認しています。) http://okwave.jp/qa/q5988841.html 関数その物、もしくはデータベースの不具合を疑っておりますが、 以下の関数のPHPコードの読み方が分かりません。(プログラム自体は経験あるので、読み方が分かれば障害がどこか、ある程度判別できると思います。) function get_constructor_menu($before = '', $after = '') { global $main; $main->getMenu($before, $after); } ご存じの方教えていただけませんでしょうか?

    • 締切済み
    • CSS
  • PHPでどのようにして引数を取得すればいいのでしょうか?

    hoge.php?hogeのように?の後にある引数をPHPでどのように取得すればいいのでしょうか? 又、hoge.php?id=oshiete&pass=123の場合、oshieteとpassのみを取得させる場合はどうすればいいでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQL mysql_connectのエラー

    PHP初心者なのですが、 PHPを使用して外部ホストのMySQLデータベースから データを取り出すプログラムを開発しています。 mysql_connect関数でデータベースに接続する段階で 内部エラーとなってしまいます。 プログラムは以下のようなものです。 $url = "000.000.00.00";//外部ホストのアドレスです $user = "username"; $pass = "password"; $db = "databasename"; $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); ホストアドレスやユーザー名、パスワードは 以前VisualBasic+ODBC+MySQLでデータを読み込んでいたときに 使用していたものなので、間違いはないと思います。 非常に初歩的な質問で申し訳ありませんが、 非常に困っております。 ご助言よろしくお願いします。

    • 締切済み
    • PHP
  • PHPプログラムの呼出

    PHPのプログラムの中で、別のPHPプログラムを自動的に呼び出し、引数も渡したいのですが、その方法を教えてください。 関数system()では、戻り値しかないようなので、どの関数を使えばいいのでしょうか? また、呼び出された方(子プログラム)の中で、その引数を参照する方法も教えてください。

    • 締切済み
    • PHP
  • PHPでツリー表記したい

    phpで掲示板を作ろうとしていまして、DBから取ったデータを木構造にしてツリー表示させたいです。 親のparent_idはnull, 子は親のidになります。 自己結合させてみたり、再帰処理を試そうとしているのですが自分のphpスキルが未熟で巧い実装ができません。表示方法を教えていただければと思います。 ↓理想です 親レコード1 └子レコード5 └子レコード4 └子レコード3 └子レコード2 └子レコード1

    • 締切済み
    • PHP
  • MySQL, PHP をインストール後、データベースにアクセスできません。

    自宅で使っている Windows Vista に ・Apache 2.2.8 ・PHP 5.2.6 ・MySQL 5.0.45 ・PHPMyAdmin 2.11.4 をインストールしました。 それぞれがインストールされたことは確認でき、 PHPMyAdmin でテーブルを作成、インポートなども出来たのですが、 PHP からデータベースにアクセスできずに困っています。 phpinfo(); などは表示されるのですが、 いざデータベースにアクセスしようとすると出来ず、PHPのエラーも表示されません。 $host = 'localhost'; $db_name = 'hoge'; $user = 'root'; $pass = '***'; $con = mysql_connect($host, $user, $pass) or die ("cannot connect DB"); mysql_select_db($db_name,$con) or die ("cannot select DB"); という記述以降に書かれた部分は実行されず、それ以前の部分のみ表示されます。 error_reporting(E_ALL); を記述していても何も表示されないため、原因すら分かりません。 何か心当たりはありますでしょうか?

    • ベストアンサー
    • PHP
  • phpのsessionとcookieについて

    質問は以下に2つです。 プログラムの説明は、pass,idから認証を行い、sessionidを発行します。二度目の以降はsessioidから認証します。 sidpost.phpからpostでIDとパスワードを入力させます。 データベースはid, pass, sidの3つのカラムがあります。 <?PHP require_once'DB.php'; session_name("sid"); session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $id = $_POST['id']; $pass =$_POST['pass']; $cookie = $_COOKIE['sid']; $sid = session_id(); //データベース参照 //プレースホルダーを使用 //id からpassを参照する //cookie から sidを参照する $data=$sth->fetchRow(DB_FETCHMODE_ASSOC);//参照したデータを$dataの連想配列に格納 //sid保存のプレースホルダー $sth2 = $dbh->prepare('UPDATE accountid SET sid=? WHERE id=? AND pass=?'); //cookieが保存されていない場合 if(!isset($cookie) && isset($pass) && isset($id)){ //idとpassから認証 if($pass === $data['pass']){ $sth2 = $dbh->execute($sth2, array($sid, $id, $pass)); echo "初めてのログインsid登録"; } //sidがある場合cookieとデータベースのsidを比較 }else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } //それ以外は入力フォームにリダイレクト }else{ header("location: ./sidpost.php?error=error"); } $dbh->disconnect(); ?> </body> </html> 上のようなセッション管理のプログラムを書きました。 質問は2つありまして、 ・1つめは、通常セッション管理を行う際の、条件はどのようにするのが一般的ですか? IDとパスワードがデータベースと一致する場合としない場合の2通り、cookieがある場合、ない場合の2通り、もしcookieがある場合は、データベースの値と一致する場合としない場合の2通りが考えられます。一番最適な条件文はどのようにすればよいでしょうか? またその処理はどのようにすればよいのでしょうか。 例えばcookieがあり、データベースと一致しない場合、$_SESSIONの初期化、setcookieでクッキーの削除、session_destroy()するなど。。。なにかよくわからなくなってしまいました。 ・二つ目は、 上のプログラムではじめsession_name('sid')およびsession_start()を宣言し、クライアントとサーバに$sid=session_idを発行しています。なので、$_COOKIE['sid'];の値には session_id()($sid)になっているはずです。 下のほうで、セッションの管理を行う際、 //クッキーがある場合 else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } クッキーがあり、データベースと一致しない場合に、sessionおよび、cookieの破棄をしています。この前後でechoをもちいて$_COOKIE['sid']の値を出力すると、 破棄するの前のechoでクッキーが表示されず、 破棄したあとのechoでクッキーが表示されました。 なぜこのような結果になるのですか、逆では?と思いました。

    • 締切済み
    • PHP
  • phpによるデータベース操作について(MySQL)

    http://www.yc.tcu.ac.jp/~yamada/doc/mysql/win/0602.html のサイトを参考に以下のような「データベースの内容を表示させる」プログラムを書いたのですが、うまく表示されません。(webブラウザで確認したところまっさらなページで何も表示されません) ちなみに、私はレンタルサーバを借りており、その中で作成したデータベースにphpMyAdminにてテーブルやカラムの作成を行いました。以下のプログラムは「db_sample.php」という名前で保存(エンコード:utf-8)し、レンタルサーバーの公開しているフォルダ「httpdocs」にffftpにてアップロードしています。バージョンは、phpMyAdmin2.11.11.3と、php4.1?(最新の5.2よりひとつ前のもの) ここでは仮に ホスト名:aaa.com (←これは独自に作成したドメイン名でいいのかな?) ユーザー名:user パスワード:pass データベース名:db テーブル名:person とします。 ----------以下プログラム------------ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title></title> </head> <body> <?php //データベースサーバ名の設定 $db_host = "aaa.com"; //ユーザ名の設定 $db_user = "user"; //パスワードの設定 $db_passwd = "pass"; //データベースサーバへの接続 $db = mysql_connect($db_host,$db_user,$db_passwd); //データベース名の設定 $db_name = "db"; //データベースの選択 mysql_select_db($db_name,$db); //SQL文の設定 $str_sql = "select * from person"; //SQL文の実行 $rs = mysql_query($str_sql,$db); //結果セット内の各レコードを順次参照し、連想配列に代入 while($arr_item = mysql_fetch_assoc($rs)) { //レコード内の各フィールド名と値を順次参照 foreach($arr_item as $key => $value) { //フィールド名と値を表示 print "[{$key}] = {$value}<br>\n"; } print "<br>\n"; } //データベースサーバへの接続の切断 mysql_close($db); ?> </body> </html> ------------------------------------------ わかる方いらっしゃいましたらご教授願います。

専門家に質問してみよう