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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

Q&A

解決済

2回答

2782閲覧

PHPでの検索フォームでの作成

退会済みユーザー

退会済みユーザー

総合スコア0

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

0グッド

1クリップ

投稿2018/06/16 10:17

編集2018/06/19 04:53

前提・実現したいこと

検索フォームに入力した文字と一致するデータをDBから出力し、表示するページを作成しています。

検索を行い一致したデータが5件以上だった場合、

複数ページに分けた表示をを行いたいと思っています。

自力調べ途中まで実行してみたのですが、

上手くいかないのでアドバイスいただきたいと思っています。

<現在の状況>

検索ワードを入力するとデータから5件を抽出して表示し表示することはできています。

<これから実施したいこと>

次へ・前へなどのページ送りを作成し、データを5件づつ表示

次に何をすればよいのか、具体的にどのような処理が足りないのか、教えていただきたいです。

php初心者で手探りで実施している状態なので、わかりやすく教えていただければと思います。
DBはpostgreSQLを使用しています。

※コードは全体だと非常に長いので、関係のありそうな場所だけ抜粋しています。

該当のソースコード

PHP

1//php部分 2session_start(); 3$connect = "host=$P_IP port=$P_PORT dbname=$P_DBNAME user=$P_DBUSER password=$P_DBPASS"; 4 5if (! $con = pg_connect( $connect ) ){ 6 die( 'Postgres接続失敗' ); 7 } 8$KEY = $_POST['word']; 9$KEY1 = $_POST['word1']; 10$KEY2 = $_POST['word2']; 11$KEY3 = $_POST['word3']; 12 13if($_SERVER["REQUEST_METHOD"] === "POST"){ 14 $_SESSION['word'] = $_POST['word']; 15 $_SESSION['word1'] = $_POST['word1']; 16 $_SESSION['word2'] = $_POST['word2']; 17 $_SESSION['word3'] = $_POST['word3']; 18} 19 20 21 22$word3 = ""; 23if(array_key_exists("word3",$_SESSION) && !empty($_SESSION["word3"])){ 24 $word3 = $_SESSION['word3']; 25} 26$where = ""; 27if(count($where_list) > 0){ 28 $where = " where ".implode(" and ",$where_list); 29} 30$sql = "SELECT * FROM theme ".$where; 31$result = pg_query($con,$sql); 32 33if (!isset($_GET['page'])) { 34 $page = 1; // 最初のアクセス 35} else { 36 $page = intval($_GET['page']); // ページ指定でのアクセス 37 if ($page == 0 ) { die('page no error'); } 38} 39 40$offset = ($page-1) * 5; 41 42$result = pg_query($con, "SELECT * FROM theme WHERE(theme_ans LIKE '%{$KEY3}%') OR (theme_que LIKE '%{$KEY3}%')limit 5 offset $offset"); 43 44 45 //html部分 46 47 <form method="post" action='<?= $PHP_SELF ?>'> 48 <p1>製品種別</p1> 49 <select class="soft_select" name="word1"> 50          <option value="0" name="word1" >0.全て</option> 51 <option value="1" name="word1" >1.</option> 52 <option value="2" name="word1" > 2.</option> 53 <option value="3" name="word1" >3.</option> 54           <option value="3" name="word1" >4.</option> 55            56 </select> 57  <p1>質問種別</p1> 58  <select class="type_select" name="word2"> 59 <option value="0" name="word2" >0.全て</option> 60 <option value="1" name="word2" >1.</option> 61 <option value="2" name="word2" > 2.</option> 62 <option value="3" name="word2" >3.</option> 63 <option value="4" name="word2" >4.</option> 64 <option value="5" name="word2" >5.</option> 65  </select> <p1>ワード</p1> 66 67 68 <input type="text" name="word3" id=""> 69 <input type="submit" value="検索"> 70 </form> 71 <p><a href="user669.php?page=<?php echo ($page + 1); ?>&<?php echo $word3;?>"action='<?= $PHP_SELF ?>';>next</a></p> 72 <p><a href="user669.php?page=<?php echo ($page - 1); ?>&<?php echo $word3;?>">back</a></p> 73 </div> 74 75 76 77<table> 78 <tr> 79 <th class="type_q">製品種別</th> 80 <th class="contents">質問種別</th> 81 <th class="question">問い合わせ内容</th> 82 <th class="answer">回答</th> 83 </tr> 84 85 <?php 86 if (empty($KEY3)) { } else { 87 for ($i = 0 ; $i < pg_num_rows($result) ; $i++){ 88 $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC); 89 print '<tr>'; 90 print'<th class="type_q">'.($rows['type_que']).'</th>'; 91 print'<th class="contents">'.($rows['theme_id']).'</th>'; 92 print'<th class="question">'.($rows['theme_que']).'</th>'; 93 print'<th>'.($rows['theme_ans']).'</th>'; 94 print '</tr>'; 95 } 96 } 97?></table> 98

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

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

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

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

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

