質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

5207閲覧

ページの遷移がうまくいかない。(php html

tsysrtk

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/07/31 03:23

編集2022/01/12 10:55

個人的にphpで今webアプリを作成しています。

ただいま、

ログイン

制御チェック&入力値チェック

ホーム
↓ ← ここがうまくいかない
制御チェック

という風になっております。

ホームでボタンを押したとき、
ホームのソース内で$_POSTの判定を行いたいのですが、
ボタンを押した瞬間、ログインまで戻ってしまいます。
ホームのformでaction=""を設定しているのですが、

どうやらログインからURLが変わっていないため、
ログイン画面に戻ってしまうことが分かりました。
ログインからホームのファイルを指定して遷移させればいいのですが、
そうしたくはなく、一旦チェックを挟む、
URLが変わらない、つまり自分自身を指定した場合、
一番最初のログインに戻ってしまうと考えています。
このような処理のルートでもうまくできる方法があるのでしょうか?

controller_login.php

php

1<?php 2$webroot = $_SERVER['DOCUMENT_ROOT']; 3include_once($webroot . '/classes/controllers/login/controller_login_base.php'); 4 5class Controller_Login extends Controller_Login_Base{ 6 /** 7 * @desc ログインフォームを表示する 8 */ 9 public function show_login_form() { 10 $input_info = parent::$view->show_login_form(); 11 if(!empty($input_info)){ 12 $this->_check_input_info($input_info); 13 } 14 } 15 16 /** 17 * @desc 入力された値をチェックする 18 * @param array $input_info 入力された情報 19 * @return array|string 会員情報|エラーメッセージ 20 */ 21 private function _check_input_info($input_info) { 22 try{ 23 $results = parent::$logic->check_input_info($input_info); 24 if(is_array($results)) { 25 // TODO:管理メソッドに会員情報を持たせる 26 $this->check_process(PROCESS_HOME); 27 return true; 28 } 29 else { 30 parent::$view->show_login_form($results); 31 } 32 }catch(PDOException $e) { 33 print('connection ERROR!:'.$e->getMessage()); 34 return $e; 35 } 36 } 37}

view_login.php

php

1<?php 2class View_Login{ 3 /** 4 * @desc ログイン画面を表示する 5 */ 6 public function show_login_form($message = NULL) { 7 if(isset($_POST["id"]) && isset($_POST["password"])) { 8 // 入力値情報 9 $input_info = array(); 10 // ログインボタンが押された場合 11 if(isset($_POST["id"]) && isset($_POST["password"])) { 12 $input_info = [ 13 'id' => $_POST["id"], 14 'password' => $_POST["password"] 15 ]; 16 $_POST = NULL; 17 } 18 return $input_info; 19 } 20?> 21<html> 22 <head> 23 <meta name="generator" 24 content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" /> 25 <title></title> 26 <link rel="stylesheet" type="text/css" href="stylesheets/main.css" /> 27 </head> 28 <body> 29 <div class="form-wrapper"> 30 <h1>Sign In</h1> 31 <?php 32 if(!is_null($message)) { 33 echo '<a><font color="red">' . $message .' </font></a>'; 34 } 35 ?> 36 <form method="post" action=""> 37 <div class="form-item"> 38 <input type="number" name="id" id="useid" required="required" placeholder="Employee_number" /> 39 </div> 40 <div class="form-item"> 41 <input type="password" id="password" name="password" required="required" placeholder="Password" /> 42 </div> 43 <div class="button-panel"> 44 <input type="submit" class="button" id="login" value="Sign In" /> 45 </div> 46 </form> 47 <div class="form-footer"> 48 <p> 49 <a href="#">Forgot password?</a> 50 </p> 51 </div> 52 </div> 53 </body> 54</html> 55<?php 56 } 57} 58

controller_home.php

php

1<?php 2$webroot = $_SERVER['DOCUMENT_ROOT']; 3include_once($webroot . '/classes/controllers/home/controller_home_base.php'); 4class Controller_Home extends Controller_Home_Base { 5 /** 6 * @desc ホーム画面を表示する 7 */ 8 public function show_home(){ 9 $input_info = parent::$view->show_home(); 10 } 11}

view_home.php

php

1<?php 2class View_Home{ 3 public function show_home(){ 4 switch($_POST['home']){ 5 case $_POST['home'] === 'start': 6 // 処理 7 break; 8 default: 9 break; 10 } 11?> 12<html> 13 <head> 14 <meta name="generator" content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" /> 15 <title>JobManager</title> 16 <link rel="stylesheet" type="text/css" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" /> 17 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 18 <script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> 19 <link rel="stylesheet" type="text/css" href="/stylesheets/main.css" /> 20 </head> 21 <body> 22 <nav class="navbar navbar-default navbar-static-top navbar-inverse"> 23 <div class="container"> 24 <ul class="nav navbar-nav"> 25 <li class="active"> 26 <a><span class="glyphicon glyphicon-home"></span> ホーム</a> 27 </li> 28 <li> 29 <a><span class="glyphicon glyphicon-user"></span> メンバー</a> 30 </li> 31 <li class="dropdown"> 32 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="glyphicon glyphicon-info-sign"></span> 機能</a> 33 <ul class="dropdown-menu" role="menu"> 34 <li> 35 テスト 36 </li> 37 </ul> 38 </li> 39 </ul> 40 <ul class="nav navbar-nav navbar-right"> 41 <li class="navbar-right"> 42 <a><span class="glyphicon glyphicon-book"></span> アカウント設定</a> 43 </li> 44 </ul> 45 </div> 46 </nav> 47 <div class="jumbotron text-center"> 48 <div class="container"> 49 <a href="/" class="lang-logo"> 50 <img src="/config/images/lang-logo.png" /> 51 </a> 52 <h1>絶対お仕事便利にするマン</h1> 53 <p>あなたのお仕事をお助けします!</p> 54 <form method="post" action=""> 55 <a><button type="submit" value="start" name="home" class="btn btn-lg btn-default"><span class="glyphicon glyphicon-hand-right"></span>はじめる</a> 56 </form> 57 </div> 58 </div> 59 <div class="container"> 60 <div class="alert alert-info text-center" role="alert">もし、このアプリにについて詳しく知りたい場合は 61 <a class="alert-link">ヘルプ</a>をご覧下さい</div> 62 <div class="row"> 63 <div class="col-md-6"> 64 <h3>リリース履歴</h3> 65 <ul> 66 <li> 67 test 68 </li> 69 </ul> 70 </div> 71 </div> 72 </div> 73 </body> 74</html> 75<?php 76 } 77} 78 79

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/07/31 03:26

ご自身で書かれたコードを質問文に追記されたほうが回答を得られやすいと思います。
tsysrtk

2017/07/31 04:17

失礼しました。追加しました
tsysrtk

2017/07/31 04:18

処理を行うcontrollerソースなどは省きました。
guest

回答3

0

すみません、理解しきれてないかもしれません、、、

そもそも、classはインスタンスとかして動いているんですよね?

とりあえず、View_Homeに関しては

PHP

1<?php 2 class View_Home{ 3 public function show_home(){ 4 if(isset($_POST['home'])){ 5 var_dump('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); 6 } 7 } 8 } 9 $View_Home = new View_Home(); 10 $View_Home->show_Home(); 11?>

ってことになるんですかね?
そういうことではなかったですか、、、
$_POST['はじめる'] => $_POST['home']にしています。

【追記】

PHP

1[Controller_login.php] 2<?php 3 class Controller_login { 4 public function View_Home() { 5 if(isset($_POST['id']) && isset($_POST['password'])) { 6 /* 7 データのチェック 89 データがOKならSESSIONに入れる 1011 その後homeへheader()する 12 */ 13 } 14 } 15 } 16?>

PHP

1[Login.php] 2<?php 3 session_start(); 4 // Controller_login.phpの読込 5 if($_SERVER['REQUEST_METHOD'] === 'POST') { 6 $Con_log = new Controller_login(); 7 $Con_log->View_Home(); 8 } 9 10 // Loginしているかどうかの判定 11 if(isset($_SESSION['Login'])) { 12 // すでにLoginしていたらhomeへ 13 header('Location: '.'home.php'); 14 exit; 15 } 16?> 17<!DOCTYPE html> 18<html lang="ja"> 19<head> 20 <meta charset="UTF-8"> 21 <title>Sign In</title> 22</head> 23<body> 24 25</body> 26</html>

ちょっとシンプルですが、こういうのではどうなのでしょうか?

投稿2017/07/31 05:20

編集2017/07/31 06:08
Z-TALBO

総合スコア525

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsysrtk

2017/07/31 05:43 編集

わかりにくくてすいません・・・。 まぁ、大体そんな感じですが インスタンス生成自体はview_homeでは行っておりません。 かなり省略して書きますが ```php Controller_home.php <?php class Controller_home{ public function show_home{ $home = new View_home() $home->show_home(); } } ?> view_home.php <?php class View_home{ public function show_home{ if(isset($_POST['start'])){ //処理 } <?php post送信のHTML ?> } } ?> ```
Z-TALBO

2017/07/31 05:41

これ、全部一つのファイルってことですか? それともloginはlogin.phpとかってちゃんと分かれてますか?
tsysrtk

2017/07/31 05:42

分かれています。
tsysrtk

2017/07/31 05:44 編集

処理ごとに分けていて 処理の中でも、入力 出力 データ管理 とファイルは分けています。
tsysrtk

2017/07/31 06:10 編集

なるほど、ボタンやフォームの入力値チェックをcontrollerに任せるのですね。 確かにそれだと、URLを設定できそうです。 よくよく考えたら、controllerで行うべき処理なのかもしれません。 確認してみます。
Z-TALBO

2017/07/31 06:15

home.php側も基本同じような感じです。 homu側のLoginチェックはif(!isset($_SESSION['Login'])でなかったらLogin.phpへ飛ばすとすれば、と思いました。
Z-TALBO

2017/07/31 06:52

私自身MVCが理解できているわけではないですが、Controllerで値を受け取ったりですが、実際のチェックなどはModelかなとも思います。 まぁ、とりあえずControllerで書いて、そこから処理ごとに、これはって振り分けるのも方法かと思います。
tsysrtk

2017/07/31 07:07 編集

確かめてみたのですが、 思うような結果になりませんでした。 ・ファイルを指定して、処理を遷移するとファイルは呼ばれるが、ファンクションが呼ばれているわけではないので、クラス外で受け取りを行うことになる。あまりそうしたくはないです。 そうすると最初と状況が変わらないことになります・・・。 ちなみにここで言っているチェックというのは、入力されたかどうか、何が入力されたかのチェックのことです。中身がどうなっているかはもちろんModelですが。
tsysrtk

2017/07/31 07:19

もしかして、HTMLってviewを基点とした方がいいのでしょうか? ふつうの実装方法があまりよくわかっていないもので・・・。
Z-TALBO

2017/07/31 07:29

ファイルの読み込みだけでは当然メソッドは使えません。 ですので、送信され、それがPOSTだったら、インスタンス化して、メソッド使ってって考えたのですが、、 そもそも、送信する動きの有無関係なく、メソッドを動かすということでしょうか?
Z-TALBO

2017/07/31 07:31

Viewは当然見せる部分ですが、やり方がいろいろあるかと思います。 基本的なページの部分は普通において、そのページ内のパーツをおいて、呼び出していく、中身が結果で変わるならそれで呼び出す中身を変える。 つまり外のページ自体は変わらないってやり方はありだと思ってます。
tsysrtk

2017/07/31 07:48

viewでインスタンス化は行いたくないですねぇ・・・。 理想は、viewで押されたかどうかチェックを行って値をreturn controllerでreturn値をswitchか何かで分岐なんですよねぇ・・・。
tsysrtk

2017/07/31 07:50

loginの時点ではaction=""で自分自身を指定して、 チェックを行い、returnさせることができています。 しかしhomeで自分自身を指定すると、 URLが変わっていないため、一番最初にもどっていると思うんですよね。。
Z-TALBO

2017/07/31 07:55

とりあえず、質問のソースに戻ってみますが、そもそもhomeのチェックがisset($_POST['はじめる'])が、実際のコードならそこが間違いじゃないですか? valueがはじめるなだけで、受け取るなら$_POST['home']だと、、、
tsysrtk

2017/07/31 07:58

すいません、直してなかったですがそれは修正済みです。 しかし挙動は変わっていません・・・。
tsysrtk

2017/07/31 07:58

もしかしたら設計自体の問題かもしれません・・・。
Z-TALBO

2017/07/31 08:06

actionは指定していないから自身にというのは、別にファイルをわけているなら問題ないと思いますが、、、 そのファイルにあったclassを使うわけですから、それでもLoginになってしまうなら、そもそも使っているclassがhomeのとこでloginを使っているとかってことはないでしょうか?
tsysrtk

2017/07/31 08:13

>actionは指定していないから自身にというのは、別にファイルをわけているなら問題ないと思いますが、、、 問題なかったのですね、では処理がおかしいということになりそうです。 Controllerクラスも追記しておきます。
guest

0

制御チェック&入力値チェックが終わったらリダイレクトでホームに飛ばすというのはいかがでしょう。

<?php // 制御チェック&入力値チェック if ( $validation === true ) { // ホームにリダイレクト header('Location:ホームのurl'); exit; } ?>

投稿2017/07/31 03:56

mayoi_maimai

総合スコア1583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsysrtk

2017/07/31 04:16

画面遷移をactionで飛んでないので、URLが一定なのですが、 どうしたらいいでしょう。
mayoi_maimai

2017/07/31 04:28

遷移の確認ですが、login.phpでid,pwを入力チェックを行い、その後home.phpを表示するということでよろしかったでしょうか??
tsysrtk

2017/07/31 04:48 編集

そうですね、合っています。 参考までに処理の流れを詳しく書きますと、 index.php ←入口だけ ↓ check_process.php ← 引数で処理の遷移を管理(初期ではログインとなっている ↓ controller_login.php ←ログイン処理を管理 ↓ view_login.php ←ログイン画面表示 入力されたら入力値をreturn ↓ controller_login.php ↓ model_login.php ←DB接続と入力値チェック ↓ controlloer_login.php ← 真ならcheck_process→controller_home→view_home , 偽ならエラーを表示してもう一度login.
tsysrtk

2017/07/31 04:40 編集

view_homeよりボタンを押して、view_home自信で何のボタンを押したかチェックを行ってそれをcontroller_homeに戻り値として渡したいです。 上のソースでいくと、var_dumpでaaaaaaaaが出力されたら実現されたということになります。 しかし、今のままだと、homeでボタンを押した瞬間一番最初まで戻ってしまいます。
guest

0

ログインに成功すればsessionにログイン済フラグを入れ、
以後ホームではログイン済フラグをチェックすればいいと思います。

投稿2017/07/31 03:32

kaji

総合スコア648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsysrtk

2017/07/31 04:25

確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問