<A href ~で複数の値を渡したい

このQ&Aのポイント
  • ODBC経由でレコードを取得して表示させた後、リンクを押された際に状態を変更する方法について教えてください。
  • データベースから取得した情報をテーブル形式で表示し、リンクをクリックすることで状態を変更できるようにしたいです。
  • リンクを複数個設置する方法やボタンを使用して状態変更を行う方法について教えてください。
回答を見る
  • ベストアンサー

<A href ~で複数の値を渡したい

お世話になります。 ODBC経由でレコードを取得して表示させた後、それぞれのレコードの 後に4つのリンクを張って、押されたリンクによって状態を変更 したいです。 表はこんな感じです。 ID 氏名 状態 リンク1 リンク2 リンク3 リンク4 1 山田 1 1に状態変更 2に状態変更 3に状態変更 4に状態変更 2 山下 3 1に状態変更 2に状態変更 3に状態変更 4に状態変更 3 山本 2 1に状態変更 2に状態変更 3に状態変更 4に状態変更 以下300件くらい ODBCに接続は成功します。 $res = $db-> query($sql); while ($row =& $res->fetchRow(db_fechtmode_assoc)) { print("<tr>"); print("<td>".$row["No"]."</td>"); print("<td>".$row["氏名"]."</td>"); print("<td>".$row["状態"]."</td>"); //この下が問題の行 print("<td><a href= \"hoge.php?ID=".$row["ID"]."\">1に状態変更</a></td>"); //あとリンクを状態変更4まで3つ並べます print("</tr>\n"); テーブル形式に吐かせます。問題の行で、IDと a=1 を持って いきたいのですが、記述の仕方が分かりません。このままでは IDは持って行ってくれます。 //explode関数は「,」で区切り順番に配列に格納する //$_SERVER['QUERY_STRING']はURLの?の後に付けられた //文字列(引数)を取得できます。 という記事も見たのですが、コンマでつなげてもa=1は持って行って くれません。 別にリンクじゃなくてもいいのです。ボタンや画像でもいいの ですが、このWhileテーブルでボタンを4つ並べる書き方も、 ボタンを押したら値を取得する書き方も分かりませんでした。 勢いでPEARを使っています。PHP5.2.6です。よろしくお願いします。

  • Jake8
  • お礼率66% (2/3)
  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • hisappy
  • ベストアンサー率46% (184/392)
回答No.2

補足の内容、了解です。 変数で渡そうとしている内容がサーバ側での設定を想定していたので IDと同じような感じにしていました。 また、IDが大文字となっていたのでaの方もあわせて大文字としていましたが、 その点の説明が抜けていたようです。すみません。 では補足いただいた内容に合わせて渡したいaを設定してみましょう。 aが1固定の場合だと下のようになります。 print("<td><a href= \"hoge.php?ID=".$row["ID"]."&A=1\">1に状態変更</a></td>"); これでサーバ側でのIDでのとり方と同じようにしてAでやれば1が取れるようになります。 PHPの5.2.6でも通用するかは設定によりますが $_REQUEST[ID] でIDの値が、$_REQUEST[A] でAの値がとれていたら正解です。 $_GET[ID] だったり、$ID だったりするかもなので調査要です。 では、ついでのついでに値が固定、中身も似ているなら for ループを追加して、 もう一歩先の応用ができそうないじくりをいれてみましょう。 余談なので上の状態のでおしまいにしてももちろんOK。 //リンクを状態変更1から4まで4つ並べます。 for( $lpcnt00 = 1; $lpcnt00 <= 4; $lpcnt00 ++) { print("<td><a href= \"hoge.php?ID=".$row["ID"]."&A=".$lpcnt00."\">".$lpcnt00."に状態変更</a></td>"); } クォーテーションの¥マーク有り無しやドットのつけ方は慣れても分かりにくく、 その慣れ方もどうするのが良いのか分かり難いものです。 自分なりの解読法を構築するしかないのかもしれませんね。 作り始めの段階なら  1.HTMLをベタで書いて。  2.クォーテーションを¥マーク付きに置換して。  3.PHPの文に変換して。 とやれば良さそうですが、いったん出来上がったものを編集するとなると このクォーテーションがHTML側のものなのかPHP側のものなのかがパッと見判らない。 その辺りをサポートしてくれるエディタもあるようですが、 慣れないことにはそのエディタの表示もなんじゃらほい。 でも大丈夫。必要な情報ならきっと、情報の側からもアプローチがありますよ。

Jake8
質問者

お礼

hisappyさん、根気よく付き合ってくださってありがとう ございました。¥に振り回されていたのですが、ひとつ 多かったり、クォーテーションを取ったり、全部に¥つけたりと 色々したのですが、ニアミスで行き詰っていました。 PHPがうまく受け取ってくれました! しかも残りのリンクのForまで・・・これはまた後日ためして 勉強させていただきます。 ありがとうございました。また今後ともよろしくお願いいたします。

その他の回答 (1)

  • hisappy
  • ベストアンサー率46% (184/392)
回答No.1

単純に値を持っていければ良いというのであれば、 質問文の内容を中途半端に引用して編集してみると //この下が問題の行 print("<td><a href= \"hoge.php?ID=".$row["ID"]."&A=".$a."\">1に状態変更</a></td>"); //あとリンクを状態変更4まで3つ並べます print("</tr>\n"); のように、IDの後ろに持っていかせたいパラメータを&で引っ付ければ FORM タグの method で GET を指定した場合の形式で渡ると思います。 (ちなみにボタンの submit で飛ばすのが POST の形式。) その POST の形式版だとこんな感じ。 //この下が問題の行 print("<td>"); printf("<form name=\"\" method=\"post\" action=\"hoge.php\">"); printf("<input type=\"hidden\" name=\"ID\" value=\"".$row["ID"]."\">"); printf("<input type=\"hidden\" name=\"a\" value=\"".$a."\">"); printf("<input type=\"submit\" value=\"1に状態変更\">"); printf("</form>"); printf("</td>"); //あとリンクを状態変更4まで3つ並べます print("</tr>\n"); JavaScript を使っても良くて、画像でボタンを表示させたいなら 上で submit となっている input タグの部分を printf("<img src=\"hoge1.jpg\" onClick=\"hoge.php?ID=".$row["ID"]."&A=".$a."\">"); みたいにすればできるのではないでしょうか。 ただ、動作確認したわけでもないですし、タグの内容などもうろおぼえなので このままでは動作しない可能性大だったりもしますが 調査するのに必要な要素はひとまずいれたつもりですので 今回はこの辺りにて失礼します。

Jake8
質問者

補足

hisappyさんありがとうございます。 ?ID=".$row["ID"]."&A=".$a."\" まさにこの部分の書き方なんですが、本当に記述の仕方だけ分からないんだと思います。初心者ですみません。 ブラウザの下にA= が現れるようになったので持って行ってくれる気があるみたいですが、$aが0なので、$aにどこかで1を入れておかないといけないのでしょうか? ここは1と決まっているので、 ?ID=".$row["ID"]."&A="1"\" としても上手くいかないのです(T_T) どうクォーテーションしたものやら、どうドットつけたらいいやら。

関連するQ&A

  • PHPのスタイルシート割り当て

    現在、MySQL+PHPでアドレス帳を作成中です。 該当するデータを検索で拾い出し、while文を使ってtableで配置しています。 検索結果が複数ある時に、見やすくする為に交互に色有り、色無しとスタイルシートを割り当てたいのですがどうすればよろしいでしょうか? ここ(OKWave)の質問一覧(http://okwave.jp/c256.html)で 交互にグレー、白で表示されてます。 こんな感じにしたいのです。 現状: $res = mysql_query($sql, $con); print("<table border=\"0\">"); print("<tr><td>No</td><td>社員No</td><td>ジョブNo</td><td>所属</td><td>氏名</td><td>ふりがな</td><td>写真</td><td>表示</td></tr>"); while($row = mysql_fetch_array($res)) { print("<tr>"); print("<td>".$row["no"]."</td>"); print("<td>".$row["idno"]."</td>"); print("<td>".$row["jobno"]."</td>"); print("<td>".$row["shitenno"]."</td>"); print("<td>".$row["name"]."</td>"); print("<td>".$row["furigana"]."</td>"); print("<td>".$row["photofilename"]."</td>"); print("<td><a href= \"profile.php?no=".$row["no"]."\" target=\"_blank\">表示</a></td>"); print("</tr>"); } print("</table>"); よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • a href=のリンクについて。

    いつもお世話になっております。 今回分からないのは、 <td><a href="/php/hoge.php?id=<?=$row[0]?">STYLE="color:black"><?=$row["name"]?></td> と言うやり方では上手くリンクするのですけど、 echo "<td>".$row["name"]."</td>"; に対して上のやり方でリンクするように色々加工してみたのですが、 エラーが出て、上手く実装できないのです。 上の形のように下の形式でなんとかリンクを飛ばしたいです。 ご指導のほどよろしくお願いします。

    • ベストアンサー
    • PHP
  • ページ間の値の受け渡しについて

    緊急でPHPを用いて開発しなければならず、値の受渡し方法が調べても 結果がうまく出来ないために教えて下さい。 説明がうまくできないので、ソースの一部を下記に記載しております。 【keikaku.php】 <?php $link = DB接続 $query = "SELECT (1) , (2) , (3) FROM KEIKAKU WHERE 営業所= '東京'"; $res_result = mysql_query($query,$link); echo ("<form action='keikaku_input.php' method='POST'>"); while($row = mysql_fetch_array($res_result)){  echo ("<table border=1>");  echo ("<tr>");  echo ("<td><input type='radio' name='name' value=''></td>");  echo ("<td>");  echo $row['(1)'];  echo ("</td><td>");  echo $row['(2)'];  echo ("</td><td>");  echo $row['(3)'];  echo ("</td>");  echo ("</tr>"); } echo ("<input type='submit' value='次へ'>"); echo ("</form>"); ?> というSQLで一覧を表示させて、対象行のラジオボタンが選択されると (1)と(2)の値を使い、【keikaku_input.php】で更に別のSQLを実行後に 結果を表示させる事を行ないたいのです。 【keikaku.php】→【keikaku_input.php】へ(1)と(2)の値を渡したい場合 はどのようにすれば良いかご教授願えませんでしょうか?

    • ベストアンサー
    • PHP
  • 複数のレコードをimplodeでまとめる方法

    ほんと度々すいません…。 http://oshiete1.goo.ne.jp/qa3574682.htmlで一度解決したのですが、私の質問の仕方が悪く、結局実用できなかったので再度質問させてください。 上記URLでやったことに、更にフィールドが増えた場合の記述方法についてです。 table1 【ID|field1】 [1|AAA] [1|BBB] [2|CCC] [3|DDD] [3|EEE] [3|FFF] table2 【ID|field2】 [1|ooo] [2|ppp] [2|qqq] [2|rrr] [3|sss] [3|ttt] ↑構造が同じだけど内容が違うテーブルが5つあります(table1~table5まで)。そしてこれらのテーブルをクエリでは↓ <table> <tr><th>ID</th>   <th>field1</th>   <th>field2</th>   <th>field3</th>   <th>field4</th>   <th>field5</th></tr> <tr><td>1</td>   <td>AAA<br>BBB</td>   <td>ooo</td>   ・・・</tr> <tr><td>2</td>   <td>CCC</td>   <td>ppp<br>qqq<br>rrr</td>   ・・・</tr> <tr><td>3</td>   <td>DDD<br>EEE<br>FFF</td>   <td>sss<br>ttt</td>   ・・・</tr> </table> というように表示するのが理想です。 一応自分で考えましたが、できなかったので…お願いします。 ============================== 一応、前回http://oshiete1.goo.ne.jp/qa3574682.htmlにて頂いた回答をまとめたコードが↓です。 (table1のみの場合だとこうなります)→mr_araki様に感謝しております。 $query = mysql_query($sql); $rows = array(); while ($row = mysql_fetch_assoc($query)) {   if (!isset($rows[$row[ID]])) {      $rows[$row[ID]] = array();   }   $rows[$row[ID]][] = $row[field1]; } echo "<table>\n"; echo "<tr><th>ID</th><th>field1</th></tr>\n"; foreach ($rows as $id => $row) {   echo "<tr><td>" .$id. "</td><td>" .implode('<br>', $row). "</td></tr>\n"; } echo "</table>";

    • ベストアンサー
    • PHP
  • 売上表示のプログラムをしたいのですが。

    ショッピングカートのcart_buy.phpの中で精算ボタンを押したら精算完了したのちuriage.phpで自動的に売上が入力されるというプログラムを作りたいのですが例えばAさんが購入したときにパソコンとプリンターを購入したとしたらパソコンは反映されますがプリンターは反映されず同じ購入者が複数の売上表示が行なえないのです。どうしたらうまくいくでしょうか。アドバイスお願いします。 uriage.php <?php require_once 'DB.php'; $dsn = "mysql://user:password@localhost/sampledb2"; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } $sql = 'select * from syohin_uriage'; $res =& $db->query($sql); while ($row =& $res->fetchRow(DB_FETCHMODE_OBJECT)){ print "<tr><td><center>$row->id</center></td>"; print "<td><center>$row->name</center></td>"; print "<td><center>$row->tanka</center></td>"; print "<td><center>$row->num</center></td>"; print "<td><center>$row->ss</center></td></tr>"; } $db->disconnect(); ?>

    • 締切済み
    • PHP
  • 段ごとに配色を変える方法

    MySQLから取得したデータをPHPで表示する際while()を使用しているのですが、この際に段ごとに配色を変えるには度押したらよいのでしょうか? 完成イメージとしてYahoo!ニュースの主なトピックス(http://dailynews.yahoo.co.jp/fc/local/)にあるように1段目は白2段目はねずみ色そして3段目は白と1段ごとに異なる配色をしたいのです。 以下の場合すべてが赤になってしまう。 print("<table><tr><td>データ</td></tr><tr>"); while($row = mysql_fetch_object($res)) { print("<td color=\"red\">".$row['YY'}."</td>"); } print("</tr></table> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 重複レコードをグループ化したいけど…。

    度々お世話になってます。 table1 【ID|フィールド1】 [1|AAA] [1|BBB] [2|CCC] [3|DDD] [3|EEE] [3|FFF] というようなテーブルがあるとして、クエリでは <table> <tr><td>1</td><td>AAA<br>BBB</td></tr> <tr><td>2</td><td>CCC</td></tr> <tr><td>3</td><td>DDD<br>EEE<br>FFF</td></tr> </table> …という形で表示したいのです。(理想です) 今までいろいろ試してみて、 $sql = " SELECT ID,フィールド FROM table1 GROUP BY ID "; に行き着きましたが、これだと <table> <tr><td>1</td><td>AAA</td></tr> <tr><td>2</td><td>CCC</td></tr> <tr><td>3</td><td>DDD</td></tr> </table> というように表示され、表示されないレコードが出来てしまいます。 GROUP BYが余計!と言われそうですが、同じIDが複数並ぶのを避けたいのです。 ソースコードは、 print "<table>\n"; print "<tr><th>ID</th><th>フィールド</th></tr>\n";  while( $row = mysql_fetch_array($result) ) {  print "<tr><td>$row[ID]</td><td>$row[フィールド]</td></tr>\n";  } print "</table>\n"; になっている状態です。 $row[フィールド]を書き換えればいいのかな?と思いますが、検索してもそれらしいものは見当たらなかったので質問させていただきました。 心当たりのある方、よろしくおねがいします。

    • ベストアンサー
    • PHP
  • form actionタグ

    dbから取得した値を元に一覧画面を作成し 一つのデータに対して一つのボタンを設定し そのボタンをクリックした際にIDを別の画面に渡す処理を 行っていますが、パラメータを渡す事が出来ません…。 <?php while($data = mysql_fetch_array($res)){ print "<tr><td>".$data['id']."</td>"; print "<td>".$data['name']."</td>";   ⇒★print "<form method=\"post\" action=\"delete.php?id=\".${data['id']};>"; print "<td><input type=\"submit\" value=\"更新\" name=\"aaa\"></td>"; print "</form>"; print "</tr>"; } ★の部分が理由でうまくいかないと思うのですが… もしお分かりになる方が居たらご教授お願い致します。

    • ベストアンサー
    • PHP
  • ループ文で呼び出したデータの複製方法

    お世話になっております、 PHP初心者の者です。 <form method="post" action="links-loop.php"> <table> <?php for($a = 1; $a < 10; $a++){ while($row=mysql_fetch_assoc($result)) { print "<tr>"; print "<td>"."$a"."</td>"; print "<td>id = {$row["id"]}</td>"; print "<td>name = {$row["name"]}</td>"; print '<td><a href="http://localhost/test/'."{$row["slug"]}".'">'."{$row["slug"]}".'</a></td>'; print '<td><img width="200" height="200" src="'."{$row["links_img"]}".'"/></td>'; print "<td>{$row["description"]}</td>"; print '<td><input type="button" value="複製"></td>'; print "</tr>"; $a++; } } ?> </table> </form> 現在ループ処理によってDBから投稿した記事を一覧で表示しています。 表示された一覧記事一つ一つにボタンをつけてボタンを押したら その記事をDB上に複製する方法が思いつかずに困っております。 できればページ遷移を行わずに複製が理想なのですが、 この場合<input type="text" value="{$row["id"]}" >を非表示で呼び出す形で宜しいのでしょうか? この場合連続で呼び出されているデータから一つの記事だけ選択して 複製するにはどのような処理にすればよいのでしょうか? 中々解決策を探しても見つけることができませんでした。 もし宜しければご回答いただけましたら幸いでございます。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Formを使ったページ間での受け渡し

    いつもお世話になっています。 また、どうしても分からないことがあって投稿させて頂きます。 現在、商品管理ページをphpとmysqlで作っているのですが、 ---------------------------(分かりにくいかもしれませんが、作ってる文をそのまま載せます) <form action="Div_Insert.php" method="post">  (接続&クエリ省略) if($rows){ while($row = mysql_fetch_array($res)){ $GetItem .= "<tr>"; $GetItem .= "<td colspan=5>".$row["ITEM_ID"]."</td>"; $GetItem .= "</tr>"; $GetItem .= "<tr>"; $GetItem .= "<td>".$row["ITEM_NM"]."</td>"; $GetItem .= "</tr>"; $GetItem .= "<tr>"; $GetItem .= "<td>".$row["EXPLAN"]."</td>"; $GetItem .= "</tr>"; $GetItem .= "<tr>"; $GetItem .= "<td>".$row["ITEM_DIV"]."</td>"; $GetItem .= "</tr>"; $GetItem .= "<tr>"; $GetItem .= "<td>"; $GetItem .= "<SELECT name='ITEM_GP_LIST'><OPTION value=''></OPTION>"; while ($row2 = mysql_fetch_array($res2,MYSQL_ASSOC)){ $GetItem .= "<OPTION value=".$row2["GP_NM"].">".$row2["GP_NM"]."</OPTION>"; } mysql_data_seek( $res2, 0 ); $GetItem .= "</SELECT>"; $GetItem .= "</td>"; $GetItem .= "<tr>"; } (省略) <input type="submit" name "bottun1" value="登録"> ------------------------------- というプログラムのページを作りました。 submitされた時にDiv_Insert.phpへ $row["ITEM_ID"]とITEM_GP_LISTの値を渡せるように作りたいのですが、 試行錯誤を重ねましたが私の実力では不可能でした。 複数行の$row["ITEM_ID"]とITEM_GP_LISTを渡すというのが難しくて。。 とても分かりにくい質問だと思いますが、どうか宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう