🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

PHP

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

Q&A

解決済

2回答

771閲覧

phpのsql文でデータベースへ保存後にページ遷移ができません

kpg

総合スコア23

MySQL

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

PHP

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

0グッド

0クリップ

投稿2019/09/30 03:28

前提・実現したいこと

データベースへ値は保存できているのですが、その後のページ遷移の際に
エラーが発生してしまいます。

①Aファイルでコメント入力
②インラインフレームでBファイルが開く
③戻るボタンでAファイルに戻る。

この③のところでエラーが発生してしまいます。

sql文をechoしたところ、sql文中で変数として挿入している$auto_idが表示されていないようなのですが解決方法がわからずかなりはまってしまっています。。。
sql文が下記のようにa.auto_id=のところで$auto_idが表示されません。

SELECT * FROM m_comment_master AS a LEFT OUTER JOIN t_sales_db AS b ON a.auto_id=b.auto_id LEFT OUTER JOIN m_driver_master AS c ON a.commenter_id=c.driver_id WHERE a.auto_id= ORDER BY a.comment_id DESC

データはちゃんと保存されており、エラーが出たページから一つ戻って、もう一度ページに
入るとちゃんと入力したデータが反映されています。

どなたかご教示のほどお願いいたします。

発生している問題・エラーメッセージ

顧客データベース接続失敗。SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY a.comment_id DESC' at line 4

該当のソースコード

php

1//①Aファイルのコードです 2date_default_timezone_set('Asia/Tokyo'); 3$designated_date = date('n月d日 H時i分'); 4 5$auto_id = $_POST['auto_id']; 6$salesClient_id = $_POST['salesClient_id']; 7$driver_id = $_POST['driver_id']; 8$first_name = $_POST['first_name']; 9$last_name = $_POST['last_name']; 10$sales_date = $_POST['sales_date']; 11$shop_name = $_POST['shop_name']; 12$progress_purpose_name = $_POST['progress_purpose_name']; 13$progress_name = $_POST['progress_name']; 14$sales_history = $_POST['sales_history']; 15 16try { 17 $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, $options); 18 $dbh->query('SET NAMES utf8'); 19 20 // m_comment_masterからコメント情報の取り出し 21 $sql = "SELECT * FROM m_comment_master AS a 22 LEFT OUTER JOIN t_sales_db AS b ON a.auto_id=b.auto_id 23 LEFT OUTER JOIN m_driver_master AS c ON a.commenter_id=c.driver_id 24 WHERE a.auto_id= " . $auto_id . " ORDER BY a.comment_id DESC"; 25 26 echo $sql; 27 28 $stmt = $dbh->prepare($sql); 29 $stmt->execute(); 30 31 while($firstResult = $stmt->fetch(PDO::FETCH_ASSOC)) { 32 $commentData[] = $firstResult; 33 } 34 35 36 // t_sales_dbから情報の取り出し 37 $sql = "SELECT * FROM t_sales_db AS d 38 LEFT OUTER JOIN m_comment_master AS e ON d.driver_id=e.submitter_id 39 WHERE d.auto_id=" . $auto_id; 40 41 $stmt = $dbh->prepare($sql); 42 $stmt->execute(); 43 44 while($secondResult = $stmt->fetch(PDO::FETCH_ASSOC)) { 45 $salesData[] = $secondResult; 46 } 47 48 $dbh = null; 49 50} catch (PDOException $e) { 51 exit('顧客データベース接続失敗。'.$e->getMessage()); 52} 53 54//②BファイルのINSERT文です 55 56try { 57 58 $auto_id = $_POST['auto_id']; 59 $commenter_id = $_POST['driver_id']; 60 $submitter_id = $_POST['submitter_id']; 61 $comment_content = $_POST['comment_content']; 62 $driver_name = $_POST['driver_name']; 63 $comment_date = $_POST['comment_date']; 64 65 66 echo 'auto_id: '. $auto_id .'<br>'; 67 echo 'commenter_id: '. $commenter_id .'<br>'; 68 echo 'submitter_id: '. $submitter_id .'<br>'; 69 echo 'comment_content: '. $comment_content .'<br>'; 70 echo 'comment_date: '. $comment_date .'<br>'; 71 72 $sql = "INSERT INTO m_comment_master( 73 auto_id, 74 commenter_id, 75 submitter_id, 76 comment_content, 77 comment_date 78 ) VALUES (?,?,?,?,?)"; 79 80 $stmt = $dbh->prepare($sql); 81 82 $data[] = $auto_id; 83 $data[] = $commenter_id; 84 $data[] = $submitter_id; 85 $data[] = $comment_content; 86 $data[] = $comment_date; 87 88 // SQLで指令を出すための命令 89 if( !$stmt->execute($data) ) { 90 echo 'クエリの送信に失敗しました。 SQL:'.$sql; 91 throw new Exception(); 92 } 93 // 必ずデータベース切断 94 $dbh = null; 95 96} catch(Exeption $e) { 97 echo 'ただいま障害により大変ご迷惑をお掛けしております(_ _)'; 98 exit(); 99} 100

試したこと

上記の②から③に戻る際にlocation.hrefで戻るようにしているのですが、
ページキャッシュを無効化するために、ダミーのクエリパラメータを付けておくなどしたのですが、
表示されません。

補足情報(FW/ツールのバージョンなど)

・バージョン
PHP 7.1.23
mysql 5.6.43

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

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

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

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

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

guest

回答2

0

ベストアンサー

PHP

1$auto_id = $_POST['auto_id'];

とありますがlocation.hrefで遷移させてるから$_POSTパラメータがないんじゃないでしょうか?

投稿2019/09/30 06:13

hashikun54

総合スコア26

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

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

kpg

2019/09/30 07:08

hashikun54様 その通りと思われます。。。 ありがとうございます。 ただ、インラインフレームからPOSTパラメータを渡してページを戻すことはできないのでしょうか? formやinputに書き換えて見たのですができず、Bファイルないでformでページ遷移させようとするとインラインフレーム内でページが開かれてしまいます。。。
hashikun54

2019/09/30 13:02

iframeの外を更新する訳ですから、AファイルからPOSTリクエストを送ることになります。 window.parent.documentでiframeの外側を操作できるので、Aファイルにフォーム1つ設置して、Bファイルからsubmit()をコールすればいいですね。 Aファイル <form method="POST" name="myForm"> <input type="hidden" name="auto_id" value="<?=$auto_id?>"> Bファイル window.parent.document.myForm.submit(); formがiframeより上にないとダメなようです。 私ならPRGパターンで組んで$auto_idは$_POSTではなく$_SESSIONから取るように作ると思います。 その場合location.hrefで遷移させている箇所を、location.reload();に変えればいいです。
kpg

2019/10/01 02:10

hashikun54様 ご返信ありがとうございます。 教えていただいた方法でページがちゃんと遷移するようになりました。 本当にありがとうございます。 ただ、Aページにちゃんと遷移した後にAページの前のページに戻るとフォームの再送信という画面になってしまうようになってしまいました。。。 PRGパターンも初めて聞きましたので調べて試してみようと思います。
hashikun54

2019/10/01 03:12

『フォームの再送信』はPOSTリクエストで開いたコンテンツをリロードやブラウザバックで再表示した時に発生するものですのでPRGパターンは解決策になりますから、是非試してみて下さい。
guest

0

WHERE a.auto_id= ORDER BY

明らかに文法エラーですね

投稿2019/09/30 03:50

yambejp

総合スコア116679

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問