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

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

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

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

Q&A

解決済

2回答

2048閲覧

検索結果表示

shaobao

総合スコア33

PHP

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

0グッド

0クリップ

投稿2016/07/08 03:18

編集2016/07/08 03:40

こんにちは。

サイトない検索をphpで実装している。
検索ワードは、POSTで送信されてきたワードとGETで送信されてきたワードがあります。
両方の方法で送られてきたワードを検索結果表示できるようにするには、どのように実装すればよいでしょうかね?
また、スペースを入ったら、結果にも表示されるようにしたいです。

一応、データベースを利用して検索することになります。

<?php if($_POST["search"]): $_SESSION["s_res"] = array(); $where = " WHERE 1 AND"; $kensaku = htmlspecialchars($_POST['search']); $kensaku = trim($kensaku); $word = str_replace(" ", " ", $kensaku); $word = str_replace("'", "\'", $word ); $words = preg_split("/[ ]+/",$word ); $count = count($words); else: if($_GET["tag"]): $_SESSION["s_res"] = array(); $where = " WHERE 1 AND"; $kensaku = htmlspecialchars($_GET["tag"]); $kensaku = trim($kensaku); $word = str_replace(" ", " ", $kensaku); $word = str_replace("'", "\'", $word ); $words = preg_split("/[ ]+/",$word ); $count = count($words); else: $err = "検索タグワードが入力されていません"; endif; endif;

どなた方が分かれば教えてお願いいたします。

何卒宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/07/08 03:19

ソースコードを提示してください。
退会済みユーザー

退会済みユーザー

2016/07/08 03:35

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。 また、仕様が不明確です。データベースを利用して検索するのでしょうか。
guest

回答2

0

ベストアンサー

詳細な仕様が不明なので、どんな感じでSQLを組み立てれば良いか、雰囲気がつかめるソースだけ提示します。

php

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL); 4 5function h($string) 6{ 7 return htmlspecialchars($string, ENT_QUOTES, 'utf-8'); 8} 9 10function str2array($string) 11{ 12 $formatted = mb_convert_kana($string, 'KVas', 'utf-8'); 13 $arr = explode(' ', $formatted); 14 $res = []; 15 foreach ($arr as $v) { 16 if ('' != $v) { 17 $res[] = $v; 18 } 19 } 20 return $res; 21} 22 23function makeSql() 24{ 25 $arrFieldsForGet = ['f_get1', 'f_get2']; 26 $arrFieldsForPost = ['f_post1', 'f_post2']; 27 28 $get = str2array(filter_input(INPUT_GET, 'tag')); 29 $post = str2array(filter_input(INPUT_POST, 'search')); 30 31 $arrParams = []; 32 33 $sql = "SELECT * FROM table "; 34 $sql .= "WHERE 1 "; 35 36 $sqlGet = ''; 37 foreach ($get as $v) { 38 39 $arrOrSql = []; 40 foreach ($arrFieldsForGet as $field) { 41 $arrOrSql[] = "{$field} LIKE ?"; 42 $arrParams[] = sprintf("%%%s%%", $v); 43 } 44 45 $sqlGet .= sprintf(" AND (%s)", implode(' OR ', $arrOrSql)); 46 } 47 $sql .= $sqlGet; 48 49 $sqlPost = ''; 50 foreach ($post as $v) { 51 52 $arrOrSql = []; 53 foreach ($arrFieldsForPost as $field) { 54 $arrOrSql[] = "{$field} LIKE ?"; 55 $arrParams[] = sprintf("%%%s%%", $v); 56 } 57 58 $sqlPost .= sprintf(" AND (%s)", implode(' OR ', $arrOrSql)); 59 } 60 $sql .= $sqlPost; 61 62 return ['sql' => $sql, 'params' => $arrParams]; 63} 64?> 65<!DOCTYPE HTML> 66<html lang="ja"> 67 <head> 68 <meta charset="UTF-8"> 69 <title></title> 70 </head> 71 <body> 72 <h2>タグ(GET)</h2> 73 <form action="" action="get"> 74 <label for="tag">タグ</label> 75 <input type="text" name="tag" value="<?= h(filter_input(INPUT_GET, 'tag')); ?>" /> 76 <button type="submit">検索</button> 77 </form> 78 79 <h2>キーワード(POST)</h2> 80 <form action="" method="post"> 81 <input type="text" name="search" value="<?= h(filter_input(INPUT_POST, 'search')); ?>" /> 82 <button type="submit">検索</button> 83 </form> 84 85 <h2>出力</h2> 86 <h3>GET</h3> 87 <pre><?= h(filter_input(INPUT_GET, 'tag')); ?></pre> 88 89 <h3>POST</h3> 90 <pre><?= h(filter_input(INPUT_POST, 'search')); ?></pre> 91 92 <h3>SQL</h3> 93 <pre><?php var_dump(makeSql()); ?></pre> 94 </body> 95</html>

投稿2016/07/08 04:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shaobao

2016/07/08 05:51

kosuke_shibuyaさん この度、質問が分かりにくいにもかかわらず早速ご回答頂き誠にありがとうございます。 大変参考になります。 誠にありがとうございます。 今後とも何卒宜しくお願い致します。
shaobao

2016/07/11 03:07

こんにちは、複数テーブルから、tagとnameのフィールドからキーワードを検索するとき、sql文は、どう書けばよいでしょうか? すみません。教えて頂ければありがたいでございます。 宜しくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/07/11 03:13

テーブルの構造など具た的な情報を提示してください。また、本質問はすでに解決済みとなっていますし、タイトルと追加質問の内容は異なるものですので、あたらな質問を立てることをお勧めします。
shaobao

2016/07/11 04:15

新たに質問致しました。 コメントありがとうございました。 今後とも何卒宜しくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/07/11 04:45 編集

https://teratail.com/questions/40715 こちらの質問拝見しましたが… SQLインジェクションの脆弱性ありますし、TABLEの定義は明らかにされていませんね…。 私が提示したコードをもとに書き直されることをお勧めします。
guest

0

POSTとGETのキーが競合しなければ$_REQUESTで参照できます
ただし$_REQUESTは他の環境変数やセッションやクッキーも参照するのでご注意ください
優先順位は一般に
$_ENV > $_GET > $_POST > $_COOKIE > $_SESSION
となりますがvariables_orderの設定で任意に変更できるようです。

なお、厳密には参照値が配列となる場合もあるので例外処理を入れる必要があります。

投稿2016/07/08 03:37

yambejp

総合スコア114572

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

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

shaobao

2016/07/08 05:53

yambejpさん この度、ご回答いただき誠にありがとうございます。 参考になります。 誠にありがとうございます。 今後とも何卒宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問