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

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

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

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

PHP

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

Q&A

解決済

4回答

1283閲覧

GETで取得した日本語が入らない

Makog

総合スコア11

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

PHP

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

0グッド

0クリップ

投稿2017/01/27 06:03

$no = urldecode($_GET["no"]);
$result = mysql_query('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"');
で記載すると何も表示されません。

$no = urldecode($_GET["no"]);
$result = mysql_query('SELECT COUNT(*) AS count FROM test WHERE keyword = "北海道"');
と記載すると北海道が表示されます。

どう記載すればいいのか全く分からず困ってます。
宜しくお願いいたします。

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

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

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

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

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

guest

回答4

0

PHP

1$result = mysql_query('SELECT COUNT(*) AS count FROM test WHERE keyword = "' . $no . '"');

とすれば質問に記載のものであれば動くと思います。
※ ただ、SQL文を$_GETの値をもとに文字列で作成するのはお勧めしません。SQL インジェクションの脆弱性を生むのでやめましょう。

PHP

1var_dump('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"'); 2var_dump('SELECT COUNT(*) AS count FROM test WHERE keyword = "' . $no . '"');

としてみれば、なぜダメなのかが解ると思います。
※ちなみに日本語でなくてもだめです。

PHP

1<?php 2$no='北海道'; 3var_dump('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"'); 4var_dump('SELECT COUNT(*) AS count FROM test WHERE keyword = "' . $no . '"');

実行結果

string(56) "SELECT COUNT() AS count FROM test WHERE keyword = "$no""
string(62) "SELECT COUNT(
) AS count FROM test WHERE keyword = "北海道""

PHP

1<?php 2$no='北海道'; 3echo var_export('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"', true) . PHP_EOL; 4echo var_export('SELECT COUNT(*) AS count FROM test WHERE keyword = "' . $no . '"', true) . PHP_EOL;

実行結果

'SELECT COUNT() AS count FROM test WHERE keyword = "$no"'
'SELECT COUNT(
) AS count FROM test WHERE keyword = "北海道"'

投稿2017/01/27 06:10

編集2017/01/27 06:55
Y.H.

総合スコア7914

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

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

Makog

2017/01/27 06:17

試したのですが駄目でした
Y.H.

2017/01/27 06:18

何がどうダメだったのですか?
Y.H.

2017/01/27 06:21

回答に追記した var_dump() の2行を mysql_query()の前に入れて結果を質問に追記してください。
Makog

2017/01/27 06:22

空の状態で表示されません
Y.H.

2017/01/27 06:25

何が「空の状態」なのでしょうか? こちらではあなたの端末の結果を見ることができないので、 結果を詳細に何も省略せず記載ください。
Makog

2017/01/27 06:27

画面に表示されません
Makog

2017/01/27 06:32

$no = urldecode($_GET["no"]);を echo $no で記載するとちゃんと表示されます また $sql = "SELECT * FROM movie test WHERE keyword = '$no'"; で記載するとちゃんと表示されます。 $result = mysql_queryの記載の仕方だと思うのですが
Y.H.

2017/01/27 06:39

なにが表示されないの?という問いに対して「何も表示されない」との回答や、いきなりtable movieが出てきたりしてよくわからないです。 申し訳ありませんが私ではお役に立てそうにないです。
kunai

2017/01/27 06:46

多分ですが。var_dumpだと、echo等の順番に関係なく、responseの先頭で出力されてしまう為、デバッグメッセージを記載した順で見ていると、「この後にvar_dump書いたはずだけど何も書かれていない」という事になるのだと思います。 そういう事もあって、デバッグ出力を回答する必要がある時は私はvar_dumpではなくvar_export($var, true)で書くようにしています。
Makog

2017/01/27 06:48

ありがとうございます
Y.H.

2017/01/27 06:57

kunaiさん。なるほど。
Y.H.

2017/01/27 06:59

回答に追記した一番下の実行結果の差を見てもらえれば、どういうSQL文を作成・実行しているのが解ると思います。
guest

0

なんとか解決しました
初心者質問ですみませんでした

投稿2017/01/27 07:00

Makog

総合スコア11

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

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

kunai

2017/01/27 07:04

初心者は質問したらダメなんてことはないので、今後も気にせず質問してください。 ただ、初心者と自覚があるのであれば、質問時に初心者アイコンを付けるチェックがあるはずですので、それを使われる事をお勧めします。 相手が初心者の方だとわかっていれば、回答内容についても普段説明する前段階から説明を入れる、等の気配りも出来ますので。 あと、出来ればどのような方法で解決したのか、結局何が問題だったのかと言ったことを残していただけると、同様の不具合で悩まれ、検索した結果このページを開いた方への手助けになると思います。
date

2017/01/27 07:06

kunaiさんの回答にありますようにmysqlは非推奨なので、このやり方で固定にならないうちにmysql_iなどに変えた方がいいですよ。 後できれば、なんでだめで、どうやって解決したのかを入れて置いてほしいです
Makog

2017/01/27 07:21

ご親切にありがとうございます 囲みかたの問題でした。 mysql_i等を勉強します
guest

0

PHP

1$result = mysql_query('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"');

mysql_query が '' で SQL を記述していますから、$no は展開されません。
結果として、keyword が '$no' である件数を取得しようとしているので、0件でしょう。

PHP

1$result = mysql_query("SELECT COUNT(*) AS count FROM test WHERE keyword = '$no'");

ではどうでしょう?

投稿2017/01/27 06:12

tacsheaven

総合スコア13703

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

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

Makog

2017/01/27 06:17

試したのですが駄目でした
kunai

2017/01/27 06:18

'$no'だと、$noが展開されないのでは
Makog

2017/01/27 06:22

”” ’’でも試しているのですが表示されず駄目でした
guest

0

ベストアンサー

PHP

1$no = urldecode($_GET["no"]); 2echo "no is ".$no; 3echo "_GET is ".var_export($_GET, true);

とかして値が渡っているか見てみたらよいのでは。

追記
クエリストリングから来た文字をそのままSQLクエリに使う事はセキュリティ上問題があるので、以下のような形ではどうでしょうか。

PHP

1$no = urldecode($_GET["no"]); 2$query = sprintf("SELECT COUNT(*) AS count FROM test 3 WHERE keyword='%s'", 4 mysql_real_escape_string($no)); 5$result = mysql_query($query);

※ただ、mysql_query等のmysql_系functionはPHP5.5.0で非推奨になっており、PHP7では使えません。
出来ればmysqli_系functionを使われた方が、今後の為に良いかと思います。
http://php.net/manual/ja/function.mysql-query.php
http://php.net/manual/ja/mysqli.query.php

投稿2017/01/27 06:06

編集2017/01/27 06:30
kunai

総合スコア5405

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

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

Makog

2017/01/27 06:12

echo $no で記載するとデコードされた文字がちゃんと出ます
kunai

2017/01/27 06:19

なんか投稿がおかしくなっていますね。。ちゃんと出るのであれば、Y.H.さんの回答のようにプリペアードステートメントを使われるとよいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問