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

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

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

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

Q&A

解決済

2回答

825閲覧

表示が期待どおり表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2019/12/07 06:18

編集2019/12/07 08:33

PHPを参考書を利用して勉強しています。表示はされるのですが期待どおり
に表示されません。
winndows10、Notepad++,XAMPP,使っています。

期待される表示:
戻る

実際の表示:
イメージ説明

「input_do.php」が参考書のコードです。これを実行すると写真のような「Notice: Undefined ...index」が表示されて、その下に期待される表示がされます。
「input_do_1.php」のようにすると期待された表示になります。本来なら、コメントを
削除しても正常に表示されるはずですが、「Notice: Undefined ...index」が表示されます。

<?phprequire('dbconnect.php'); ...以下省略      としても期待どおりに表示されます。 <?php require('dbconnect.php'); ...以下省略      とすると期待どおりに表示されません。 どこが悪いのか教えてください。 お願いいたします。 ```php //dbconnect.php <?php $db = mysqli_connect('localhost', 'root', 'SQL6naka26', 'mydb') or die(mysqli_connect_error()); mysqli_set_charset($db, 'utf8'); ?>
```php //input_do.php <?php require('dbconnect.php'); mysqli_set_charset($db, 'utf8'); $sql = sprintf('INSERT INTO my_items SET maker_id=%d, item_name="%s", price=%d, keyword="%s"', mysqli_real_escape_string($db, $_POST['maker_id']), mysqli_real_escape_string($db, $_POST['item_name']), mysqli_real_escape_string($db, $_POST['price']), mysqli_real_escape_string($db, $_POST['keyword']) ); mysqli_query($db, $sql) or die(mysqli_error($db)); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <link rel="stylesheet" type="text/css" href="style.css" /> <title>商品登録</title> </head> <body> <div id="wrap"> <div id="head"> <h1>商品登録</h1> </div> <div id="content"> <p>商品を登録しました</p> <p><a href="index.php">一覧に戻る</a></p> </div> <div id="foot"> <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O SPACE, Mynavi" /></p> </div> </div> </body> </html>

php

1//input_do_1.php 2 3<?php//require('dbconnect.php'); 4 5 $db = mysqli_connect('localhost', 'root', 'SQL6naka26', 'mydb') or 6 die(mysqli_connect_error()); 7 8 mysqli_set_charset($db, 'utf8'); 9 10 $sql = sprintf('INSERT INTO my_items SET maker_id=%d,item_name="%s", 11 ,price=%d,keyword="%s"', 12 mysqli_real_escape_string($db, $_POST['maker_id']) , 13 mysqli_real_escape_string($db, $_POST['item_name']), 14 mysqli_real_escape_string($db, $_POST['price']) , 15 mysqli_real_escape_string($db, $_POST['keyword'])); 16 17 mysqli_query($db, $sql) or die(mysqli_error($db)); 18?> 19 20<!DOCTYPE html> 21<html> 22<head> 23 <meta charset="UTF-8" /> 24 <link rel="stylesheet" type="text/css" href="style.css" /> 25 <title>商品登録</title> 26</head> 27 28</head> 29 30<body> 31 <div id="wrap"> 32 <div id="head"> 33 <h1>商品登録</h1> 34 </div> 35 36 <div id="content"> 37 <p>商品を登録しました</p> 38 39 </div> 40 41 <div id="foot"> 42 <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O SPACE, Mynavi" /></p> 43 </div> 44 45 </div> 46</body> 47</html> 48

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

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

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

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

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

m.ts10806

2019/12/07 06:24 編集

>Xammp そんなものはPHP界隈にはありませんよ。 XAMPPです。このレベルを間違えるといつか大変なミスをおかします。 あと、当該エラーについては調べられたのでしょうか? 特に珍しいものではなく、初学者がよく出会うエラー(正確にはNotice)の1つであるため、幾らでも探しようがあるはずです。 https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5
退会済みユーザー

退会済みユーザー

2019/12/07 08:37

すみません。一応3時間以上はネットで検索してやってみましたがうまくいきませんでした。
m.ts10806

2019/12/07 08:59 編集

何をどう検索して何を試して何が起きたのか書かれないと何も他者には伝わらないので。 (というかタイトルも問題に特化してないのでよろしくはないですけどね。sanchu52さんの過去質問にほぼ同じタイトルがまあまあ並んでるし)
guest

回答2

0

ベストアンサー

input_do.phpを呼び出すフォームのHTML次第ですけど、
現状から言えることだけ。

同じNoticeが再現できるコード。

