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

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

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

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

PHP

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

Q&A

解決済

3回答

1395閲覧

MySQLへのデータ登録に関して

penginer

総合スコア32

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/09/06 18:20

###前提・実現したいこと
回答を送信後別ページにヘッダ関数で移動するプログラムを作ろうとしています
###発生している問題・エラーメッセージ
ヘッダ関数で移動してもデータが書き込まれません。
尚、変数は全て値がセットされており、
ミスはありません

###該当のソースコード

//メインのソース include './post-att-pl.php'; header('Location: ./assesment-exhi.php'); exit();
//DB(MySQL)への書き込みソース $NOP_ALL = mysqli_real_escape_string($NOP_ALL); $gender_a = mysqli_real_escape_string($gender_a); $gender_b = mysqli_real_escape_string($gender_b); $gender_c = mysqli_real_escape_string($gender_c); $gender_d = mysqli_real_escape_string($gender_d); $gender_e = mysqli_real_escape_string($gender_e); $gender_f = mysqli_real_escape_string($gender_f); $gender_g = mysqli_real_escape_string($gender_g); $gender_h = mysqli_real_escape_string($gender_h); $gender_i = mysqli_real_escape_string($gender_i); $gender_j = mysqli_real_escape_string($gender_j); $select_attribute = mysqli_real_escape_string($select_attribute); $NOP_1 = mysqli_real_escape_string($NOP_1); $NOP_2 = mysqli_real_escape_string($NOP_2); $NOP_3 = mysqli_real_escape_string($NOP_3); $NOP_4 = mysqli_real_escape_string($NOP_4); $NOP_5 = mysqli_real_escape_string($NOP_5); $NOP_6 = mysqli_real_escape_string($NOP_6); $NOP_7 = mysqli_real_escape_string($NOP_7); $NOP_8 = mysqli_real_escape_string($NOP_8); $NOP_9 = mysqli_real_escape_string($NOP_9); $NOP_10 = mysqli_real_escape_string($NOP_10); $NOP_11 = mysqli_real_escape_string($NOP_11); $NOP_12 = mysqli_real_escape_string($NOP_12); $NOP_13 = mysqli_real_escape_string($NOP_13); $NOP_14 = mysqli_real_escape_string($NOP_14); $NOP_15 = mysqli_real_escape_string($NOP_15); $NOP_16 = mysqli_real_escape_string($NOP_16); $NOP_17 = mysqli_real_escape_string($NOP_17); $NOP_18 = mysqli_real_escape_string($NOP_18); $NOP_19 = mysqli_real_escape_string($NOP_19); $NOP_20 = mysqli_real_escape_string($NOP_20); $NOP_21 = mysqli_real_escape_string($NOP_21); $NOP_22 = mysqli_real_escape_string($NOP_22); $NOP_23 = mysqli_real_escape_string($NOP_23); $age_a = mysqli_real_escape_string($age_a); $age_b = mysqli_real_escape_string($age_b); $age_c = mysqli_real_escape_string($age_c); $age_d = mysqli_real_escape_string($age_d); $age_e = mysqli_real_escape_string($age_e); $age_f = mysqli_real_escape_string($age_f); $age_g = mysqli_real_escape_string($age_g); $age_h = mysqli_real_escape_string($age_h); $age_i = mysqli_real_escape_string($age_i); $age_j = mysqli_real_escape_string($age_j); $fond_a = mysqli_real_escape_string($fond_a); $fond_b = mysqli_real_escape_string($fond_b); $fond_c = mysqli_real_escape_string($fond_c); $fond_d = mysqli_real_escape_string($fond_d); $fond_e = mysqli_real_escape_string($fond_e); $fond_f = mysqli_real_escape_string($fond_f); $fond_g = mysqli_real_escape_string($fond_g); $fond_h = mysqli_real_escape_string($fond_h); $fond_i = mysqli_real_escape_string($fond_i); $fond_j = mysqli_real_escape_string($fond_j); $date_start = mysqli_real_escape_string($date_start); $con = mysqli_connect( 'localhost', 'root', 'ikiroot', 'orfc_db') or die(); mysqli_set_charset($con, 'utf8'); $sql = "INSERT INTO 2017 ( NOP_ALL,gender_a,gender_b,gender_c,gender_d,gender_e,gender_f,gender_g,gender_h,gender_i,gender_j, attribute,NOP_1,NOP_2,NOP_3,NOP_4,NOP_5,NOP_6,NOP_7,NOP_8,NOP_9,NOP_10,NOP_11,NOP_12,NOP_13,NOP_14,NOP_15,NOP_16,NOP_17,NOP_18,NOP_19,NOP_20,NOP_21,NOP_22,NOP_23, age_a,age_b,age_c,age_d,age_e,age_f,age_g,age_h,age_i,age_j,fond_a,fond_b,fond_c,fond_d,fond_e,fond_f,fond_g,fond_h,fond_i,fond_j,date_start) VALUES ( '".$NOP_ALL."', '".$gender_a."', '".$gender_b."', '".$gender_c."', '".$gender_d."', '".$gender_e."', '".$gender_f."', '".$gender_g."', '".$gender_h."', '".$gender_i."', '".$gender_j."', '".$select_attribute."', '".$NOP_1."', '".$NOP_2."', '".$NOP_3."', '".$NOP_4."', '".$NOP_5."', '".$NOP_6."', '".$NOP_7."', '".$NOP_8."', '".$NOP_9."', '".$NOP_10."', '".$NOP_11."', '".$NOP_12."', '".$NOP_13."', '".$NOP_14."', '".$NOP_15."', '".$NOP_16."', '".$NOP_17."', '".$NOP_18."', '".$NOP_19."', '".$NOP_20."', '".$NOP_21."', '".$NOP_22."', '".$NOP_23."', '".$age_a."', '".$age_b."', '".$age_c."', '".$age_d."', '".$age_e."', '".$age_f."', '".$age_g."', '".$age_h."', '".$age_i."', '".$age_j."', '".$fond_a."', '".$fond_b."', '".$fond_c."', '".$fond_d."', '".$fond_e."', '".$fond_f."', '".$fond_g."', '".$fond_h."', '".$fond_i."', '".$fond_j."', '".$date_start."' )"; mysqli_query($con, $sql); mysqli_close($con);

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
開発環境はXAMPPの最新版とWindows10です

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

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

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

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

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

