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

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

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

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

PHP

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

Q&A

2回答

5512閲覧

入力した値がデータベースの結果に反映されない

sa-t

総合スコア4

MySQL

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

PHP

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

0グッド

0クリップ

投稿2021/05/30 12:05

編集2021/06/01 00:15

php

1<?php 2 3$host = 'localhost'; 4$username = 'root'; 5$passwd = 'root'; 6$dbname = 'codecamp'; 7 8$link = mysqli_connect($host,$username,$passwd,$dbname); 9 10var_dump($link); 11var_dump($_POST); 12 13if(isset($_POST['name'],$_POST['price'])===TRUE){ 14 echo "isset true".PHP_EOL; 15 $name=$_POST['name']; 16 $price=$_POST['price']; 17 18 $sql="INSERT INTO goods_table(goods_name,price) VALUES ('$name','$price')"; 19 echo $sql.PHP_EOL; 20 //クエリを実行する 21 mysqli_query($link,$sql); 22 23 print '追加成功'; 24}else{ 25 //初期 26 print '追加したい商品の名前と価格を入力してください'; 27} 28 29//接続が成功した場合 30if($link){ 31 32 //文字化け防止 33 mysqli_set_charset($link,'utf8'); 34 35 $query = 'SELECT goods_name,price FROM goods_table'; 36 37 //クエリを実行します 38 $result = mysqli_query($link,$query); 39 40 //1行ずつ結果を配列で取得します 41 while($row = mysqli_fetch_array($result)){ 42 $goods_data[] = $row; 43 } 44 45 //結果セットを開放します 46 mysqli_free_result($result); 47 48 //接続を閉じます 49 mysqli_close($link); 50 51//接続失敗した場合 52}else{ 53 print 'DB接続失敗'; 54} 55 56?> 57 58<!DOCTYPE html> 59<html lang="ja"> 60<head> 61 <meata charset = "utf-8"> 62 <title>vol29,4</title> 63 <style type="text/css"> 64 table, 65 td, 66 th{ 67 border: solid black 1px; 68 } 69 70 table{ 71 width: 200px; 72 } 73 </style> 74</head> 75 76<body> 77 <form method="post"> 78 商品名:<input type="text" name="name"> 79 価格:<input type="text" name="price"> 80 <input type="submit" value="送信"> 81 </from> 82 <table> 83 <tr> 84 <th>商品名</th> 85 <th>価格</th> 86 </th> 87 <?php 88 foreach($goods_data as $value) { 89 ?> 90 <tr> 91 <td><?php print htmlspecialchars($value['goods_name'],ENT_QUOTES,'utf-8'); ?></td> 92 <td><?php print htmlspecialchars($value['price'],ENT_QUOTES,'utf-8'); ?></td> 93 </tr> 94 <?php 95 } 96 ?> 97 </table> 98 99</body> 100</html>

イメージ説明
イメージ説明
イメージ説明

1枚目の画像は作成すべきサンプルとなっています。
2枚目の画像は自分で作成したものとなっており、送信ボタンを押しても結果に反映されませんでした。
3枚目の画像は```php
var_dump($link);
var_dump($_POST);
echo "isset true".PHP_EOL;
echo $sql.PHP_EOL;

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

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

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

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

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

YT0014

2021/05/30 12:58

「1枚目の画像」は、どのような由来なのでしょうか? 修正前に記録しておいたのですか?作成すべき画面のサンプルですか?他者が管理している実際のサイトなどですか? また、「入力しても表示しません。」とありますが、商品名と価格は、入力されているようですが、送信はクリックされたのでしょうか?
sa-t

2021/05/30 13:04

1枚目の画像は、作成すべきサンプルです。 送信ボタンを押しても表記されているものは変わりませんでした。 ドキュメントはこれから確認してきます。
YT0014

2021/05/30 17:38

2枚目の画像は、送信クリック後のものでしょうか? もし、違うのなら、送信クリック後の画像をご提示ください。
退会済みユーザー

退会済みユーザー

2021/05/31 01:59 編集

mysqli_*とmysql_*の混在が見られます。mysqli_*のみにしましょう。mysql_query($link,$sql); は古いAPIなので使ってはいけません。iありとなしに気をつけましょう。
guest

回答2

0

$_postという変数はどこで定義されてますか?
$_POST
フォームの処理

PHPにおいて、関数名は大文字小文字大別しませんが、

php

1function test(){ 2 echo __METHOD__.PHP_EOL; 3} 4test(); 5TEST(); 6Test(); 7TEst(); 8TESt(); 9TesT();

変数は大別します。

php

1<?php 2$test = 't'; 3echo $test.PHP_EOL; 4echo $TEST.PHP_EOL; 5echo $Test.PHP_EOL; 6echo $TEst.PHP_EOL; 7echo $TESt.PHP_EOL; 8echo $TesT.PHP_EOL; 9

もちろん大別しないからとコードの可読性の観点から雑に書くべきではなく、コピペするくらいの慎重さは必要です。

あと、学習中・開発中はエラー出力するような設定にし、デバッグしてください。
デバッガ入れるのが良いですが、最低でもvar_dump()やechoなど適宜入れる手動デバッグは覚えること。

PHP

1<?php 2 3$host = 'localhost'; // データベースのホスト名又はIPアドレス 4$username = 'root'; // MySQLのユーザ名 5$passwd = 'root'; // MySQLのパスワード 6$dbname = 'codecamp'; // データベース名 7 8$link = mysqli_connect($host, $username, $passwd, $dbname); 9var_dump($link); 10var_dump($_post); 11var_dump($_POST); 12if(isset($_post['name'],$_post['price'])===TRUE){ 13echo "isset true".PHP_EOL; 14 $name = $_post['name']; 15 $price = $_post['price']; 16 17 $sql = "INSERT INTO goods_table (goods_name,price) VALUES ('$name','$price')"; 18echo $sql.PHP_EOL; 19 20 //クエリを実行 21 var_dump(mysql_query($link,$sql)); 22 23 print '追加成功'; 24}else{ 25 //初期 26 print '追加したい商品の名前と価格を入力してください'; 27} 28

※とりあえず前半だけ。

SQLを扱う場合は、PHPから実行する前に必ずDB直に実行してください。
DBはPHPなどアプリケーションからすると外部の仕組みなので、直に実行して想定の結果を得られないのでしたら、PHPから実行しても想定の結果は得られません。
外部の仕組みなので、意図的にエラーを捕捉し出力する実装しないと本質的なエラーは見せてくれません。
エラーハンドリング必須です。
INSERTの結果を確認せずに「成功」と出力していて本当に成功なのか?と言う点も考えてほしい。

学習目的かもしれませんが、SQLインジェクション可能な実装もよろしくないとは思います。
PHPでデータベースに接続するときのまとめ#"SELECT * FROM users WHERE id = '$id'" のように変数展開を使ってSQL文を組み立てている

あと、mysqliでコネクトしておきながらmysql_queryという実装の不整合が今回問題としては大きそうですね。
エラー出力してればPHP7以降に削除された機能なので気づけるのではと思いますが(そもそもinsert実行するifに入ってなければ気づけない)。

PHPマニュアルから抜粋

警告
この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました

HTML的な観点指摘すると、bodyタグより前に出力があるのもよろしくはないです。


つまり、結構めちゃくちゃということですね。。。

プログラムは書いた通りにしか動かないので、コピペツギハギでは何もできません。
コピペするにしても、理解して正しく使うようにしてください。
既に指摘があるようにドキュメント確認は必須です。

投稿2021/05/30 21:43

編集2021/05/30 21:46
m.ts10806

総合スコア80875

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

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

0

https://www.php.net/manual/ja/function.mysql-query.phpより。

それ以外の SQL 文 INSERT, UPDATE, DELETE, DROP などでは、 mysql_query() は成功した場合に true 、エラー時に false を返します。

SELECTは正常にできているようなので、MySQLへの接続が失敗しているわけではなさそうです。
そうであるならば、INSERTに失敗しているとまず考えるべきです。
mysql-queryの戻り値をprintするなりして確認してください。
falseになっているのであれば、INSERT実行時に何らかのエラーが発生しています。
発生したエラーはmysql_error関数を実行すると取得できます。
https://www.php.net/manual/ja/function.mysql-error.php
これもprintしてみて発生しているエラーメッセージを確認し、適切に対処してください。

投稿2021/05/30 14:22

hope_mucci

総合スコア4447

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

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

m.ts10806

2021/05/30 21:44

色々思うところ書いてたら長くなりそうなのとマークダウン使いたいので回答に移行しました。あくまで副読本的に読んでもらえたらと(hope_mucciさんの回答で解決は可能です)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問