php

1$ar = []; 2$ar["a"] = "hoge"; 3echo $ar["b"]; 4

Notice: Undefined index: XXXXX

訳:XXXXXというインデックスは未定義です

配列に定義されていないキーにアクセスしているためのNoticeです。

Noticeの内容からすると$_POSTに入ってきてないキーにアクセスしようとしているっぽいですね。

もしinput_do.phpをブラウザから直に実行しているのでしたら当然です。
method=postという指定があるformから送信したときに初めてform内の情報が$_POSTに入ります。

どのような書籍を参考にしたのか分かりませんが、
書籍が指示している「実行」とはあくまで「input_do.phpを呼び出すformを入力して送信ボタンを押す」ではないでしょうか。
よく読んでみてください。
さすがに$_POSTを利用するプログラムを直に実行させようとする書籍はないと思います。

投稿2019/12/07 09:07

m.ts10806

総合スコア80842

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

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

退会済みユーザー

退会済みユーザー

2019/12/07 10:29

ありがとうございます。 $sql = sprintf('INSERT INTO my_items SET maker_id=%d, item_name="%s", price=%d, keyword="%s"', mysqli_real_escape_string($db, $_POST['maker_id']), mysqli_real_escape_string($db, $_POST['item_name']), mysqli_real_escape_string($db, $_POST['price']), mysqli_real_escape_string($db, $_POST['keyword']) ); mysqli_query($db, $sql) or die(mysqli_error($db)); をif (!empty($_POST["submit"])) {}でくくる。 if (!empty($_POST["submit"])) { $sql = sprintf('INSERT INTO my_items SET maker_id=%d, item_name="%s", price=%d, keyword="%s"', mysqli_real_escape_string($db, $_POST['maker_id']), mysqli_real_escape_string($db, $_POST['item_name']), mysqli_real_escape_string($db, $_POST['price']), mysqli_real_escape_string($db, $_POST['keyword']) ); mysqli_query($db, $sql) or die(mysqli_error($db)); } これで期待通りの表示になりました。 参考URL:https://qiita.com/wakahara3/items/bb7c8d7a1673b161abe7参考にさせて頂きました。
m.ts10806

2019/12/07 10:52

解決されたようで何よりです。 ただ、SELECT以外ではデータの更新が走りますので、何かあった時にロールバックできるような仕組みが必要です。トランザクションーコミットorロールバックで調べて確実に実装してください。 ※あとmysqli系よりもPDOのほうが参考記事が多く作りやすいので。
退会済みユーザー

退会済みユーザー

2019/12/07 11:14

おしゃる通り、これを実行する前に「input.php」を実行したあとに「input_do.php」が出てきました。 初心者ですのであれこれできません。1通りphpを勉強してからトランザクションーコミットorロールバック の実装も勉強したいと思います。 ネットで色々見たつもりでしたが、teratailにも同じ質問がありました。 回答くださる方に調べてみたの?とよくいわれますね。 ここに来るときは1週間は掛かっています。 丸投げみたいなことを言われるとめげますね。 丁寧な説明有り難うございました。
m.ts10806

2019/12/07 11:31

>丸投げみたいなことを言われると 調べたこと、試したことがきちんと書いていれば問題ないと思います。 質問を見る人は完全に赤の他人ですので質問者が何をして質問に至っているかは分かりません。 「調べたけど分かりません」だけでは誰にも何も伝わりませんからね。 本当に調べず試さず質問してくる人との区別はつきません。 それを説明することは質問者の義務でもあります。 初心者でも「こういうキーワードで調べた」とか「こういう記事を見た」くらいは書けますよね? 調べただけで出来ないのは当然なので何かしら試したはずです。 その試したことで起きたことをきちんと書くこと。 それがアドバイスを得やすくなるコツです(「質問するときのヒント」のページにしっかり書いてあります)
m.ts10806

2019/12/07 11:34 編集

>初心者ですのであれこれできません。 ただ、「望ましくない実装」「あまり使われない実装」で覚えても現場では使えませんし コードの質も上がっていかないのでやはり「やるべき実装」を学習すべきと思います。 書籍は執筆時点では最新だとしても出版時点では既に古くなっています。
退会済みユーザー

退会済みユーザー

2019/12/07 11:37

頑張ります。
guest

0

<?php require('dbconnect.php'); ...以下省略      とすると期待どおりに表示されません。

PHP

1 ↓ 全角空白がある 2<?php require('dbconnect.php');

投稿2019/12/07 06:26

kei344

総合スコア69398

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問