質問するログイン新規登録

質問編集履歴

5

コードと質問を見やすく致しました

2019/05/02 09:56

投稿

meka
meka

スコア23

title CHANGED
File without changes
body CHANGED
@@ -57,6 +57,7 @@
57
57
  <div><?php if ($_SERVER['REQUEST_METHOD'] === 'POST') {
58
58
  $search->post();
59
59
  } ?></div>
60
+   //本来ここではなく、このファイルの上の方でこちらのコードを書きたいです。
60
61
 
61
62
  </form>
62
63
 
@@ -125,6 +126,7 @@
125
126
  echo '該当なし';
126
127
  } else {
127
128
  echo $price["カラム名"];
129
+   //こちらの結果を return で返して(index.php)の任意の位置で表示したいです。
128
130
  }
129
131
  }
130
132
 

4

コードと質問を見やすく致しました

2019/05/02 09:56

投稿

meka
meka

スコア23

title CHANGED
File without changes
body CHANGED
@@ -4,135 +4,145 @@
4
4
 
5
5
  内容としてはindex.phpから日付選択をしてサーバーに送信、データベースからマッチする日付のデータを引っ張って来てindex.phpの任意の位置に結果を表示するというものです。
6
6
 
7
- 問題点として Undefined index: date~ のエラーが出ていることです。おそらく初期化の設定をしないとダメなんだろうな?とか予測を立てていますが、いくらやっても上手くいきません。
8
- ゴチャゴチャになってまったのindex.phpの変数は一回消ましたが、search.phpの結果をindex.phpの方の任意の位置に表示するにはどのような記述必要になりますでしょうか? 問題点がズレてい可能性もあるのどなたかご教授お願い致します。
7
+ 問題点とて <label> 日付: <input type="date" name="date"></label> 選択した日付POSTすると保持されず日付undefindになることです。
9
8
 
10
- (追記)
11
- ※ロカル開発環境練習しております。
9
+ こちらに掲載したコエラーは出ませんが、実現たいことは(index.php)の<?phpif($_SERVER['REQUEST_METHOD'] === 'POST') {$search->post();を(index.php)の上の方で書い、(search.php)の処理にてreturnで結果を返す。その結果を(index.php)の任意の場所で表示するということです。
12
10
 
11
+ POSTしてretutn処理すると消えるのでreturn処理でデータを返す方法をご教授お願いできますでしょうか?
12
+
13
+
14
+ 補足情報:
15
+
16
+ - ローカル開発環境で練習しています。
17
+ - POSTの関係ないメソッドのrerun処理は問題なくできています。
13
18
  ### 発生している問題・エラーメッセージ
14
19
 
15
20
  ```
16
- Notice: Undefined index: date in /home/vagrant/フォルダ名/search.php on line 47
21
+ Notice: Undefined variable
17
22
  ```
18
23
 
19
24
  ### 該当のソースコード
20
25
 
21
- ```//ファイル名 index.php
26
+ //ファイル名 index.php
22
27
 
28
+ ```php
23
29
  <?php
24
30
 
25
- require_once(__DIR__ . '/config.php');
31
+ require_once(__DIR__ . '/config.php');
26
- require_once(__DIR__ . '/search.php');
32
+ require_once(__DIR__ . '/search.php');
27
33
 
28
- try {
34
+ try {
29
35
  $search = new \SearchDate\Price();
30
- } catch (Exception $e) {
36
+ } catch (Exception $e) {
31
37
  echo $e->getMessage();
32
38
  exit;
33
- }
39
+ }
34
40
 
35
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
36
- $search->post();
37
- };
38
-
39
-
40
41
  ?>
41
42
  <!DOCTYPE html>
42
43
  <html lang="ja">
43
44
  <head>
44
- <meta charset="utf-8">
45
+ <meta charset="utf-8">
45
- <title>練習サイト</title>
46
+ <title>練習サイト</title>
46
- <link rel="stylesheet" href="styles.css">
47
+ <link rel="stylesheet" href="styles.css">
47
48
  </head>
48
49
  <body>
49
50
 
