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

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

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

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

Q&A

解決済

2回答

8928閲覧

PHPでMYSQLの検索結果にリンクをつけたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2017/01/12 02:03

編集2017/01/12 06:27

PHPを始めたばかりの初心者です。
PHPを用いてMYSQLにあるデータベースから検索しWebサイトに表示するプログラムを作っています。
現在下記のプログラムで検索結果を表示するところまで完成しております。
ここから検索結果ででた文字一つ一つにリンクをつけ、それぞれのリンク先に見に行けるコードの作り方がわかりません。会社ごと、履物ごとにリンクをつけたいです。表現が乏しくて申し訳ございませんがご教授お願い致します。

追記2
例えば、検索で配列させたA紳士靴の文字にマウスを乗っけると紳士靴Aのサイトに飛ぶリンクを作成したいです。
理想は会社ごと、履物ごとにリンクをつけたいです。
イメージのサイトはこちらです。
リンク内容

追記
###発生している問題

motuo様とkunai様のアドバイスを実践して、検索結果にコードを挿入しました。 DBのカラムに新たにURL_shoesを造り、紳士靴Aが入っている行にkustuA.phpを入れました。 <前略> <?php foreach ($stmt as $row): ?> <tr> <td><?=h($row['name'])?></td> <td><?=h($row['company'])?></td> <td><a hfef="<?h($row['URL_shoes'])?>"<?=h($row['shoes'])?></a></td> <td><?=h($row['yuka'])?></td> <td><?=h($row['surface'])?></td> <td><?=h($row['atai'])?></td> </tr> <?php endforeach; ?> その結果を見ると履物の欄が空欄になってしまいました。

###該当のソースコード

input.php <?php header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title>サンプル</title> </head> <body> <form method="post" action="/aaa/search.php"> 検索条件を指定してください<br> <table width="500" border="1" cellspacing="1" cellpadding="0"> <tr> <td bgcolor="#DCF0F0">会社名</td> <td> <input type="checkbox" name="company[]" value="A会社">A会社<br> <input type="checkbox" name="company[]" value="B会社">B会社<br> <input type="checkbox" name="company[]" value="C会社">C会社<br> <input type="checkbox" name="company[]" value="D会社">D会社<br> <input type="checkbox" name="company[]" value="E会社">E会社 </td> </tr> <tr> <td bgcolor="#DCF0F0">履物</td> <td> <input type="checkbox" name="shoes[]" value="紳士靴A">紳士靴A<br> <input type="checkbox" name="shoes[]" value="紳士靴B">紳士靴B<br> <input type="checkbox" name="shoes[]" value="紳士靴C">紳士靴C </td> </tr> <tr> <td bgcolor="#DCF0F0">床材料</td> <td> <input type="checkbox" name="yuka[]" value="塗り床">塗り床<br> <input type="checkbox" name="yuka[]" value="張り床">合張り床<br> <input type="checkbox" name="yuka[]" value="セラミックタイル">セラミックタイル<br> </td> </tr> <tr> <td bgcolor="#DCF0F0">介在物</td> <td> <input type="checkbox" name="surface[]" value="清掃">清掃<br> <input type="checkbox" name="surface[]" value="水">水<br> <input type="checkbox" name="surface[]" value="水ダストA">水ダストA<br> <input type="checkbox" name="surface[]" value="水ダストB">水ダストB </td> </tr> </table> <input type="submit" value="検索"> <input type="reset" value="条件クリア"> </form> </body> </html>

###該当のソースコード

