※以前の質問からすこし進んだため修正しました。
前提・実現したいこと
検索したとき「付いているタグ」に応じてイラストやリンクを返すコンテンツを作りたいです。
フォームはHTMLで以下のように作りました。
HTML
1<form id="MyForm" method="POST" action="action.php" autocomplete="off"> 2<div class="mainform"> 3<input id="input" name="word" maxlength="100" class="form-control form-control-lg mb-2" type="text" placeholder="ここに入力してください" value=""> 4</div> 5<input id="submit" type="submit" value="診断する"> 6</form>
データベースはMySQLで以下のように作りました。
id(番号)、name(テキスト)、category(テキスト)、tag(番号 1-10番まで)
入力されたword(検索ワード)でDB内のname(テキスト)が見つかった時にcategoryの文字とtagに応じたイラスト結果を返すようにしたいです。
こちらのファイルがaction.phpとなります。
<?php header("Content-type: text/html; charset=utf-8"); if(empty($_POST)) { header("Location: xxx"); exit(); }else{ if (!isset($_POST['word']) || $_POST['word'] === "" ){ $errors['name'] = "入力されていません。"; } } if(count($errors) === 0){ $dsn = 'mysql:host=localhost;dbname=data1;charset=utf8'; $user = 'root'; $password = 'root'; try{ $dbh = new PDO($dsn, $user, $password); $statement = $dbh->prepare("SELECT * FROM data1 WHERE name LIKE (:name) "); if($statement){ $word = $_POST['word']; $like_word= "%".$word."%"; //プレースホルダへ実際の値を設定する $statement->bindValue(':name', $like_word PDO::PARAM_STR); if($statement->execute()){ //レコード件数取得 $row_count = $statement->rowCount(); while($row = $statement->fetch()){ $rows[] = $row; } }else{ $errors['error'] = "検索失敗しました。"; } //データベース接続切断 $dbh = null; } }catch (PDOException $e){ print('Error:'.$e->getMessage()); $errors['error'] = "データベース接続失敗しました。"; } } ?> <!DOCTYPE html> <html> <head> <title>結果</title> <meta charset="utf-8"> </head> <body> <?php if (count($errors) === 0): ?> <p><?=htmlspecialchars($word, ENT_QUOTES, 'UTF-8')."で検索しました。"?></p> <p><?=$row_count?>件です。</p> <?php foreach($rows as $row){ ?> <table border='1'> <tr> <td>「<?=htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8')."」は"?></td> </tr> <tr> <td><?=htmlspecialchars($row['category'],ENT_QUOTES,'UTF-8')."</br>がおすすめです"?></td> </tr> <?php } ?> <?php elseif(count($errors) > 0): ?> <?php foreach($errors as $value){ echo "<p>".$value."</p>"; } ?> <?php endif; ?> </body> </html>
この状態で、今データベースに接続してカテゴリー結果を返すというところまでできています。
参考にしたもの:https://noumenon-th.net/programming/2016/02/15/pdo_search/
解決したいこと
name から tag を引き出して結果を返すという部分がうまくいきません。
試したけど失敗したもの↓
$tag = ["result1"=>1,"result2"=>2,"result3"=>3,"result4"=>4,"result5"=>5]; if(array_key_exists("result1",$tag)){ echo $tag["result"].PHP_EOL; } if(in_array(1,$tag)){ echo "画像".PHP_EOL; } if(in_array(2,$tag)){ echo "画像".PHP_EOL; }
tag1の場合はechoでresult1を、tag2の場合はresult2を表示したいです。
echoで返ってくる結果はイラストやアニメーションを入れたいと考えています。
まだまだ未熟で手探りでやっていますが、お力を貸していただけると有難いです。
よろしくお願いいたします(><)
回答1件
あなたの回答
tips
プレビュー