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

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

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

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

PHP

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

データベース

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

443閲覧

PHPでデータベースのカラムが2つ以上あるテーブルの操作ができない

Kaiseiblog

総合スコア11

MySQL

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

PHP

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

データベース

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/04/21 09:55

環境

AWScloud9

やろうと思っていること

プログラミング言語の難しさを自由に投稿できる掲示板を作ろうと思っている

項目→プログラミング言語(htmlのinput のPOSTで送る)
→その言語の難易度やコメント(htmlのinput のPOSTで送る)

困っていること

上手くPHPとMySQLは連携できて、データベースとの接続も成功したのだが、

掲示板でsubmitとすると変な形で表示するようになってしまう。

変な感じというのは、2つのカラム(プログラミング言語を書いたカラムとその言語に対するコメントを書いたカラム)に文字を入力してsubmitしても、どちらの項目も片方ずつしか表示されない。

例えば、
プログラミング言語の場所に”PHP"と入力
プログラミング言語の難易度について一言に”少なからず〜”と入力してsubmitすると以下のようになってしまう。

これを無くして、一度のsubmitでどちらも表示できるようにする方法を知りたい

現在の様子

PHP

1<?php 2$username = 'root'; 3$password = 'orehakami'; 4 5$link = new PDO('mysql:host=localhost;dbname=difficulty;charset=UTF8;',$username, $password); 6 7 8if (array_key_exists('comment',$_POST)) { 9 $sql = 'INSERT INTO programing (comment) VALUES(:comment)'; 10 $result = $link->prepare($sql); 11 $result->bindParam(':comment',$_POST['comment']); 12 $result->execute(); 13 $result = null; 14 15} 16if (array_key_exists('language',$_POST)) { 17 $sql = 'INSERT INTO programing (language,comment) VALUES($_POST[language],$_POST[comment])'; 18 $result = $link->prepare($sql); 19 $result->bindParam(':language',$_POST['language']); 20 $result->execute(); 21 $result = null; 22 23} 24$sql = 'SELECT * FROM programing ORDER BY created_at DESC'; 25 26 27 28 29 30 31 32$result = $link->query($sql); 33 34$records = $result->fetchAll(); 35 36$result = null; 37 38$database = null; 39 40?> 41 <!DOCTYPE html> 42 <html lang="ja"> 43 <head> 44 <meta charset="utf-8"> 45 <title>Programing Language Difficulty</title> 46 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 47 <link href="style.css" rel="stylesheet"> 48 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> 49 </head> 50 <body class="mt-4"> 51 <div class="container"> 52 <h1><a href="booklist.php">Programing Difficulty</a></h1> 53 54 <h1>プログラミング言語の登録フォーム</h1> 55 <ul> 56 <ol> 57 <form action="index.php" method="POST" class="form-inline mb-2"> 58 <label>プログラミング言語</label> 59 <div class="form-group mr-2"> 60 <input type="text" name="language" class="form-control" placeholder="言語を入力" required > 61 </div> 62 </ol> 63 <ol> 64 <label>プログラミングの難易度について一言</label> 65 <div class="form-group mr-2"> 66 <input type="text" name="comment" class="form-control" placeholder="コメント" required > 67 </div> 68 </ol> 69 </div> 70 <button type="submit" name="submit_add_language" class="btn btn-primary">登録</button> 71 </form> 72 </ul> 73 <hr /> 74 75 <h2>プログラミングと難易度</h2> 76 <ul> 77 <?php 78 if($records) { 79 foreach ($records as $record) { 80 $language = $record['language']; 81 $comment = $record['comment']; 82 ?> 83 <h3>言語名:<?php print htmlspecialchars($language, ENT_QUOTES,"UTF-8"); ?></h3> 84 <p>難易度:<?php print htmlspecialchars($comment, ENT_QUOTES,"UTF-8"); ?></p> 85 <?php 86 } 87 } 88 ?> 89 </ul> 90 </div> 91 92 <!-- BootstrapなどのJavaScript --> 93 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 94 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> 95 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> 96 <script defer src="https://use.fontawesome.com/releases/v5.2.0/js/all.js" integrity="sha384-4oV5EgaV02iISL2ban6c/RmotsABqE4yZxZLcYMAdG7FAPsyHYAPpywE9PJo+Khy" crossorigin="anonymous"></script> 97 </body> 98 </html>

また

データベース名:difficulty
テーブル名:programing

という風になっておりテーブルのカラムは

+------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| language | varchar(100) | YES | | NULL | |
| comment | varchar(200) | YES | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
+------------+--------------+------+-----+-------------------+----------------+

このような感じになっている

試したこと

上記のコードで

PHP

1if (array_key_exists('comment',$_POST)) { 2 $sql = 'INSERT INTO programing (comment) VALUES(:comment)'; 3 $result = $link->prepare($sql); 4 $result->bindParam(':comment',$_POST['comment']); 5 $result->execute(); 6 $result = null; 7 8} 9if (array_key_exists('language',$_POST)) { 10 $sql = 'INSERT INTO programing (language,comment) VALUES($_POST[language],$_POST[comment])'; 11 $result = $link->prepare($sql); 12 $result->bindParam(':language',$_POST['language']); 13 $result->execute(); 14 $result = null; 15 16} 17

これが2つあるのが原因かと思い、1つにまとめるやり方を検索してみて色々と試行錯誤してみたものの原因が掴めなかった。

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

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

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

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

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

guest

回答2

0

$sql = 'INSERT INTO programing (language,comment) VALUES($_POST[language],$_POST[comment])';

ここ、プリペアドステートメントにすれば解決しそうな。

$sql = 'INSERT INTO programing (language,comment) VALUES(:language,:comment)';

ちなみに、bindParamじゃなくbindValueにしたらいいよ。

投稿2020/04/21 10:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

別々にINSERTしているからでは。
language,comment双方にNULL OKなのであればSQL一本で一気に入れてしまっていいです。
それに、2つ目は実値を(エスケープなく)そのままセットしていてパラメータないのにパラメータでセットしようとしてしまっています。
データ挿入したのでしたらデータの状態を直接SQL(SELECT文)実行して確認してください。表示されるのは登録されたデータなのですから。
「登録」と「表示」があるのでしたら、どちらかだけを単体で確認すると良いです。直接DBに対して登録した後に表示確認するとか。表示が確認できたら登録で同じレコードになるように登録するように組めば良いわけですから、問題の切り分けもできます。

あと、コードをコピペでそのまま使うのではなく、PHPマニュアルでそれぞれの機能の仕様を確認しながら理解して使わないと「原因が分からない」状態になります。SQLにもそれぞれドキュメントはあります。
書いた通りにしか動かないので仕様を知らずにプログラムは組めません。
例え他人が書いた記事を参考にするにしても、公開から現在までの経過日数や環境要件は気にするべきですし、Qiitaであれば評価数は気にしましょう。

投稿2020/04/21 10:03

編集2020/04/21 10:30
m.ts10806

総合スコア80854

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

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

Kaiseiblog

2020/04/23 06:45

直接SQL文を実行してみて解決しました。。確かにコードをコピペしてそのまま使うというのは勉強にならないのでやめようと思います。
m.ts10806

2020/04/23 06:53

意味を理解し使うのであれば効率、生産性、あと間違いない実装をするためにコピペは最善手段です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問