日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » PHP言語の配列で質問です

PHP言語の配列で質問です

ページ: 1

投稿者 投稿
会員
登録者: 5 月 2009
返信数: 3
:'( CGIのページを作成中で、PHPの配列が解らず質問させてください。

①このCGIのページに、paypalのロゴ(gif)を入れ、ロゴをクリックするとpaypalの指定されたページへリンクしたいのです。ホームページビルダーでhtmlで入れ込むと成功しました。

②自分なりに考えたのは、下記で \n"; が抜けているかと思うのですが、その場所が解らないのです。

③★-文言、◆-数字が入ります。


print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>★★★</TITLE></HEAD>\n";
print "<BODY bgcolor=\"#9dffff\">\n";
print "<H2 align=\"center\">★★★★</H2>\n";
print "<HR>\n";
print "<P><form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="◆◆◆◆">
<input type="image" src="https://www.paypal.com/en_US/JP/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form></P>\n";
print "</BODY></HTML>\n";

ご存知の方がいらっしゃいましたら、ご教授ください。
よろしくお願いいたします。
会員
登録者: 10 2007
返信数: 71
「PHPの配列が解らない」という質問の意図がちょっと私には難しいので、ご期待の情報を提供できるかどうかわかりませんのでどうか悪しからずご了承下さい。

まずは文字列中の「"」を「\"」にしてみて下さい。

このページをブラウザで見ると、本来見えるべきでない文字列が表示されたり、エラーメッセージが出たりすると思います。
この例ですと、すべての行は「print "文字列";」のような形になっていますね。この「print」はデータを出力する関数、つまりブラウザにデータを送る命令になります。次の「"文字列"」はそのデータを指定しています。最後の「;」で一つの命令の終わりを表しています。ここで、文字列をきちんと指定するために「"」(ダブルクォーテーション)で囲って、「"文字列"」のように表現します。
しかし、文字列中に「"」が出てきたらどうなるでしょうか。コンピュータはそれを文字列の区切りだと判断してしまいます。当然、文字列は期待通りに指定できませんし、残りの文字列は意味不明な命令として扱われてしまいます。となると、文字列中には「"」が使えないことになってしまいます。
そこで、「"」を「\"」で表現することにします。今度は「\」(円マークもしくはバックスラッシュ)も困りますので同じように「\」を「\\」で表現します。こうして「"」を含む文字列を指定することができます。
この例では「print "文字列";」の「"文字列"」にあたる部分に、そのままの「"」を書いてしまってあるので、PHPが期待通りに判断できないということがわかります。

文献

この考え方はPHPに限らず有名なプログラム言語やスクリプト等のほとんどでも当てはまるのではないかと思います。
いかがでしょうか。
会員
登録者: 10 2007
返信数: 71
あと・・・、もし表示されたページの先頭に「Content-type: text/html」の文字が表示されてしまっているようでしたら、1行目の「print "Content-type: text/html\n\n";」についてはPHPが自動的に付けてくれていますので、削除して下さい。
会員
登録者: 5 月 2009
返信数: 3
Kona@m様

ご教授ありがとうございました。
大変有益な情報で、上手く表示されました。

ただ、print "<input type=\"hidden\" name=\"hosted_button_id\" value=\"◆◆◆◆\">\n";
部分の◆◆◆◆にpaypalのコード番号が入りますが、◆の後に\が入るためか、指定したPaypalのIDに接続できません。(paypalには接続されますが、IDに問題があると表示されます)

もし、このような対処法をご存知でしたら、再度ご教授いただけると嬉しいです。

print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>★★★★</TITLE></HEAD>\n";
print "<BODY bgcolor=\"#9dffff\">\n";
print "<H2 align=\"center\">★★★★</H2>\n";
print "<HR>\n";
print "<P>\n";
print "<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">\n";
print "<input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">\n";
print "<input type=\"hidden\" name=\"hosted_button_id\" value=\"◆◆◆◆\">\n";
print "<table>\n";
print "<tr><td><input type=\"hidden\" name=\"on0\" value=\"More PROFIT\">More PROFIT</td></tr><tr><td><select name=\"os0\">\n";
print " <option value=\"3month/ 1mth FREE\">3month/ 1mth FREE \$600.00\n";
print " <option value=\"6month/ 2mth FREE\">6month/ 2mth FREE \$1,200.00\n";
print " <option value=\"9month/ 3mth FREE\">9month/ 3mth FREE \$1,800.00\n";
print "</select> </td></tr>\n";
print "</table>\n";
print "<input type=\"hidden\" name=\"currency_code\" value=\"USD\">\n";
print "<input type=\"image\" src=\"https://www.paypal.com/en_US/JP/i/btn/btn_buynowCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - The safer, easier way to pay online!\">\n";
print "<img alt=\"\" border=\"0\" src=\"https://www.paypal.com/en_US/i/scr/pixel.gif\" width=\"1\" height=\"1\">\n";
print "</form>\n";

よろしくお願いいたします。
会員
登録者: 10 2007
返信数: 71
今回の例だと、文字列に記号(や特定の日本語)が含まれていなければ、その後に\が来るということでおかしくなるということはちょっと思い当たりません。(私が間違えていたらフォローお願いします)
もしも「PHPのつもりで話していたが実はPerlの話だった」・・・ということですと、ちょっと話は変わってくるかもしれません。(まさかと思いますがPerlだったり他の言語ではありませんよね? ;)
PHPでもPerlであっても、一度ブラウザでそのページを表示させてみて「ソースの表示」をしてみると、実際にどのようなHTMLを生成して送られてきているか確認できますので、そこから原因を探ってみるという手段もあります。HTMLの埋め込みではうまくいったとのことですから、そちらと比べてみて下さい。

どのような目的かはわかりませんが、外部のサーバを利用する場合は“充分な配慮”を忘れないようにしましょう。
会員
登録者: 5 月 2009
返信数: 3
ありがとうございます。
ご教授いただいた箇所を再度構築してみて、結果をご報告いたしますね。

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » PHP言語の配列で質問です

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています