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

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

ただいまの
回答率

90.33%

  • PHP

    21348questions

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

  • GET

    95questions

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

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

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 543

Makog

score 3

$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 = "北海道"');
と記載すると北海道が表示されます。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+5

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


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

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


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

<?php
$no='北海道';
var_dump('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"');
var_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
$no='北海道';
echo var_export('SELECT COUNT(*) AS count FROM test WHERE keyword = "$no"', true) . PHP_EOL;
echo 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 15:17

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

    キャンセル

  • 2017/01/27 15:18

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

    キャンセル

  • 2017/01/27 15:21

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

    キャンセル

  • 2017/01/27 15:22

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

    キャンセル

  • 2017/01/27 15:25

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

    キャンセル

  • 2017/01/27 15:27

    画面に表示されません

    キャンセル

  • 2017/01/27 15:32

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

    キャンセル

  • 2017/01/27 15:39

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

    キャンセル

  • 2017/01/27 15:46

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

    キャンセル

  • 2017/01/27 15:48

    ありがとうございます

    キャンセル

  • 2017/01/27 15:57

    kunaiさん。なるほど。

    キャンセル

  • 2017/01/27 15:59

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

    キャンセル

checkベストアンサー

+1

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


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

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

$no = urldecode($_GET["no"]);
$query = sprintf("SELECT COUNT(*) AS count FROM test 
    WHERE keyword='%s'",
    mysql_real_escape_string($no));
$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 15:12

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

    キャンセル

  • 2017/01/27 15:19

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

    キャンセル

+1

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


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

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


ではどうでしょう?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/27 15:17

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

    キャンセル

  • 2017/01/27 15:18

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

    キャンセル

  • 2017/01/27 15:22

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/27 16:04

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

    キャンセル

  • 2017/01/27 16:06

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

    キャンセル

  • 2017/01/27 16:21

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

    キャンセル

同じタグがついた質問を見る

  • PHP

    21348questions

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

  • GET

    95questions

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