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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

2回答

345閲覧

ボタンをクリックしないとエラーが出るif文

Kuriaki

総合スコア85

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2017/11/01 01:08

現状:
データベースをテーブルに作成しました。
検索ボタンを押すと、すべてが順調に進みますが、最初アクセスする時だけエラーが出てしまいます。
エコしながらやっていますが、selectに値が入ってなかったことが判明しました。

最初にアクセスした時
![イメージ説明]
そのまま検索ボタンを押した時
イメージ説明
やりたいこと:
アクセスしたらテーブルを表示したいです。(現在はすべて未選択で検索すればテーブルが表示します。)
if文をいじれば解決できそうな気がしますが、どういじればいいかわからないです。

ご回答宜しくお願いいたします。

php

1<form method="post"> 2<?php 3 4$sql = "SELECT count(*) FROM task"; 5$stmt = $pdo->prepare($sql); $stmt->execute(); 6$row = $stmt->fetchColumn(); 7 8echo "<select name='sakusei' class='sakusei'>"; 9echo "<option value='free'>未選択</option>"; 10$sql1 = "SELECT name,id FROM m_user"; 11 $stmt1 = $pdo->prepare($sql1); 12 $stmt1->execute(); 13 while($result1 = $stmt1->fetch(PDO::FETCH_ASSOC)){ 14 if ($result1['name']=="") { 15 $sakusei="データがありません。"; 16 $sakusei_id="0"; 17 }else{ 18 $sakusei=$result1['name']; 19 $sakusei_id=$result1['id']; 20 } 21 echo "<option value='".$sakusei_id."'>".$sakusei."</option>"; 22} 23echo "</select>"; 24 25echo "<select name='menba' class='menba'>"; 26echo "<option value='free'>未選択</option>"; 27$sql2 = "SELECT name,id FROM m_user"; 28 $stmt2 = $pdo->prepare($sql2); 29 $stmt2->execute(); 30 while($result2 = $stmt2->fetch(PDO::FETCH_ASSOC)){ 31 if ($result2['name']=="") { 32 $menba="データがありません。"; 33 $menba_id="0"; 34 }else{ 35 $menba=$result2['name']; 36 $menba_id=$result2['id']; 37 } 38echo "<option value='".$menba_id."'>".$menba."</option>"; 39} 40echo "</select>"; 41 42$owner = $_POST['sakusei'];//ownerID 43$staff = $_POST['menba'];//menbaID 44$complete = $_POST['complete']; 45 46?> 47<select name="complete" class="complete"> 48 <option value="free">未選択</option> 49 <option value="0">未完了</option> 50 <option value="1">完了</option> 51</select> 52 53<input type="submit" name="sub" value="検索"> 54 55 56 57 58<div id="items"></div> 59 60 61<table id="myTable"> 62<thead> 63 <tr> 64 <th data-column-id="id" data-type="numeric">ID</th> 65 <th data-column-id="title">タスク名</th> 66 <th data-column-id="owner" data-order="desc">作成者</th> 67 <th data-column-id="staff" data-type="numeric">メンバー</th> 68 <th data-column-id="complete_flag">完了フラグ</th> 69 </tr> 70</thead> 71<tbody> 72 73<?php 74 75if ($owner != "free" || $staff != "free" || $complete != "free") { 76 $sql6 = "SELECT id, title, owner, staff, complete_flag FROM task WHERE"; 77}else{ 78 $sql6 = "SELECT id, title, complete_flag, owner, staff FROM task"; 79} 80 81 82if ($owner != "free" ){ 83 if ($staff != "free" || $complete != "free") { 84 $sql6.= " owner=$owner AND"; 85 }else{ 86 $sql6.= " owner=$owner"; 87} 88} 89 90 91if ($staff != "free"){ 92 93 if ($complete != "free") { 94 $sql6.= " staff=$staff AND"; 95 }else{ 96 $sql6.= " staff=$staff"; 97} 98} 99 100if ($complete != "free") { 101 if ($owner != "free" || $staff != "free") { 102 $sql6.= " complete_flag=$complete"; 103}else{ 104 $sql6.= " complete_flag=$complete"; 105} 106} 107 108 109 110echo $sql6; 111 112$sql = "SELECT count(*) FROM task"; 113$stmt = $pdo->prepare($sql); $stmt->execute(); 114$row = $stmt->fetchColumn(); 115if($row > 0){ 116 117$stmt = $pdo->prepare($sql6); 118$stmt->execute(); 119 120while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ 121$sakusei = $result['owner']; 122$menba = $result['staff']; 123// taskのowner==m_userのname 124$sql1 = "SELECT name FROM m_user WHERE id = $sakusei"; 125 $stmt1 = $pdo->prepare($sql1); 126 $stmt1->execute(); 127 $result1 = $stmt1->fetch(PDO::FETCH_ASSOC); 128 if ($result1['name']=="") { 129 $sakusei="データがありません。"; 130 }else{ 131 $sakusei=$result1['name']; 132 } 133 134// taskのstaff==m_userのname 135$sql2 = "SELECT name FROM m_user WHERE id = $menba"; 136 $stmt2 = $pdo->prepare($sql2); 137 $stmt2->execute(); 138 $result2 = $stmt2->fetch(PDO::FETCH_ASSOC); 139 if ($result2['name']=="") { 140 $menba="データがありません。"; 141 }else{ 142 $menba=$result2['name']; 143 } 144 145?> 146 <tr> 147 <td><?php echo htmlspecialchars($result['id'], ENT_QUOTES, "UTF-8");?></td> 148 <td><?php echo htmlspecialchars($result['title'], ENT_QUOTES, "UTF-8");?></td> 149 <td><?php echo htmlspecialchars($sakusei, ENT_QUOTES, "UTF-8");?></td> 150 <td><?php echo htmlspecialchars($menba, ENT_QUOTES, "UTF-8");?></td> 151 <?php 152 if ($result['complete_flag'] == "0") { 153 echo "<td>未完了</td>"; 154 }else if ($result['complete_flag'] == "1") { 155 echo "<td>完了</td>"; 156 }else{ 157 echo "<td>[データありません]</td>"; 158 } 159 ?> 160 </tr> 161 162 <?php 163} 164 165}else{ 166 // SELECT結果がない場合の処理 167 echo "データがありません。"; 168} 169?> 170</tbody> 171</table> 172 173 </form>

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

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

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

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

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