A.Ichi

2017/09/06 23:11

INSERT INTO `2017` (・・・ としてみては?
guest

回答3

0

ベストアンサー

header('Location: ./assesment-exhi.php');なので、質問の文意から意図するとSQL操作を行っているPHPファイルが、assesment-exhi.phpだとして進めます。

「エラーが出ていない」とありますが、mysqli_real_escape_string(コネクション, 文字列)ですのでエラーは画面に表示されていないだけで発生していると思います。

下記のPHPコードを試してみてください。

php

1// assesment-exhi.php 2 3//DB接続 4$con = mysqli_connect( 'localhost', 'root', 'ikiroot', 'orfc_db'); 5if (mysqli_connect_errno()) { 6 echo '接続失敗:'.mysqli_connect_error()."\n"; 7 exit(); 8} 9 10mysqli_set_charset($con, 'utf8'); 11 12//エスケープ 13$NOP_ALL = mysqli_real_escape_string($con, $NOP_ALL); 14... 15 16//SQLクエリ 17$sql = ... 18... 19 20//SQL実行 21if (mysqli_query($con, $sql) === false) { 22 echo "DB追加失敗\n"; 23} 24 25mysqli_close($con);

投稿2017/09/06 18:56

Tomak

総合スコア1652

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

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

penginer

2017/09/07 02:48

ありがとうございました。 DBへの接続は問題なく、 追加の失敗が原因だとは判明したのですが 原因が思い当たりません。 厚かましいことは重々承知しておりますが、 こういう時のよくある原因 というのはございますでしょうか?
sazi

2017/09/07 04:35

FF外から失礼します。 SQL文生成後の$sqlを文字列として出力し、それをMysqlで直接実行してみれば何か分かるかもしれませんね。 同一トランザクションでこの処理の前処理で何か行っていてそれが原因なら、エラーは起きないので、この処理の直前でコッミトしておく必要がありますが。 よくあるのは、文法エラーやキー重複です。
Tomak

2017/09/07 19:41

SQL文のテーブル名が数字のみなので、エスケープ(`バッククォート)が必要だと思います。数字のみのテーブル名、フィールド名はエスケープする必要があります。 $sql = 'INSERT INTO `2017` (...) VALUES (...)'; プログラムコードは自身で書いたソースコードを過信しないで、ひとつひとつ正しいコードなのか確かめながら進めてどのコードでエラーが起きているのか確定することが大事です。正しいと信じてしまってエラーを見つけられず何時間も同じコードとにらめっこすることがあったりします。 めんどうで遠回りに見えても、基本に忠実になることが早道かと思います。 SQL文実行もきちんとエラー処理を入れてみてください。多分エスケープしていないことによるSQL実行エラーも下記のようにエラー処理を行っていれば簡単に見つかります。 if (mysqli_query($con, $sql) === false) { echo "DB追加失敗:".mysqli_error($con)."\n"; }
guest

0

ユーザー側でエスケープ処理をするよりprepareで処理すれば
問題の切り分けができると思います

投稿2017/09/07 01:19

yambejp

総合スコア114747

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

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

0

回答にはなりませんが、気になったので、念のために書いておきます。
メインのソース、これを仮に assesment-complete.php、リダイレクト先が assesment-exhi.php だとして話を進めます。

PHP の header() 関数はレスポンスヘッダに追加する関数です。が、Location ヘッダが追加されたときに、ステータスコードを自動的に 200 OK から 302 Found に変えます。
で、このレスポンスがクライアントに届くと、ステータスコード 302 からリダイレクトすべきと判断し、レスポンスヘッダに乗っていた Location で示された URL にリダイレクトします。

つまり、「ヘッダ関数で移動」と書かれていますが、「移動」はサーバ内で完結しているのではなく、一旦 assesment-comlete.php に来たリクエストはブラウザに返され、その後、assesment-exhi.php に別のリクエストが飛んできます。
assesment-exhi.php の中でセットしている $NOP_ALL などの値がどこからやってくるのか、提示されているソースからは読み取れませんが、少なくとも、ブラウザのリクエストには乗っていない、すなわち、$_POST['NOP_ALL'] などと拾うことはできません。

このあたり、大丈夫でしょうか。

投稿2017/09/06 20:59

unau

総合スコア2468

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問