phpを使用して下記のページを作成しました。
http://oskuni7.sakura.ne.jp/katarogu.php
上記のページはPHPを使用してphpMyAdminのデータをHTMLに出力するという事をしているのですが、
">
の文字が連続して
">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">">
上記の様なものすごく面倒な表記が続く状態になっているのですが、
自分の中では原因がわからず困っております。
連続した">をなくすにはどのようにすればよろしいでしょうか?
何が原因として考えられるでしょうか?
自分が作るページは上記の様な">が毎回続くため非常に困っております。
お手数をおかけしますが時間があるかたおりましたらよろしくお願いします。
(1)原因
変数内(データベース内)にダブルクォーテーションが含まれているためです。
説明と対応策は既回答にありますので、
以下、本題とはそれますが気になった点、少し書き込ませていただきます。
(2)HTML生成における無駄の削除
kanri_no さえあれば商品の判別はつくのですから、
picture/kosuu/price の3つのhiddenは無駄な情報の垂れ流しです。
この3つを削るだけで、サーバ側の負担も、回線への負担も、
見る人のパソコン上の負担も全て減りますので削除しましょう。
(3)データベース格納における無駄の削除
データベース内にHTMLタグを入れておくのはスペースの無駄ですし、
改造や引越しなどの際にも非常に面倒になりますから、
フォルダ名(gdなど)と画像ファイル名(009.jpgなど)だけを持たせておきましょう。
<img src="http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/BJ/024.jpg"> ↓ BJ/024.jpg もしくは oskuni7.sakura.ne.jp/F_katarogu/PICTURE/BJ/024.jpg
(4)実際の訂正場所
$PictureBase = 'http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/'; もしくは $PictureBase = 'http://';
↑ この宣言は一回だけで良いので、先頭の方で行っておけば良いでしょう。
※プログラムの数が増えてくると管理が大変になってくるので、
共通の関数などを用意して一箇所だけ変更すれば良いようにしますが、
現状で、新しい事を覚えるのも大変かと思いますし、
それほど大規模なシステムにもならないでしょうから、
とりあえずは各プログラムの先頭で宣言するようにしておけばよろしいでしょう。
<input type="hidden" name="picture" value="'.$row["PICTURE"].'"> <input type="hidden" name="kosuu" value="'.$row["KOSUU"].'"> <input type="hidden" name="price" value="'.$row["PRICE2"].'">';
↑ この三行は削除。
echo ' <td style="vertical-align: center; text-align: center;">' . '<a href="' . $row["LINK"] . '"><img src="' . $PictureBase . $row["PICTURE"] . '"></a>' . '</td>' ;
↑ 画像表示欄は上のように修正。
※ 結合部分は前後にスペースを入れておくと良いでしょう。
※ 複数行に渡る場合はインデントを適宜入れておくと良いでしょう。
PHPのソースがどうなっているか分かりませんが、 input type="hidden" name="picture" に書かれている value 値が異常です。
たとえば下記のようになっている部分が多く、
<input type="hidden" name="picture" value="<img src="http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/BJ/002.jpg">">
この末尾が繰り返し表示される原因になっています。
おそらく、PHPスクリプトに書いたダブルクォーテーションの閉じ方が間違っているのでしょう。
ご回答ありがとうございます。
末尾が原因であることはわかったのですが、きちんと””の間に値が入っているとは思うのですが、正式な形にするとどのような形になるのでしょうか。。。
自分ではうまく””の間に挟まれているようにしか見えず、少し困っております。。。
<input type="hidden" name="picture" value="<img src="http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/GD/018.jpg">">
の部分ですね。
「<input value="○○">」で囲ってる○○に、「"」と「>」が含まれるので、「value="○○"」が閉じられて、さらに「>」によって、タグも閉じられて、残りの「">」だけが出力されている様子です。
echo('<input value='.htmlentities($img).'">');
等として、「"」「>」を変換した方が良いかと思います。
htmlentitiesの逆変換はhtml_entity_decode()ですが、PHPが受け取るときは「<」「"」にに戻っていて必要ないかも。
ご回答ありがとうございます。
全部ガッツリ見たわけではないですが、ダブルクォートのネストの問題が解決するとだいぶスッキリすると思いますよ。
とりあえず
これを ""
↓
こうする ""
ご回答ありがとうございます。
しかし、すいません。少しわからないです。
自分ではうまく””の間に挟まれているようにしか見えず、少し困っております。。。
PHPのソースがどうなっているのか分かりませんが、原因は、input value の中にダブルクォーテーションが何度も現れることです。
いずれにしても、value値としてHTMLタグを記述することは、セキュリティ上、好ましくありません。クロスサイトスクリプティングを許すことになるからです。
value値としては、画像のURLだけを渡せば十分ではないでしょうか。
ご回答ありがとうございます。
あー、すいません。はてなの記法あんまり把握してないです。
全角で書き直します。
これを ”<img src=”http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/GD/009.jpg”>”
</p>↓
</p>こうする ”<img src=’http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/GD/009.jpg’>”
ご回答ありがとうございます。
(1)原因
変数内(データベース内)にダブルクォーテーションが含まれているためです。
説明と対応策は既回答にありますので、
以下、本題とはそれますが気になった点、少し書き込ませていただきます。
(2)HTML生成における無駄の削除
kanri_no さえあれば商品の判別はつくのですから、
picture/kosuu/price の3つのhiddenは無駄な情報の垂れ流しです。
この3つを削るだけで、サーバ側の負担も、回線への負担も、
見る人のパソコン上の負担も全て減りますので削除しましょう。
(3)データベース格納における無駄の削除
データベース内にHTMLタグを入れておくのはスペースの無駄ですし、
改造や引越しなどの際にも非常に面倒になりますから、
フォルダ名(gdなど)と画像ファイル名(009.jpgなど)だけを持たせておきましょう。
<img src="http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/BJ/024.jpg"> ↓ BJ/024.jpg もしくは oskuni7.sakura.ne.jp/F_katarogu/PICTURE/BJ/024.jpg
(4)実際の訂正場所
$PictureBase = 'http://oskuni7.sakura.ne.jp/F_katarogu/PICTURE/'; もしくは $PictureBase = 'http://';
↑ この宣言は一回だけで良いので、先頭の方で行っておけば良いでしょう。
※プログラムの数が増えてくると管理が大変になってくるので、
共通の関数などを用意して一箇所だけ変更すれば良いようにしますが、
現状で、新しい事を覚えるのも大変かと思いますし、
それほど大規模なシステムにもならないでしょうから、
とりあえずは各プログラムの先頭で宣言するようにしておけばよろしいでしょう。
<input type="hidden" name="picture" value="'.$row["PICTURE"].'"> <input type="hidden" name="kosuu" value="'.$row["KOSUU"].'"> <input type="hidden" name="price" value="'.$row["PRICE2"].'">';
↑ この三行は削除。
echo ' <td style="vertical-align: center; text-align: center;">' . '<a href="' . $row["LINK"] . '"><img src="' . $PictureBase . $row["PICTURE"] . '"></a>' . '</td>' ;
↑ 画像表示欄は上のように修正。
※ 結合部分は前後にスペースを入れておくと良いでしょう。
※ 複数行に渡る場合はインデントを適宜入れておくと良いでしょう。
ご回答ありがとうございます。
ご回答ありがとうございます。