guest

回答2

0

いままで何度も回答したつもりだったんですが、指摘した内容をほぼ無視しますよね

外からデータを持ち込むときはfilter_input()で、存在確認とバリデートをしてください

$owner = filter_input(INPUT_POST,'sakusei');

こうすればPOSTで"sakusei"が飛んでくればその値に、こなければnullが入ります

投稿2017/11/01 01:25

yambejp

総合スコア114572

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

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

Kuriaki

2017/11/01 01:35

ご回答ありがとうございます。 正直なところ、前回ご回答頂いた内容に関して、知識が足りないため、理解できなかったです。 無視などするつもりはありません。
guest

0

ベストアンサー

ここが原因です。

PHP

1$owner = $_POST['sakusei'];//ownerID 2$staff = $_POST['menba'];//menbaID 3$complete = $_POST['complete'];

最初にアクセスしたとき、つまり「なにもPOSTされていない状態」のとき、$owner$staff$completeは空です。しかし、その後の処理で「何も入っていないこと」を想定していないため、出来上がるSQL文が正しくない状態になっています。スクリーンショットでは以下のようなクエリが生成されていますね?

SELECT id, title, owner, staff, complete_flag FROM task WHERE owner= AND staff= AND complete_flag=

条件のowner=、staff=、complete=の後ろに何も入っていないので、これは構文的にエラーです。なので、$stmt = $pdo->prepare($sql6);が返す$stmtはnullとなり、$stmt->execute();が失敗します。

なにもPOSTされていない状態で$ownerなどに'free'が入っていれば正しく動作するわけですから、以下のように修正すればよいかと思います。

PHP

1$owner = isset($_POST['sakusei']) ? $_POST['sakusei'] : 'free';//ownerID 2$staff = isset($_POST['menba']) ? $_POST['menba'] : 'free';//menbaID 3$complete = isset($_POST['complete']) ? $_POST['complete'] : 'free';

投稿2017/11/01 01:20

masaya_ohashi

総合スコア9206

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

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

Kuriaki

2017/11/01 01:27

わかりやすくご回答していただき、ありがとうございます! 原因はわかっていますが、解決方法がまったくつきませんでした。 $owner $staff $completeが空だから、valueがfreeのoptionをselectedにしようとしたところです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問