search.php <?php define('FILTER_STRUCT_FORCE_ARRAY', 1); define('FILTER_STRUCT_TRIM', 2); define('FILTER_STRUCT_FULL_TRIM', 4); function filter_struct_utf8($type, array $default) { static $is_recursive_static = false; $is_recursive = $is_recursive_static; if (!$is_recursive) { $types = array( INPUT_GET => $_GET, INPUT_POST => $_POST, INPUT_COOKIE => $_COOKIE, INPUT_REQUEST => $_REQUEST, ); $type = (int)$type; if (!isset($types[$type])) { throw new LogicException('unknown super global var type'); } $var = $types[$type]; $is_recursive_static = true; } else { $var = $type; } $trim_chars = "\\0\x20\x09\x0a\x0d\x0b"; $full_trim_chars = "{$trim_chars}\xc2\xa0\xe3\x80\x80"; $trim_pattern = "/\A[{$trim_chars}]++|[{$trim_chars}]++\z/u"; $full_trim_pattern = "/\A[{$full_trim_chars}]++|[{$full_trim_chars}]++\z/u"; $ret = array(); foreach ($default as $key => $value) { if (is_int($value) && !($value & ( FILTER_STRUCT_FORCE_ARRAY | FILTER_STRUCT_FULL_TRIM | FILTER_STRUCT_TRIM ))) { if (!$is_recursive) { $is_recursive_static = false; } throw new LogicException('unknown bitmask'); } if (is_int($value) && $value & FILTER_STRUCT_FORCE_ARRAY) { $tmp = array(); if (isset($var[$key])) { foreach ((array)$var[$key] as $k => $v) { if (!preg_match('//u', $k)) { continue; } $value &= FILTER_STRUCT_FULL_TRIM | FILTER_STRUCT_TRIM; $tmp += array($k => $value ? $value : ''); } } $value = $tmp; } if (isset($var[$key]) && is_array($value)) { $ret[$key] = filter_struct_utf8($var[$key], $value); } elseif (!isset($var[$key]) || is_array($var[$key])) { $ret[$key] = is_int($value) ? '' : $value; } else { if (!isset($var[$key]) || is_array($var[$key])) { $var[$key] = null; } elseif (is_int($value) && $value & FILTER_STRUCT_FULL_TRIM) { $var[$key] = preg_replace($full_trim_pattern, '', $var[$key]); } elseif (is_int($value) && $value & FILTER_STRUCT_TRIM) { $var[$key] = preg_replace($trim_pattern, '', $var[$key]); } else { $var[$key] = preg_replace('//u', '', $var[$key]); } if ($var[$key] === null) { $var[$key] = is_int($value) ? '' : $value; } $ret[$key] = $var[$key]; } } if (!$is_recursive) { $is_recursive_static = false; } return $ret; } // HTML特殊文字エスケープ用 function h($input) { return htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); } // $_POSTを不適切な送信が来ても問題ないように確実に期待する構造でextractする // - FULL_TRIMは全角スペースを含むトリミングを行う // - FORCE_ARRAYは強制的に一次元配列にする extract(filter_struct_utf8(INPUT_POST, array( 'name' => FILTER_STRUCT_FULL_TRIM, 'company' => FILTER_STRUCT_FORCE_ARRAY, 'shoes' => FILTER_STRUCT_FORCE_ARRAY, 'yuka' => FILTER_STRUCT_FORCE_ARRAY, 'surface' => FILTER_STRUCT_FORCE_ARRAY, 'atai' => FILTER_STRUCT_FULL_TRIM, ))); // 製品名 if ($name !== '') { $wheres[] = '`name` LIKE ?'; $values[] = '%' . addcslashes($name, '\\_%') . '%'; } // 会社名(配列) foreach ($company as $s) { if ($s !== '') { $s_wheres[] = '`company` LIKE ?'; $values[] = '%' . addcslashes($s, '\\_%') . '%'; } } if (!empty($s_wheres)) { $wheres[] = '(' . implode(' OR ', $s_wheres) . ')'; } // 履物(配列) foreach ($shoes as $t) { if ($t !== '') { $t_wheres[] = '`shoes` LIKE ?'; $values[] = '%' . addcslashes($t, '\\_%') . '%'; } } if (!empty($t_wheres)) { $wheres[] = '(' . implode(' OR ', $t_wheres) . ')'; } // 床材料(配列) foreach ($yuka as $p) { if ($p !== '') { $p_wheres[] = '`yuka` LIKE ?'; $values[] = '%' . addcslashes($p, '\\_%') . '%'; } } if (!empty($p_wheres)) { $wheres[] = '(' . implode(' OR ', $p_wheres) . ')'; } // 介在物(配列) foreach ($surface as $c) { if ($c !== '') { $c_wheres[] = '`surface` LIKE ?'; $values[] = '%' . addcslashes($c, '\\_%') . '%'; } } if (!empty($c_wheres)) { $wheres[] = '(' . implode(' OR ', $c_wheres) . ')'; } // データ if ($atai !== '') { $wheres[] = '`atai` LIKE ?'; $values[] = '%' . addcslashes($atai, '\\_%') . '%'; } // SQL文生成 $sql = 'SELECT * FROM sampledata'; if (!empty($wheres)) { $sql .= ' WHERE ' . implode(' AND ', $wheres); } try { // DB接続 $dsn = 'mysql:dbname=testdb;host=localhost;charset=utf8mb4'; $username = '*******'; $password = '*******'; $options = array( // デフォルトフェッチモードを連想配列にする PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // SQLエラー時に例外をスローさせる PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // SELECTに対してもrowCount()を使えるようにする PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); $pdo = new PDO($dsn, $username, $password, $options); // プリペアドステートメントを生成 $stmt = $pdo->prepare($sql); // 値をバインドして実行 $stmt->execute(isset($values) ? $values : array()); // メッセージをセット if ($stmt->rowCount()) { $message = $stmt->rowCount() . '件ヒットしました'; } else { $message = '該当するデータはありませんでした'; } } catch (Exception $e) { $message = $e->getMessage(); } // ヘッダー送信 header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <title>検索結果</title> </head> <body> <h1>検索結果</h1> <p><?=h($message)?></p> <?php if (isset($stmt) && $stmt->rowCount()): ?> <table border="1" cellpadding="3"> <tr> <th>製品名</th> <th>会社名</th> <th>履物</th> <th>床材料</th> <th>介在物</th> <th>データ</th> </tr> <?php foreach ($stmt as $row): ?> <tr> <td><?=h($row['name'])?></td> <td><?=h($row['company'])?></td> <td><?=h($row['shoes'])?><</td> <td><?=h($row['yuka'])?></td> <td><?=h($row['surface'])?></td> <td><?=h($row['atai'])?></td> </tr> <?php endforeach; ?> </table> <?php endif; ?> <p><a href="/aaa/input.php">再検索</a></p> </body> </html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