m.ts10806

2018/06/16 10:19

ソースコードはコードブロック```で囲み冒頭、末尾には改行を入れて、 冒頭には```phpのように言語名を入れてください
退会済みユーザー

退会済みユーザー

2018/06/16 10:23 編集

とりあえず、次になにをすれば良いかだけ教えればいい?
退会済みユーザー

退会済みユーザー

2018/06/16 10:22

えっとね、質問文の「該当のソースコード」の内容を、コードブロックで囲むといいよ。質問文の編集で、```PHP(改行)内容(改行)```(改行)ってやる。
退会済みユーザー

退会済みユーザー

2018/06/16 10:27

コードブロックで囲みました。教えていただきありがとうございます。次の作業とともに、完成形(検索結果を5件づつ表示する)までの手順を教えていただきたいです。
m.ts10806

2018/06/16 10:50

必要なところだけコード提示というのは結構なのですが、閉じの</form>だけあってコードの整合性がとれていません。開始<form>も提示してください。
m.ts10806

2018/06/16 10:59

tableの閉じタグも同様ですね。
退会済みユーザー

退会済みユーザー

2018/06/16 11:22

そのへんはさぁ、どうでもいいよ…。
m.ts10806

2018/06/18 05:49

luckerさん 画面表示を伴う以上はそこが抜けていたらそれはそれでノイズです。
m.ts10806

2018/06/18 05:51

minnnnnさん 追記されたに伴い回答に追記しました。ご確認お願いします。今回の対応するにつき、結構基本的なところの理解が抜けている印象を受けました。今回ついた回答でどこまで参考になるか分かりませんが、それぞれの処理の意味や意図をきちんと理解し「分かった気」にならないように着実に身につけてください。
退会済みユーザー

退会済みユーザー

2018/06/18 12:17

解答ありがとうございます。ご指摘のとおり、初心者なのに、1から学ぶというよりは、この機能をつくりたいから調べてみるというのを繰り返しま断片的な知識のまま作成して居るので、基本的な部分が抜けているのだと思います。なので、追記内容含めてそのようなご指摘頂けてありがたいです。
m.ts10806

2018/06/21 12:27

解決済みとされたようですが、最終的にどのように解決されたかも書いてください。 https://teratail.com/help/question-tips#questionTips4-2 >解決したら、どのアドバイスを元にどのように解決したのかを「回答へのコメント」や「質問への追記」で書き残し、回答してくれたユーザーへのフィードバックをしましょう。
guest

回答2

0

さーてっと、そうしたら…だ。

コードをざっと見ると、クエリーストリングでページの指定はできるようになってるみたいだね。このpage=のとこ。

PHP

1<a href="https://portal.egg-net.co.jp/egg/user/user669.php?page={$back}">

ということは、後は検索ワードが保持できればいいだけだ。

やり方は2つ。

###1.pageと同じように、word, word1, word2, word3についても、クエリーストリングで持ち回す。

コード的には今は$KEY3(word3)しか検査しないようになってるからそれで書くと、

PHP

1<a href="https://portal.egg-net.co.jp/egg/user/user669.php?page={$back}&word3={$KEY3}">

みたいな話だね。

###2.セッションに検索ワードを保存してしまう。

こっちは結構話が長くなる。

どっちもありっていえばありだけど、検索ワードが漏れても困らないなら1の方がいいのかな。ま、とりあえずやってみよう。

###追記

