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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

735閲覧

Undefind variableエラーが解決できない

hmdnntr

総合スコア6

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/11/22 08:23

編集2019/11/22 09:15

前提・実現したいこと

PHPで入力フォームで入力した内容をデータベースに登録したいです。
自分で調べてもみたのですがどうしても解決できません。
insert文に問題があるのでしょうか。。

<追記>
エラーは解決できたのですが、入力内容がデータベースに登録されません。
毒に問題があるのかもわからない状態です。

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

エラーメッセージは表示されないが、入力内容がデータベースに登録がされていない

該当のソースコード

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>課題登録</title> </head> <body> <h1>新規課題登録</h1> <form action="database2.php" method="POST"> <p>No.</p> <input type="text" name="id" value="" size="50"> <br> <table border ='1'> <tr> <th width="100" nowrap>年度</th> <th width="100" nowrap>クラス</th> <th width="100" nowrap>回次</th> <th width="100" nowrap>種類</th> <th width="100" nowrap>ジャンル</th> <th width="100" nowrap>難易度</th> </tr> <tr> <th width="100" nowrap> <select name="year"> <option value="">2019</option> <option value="">2018</option> </select> <th width="100" nowrap> <select name="class"> <option value="">1</option> <option value="">2</option> <option value="">3</option> <option value="">4</option> <option value="">5</option> <option value="">6</option> <option value="">7</option> <option value="">8</option> <option value="">9</option> </select> <th width="100" nowrap> <select name="number"> <option value="">第1回</option> <option value="">第2-3回</option> <option value="">第4-5回</option> <option value="">第6-7回</option> <option value="">第8-9回</option> <option value="">第10回</option> <option value="">第11-12回</option> <option value="">第13-14回</option> <option value="">第15回</option> </select> <th width="100" nowrap> <select name="genre"> <option value="">出席課題</option> <option value="">基礎課題</option> <option value="">発展課題</option> </select> <th width="100" nowrap> <select name="mso"> <option value="">Word</option> <option value="">Excel</option> <option value="">PowerPoint</option> <option value="">その他</option> </select> <th width="100" nowrap> <select name="level"> <option value="">易しい</option> <option value="">普通</option> <option value="">難しい</option> </select> </tr> </table> <p>課題タイトル<br> <input type="text" name="practice" value="" size="50"> <p>期限<br> <input type="text" name="time" value="" size="50"> <p>含まれる内容(ねらい)<br> <input type="text" name="purpose" value="" size="200"> <p>サンプル・その他留意事項<br> <input type="text" name="other" value="" size="200"> <p>課題ファイル<br> <input type="text" name="file" value="" size="50"> <p><input type="submit" value="上記の内容で登録する"></p> </form> </body> </html>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>課題登録</title> </head> <body> <?php $con = mysqli_connect('localhost', 'root', '2019minato'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysqli_select_db($con,'test'); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysqli_query($con, 'SET NAMES utf8'); if (!$result) { exit('文字コードを指定できませんでした。'); } $id=filter_input(INPUT_GET,'id'); $year=filter_input(INPUT_GET,'year'); $class=filter_input(INPUT_GET,'class'); $number=filter_input(INPUT_GET,'number'); $mso=filter_input(INPUT_GET,'mso'); $genre=filter_input(INPUT_GET,'genre'); $level=filter_input(INPUT_GET,'level'); $practice=filter_input(INPUT_GET,'practice'); $time=filter_input(INPUT_GET,'time'); $purpose=filter_input(INPUT_GET,'purpose'); $other=filter_input(INPUT_GET,'other'); $file=filter_input(INPUT_GET,'file'); $result = mysqli_query($con,"INSERT INTO bank(id,year, class, number, mso, genre, level, practice, time, purpose, other, file) VALUES('$id', '$year', '$class', '$number', '$mso', '$genre', '$level', '$practice', '$time', '$purpose', '$other', '$file')"); if (!$result) { exit('データを登録できませんでした。'); } $con = mysqli_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> <p>登録が完了しました。<br /><a href="database1.php">戻る</a></p> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

kei344

2019/11/22 08:25

(質問文は編集できます)質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
hmdnntr

2019/11/22 09:09

申し訳ありません。編集いたしました。ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

たぶんNoticeをだしているのが

$result = mysqli_query($con,"INSERT INTO bank(id,year, class, number, mso, genre, level, practice, time, purpose, other, file) VALUES('$id', '$year', '$class', '$number', '$mso', '$genre', '$level', '$practice', '$time', '$purpose', '$other', '$file')");

の行だと思うんですが

issetで$_REQUESTをチェックしているあたりがロジックとしておかしいのでは?
isset時だけ$idにセットしていますが、逆にissetに引っかかった場合$idが未定義になります

PHP

1if (isset($_REQUEST["id"])){ 2$id = $_REQUEST['id']; 3} 4↓↓↓ 5$id=filter_input(INPUT_GET,'id');

のように書き換えてください。
また現在無条件でinsert文を発行していますが、条件分岐が必要かもしれません。
mysqli処理はダイレクトに値渡しするのではなくprepareで処理することをおすすめします
ちなみにmysqliをやめてpdo利用すれば参考になるサイトなど格段に多くなりますよ

投稿2019/11/22 08:34

yambejp

総合スコア114779

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

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

hmdnntr

2019/11/22 09:09

回答ありがとうございます!無事エラー文は表示されなくなりました。
guest

0

定義が無いだけですよ。
if文の中で$idを定義してます。
これではSQL文の所で、未定義の変数を使う事になります。

$id = "";
if () {
$id = ...
}

と書けば未定義にはなりませんね。

投稿2019/11/22 08:48

NEO_PLANETT-777

総合スコア333

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問