<a>タグを使うのは如何でしょうか?リンク先はDBから取得した内容をセットすれば良いのではないでしょうか?

html

1<td><a href="リンク先"><?=h($row['company'])?></a></td>

###追記

html

1<td> 2 <a hfef="<?h($row['URL_shoes'])?>"> 3 <?=h($row['shoes'])?> 4 </a> 5</td>

投稿2017/01/12 02:07

編集2017/01/12 06:30
motuo

総合スコア3027

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

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

退会済みユーザー

退会済みユーザー

2017/01/12 02:48

回答ありがとうございます。 <a>を用いて作りたいと思います。 質問に質問えお重ねて申し訳ありません。リンク先はDBから取得した内容をセットすれば良いのではないでしょうか? とは具体的にどういうことでしょうか? たとえば、A会社のリンク先をkaishaA.phpにしようと考えてます。上記の”リンク先”にkaishaAを組み込めばよろしいでしょうか?
motuo

2017/01/12 02:57 編集

単純にデータの1項目として、例えば"URL”というカラムを持たせて、下記の様にすればリンクが生成できるのかと思いました。(URLには、kaishaA.phpという値が入っている前提) <a href="http://example.com/url/<?=h($row['URL'])?>"><?=h($row['company'])?></a>
退会済みユーザー

退会済みユーザー

2017/01/12 03:12

DBのカラムに会社名用のURLの値を追加(それぞれにマッチしたリンク)して<?=h($row['URL'])?>のコードを<h1>検索結果</h1>の欄に加えてみます。 <?h($row['URL'])?>にもforeach文を新たに入れるべきですか? すでにforeachでURLも出るから入れなくていいですか?
motuo

2017/01/12 03:56

<td>の追加をするのであれば不要ではないでしょうか。
退会済みユーザー

退会済みユーザー

2017/01/12 06:19

何度も質問を重ねてしまい申し訳ありません。 追記に記載した内容が上手くいきませんでした。 <td><a hfef="<?h($row['URL_shoes'])?>"<?=h($row['shoes'])?></a></td> と <a href="http://example.com/url/<?=h($row['URL'])?>"><?=h($row['company'])?></a> の2パターンで実際に検索をかけましたら、検索結果の表示には問題はありませんでしたが、履物の欄が空白になってしまいました。 また、カラム内に値が入っていないから非表示? になると考え全てに値を挿入し試みましたが表示されませんでした。
motuo

2017/01/12 06:33 編集

<td><a hfef="<?h($row['URL_shoes'])?>"<?=h($row['shoes'])?></a></td>が本来、やりたい事だと解釈して、回答を編集してみました。>が抜けているだけなような気もします。 それと、表示されているhtmlの内容を確認して貼り付けて頂けますでしょうか。
退会済みユーザー

退会済みユーザー

2017/01/12 06:59

すいませんでした。ケアレスミスでした。そして、直した結果、無事解決しました。 今回の質問に協力してくださったkunai様、motuo様に感謝を申し上げます。忙しいところ初心者の私のために、回答を下さりありがとうございました。 そして、時間を最も割いて頂いたmotuo様をベストアンサーとさせていただきます。
guest

0

php

1<td><a href="http://example.com/url?name=<?=h($row['name'])?>"><?=h($row['name'])?></a></td>

とかそういう事ですか?

投稿2017/01/12 02:06

kunai

総合スコア5405

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

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

退会済みユーザー

退会済みユーザー

2017/01/12 02:42

回答ありがとうございます。 はい。その形にさらに質問したいことがございます。 紳士靴Aのリンク先をkustuA.phpにしようと考えてます。まだWebに挙げてないのでlocalhost経由で表示しています。 上記のコードの(http://example.com/url?name=<?=h)を kustuA.php と挿入すれば動くということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問