んーで、あとはリンクにページ番号を付与する。

PHP

1 <p><a href="https://portal.egg-net.co.jp/egg/user/user669.php?page={$page++}">next</a></p> 2 <p><a href="https://portal.egg-net.co.jp/egg/user/user669.php?page={$page--}">back</a></p>

みたいにね。

そうすっと、今1ページだったら 0ページになっちゃったり、データ10件しか無くて2ページ目に居るのに++して存在しない3ページ目を取りに行こうとしちゃったりになるから、今度はそこを対処するわけ。

投稿2018/06/16 10:42

編集2018/06/16 10:49
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/06/16 11:35

なるほど。検索ワードは盛れても構わない情報なので、1の方法で実施して見ます。諸事情あり、いますぐはできないので月曜日に実践して見ます。その後、結果報告させていただきたいと思います。 初歩的な質問かもしれないのですが、検索ワードを保持する理由は何でしょうか。2ページ以降でも、同じワードで検索結果を引き出す為でしょうか。 また、仕組みの部分での質問なのですが、以下の①部分のnextまた、backをクリックする度に、②の文が実行されるという認識で間違い無いでしょうか? ① ```PHP <p><a href="https://#####/user669.php?page={$page++}">next</a></p> <p><a href="https://#####/user669.php?page={$page--}">back</a></p> ``` ② ```PHP $result = pg_query($con, "SELECT * FROM theme WHERE(theme_ans LIKE '%{$KEY3}%') OR (theme_que LIKE '%{$KEY3}%')limit 5 offset $page;"); ```
退会済みユーザー

退会済みユーザー

2018/06/16 11:39

だって、limitとoffsetで取得する検索結果の内容っていうのは、特定の検索ワードでの検索順位でしょ。 検索ワード渡さなかったら次の検索での検索結果は変わっちゃって、そうしたらページの意味なくなっちゃうよ。
退会済みユーザー

退会済みユーザー

2018/06/16 11:43

>また、仕組みの部分での質問なのですが、以下の①部分のnextまた、backをクリックする度に、②の文が実行されるという認識で間違い無いでしょうか? んと、クエリーストリングでpage=1でアクセスしたとするでしょ。 そうすっとそのリンクは <p><a href="https://#####/user669.php?page=2">next</a></p> <p><a href="https://#####/user669.php?page=0">back</a></p> になる。 この状態でbackをクリックすると、page=0がPHPに渡されるので、 良い子のコードだと $page = intval($_GET['page']) の結果、$page=0になって、 $result = pg_query($con, "SELECT * FROM theme WHERE(theme_ans LIKE '%{$KEY3}%') OR (theme_que LIKE '%{$KEY3}%')limit 5 offset 0;"); つまり、 SELECT * FROM theme WHERE(theme_ans LIKE '%{$KEY3}%') OR (theme_que LIKE '%{$KEY3}%') の検索結果の0番目から5件選択してくることになる。
退会済みユーザー

退会済みユーザー

2018/06/16 11:44

で、やってみると「あれ? なんかおかしいな?」ってなるから、そしたらmts10806お母さんの回答を読むわけ。
退会済みユーザー

退会済みユーザー

2018/06/16 13:26

丁寧にありがとうございます。仕組みは理解できたので、やって見ます!!!
退会済みユーザー

退会済みユーザー

2018/06/16 13:42

うぃうぃ
m.ts10806

2018/06/16 21:28

luckerさん 基本的な1人称「私」ですがいわゆる女性の1人称ではなく、男性なので「お母さん」という表現はやめていただきたく。
退会済みユーザー

退会済みユーザー

2018/06/18 04:41

教えていただいたとおりに実施しました。nextをクリックした際に、die('page no error');というエラーがかえってきてしまいます。リンクも、={$page++}のままです。これは、ページ数に++するという処理がされていないということでしょうか?
m.ts10806

2018/06/18 05:08

現在のコードを質問に追記された方が良いかと。
退会済みユーザー

退会済みユーザー

2018/06/18 05:20

