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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

1429閲覧

memo=" ' . $_POST['memo'] . ' " の意味がわからない

pikumin777

総合スコア13

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2019/09/20 13:34

現在、PHP、SQLで簡単なメモ帳を作ろうとしているのですが、以下のサンプルコードに関して
memo=" ' . $_POST['memo'] . ' "の部分がどうしてもわかりません。
なぜ、memo="$_POST['memo']"ではなく、このような形になるのでしょうか?
ご教授ください。

「imput.html」

<meta http-equiv="content-type" charset="utf-8"> <main> <h2>Practice</h2> <form action="input_do.php" method="post"> <textarea name="memo" cols="50" rows="10" placeholder="自由にメモを残してください"></textarea><br> <button type="submit">登録する</button> </form> </main>

「input_do.php」

<?php try { $db = new PDO("mysql:dbname=mydb;host=localhost;charset=utf8","root","root"); $db->exec('INSERT INTO memos SET memo="'.$_POST['memo'].'",created_at=NOW()'); } catch(PDOException $e) { print( "DB接続エラー: ".$e->getMessage()); } ?>

イメージ説明

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

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

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

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

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

guest

回答2

0

ソースコードに付いている色を確認してください。

'INSERT INTO memos SET memo="'で1つの文字列、'",created_at=NOW()'で1つの文字列で、その間に$_POST['memo']を置いて連結しているだけです。


もっとも、こんな$_POSTの中身をSQLに展開するようなコードは書いてはいけません(SQLインジェクションという脆弱性を含んでいます)。'INSERT INTO memos SET memo=?,created_at=NOW()'prepareして、executeの際に$_POST['memo']をはめ込んでください。

php

1$stmt = $db->prepare('INSERT INTO memos SET memo=?,created_at=NOW()'); 2$stmt->execute($_POST['memo']);

投稿2019/09/20 13:40

maisumakun

総合スコア145183

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

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

pikumin777

2019/09/20 14:09

maisumakun様、解答ありがとうございます。 今ようやく理解できました! セキュリティのご指摘もしっかり受け止め、改善していきたいと思います!
guest

0

ベストアンサー

'INSERT INTO memos SET memo="'

$_POST['memo']

'",created_at=NOW()'
の3つを文字列連結するためです。
シングルクォートとダブルクォートが混在して混乱しやすいので注意してください。

以下のようなINSERT文を使おうとしているのですが

INSERT INTO memos SET memo="xxx", created_at=NOW()

xxxの部分は固定ではなく、外部から受け取ったデータ、つまり変数に保存されている値を使用します。

そのため、文字列連結してINSERT文を作成している、ということです。

投稿2019/09/20 13:41

dice142

総合スコア5158

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

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

pikumin777

2019/09/20 14:06

dice142様、解答ありがとうございます。 今ようやく理解できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問