• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:URLに引数を渡す良い方法)

URLに引数を渡す方法

このQ&Aのポイント
  • 効率的な方法でURLに引数を渡す方法を知りたいです。
  • 現在のコードではURLの引数の指定が見づらくなってしまっています。
  • 他の方法やベストプラクティスを教えてください。

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

  • ベストアンサー
回答No.4

これは、HTMLのタグの中にPHPのタグを埋め込もうとするから見栄えが厳しくなるということであれば、 はなから、aタグを生成する関数を作れば良いのではないですか? <?php function a_href($title, $url, $id, $page=0, $options=array(), $attributes=array()){ $tag = '<a href="%s"%s>%s</a>'; if(!preg_match('/^[0-9]+$/', $page)){ $page = 0; } $page++; $page_and_id = array(); if($id) $page_and_id['id'] = $id; $page_and_id['page'] = $page; $options = array_merge($page_and_id, $options); $get_query = http_build_query($options, '', '&'); if(strpos($url, '?') !== false){ $get_query = '&' . $get_query; }else{ $get_query = '?' . $get_query; } $str_attr = ''; foreach($attributes as $attr=>$val){ $str_attr .= ' '.$attr.'="'.$val.'"'; } return sprintf($tag, $url.$get_query, $str_attr, $title); } ?> <?php echo a_href('最新順', '/?1=1', 1, 0, array('sort'=>'created'))?> <?php echo a_href('人気順', '/?1=1', 1, 0, array('sort'=>'popular'))?> <?php echo a_href('コメント順', '/?1=1', 1, 0, array('sort'=>'comment'))?> と、適当にでっちあげてみましたが、いかがでしょう。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

とりあえず関数にまとめちゃうとか・・・ <?PHP function setArgs($args = NULL){ $id=$_REQUEST["id"]; $pattern="/^[0-9a-z]+$/i"; if(preg_match($pattern,$id)) $args["id"]=$id; $page=$_REQUEST["page"]; if(!is_numeric($page)) $page=0; $args["page"]=$page +1; $str=""; foreach($args as $key=>$val){ if($str!="") $str.="&"; $str.=$key."=".$val; } if($str!="") $str="?".$str; return $str; } print "<a href=\"".setArgs(array("sort"=>"created"))."\">最新順</a><br>\n"; print "<a href=\"".setArgs(array("sort"=>"popular"))."\">人気順</a><br>\n"; print "<a href=\"".setArgs(array("sort"=>"comment"))."\">コメント順</a><br>\n"; ?> この仕様ってページが毎回インクリメントされちゃいますがほんとにいいのでしょうか?

szkshi
質問者

補足

ありがとうございます。 こちらの方法もいい方法ではないかと考えました。 ただ要素が多くなるとかなり見づらいきがします。 あと↓みたいな関数があるので自作しないでも行けます。 <?=http_build_query(array("sort"=>"created"))?>

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

あ~、なるほどね。最後の括弧が余計なのね。と気がついた所で俺なら とりあえず、こう書きます。 <? $id02 = ($id) ? '&id=' . $id : ''; $page02 = ($page > 0) ? '&page=' . ($page + 1) : ''; $mix = $id02 . $page02; print<<<EOL <a href="/?sort=created{$mix}">最新順</a> <a href="/?sort=popular{$mix}">人気順</a> <a href="/?sort=comment{$mix}">コメント順</a> EOL; ?>

szkshi
質問者

補足

文のミス指摘ありがとうございます。 私もbm_hiroさんがご教示いただいた方法が一番良いのではないかと思っておりますが、膨大なリンクがある場合、コントローラー(プログラム部分)がかなり見づらくなってしまいます。 例としてあげたものはソートリンクだけですが、ソートした要素へのリンクやトップへの戻るリンクにidやセッションIDをつけたい場合、もっといい方法はないものだろうかと思案しております。 $id02 = ($id) ? '&id=' . $id : ''; $page02 = ($page > 0) ? '&page=' . ($page + 1) : ''; $mix = $id02 . $page02; $pmix = $id02; <a href="/params/1<?=$pmix?>">ほげほげ</a> <a href="/<?=$pmix?>">TOPへ</a>

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

んー。。。??? 俺が無知なだけだと思うのですが、これって、PHPのソースとして 成立してるんでしょうか?? 三項演算子を使ってるのだとは思いますが、試しに、<?($id)?'&id='.$id:'')?> だけ実行したら パースエラー出ました。

関連するQ&A