なんどもすみません。現在のコードに修正しました。ページ送りとWordの保存は実施できるようになりました。back/nextをクリックすると(URLに、page=現在のページ番号&word3が表示される状態)。 ただ、back/next をクリックすると、 $result = pg_query($con, "SELECT * FROM theme WHERE(theme_ans LIKE '%{$KEY3}%') OR (theme_que LIKE '%{$KEY3}%')limit 5 offset $offset"); が実行されていないのか、DBの結果が表示されません。何が原因でしょうか?
guest

0

ベストアンサー

ある程度のヒントが回答で出ているのでそれ以外での気づきを。
SQLのoffsetがミスっています。

offsetは「取得する1件目のスタート位置」を指定するものです。
ちなみにデータの1件目は「0(ゼロ)」なので、デフォルト$pageを1として
そのままoffsetに指定している時点で本来の1件目が取得できていません。
今の状態だとページ2がきたときに3件目から8件目を取得していることになります。
(ページ3の場合は4件目から9件目)

つまり、
ページが1の場合は0、2の場合は+1ページ表示分の件数でないといけません。

上記を踏まえてoffsetについては下記のような計算で出すこととなります。

php

1$offset = ($page-1) * {1ページ表示件数};

参考まで。

追記

session_start()は基本的に何かの出力前に書くべきものです。

クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前に session_start() をコールする必要があります。

ファイル冒頭で宣言しましょう。
また、おそらく画面にエラー出力してないですよね?
下記のようにベタで書いてあると、GETアクセスの場合、必ずエラーが出ます。

php

1$KEY = $_POST['word']; 2$KEY1 = $_POST['word1']; 3$KEY2 = $_POST['word2']; 4$KEY3 = $_POST['word3'];

基本的にはエラー表示はOnにしておきましょう。

で、上記を踏まえますと、「DBの結果が表示されません」の理由が分かります。

下記のようなつくりになっていますが、ページ送りのリンクでアクセスした際は必ずGETでのアクセスとなります。

php

1$KEY = $_POST['word']; 2$KEY1 = $_POST['word1']; 3$KEY2 = $_POST['word2']; 4$KEY3 = $_POST['word3']; 5$_SESSION['word3'] =$KEY3;

ということは$_POSTはそもそも存在しません。
おそらくNULLになっているんじゃないかと(試したわけではないですが)

ということは上記は「POSTのときのみ実行する」ようにしなければなりません。

php

1if($_SERVER["REQUEST_METHOD"] === "POST"){ 2 $KEY = $_POST['word']; 3 $KEY1 = $_POST['word1']; 4 $KEY2 = $_POST['word2']; 5 $KEY3 = $_POST['word3']; 6 $_SESSION['word3'] =$KEY3; 7}

というかおそらく使わない変数が増えてくるのでむしろこうでもいい。

php

1if($_SERVER["REQUEST_METHOD"] === "POST"){ 2 $_SESSION['word'] = $_POST['word']; 3 $_SESSION['word1'] = $_POST['word1']; 4 $_SESSION['word2'] = $_POST['word2']; 5 $_SESSION['word3'] = $_POST['word3']; 6}

で、あとは、SESSIONに値が存在するか確認して受け取る
※ひとまずword3のみ。他も同じ。

php

1$word3 = ""; 2if(array_key_exists("word3",$_SESSION) && !empty($_SESSION["word3"])){ 3 $word3 = $_SESSION['word3']; 4}

あとは$word3が空じゃないときにSQLにセット。
※複数条件の場合も$where_listに追加でいけるはず
例:

php

1$where_list = []; 2if($word3 !== ""){ 3 $where_list[] = " ( (theme_ans LIKE '%{$word3}%') OR (theme_que LIKE '%{$word3}%') ) "; 4} 5$where = ""; 6if(count($where_list) > 0){ 7 $where = " where ".implode(" and ",$where_list); 8} 9$sql = "SELECT * FROM theme ".$where; 10$result = pg_query($con,$sql);

※本来はSQLのエスケープも入れるべきですが、省略しています。

更に追記 2018/6/19 14:20

検索部分 ※session_start()部分、DB接続部分は除く

php

