みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

locatin.hrefのリンク付き画像とPHP

現在、MySQLとPHPを組み合わせたシステムを作っています。
MySQLのi5_volumeというカラムの中の数値が「1より大きい」ときにボタンを表示させ、0以下であれば表示させないようにしたいと考えています。

ボタンは画像でありlocation.hrefで別のページにリンクされています。
(OAuthで認証エラーを避けるため <a href></a> はNG)


画像からのリンクは下記のソースになります。

【画像のソース(locatin.hrefのリンク付き)】
<img src="./abc.png" onclick="location.href='sell.php?e2_id=<?php echo $price['e2_id']; ?>&time=<?php $time = date('G'); echo $time; ?>';" />



「i5_volumeが1より大きければ画像を表示させ、0以下であれば表示させない」ためのPHPは下記です。

【規定値で画像が表示されるPHP(画像は直リンク)】
<?php
IF ($my_volume['i5_volume'] >= 1)
{echo "<IMG src=\"./abc.png\" >";}
ELSE
{echo "";} ?>


従い、

【規定値で画像が表示されるPHP(画像は直リンク)】
の画像のソース部分を
【画像のソース(locatin.hrefのリンク付き)】
に置き換えれば基本的にはいいはずなのですが、下記ではうまくいきません。エラーになり何も表示されません。
どこが悪いかご指摘頂けませんでしょうか?



<?php
<?php
IF ($my_volume['i5_volume'] >= 1)
{echo "
<img src=\"./abc.png\" onclick="location.href='sell.php?e2_id=$_price['e2_id'];&time= $time = date('G'); echo $time;'" />
";}
ELSE
{echo "";} ?>

投稿日時 - 2013-09-28 22:18:47

QNo.8283607

困ってます

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

ハンパなく読みにくいので以下リンクを読んで別の方法も知っておいてください。

HTMLタグを動的に作るときに有用な関数
http://php.net/manual/ja/function.sprintf.php
http://php.net/manual/ja/function.vsprintf.php

クエリを連想配列から生成する関数(第3引数まではほぼ必須)
http://php.net/manual/ja/function.http-build-query.php

echo短縮構文
http://php.net/manual/ja/function.echo.php

制御構造に関する別の構文
http://php.net/manual/ja/control-structures.alternative-syntax.php

私だったらこう書くかな・・・

<?php if ($my_volume['i5_volume'] >= 1): ?>
<?php
$q = http_build_query(array(
 'e2_id' => $_price['e2_id'],
 'time' => date('G'),
), '', '&');
?>
<img src="./abc.png" onclick="location.href='self.php?<?=$q?>'" />
<?php endif; ?>

全角スペースでインデントしてるので注意。

投稿日時 - 2013-09-29 01:20:03

お礼

いつもためになるご指導ありがとうございます。
また、新しい知識を学ぶことが出来ました。
大変ありがとうございました。
お教え頂いたことをもとに、下記で所期の目的を達成することが出来ました。
深く御礼申し上げます。

<?php
$data = array('e2_id'=>$row_e_latest_stock_price['e2_id'],
'time'=>date('G'));

$data_b = http_build_query($data, '', '&amp;');

if ($row_my_volume['i5_volume'] >= 1)
{
echo
"<img src=\"./abc.png\" onclick=\"location.href='sell.php?$data_b'\" />";}

ELSE
{echo "";} ?>

投稿日時 - 2013-09-29 08:49:39

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

いつも貼ってますが念のためこちらもご覧ください。
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

投稿日時 - 2013-09-29 01:24:23

ANo.1

onclickの中身がエスケープされてないんじゃない?

{echo "
<img src=\"./abc.png\" onclick=\"location.href='sell.php?e2_id=$_price['e2_id'];&time= $time = date('G'); echo $time;'\" />
";}

PHPに限らずJavaサーブレットやJSPなど、「プログラムから最終的に(HTMLなどの)文字列を作るのが目的である」ものは、どこまでがPHPの文字列で、どこからがHTMLの文字列(タグのエレメントやアトリビュート)になるかを確認しながら作るのが肝要だ。

投稿日時 - 2013-09-29 00:57:52

お礼

エスケープミスのご指摘ありがとうございました。
凡ミス失礼しました。
ただ、エスケープの処理だけではエラーは変わりませんでした。
ありがとうございました。

投稿日時 - 2013-09-29 08:47:24

あなたにオススメの質問