50
- <form action="" method="post">
51
+ <form action="" method="post">
51
- <label> 日付: <input type="date" name="date"></label>
52
+ <label> 日付: <input type="date" name="date"></label>
52
- <input type="submit" value="検索">
53
+ <input type="submit" value="検索">
53
- </form>
54
- <div>サンプル文1</div>
55
- <div>サンプル文2</div>
56
- <div>ここに結果を表示させたいです</div>
57
54
 
55
+ <div>サンプル1</div>
56
+ <div>サンプル2</div>
57
+ <div><?php if ($_SERVER['REQUEST_METHOD'] === 'POST') {
58
+ $search->post();
59
+ } ?></div>
60
+
61
+ </form>
62
+
58
63
  </body>
59
64
  </html>
60
65
 
66
+ ```
61
67
 
62
68
  //ファイル名 search.php
63
-
69
+ ```php
64
70
  <?php
65
71
 
66
72
  namespace SearchDate;
67
73
 
68
74
  class Price {
69
- private $_db;
75
+ private $_db;
70
76
 
71
- public function __construct() {
77
+ public function __construct() {
72
- $this->_connectDB();
78
+ $this->_connectDB();
73
- $this->_createToken();
79
+ $this->_createToken();
74
- }
80
+ }
75
81
 
76
- private function _connectDB() {
82
+ private function _connectDB() {
77
- try {
83
+ try {
78
- $this->_db = new \PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
84
+ $this->_db = new \PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
79
- $this->_db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
85
+ $this->_db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
80
- } catch (\PDOException $e){
86
+ } catch (\PDOException $e){
81
- throw new \Exception('Faild to connect DB');
87
+ throw new \Exception('Faild to connect DB');
88
+ }
82
89
  }
83
- }
84
90
 
85
- private function _createToken() {
91
+ private function _createToken() {
92
+
86
- if (!isset($_SESSION['token'])) {
93
+ if (!isset($_SESSION['token'])) {
87
- $_SESSION['token'] =
94
+ $_SESSION['token'] =
88
- bin2hex(openssl_random_pseudo_bytes(16));
95
+ bin2hex(openssl_random_pseudo_bytes(16));
96
+ }
89
97
  }
90
- }
91
98
 
92
- private function _validateSelect() {
99
+ private function _validateSelect() {
100
+
101
+ $date = filter_input(INPUT_POST,'date',FILTER_SANITIZE_NUMBER_INT);
93
- if (
102
+ if ($date == NULL || FALSE) {
94
- !isset($_POST['date'])
103
+ echo '日付を指定してください';
95
- ) {
104
+ exit;
96
- throw new \Exception('invalid search!');
105
+ }
97
106
  }
98
- }
99
107
 
100
- private function _validateToken() {
108
+ private function _validateToken() {
101
- if (
109
+
102
- !isset($_SESSION['token'])
110
+ if (!isset($_SESSION['token'])) {
103
- ) {
104
- throw new \Exception('invalid token!');
111
+ throw new \Exception('invalid token!');
112
+ }
105
113
  }
106
- }
107
114
 
108
- public function _searchDate() {
115
+ public function _searchDate() {
109
116
 
110
- $findDate = $_POST["date"];
117
+ $date = filter_input(INPUT_POST,'date',FILTER_SANITIZE_NUMBER_INT);
111
- $sql = "select カラム名 from テーブル名 where カラム名(日付) = '$findDate'";
118
+ $res = $this->_db->prepare('select カラム名 from テーブル名 where カラム名 = :date');
119
+ $res->bindValue(':date', $date, \PDO::PARAM_STR);
120
+ $res->execute();
112
121
 
113
- $res = $this->_db->query($sql);
114
- $result = $res->fetch(\PDO::FETCH_ASSOC);
122
+ $price = $res->fetch(\PDO::FETCH_ASSOC);
115
- // var_dump($result); ←ここで結果表示確認できています。
116
- // echo $result["カラム名"]; ←ここで結果表示確認できています。
117
- // exit;
118
- return $result;
119
123
 
124
+ if ($price == false) {
125
+ echo '該当なし';
126
+ } else {
127
+ echo $price["カラム名"];
120
- }
128
+ }
129
+ }
121
130
 
122
- public function post() {
131
+ public function post() {
123
- try {
132
+ try {
124
133
 
125
- $this->_validateSelect();
134
+ $this->_validateSelect();
126
- $this->_validateToken();
135
+ $this->_validateToken();
127
- $this->_searchDate();
136
+ $this->_searchDate();
128
137
 
129
- } catch (\Exception $e) {
138
+ } catch (\Exception $e) {
130
- header('Location: http://' . $_SERVER['HTTP_HOST']);
139
+ header('Location: http://' . $_SERVER['HTTP_HOST']);
140
+ }
141
+ exit;
131
142
  }
132
- exit;
133
- }
134
143
 
135
144
  }
145
+
136
146
  ```
137
147
 
138
148
  ### 試したこと

3

関連タグを修正いたしました

2019/05/02 09:45

投稿

meka
meka

スコア23

title CHANGED
File without changes
body CHANGED
File without changes

2

インテンドをつけました

2019/05/01 08:19

投稿

meka
meka

スコア23

title CHANGED
File without changes
body CHANGED
@@ -22,19 +22,19 @@
22
22
 
23
23
  <?php
24
24
 
25
- require_once(__DIR__ . '/config.php');
25
+ require_once(__DIR__ . '/config.php');
26
- require_once(__DIR__ . '/search.php');
26
+ require_once(__DIR__ . '/search.php');
27
27
 
28
- try {
28
+ try {
29
- $search = new \SearchDate\Price();
29
+ $search = new \SearchDate\Price();
30
- } catch (Exception $e) {
30
+ } catch (Exception $e) {
31
- echo $e->getMessage();
31
+ echo $e->getMessage();
32
- exit;
32
+ exit;
33
- }
33
+ }
34
34
 
35
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
35
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
36
- $search->post();
36
+ $search->post();
37
- };
37
+ };
38
38
 
39
39
 
40
40
  ?>

1

インテンドを付けました。

2019/05/01 07:11

投稿

meka
meka

スコア23

title CHANGED
File without changes
body CHANGED
@@ -7,10 +7,13 @@
7
7
  問題点として Undefined index: date~ のエラーが出ていることです。おそらく初期化の設定をしないとダメなんだろうな?とか予測を立てていますが、いくらやっても上手くいきません。
8
8
  ゴチャゴチャになってしまったのでindex.phpの変数は一回消しましたが、search.phpの結果をindex.phpの方の任意の位置に表示するにはどのような記述が必要になりますでしょうか? 問題点がズレている可能性もあるのでどなたかご教授お願い致します。
9
9
 
10
+ (追記)
11
+ ※ローカル開発環境で練習しております。
12
+
10
13
  ### 発生している問題・エラーメッセージ
11
14
 
12
15
  ```
13
- Undefined index: date
16
+ Notice: Undefined index: date in /home/vagrant/フォルダ名/search.php on line 47
14
17
  ```
15
18
 
16
19
  ### 該当のソースコード
@@ -23,10 +26,10 @@
23
26
  require_once(__DIR__ . '/search.php');
24
27
 
25
28
  try {
26
- $search = new \SearchDate\Price();
29
+ $search = new \SearchDate\Price();
27
30
  } catch (Exception $e) {
28
- echo $e->getMessage();
31
+ echo $e->getMessage();
29
- exit;
32
+ exit;
30
33
  }
31
34
 
32
35
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
@@ -38,19 +41,19 @@
38
41
  <!DOCTYPE html>
39
42
  <html lang="ja">
40
43
  <head>
41
- <meta charset="utf-8">
44
+ <meta charset="utf-8">
42
- <title>練習サイト</title>
45
+ <title>練習サイト</title>
43
- <link rel="stylesheet" href="styles.css">
46
+ <link rel="stylesheet" href="styles.css">
44
47
  </head>
45
48
  <body>
46
49
 
47
- <form action="" method="post">
50
+ <form action="" method="post">
48
- <label> 日付: <input type="date" name="date"></label>
51
+ <label> 日付: <input type="date" name="date"></label>
49
- <input type="submit" value="検索">
52
+ <input type="submit" value="検索">
50
- </form>
53
+ </form>
51
- <div>サンプル文1</div>
54
+ <div>サンプル文1</div>
52
- <div>サンプル文2</div>
55
+ <div>サンプル文2</div>
53
- <div>ここに結果を表示させたいです</div>
56
+ <div>ここに結果を表示させたいです</div>
54
57
 
55
58
  </body>
56
59
  </html>
@@ -63,71 +66,71 @@
63
66
  namespace SearchDate;
64
67
 
65
68
  class Price {
66
- private $_db;
69
+ private $_db;
67
70
 
68
- public function __construct() {
71
+ public function __construct() {
69
- $this->_connectDB();
72
+ $this->_connectDB();
70
- $this->_createToken();
73
+ $this->_createToken();
71
- }
74
+ }
72
75
 
73
- private function _connectDB() {
76
+ private function _connectDB() {
74
- try {
77
+ try {
75
- $this->_db = new \PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
78
+ $this->_db = new \PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
76
- $this->_db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
79
+ $this->_db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
77
- } catch (\PDOException $e){
80
+ } catch (\PDOException $e){
78
- throw new \Exception('Faild to connect DB');
81
+ throw new \Exception('Faild to connect DB');
79
- }
82
+ }
80
- }
83
+ }
81
84
 
82
- private function _createToken() {
85
+ private function _createToken() {
83
- if (!isset($_SESSION['token'])) {
86
+ if (!isset($_SESSION['token'])) {
84
- $_SESSION['token'] =
87
+ $_SESSION['token'] =
85
- bin2hex(openssl_random_pseudo_bytes(16));
88
+ bin2hex(openssl_random_pseudo_bytes(16));
86
- }
89
+ }
87
- }
90
+ }
88
91
 
89
- private function _validateSelect() {
92
+ private function _validateSelect() {
90
- if (
93
+ if (
91
- !isset($_POST['date'])
94
+ !isset($_POST['date'])
92
- ) {
95
+ ) {
93
- throw new \Exception('invalid search!');
96
+ throw new \Exception('invalid search!');
94
- }
97
+ }
95
- }
98
+ }
96
99
 
97
- private function _validateToken() {
100
+ private function _validateToken() {
98
- if (
101
+ if (
99
- !isset($_SESSION['token'])
102
+ !isset($_SESSION['token'])
100
- ) {
103
+ ) {
101
- throw new \Exception('invalid token!');
104
+ throw new \Exception('invalid token!');
102
- }
105
+ }
103
- }
106
+ }
104
107
 
105
- public function _searchDate() {
108
+ public function _searchDate() {
106
109
 
107
- $findDate = $_POST["date"];
110
+ $findDate = $_POST["date"];
108
- $sql = "select カラム名 from テーブル名 where カラム名(日付) = '$findDate'";
111
+ $sql = "select カラム名 from テーブル名 where カラム名(日付) = '$findDate'";
109
112
 
110
- $res = $this->_db->query($sql);
113
+ $res = $this->_db->query($sql);
111
- $result = $res->fetch(\PDO::FETCH_ASSOC);
114
+ $result = $res->fetch(\PDO::FETCH_ASSOC);
112
- // var_dump($result); ←ここで結果表示確認できています。
115
+ // var_dump($result); ←ここで結果表示確認できています。
113
- // echo $result["カラム名"]; ←ここで結果表示確認できています。
116
+ // echo $result["カラム名"]; ←ここで結果表示確認できています。
114
- // exit;
117
+ // exit;
115
- return $result;
118
+ return $result;
116
119
 
117
- }
120
+ }
118
121
 
119
- public function post() {
122
+ public function post() {
120
- try {
123
+ try {
121
124
 
122
- $this->_validateSelect();
125
+ $this->_validateSelect();
123
- $this->_validateToken();
126
+ $this->_validateToken();
124
- $this->_searchDate();
127
+ $this->_searchDate();
125
128
 
126
- } catch (\Exception $e) {
129
+ } catch (\Exception $e) {
127
- header('Location: http://' . $_SERVER['HTTP_HOST']);
130
+ header('Location: http://' . $_SERVER['HTTP_HOST']);
128
- }
131
+ }
129
- exit;
132
+ exit;
130
- }
133
+ }
131
134
 
132
135
  }
133
136
  ```