1if($_SERVER['REQUEST_METHOD'] === "POST"){ 2 $_SESSION['word'] = $_POST['word']; 3 $_SESSION['word1'] = $_POST['word1']; 4 $_SESSION['word2'] = $_POST['word2']; 5 $_SESSION['word3'] = $_POST['word3']; 6} 7 8if (!isset($_GET['page'])) { 9 $page = 1; // 最初のアクセス 10} else { 11 $page = intval($_GET['page']); // ページ指定でのアクセス 12 if ($page == 0 ) { die('page no error'); } 13} 14 15$offset = ($page-1) * 5; 16 17//検索条件 18$where = ""; 19 20if(isset($_SESSION)){ 21 $word3 = ""; 22 if(array_key_exists("word3",$_SESSION) && !empty($_SESSION["word3"])){ 23 $word3 = $_SESSION['word3']; 24 } 25 $where_list = []; 26 if($word3 !== ""){ 27 $where_list[] = " ( (theme_ans LIKE '%{$word3}%') OR (theme_que LIKE '%{$word3}%') ) "; 28 } 29 $where = ""; 30 if(count($where_list) > 0){ 31 $where = " where ".implode(" and ",$where_list); 32 } 33} 34 35 36$sql = "SELECT * FROM theme ".$where. " limit 5 offset ".$offset; 37$result = pg_query($con,$sql);

$sqlの出力結果例:
word3に何もない場合

sql

1SELECT * FROM theme limit 5 offset 0

word3にaと入力された場合

sql

1SELECT * FROM theme where ( (theme_ans LIKE '%a%') OR (theme_que LIKE '%a%') ) limit 5 offset 0

まず確認しなければならないのは「想定通りのデータを取得できるSQLができているかどうか」です。
$sqlをechoで画面出力してみるなり何なりして、PHPからではなくPostgreSQLであればPgAdminなどのツールで直接DBに対して取得したSQLを実行してみると良いです。

投稿2018/06/16 10:56

編集2018/06/19 05:39
m.ts10806

総合スコア80765

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

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

退会済みユーザー

退会済みユーザー

2018/06/16 11:39

なるほど。 現在、 limit 5 offset $page;");となって居る部分を、 以下の様に修正するという認識で間違いないでしょうか。 $offset = ($page-1) * {1ページ表示件数};を追記し、 limit 5 offset $offset;");
m.ts10806

2018/06/16 11:41

そうですね。{1ページ表示件数}はご自身の要件にあわせて置き換えてくださいね。
退会済みユーザー

退会済みユーザー

2018/06/16 13:27

はい!有難うございます。やって見ます。
退会済みユーザー

退会済みユーザー

2018/06/18 13:18

ページ送りのリンクでアクセスした際は必ずGETでのアクセスとなります。 →そもそもGETで値を受け取った方がいいのでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/18 13:20

$word3 = ""; if(array_key_exists("word3",$_SESSION) && !is_empty($_SESSION["word3"])){ $word3 = $_SESSION['word3']; }の、$_SESSIONはどこから出てきたものでしょうか。初歩的な質問かもしれませんが教えていただきたいです。
m.ts10806

2018/06/18 22:55

> GETで値を受け取った方がいいのでしょうか? 一長一短です。検索結果としてブックマークなどさせたい、など意図があればGETですし、 全ての送信をPOSTでやるやり方もあります。ページングについては一般的にGETが多いというだけです。検索条件とページについてはformは別なのでPOSTとGETをわけるというのはありだと思います。 そもそもですがセッションについてはどこまで把握されていますか? session_start()を入れられているのである程度は調べられていると思い、回答を追記したのですが
退会済みユーザー

退会済みユーザー

2018/06/19 00:03

そうなんですね。ありがとうございます。 今回は教えていただいた方法で試してみます。 sessionの認識 また、認識が甘いと指摘されてしまうかもしれませんが、 データをサーバー上に一時的に保存する役割を果たすものいう認識です。 →sessionに保存したワードをページを超えても、保持することができsession[]で呼び出せるという理解です。
m.ts10806

2018/06/19 00:17

