
データベースから一覧表示した後、ある行のある列をクリックして指定した「キー」でさらに詳細データ表示する方法で、GETの場合簡単でできました。以下、テーブル内の一部コード:
<table>
<?php
foreach( $result as $row ) { ?>
<tr>
<td>
<a href='showDetails.php?key=<?php echo $row['recID']?>'>
<?php echo $row['title']?></a>
</td>
</tr>
<?php
}?>
</table>
ようは、行のタイトルをクリックすると、紐づいたrecIDを「キー」としてshowDetails.phpに渡されるし、その「キー」で詳細データ検索出来て表示される。
問題は、上記文を、POSTを使って、かつ、
<input name="submit" type="submit" />
使わないで、<a href=...>のままで実現したい。
ググってみると国内外のサイトで、<td></td>内にフォームのhiddenタグ"を使って、お渡ししたい項目のvalue属性指定し、JavaScriptでsubmitすれば出来そうと書いていました。
早速サンプル作ってみましたが、POSTで渡されるのはいつも(ごの行をクリックしても)一番先頭の値のみです。
foreach( $result as $row ) {の中......
<td>
<form method="post" name="form1" action="showDetails.php">
<input type="hidden" name="recNo" value=<?php echo $row["recNo"]; ?> >
<a href="javascript: void(0)"
onclick="document.forms[0].submit(); return false;"><?php echo $row["title"]; ?></a>
</form>
</td>
サンプルデータ:
RecID Title
-----------------
1 あ行
2 か行
3 さ行
4 た行
など。
あ行のハイパーリンクにクリックした時にRecIDは「1」、か行のハイパーリンクにクリックした時にRecIDは「2」など渡したいんです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
No1です。
>テーブルのタイトル列にハイパーリンクを見せながら、
>そこをクリックしてshowDetail.phpにクリックした行のIDを渡したいです。
「タイトル列」というのは各行の1列目の意味でしょうか?
あるいは何かの特別なセル群を意味しているのでしょうか?
いずれにしろ、No1のサンプルはあくまでも「方法も例」でしかありませんので、表内のtd要素全てがクリックの対象になっています。(=td要素であることのチェックしか行っていません)
対象を絞りたいのであれば、その対象であることのチェックを行う必要があります。
(そうでないと、意図する以外の要素をクリックしても送信・遷移してしまいます)
( No1で例示のスクリプトの意味は、No1に記した説明の通りです)
><a href=..>で実現する方法がお分かりであれば助かります。
そういう可能性もあろうかと思いましたので、方法についてもNo1に記しておいたつもりです。
(いずれにしろ、全体の構成など不明点がいろいろあるので方法論ですが)
一方で、もしかすると
>見た目は各行のtitleにunderlineついて、ハイパーリンクも出ていますが~
という見え方にしたいためにリンク要素を用いているのであれば、No1のHTMLでCSSに
#hoge td {
color: blue;
text-decoration: underline;
cursor: pointer;
}
といった内容を指定することで、見た目にはカーソルがポインタで、アンダーライン付きの表示とすることは可能です。
(こちらの例も全部のtdを対象にした記述です。部分に限定するならその旨の記述が必要です)
>「dataset.id」で 「data-id」の値が取得できる、このように、
>属性名が一致しなくてもとれる?
>又はそのような理解は正しくないということでしょうか。
data-*属性はHTMLとスクリプト間でデータの受け渡しがしやすいように追加されたグローバル属性です。
*部分には自由に名前を設定して(命名規則はありますが)利用できます。
https://developer.mozilla.org/ja/docs/Web/HTML/G …
この属性へスクリプトからアクセスする場合は、要素のdataset属性を窓口として、*部分に関しててはキャメルケースの命名則に変えてアクセスするということになっています。
https://developer.mozilla.org/ja/docs/Web/API/HT …
fujillinさん
さらに詳しい内容、ありがとうございます。
タイトル列と言うのはテーブルの行ヘッダーにタイトル書いてあって、その下に縦型で並んでいる項目の列です。
私の例では「あ行」、「か行」、など。
ハイパーリンク付けたいのは、そのタイトルの<td>のみで、テーブル全体ではなく、各行のタイトルの上クリックした時にsubmit先のphpファイルへ遷移します。
<td>のcssまで書いてくださったので、これで私がやりたいこと実現できます。
scriptでデータ受け渡しのことも含めて大変勉強になりました。
ありがとうございました。
No.1
- 回答日時:
こんにちは
実際の出力結果の内容が不明なので、方法のサンプルとしての回答になります。
表内のリンク要素は(リンク機能は必要なくなるので)省略しました。
その代わりに、送信したいID(?)は、ひとまずtd要素のカスタムデータ属性に設定しています。(data-id属性の値が送信に使われます)
下のサンプルは、『table内のtdをクリックすると、非表示のフォームのinputにtdのカスタムデータ属性値をセットして送信する』ようにしたサンプルです。
>あ行のハイパーリンクにクリックした時に~~
※ tableの行単位で送信するデータが変わるのであれば、tdではなくtrのデータ属性を利用することで足りるかもしれません。
※ サンプル中のid等は適当に設定してありますので、適宜修正ください。
※ ご提示のHTMLのままでも(リンク要素あり)当然実現は可能ですが、以下のような内容を追加する必要があるでしょう。
・ブラウザ側のリンク機能を停止する
・リンク要素のhref属性から送信に必要なidを取り出す(→inputにセット)
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title></head>
<body>
<table id="hoge" border="1">
<tr>
<td data-id="ID11">Title1-1</td>
<td data-id="ID12">Title1-2</td>
</tr>
<tr>
<td data-id="ID21">Title2-1</td>
<td data-id="ID22">Title2-2</td>
</tr>
</table>
<form id="fuga" action="showDetails.php" method="POST" style="display:none;">
<p>送信用フォーム<input name="key" type="text"></p>
</form>
<script type="text/javascript">
document.getElementById("hoge").addEventListener("click",(e)=>{
let t = e.target, f = document.getElementById("fuga");
if(t.nodeName!="TD") return;
f.elements["key"].value = t.dataset.id;
f.submit();
});
</script>
</body>
</html>
ujillinさん
サンプル、ありがとうございます。
早速データベースから一覧取得し、foreach loop内で、
<td data-id="ID11">Title1-1</td>を
↓
<td data-id=<?php echo $row["recID"]; ?>><?php echo $row["title"]; ?></td>
しました。
formとjsをコピーして、クリックした行のidを問題なくターゲット先のphpファイルに渡しています。
今回は一覧表示の上、テーブルのタイトル列にハイパーリンクを見せながら、そこをクリックしてshowDetail.phpにクリックした行のIDを渡したいです。
<a href=..>で実現する方法がお分かりであれば助かります。(HTMLのままでも(リンク要素あり)当然実現は可能ですが、、と書いていらっしゃるのでご存知と思います。。)
私自分でトライしたのは、
<td data-id=<?php echo $row["recID"]; ?>>
<u><a href="javascript: void(0)"><?php echo $row["title"]; ?></a></u></td>
で、見た目は各行のtitleにunderlineついて、ハイパーリンクも出ていますが、クリックしても何も起こらないです。
その他コメント:
今回、javascriptについても勉強になりました。ありがとうございます。
しかし、副作用でないように最低限のscriptで済ませたいです。
一つ分かりにくいのは、<td>の属性宣言には「data-id」使っていますが、
javascriptの方では、
f.elements["key"].value = t.dataset.id;
で値(ID11、ID12など)を取っています。
「dataset.id」で 「data-id」の値が取得できる、このように、属性名が一致しなくてもとれる?
又はそのような理解は正しくないということでしょうか。
引継ぎよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【PHP】ページを更新すると勝手...
-
DB_DATABASEとは何を指すのでし...
-
The requested method POST is ...
-
form actionタグ
-
データ送信をボタンを押さずに...
-
inputタグでphpを呼び出す際、...
-
【初歩】ログアウトを【2回押さ...
-
戻れないです
-
xamppでformによるデータの送信...
-
ジャンプ先アドレスの最後に?...
-
PEAR Image_QRCodeのエラー
-
phpでcookieをセットする方法
-
ボタンのクリック数を合計保存...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
iphoneで虫眼鏡の作り方
-
Subversionのリポジトリの削除
-
PHPSpreadsheetによる書き出し...
-
「クラス関数」「メンバ関数」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データ送信をボタンを押さずに...
-
inputタグでphpを呼び出す際、...
-
FORMで送信ボタンと戻るボタン...
-
ボタンのクリック数を合計保存...
-
form actionで二つ送信先を指定...
-
テキストボックスにデータベー...
-
受け取ったパラメータを次のphp...
-
選択肢により様々なページに飛...
-
xamppでformによるデータの送信...
-
ページングでの値の引き継ぎ方
-
PHP table内、<a href使って su...
-
frame間の値の受け渡し方法
-
phpのプログラム
-
Wordpressでプラグイン内自作関...
-
値が渡されない
-
ワンクリックしかできないクリ...
-
【PHP】ページを更新すると勝手...
-
PEAR Image_QRCodeのエラー
-
PHP の自動で飛ぶ処理
-
別のファイルへ値を受け渡す方法
おすすめ情報