サーバー上 ではありますが、ブラウザがかわればセッションもかわったりします。 session_start()が宣言されると$_SESSIONが利用可能となります。 「ページを超えても」というより「同一Webサイト内でsession_start()が呼び出されているファイルにて共有される」と言ったほうがいいかもしれません。 で、 if(array_key_exists("word3",$_SESSION) && !is_empty($_SESSION["word3"])){ についてですが、array_key_exists()は配列に第1引数に指定されたキーが存在するかチェックするもので、 関数名間違っていたので修正しましたが is_empty()ではなくempty()は指定された変数が空であるか調べるものです。 つまり「セッションに指定の情報があって、且つ空でなければ検索条件にする」というのを実現するためにこの記述をしています。 「$_SESSION」はどこから、というとセッション情報を格納するスーパーグローバル変数なのでセッション利用可能な箇所のため、使っています。 セッション関連:基本的な使用法 http://php.net/manual/ja/session.examples.basic.php
退会済みユーザー

退会済みユーザー

2018/06/19 01:16

そうなんですね。認識改めることができました。 $where_list[] = " 書いて頂いたコードが何をしようとしているのかは理解できました。 再び質問です。 ①以下の部分を追加すると、HTTP ERROR 500が画面に出る。何か文法的な間違いがあるのでしょうか。 $where_list = []; if($word3 !== ""){ ( (theme_ans LIKE '%{$word3}%') OR (theme_que LIKE '%{$word3}%') ) "; } ②追加していただいたコードだと、limit&offsetはどこで追記すればよいでしょうか。 $where_list[] = " ( (theme_ans LIKE '%{$word3}%') OR (theme_que LIKE '%{$word3}%') ) "; }でしょうか。
m.ts10806

2018/06/19 01:23

> ①以下の部分を追加すると、HTTP ERROR 500が画面に出る。何か文法的な間違いがあるのでしょうか。 シンタックスエラーになりますよ。よく見てみれば分かりますし、 文法チェックもしてくれる、例えばEclipseなどで開発を行っていればPHP実行しなくても分かります。 ちょっとした確認だけなら下記のようなWebサービスもありますし。 https://paiza.io/ja/projects/new > ②追加していただいたコードだと、limit&offsetはどこで追記すればよいでしょうか。 offsetもlimitもSQL文なので、SQL文作っているところに追記すれば良いです。
退会済みユーザー

退会済みユーザー

2018/06/19 03:51

教えていただいた以下のサイトで実施しました。 https://paiza.io/ja/projects/new →PHP Notice: Undefined variable: word3 in /workspace/Main.php on line 2 PHP Notice: Undefined variable: word3 in /workspace/Main.php on line 4 PHP Notice: Undefined variable: word3 in /workspace/Main.php on line 5 PHP Notice: Undefined variable: word3 in /workspace/Main.php on line 5 このような文言しか出力されず、文法エラーは出ないのですが、、、
m.ts10806

2018/06/19 03:55

if($word3 !== ""){ ( (theme_ans LIKE '%{$word3}%') OR (theme_que LIKE '%{$word3}%') ) "; } ↓ PHP Parse error: syntax error, unexpected 'LIKE' (T_STRING) in /workspace/Main.php on line 3 質問に現在のコードを追記してください。 ちょこちょこしたやりとりでは全体がどうなっていてどこに本当に問題があるのか見えづらくなってしまいます。
退会済みユーザー

退会済みユーザー

2018/06/19 04:18

これは、LIKE が予期せぬ文字列として認識されているということですよね?LIKE自体はコードのほかの部分でも同様に資料しているのですが、なぜここのみエラーとして認識されてしまうのでしょうか。 すみません。修正させていただきました。
m.ts10806

2018/06/19 04:23

コードの冒頭に全角スペース入ってますが、これは? あと、この件とは関係ないですが私の回答で反映されていない部分があります。 他にも気になった点を列挙します。 ・ session_start()の記述位置 ・ POSTのときだけ呼ぶはずが、何これ↓ $KEY = $_POST['word']; $KEY1 = $_POST['word1']; $KEY2 = $_POST['word2']; $KEY3 = $_POST['word3']; ・そういえば$PHP_SELFって変数存在しないはずだけど・・・ http://php.net/manual/ja/reserved.variables.server.php 書くなら $_SERVER["PHP_SELF"]。 ・これはもう不要だよね → $_SESSION['word3'] =$KEY3; ・$where どこいった。
m.ts10806

2018/06/19 04:25

> これは、LIKE が予期せぬ文字列として認識されているということですよね?LIKE自体はコードのほかの部分でも同様に資料しているのですが、なぜここのみエラーとして認識されてしまうのでしょうか。 いえ、そもそも文字列にもなってない(クォートで囲われていない)いきなり出てきてるからじゃないですかね。 そのような書き方は私してませんが・・。
m.ts10806

2018/06/19 04:29

あと細かいのですが、PHPとhtmlは別ファイルなのであればコードブロック分けていただければと。 同じであれば?>も含めて書いていただきたいです。
退会済みユーザー

退会済みユーザー

2018/06/19 04:46

・ session_start()の記述位置  →忘れてました。冒頭に移動しました。 ・POSTのときだけ呼ぶはずが、何これ↓ この記述を削除した際、DB内のデータ検索処理がうまく行かなくなったため、記述として残したままでした。 ・そういえば$PHP_SELFって変数存在しないはずだけど・・・  →変更しました。ありがとうございます。 ・これはもう不要だよね →削除しました。ありがとうございます。 ・$where どこいった。→文法エラーが解消できていないため記述してないです。
退会済みユーザー

退会済みユーザー

2018/06/19 04:47

いえ、そもそも文字列にもなってない(クォートで囲われていない)いきなり出てきてるからじゃないですかね。 そのような書き方は私してませんが・・。 →教えていただいたものをそのまま使用したのですが、それではダメということでしょうか。
m.ts10806

2018/06/19 04:48

> この記述を削除した際、DB内のデータ検索処理がうまく行かなくなったため、記述として残したままでした。 検索条件ないときに空文字検索しにいくようになってますが、大丈夫ですか? きちんと意図なく残すのはよくありません。 > ・$where どこいった。→文法エラーが解消できていないため記述してないです。 それ込みでコード書いてもらわないと指摘もできないんですが。。。
m.ts10806

2018/06/19 04:50

> →教えていただいたものをそのまま使用したのですが、それではダメということでしょうか。 それ込みでコード書いてもらわないと指摘もできないんですが。。。
m.ts10806

2018/06/19 04:52 編集

指摘全て込みで私が全体のコード(未検証)を回答に載せてもいいのですが、 今までのやり取りを見ている感じ、ただのコピペになって「分かった気」になったまま この後も同レベルの質問をすることになり、成長には全くつながらないと判断しているため、「全体のコードの記載」を避けています。 minnnnnさんがそれぞれの記述をきちんと理解し、1行1行意図をもって扱うようになるしかありません。
m.ts10806

2018/06/19 04:54

私のコードをマージした上で解決しないのであれば自分のコード優先で元に戻すのではなく、 「マージした上で解決していないコード」をそのまま提示してそこから解決までいくしかありません。 (でないとこれまで回答なりコメントなりしてきたアドバイスが全て無駄になります)
m.ts10806

2018/06/19 05:00

更新されたコードですかね。 私がアドバイスした部分とは関係のない//html部分 にすごく沢山全角スペースがあってそこでエラーになってますが・・。
m.ts10806

2018/06/19 05:02

あ、調整されてますね。失礼しました。
退会済みユーザー

退会済みユーザー

2018/06/19 05:07

ご指摘ありがとうございます。本当におっしゃる通りなので、理解できるように勉強していきたいと思います。 現状、更新したものと同じものをサーバーにあげてみたところ、DB検索ができない。5件ずつ表示したい以前に結果が出力されない状況です。
m.ts10806

2018/06/19 05:19

そもそも SELECT * FROM theme WHERE(theme_ans LIKE '%%') OR (theme_que LIKE '%%')limit 5 offset 0 のような形となっているので何もヒットしない状態なんじゃないかと思いますけど・・
m.ts10806

2018/06/19 05:23 編集

「検索部分」としてコード追記しました。 動作未検証ですが、文法エラーは無くおおよそ問題の無いと思われるSQL文ができあがるはずです。 ただ、html部分の$PHP_SELFがなおっていませんし、aタグに入っているaction属性は意味がないはずですし、 最後の部分↓の分岐が何をしたくて入れているのか分かりません。その部分は適宜調整してください。 if (empty($KEY3)) { } else {
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問