• ベストアンサー

データの送受信を行うための環境

PHPの環境を作ってサンプルスクリプトを変更しながらいろいろ試しています。 ループ処理で、今までは手で1つ1つ書いていたテーブルも一瞬で作れてしまったりと、感動しています。 ところが、どうもデータ送受信系のスクリプトがうまく動かないようです。 たとえば1番最初のサンプルは3つの送信ボタンがあって、クリックするボタンによって3通りのメッセージを表示するというものですが、クリックしてもアドレス欄に訳の分からん記号が表示されるだけで、それ以外は何も起こりません。 その他のサンプルスクリプトもデータの送受信に関するものはことごとく失敗しています。 何かサーバー機の設定とかが足りないのですか。

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

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

あ、そうか、わかりました。確かにサンプルが古いせいですね、これは。 PHPの古いバージョンでは、例えばフォームの <input type="text" name="text">の内容が、受け取る側のスクリプトで$textという変数に入っていました。しかしこれはセキュリティ上問題があるんです。スクリプト内部の変数名がわかっていれば、その値を外から与える事ができる訳ですから。そのため、どのバージョンからか忘れましたが、デフォルト状態でこのような使い方ができなくなりました。 そこで代わりになるのが$_GET変数、$_POST変数などです。このあたりは参考URLを参照して下さい。但しこれはPHPの設定で回避する事もできます。推奨されていませんが、register_globalsという設定項目の値をいじる事で動くようになります。参考URLをご覧下さい。推奨はされていませんので、慣れたら$_GET,$_POSTの形で書くようにした方がいいと思います。 アドレス欄の文字列というのは、GETの変数だったんですね。これは異常でも何でもありません。HTTPリクエストにはGETとPOSTがあって、GETの場合は変数類がURLの一部として表示されます。 http://okweb.jp/kotaeru.php3?q=1442547 こちらのNO2の回答でGETとPOSTについて説明しています。

参考URL:
http://www.php.net/manual/ja/language.variables.predefined.php
zyousuke
質問者

お礼

wakame0729さん、ご回答ありがとうございます。 register_globalsの値を変更したら、サンプルスクリプトが正しく動くようになりました。 設定方法が良く分からなかったので、手っ取り早く参考URLの.htaccessの方法をやりました。 wakame0729さんの助言通り、まず全てのサンプルスクリプトを見るため、しばらくこの設定にして、慣れてきたら$_GETや$_POSTを使ってやるようにします。 とりあえず、問題は解決しましたが、 ちょっと興味深い?話を書きます。 今、私が読んでる本には、ご丁寧に環境の作成手順が書かれており、私は本に書かれているとおりに環境作成を行いました。アパッチやPHPは本で紹介されているのと全く同じバージョンをあちこち探してインストールしました。何が言いたいのかというと、この本のどこかにregister_globalsについての記述があれば、ここで皆さんに質問することは無かったなぁということです。まあ、まだ全部読み終わってませんから、どこかに書いてあるのかも。書いてあったらごめんなさい。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

回答No.7

>この本のどこかにregister_globalsについての記述があれば その本が執筆された時は、デフォルトがregister_globals=onだったので、その後PHPのデフォルト設定が変わった時の加筆修正がされていないのでしょう。僕自身、その変更があった時の事なんてすっかり忘れていました。 慣れるとregister_globals=offの方が、通常の変数と、外から来るパラメータを別けて考える事がしやすいので、スマートなスクリプトが書けますよ。今は既にこちらの方が普通になっていると思うので、できるだけ早く要領をつかんで移行されることをオススメします。

zyousuke
質問者

お礼

wakame0729さん、ありがとうございます。 執筆開始時と完成時にはかなりの時間差ができますものね。 ところで、この本は2年前に買ったものです。 何で今になって急に読み始めたのかってのはさておき、 今では、なんとPHP5なんてものが登場しているではありませんか。 PHP4は既に一昔前の技術となってしまい、しかも、それを今から頑張って学ぼうとしているオレ・・・

全文を見る
すると、全ての回答が全文表示されます。
  • ryouchi
  • ベストアンサー率41% (52/125)
回答No.6

wakame0729さんがご指摘されたphpの古いバージョンの仕様は存じ上げませんでした。(勉強になりました>wakame0729さん) phpでもperlでもColdFusionでも基本はサーバにリクエストした結果をサーバ側で処理(計算)し、最終的にHTMLファイル(画像だったりすることもありますが)として返すというのが基本だったりします。 ですので、できるだけ省略せずに記載するのがよいと思います。 ちなみに、今回zyousukeさんはsubmit.phpという名前でファイルを作られたかと思いますが、私の記載方法で、 actionの部分に$_SERVER["PHP_SELF"]という書き方をしているのにお気づきでしょうか? これは自分自身(submit.php)を指すときによく使う方法です。この記載方法であれば、ファイル名を気にせずに作れるので覚えていると楽だと思います。 #勿論大掛かりなプログラムを作る場合はきちんと設計したほうがよいと思います。 ではでは。

zyousuke
質問者

お礼

質問者だけでなく回答者も勉強できる! さすが教えて!gooですね。 PHP_SELFのような汎用的な変数を使えば、後々メンテが不要だったり、メンテの際にも影響範囲が狭くなりますね。ソフト開発の基本ですね!

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

>依然としてアドレス欄に文字が表示されるだけなのです。 アドレス欄にはどんな文字列が表示されているのですか?

zyousuke
質問者

お礼

ご返信ありがとうございます。 No.3さんのソースを使用したところうまく動くようになりました。 しかし、私の中にはまだ疑問が残っています。 No.3さんのお礼欄を読んでいただけますか。 アドレス欄に表示される文字はNo.3さんの2個目のスクリプトを使用した場合と 私が超簡略化したやつを使用した場合で次のように異なります。 ※テキストボックスにaを入力して送信ボタンをクリックした時のアドレス欄 No.3さんのスクリプトの場合: 元からあったアドレス+?text=a 私が超簡略化したスクリプトの場合: 元からあったアドレス+?text=a&submit=%83N%83G%83%8A%91%97%90M ただしNo.3さんの1個目のスクリプトの場合は私が簡略化したスクリプトと同じアドレスになります。 なのでアドレス欄に表示される文字は特にバグとは関係ないと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • ryouchi
  • ベストアンサー率41% (52/125)
回答No.3

やりたいことはこういうことでしょうか? <FORM> <INPUT TYPE="text" NAME="text"> <INPUT TYPE="submit" NAME="submit"> </FORM> <?php if (isset($_GET["text"])) print $_GET["text"] ?> 私ならこう書きます。 <?php echo '<form method="get" action="'.$_SERVER["PHP_SELF"].'">'; ?> <INPUT TYPE="text" NAME="text"> <INPUT TYPE="submit" value="submit"> </FORM> <?php if (isset($_GET["text"])) print $_GET["text"] ?> ちなみに、 <INPUT TYPE="submit" NAME="submit"> にはvalueがないのですが、何か特別なことをしているのでしょうか? なお、単純に文字化けの場合は文字コードを確認してみてください。

zyousuke
質問者

お礼

ryouchiさん、ご返信ありがとうございます。 頂いたソースを使用してみたところ、 なんと、やりたかったことが出来ました。 これってひょっとして環境が問題なのではなく、 単にサンプルスクリプトがバグってたということですか。 サンプルスクリプトの変数名のところを$_GET["変数名"]の形に書き換えたら、動くようになりました。 他の動かなかったサンプルスクリプトも集成してみます。 ただ、この本はずっと前に出版されたものなので、公式サイトで紹介しているサンプルがこんなにたくさんバグってるとなれば、読者からの指摘でとっくに修正されているはずだと思うのです。 なので今回ryouchiさんのソースに変更したら動きましたが、サンプルのままでもサーバーの設定とかで正しく動くのではと思っていました。 どう思いますか。 ちなみにvalueがないのには深い訳はないです。 サンプルスクリプトを超簡略化するために省いただけです。私の環境ではvalueを省いた場合、「クエリ送信」というボタンが出来ました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

formタグにはaction属性を書いてないんですね。という事は自分自身をリクエストしているのだと思いますが・・・念のためお聞きしますが、ファイル名を日本語で付けたりしてないですよね?日本語のファイル名を付けても多分うまくいかないと思います。 <form action="自分のファイル名">としてやるとうまく動くようになるんじゃないでしょうか。サンプルソースはこのaction属性、つまり飛び先を省略しています。原因はわかりませんが、このために期待したとび先に飛んでないのではないか、と思いました。

zyousuke
質問者

お礼

wakame0729さん、ご返信ありがとうございます。 ファイル名は日本にはしていません。 昨日のスクリプトを次のように変更しました。 ファイル名はsubmit.phpです。 <FORM ACTION="submit.php"> <INPUT TYPE="text" NAME="text"> <INPUT TYPE="submit" NAME="submit"> </FORM> <?php if (isset($submit)) print $text ?> action属性の書き方は正しいでしょうか。 このスクリプトを試してみましたが、依然としてアドレス欄に文字が表示されるだけなのです。 スミマセンが他にも何か思い当たることがありましたら、是非教えてください。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

>クリックしてもアドレス欄に訳の分からん記号 Javascriptで処理している訳でなく、単純なフォームの構造なんですよね?それでアドレス欄がこうなるのでしたら、<form>タグのaction属性がおかしくなってるのではないでしょうか。フォームの部分のHTMLをソース表示するとどうなってますか? 「3つの送信ボタン」とありますが、formタグも3つありますか?もし1つのformタグしかないとしたら、JavaScriptを使って、押したボタンによって飛び先を変えてるなんて事はないですか?だとしたらPHPの問題じゃなくてJavaScriptの問題です。他でもフォームの送信絡みが正常に動作しないとの事なんですが、なんか根本的な間違いがあるように感じます。差し支えない範囲でもう少し詳しい情報下さい。

zyousuke
質問者

お礼

wakame0729さん、ご返信ありがとうございます。 Javascriptは使っていないと思います。 また、サンプルスクリプトは公式サイトからダウンロードしたやつですので、正しいはずだと思います。 サンプルスクリプトをそのまま貼り付けると怒られそうなので、超簡略化したソースを貼り付けます。 <FORM> <INPUT TYPE="text" NAME="text"> <INPUT TYPE="submit" NAME="submit"> </FORM> <?php if (isset($submit)) print $text ?> これは送信ボタンをクリックするとテキストボックスに入力した文字を表示するスクリプトなのですが、クリックしてもやはりアドレス欄が変わるだけなのです。 ソースは正しいですよね??? 何か思い当たる点がありましたら教えてください。 ちょっと今日はもう寝ないと明日がやばいので寝ますね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Outlook Express 送受信ボタン

    こんにちは。お世話になります。OutlookExpressを使ってメールの送受信を行っているのですが、前回までは送受信ボタンを押せば送受信ができておりました。 最近送受信ボタンを押すと、受信や送信のボックスが一瞬でてきてるように見えるのですが、すぐになくなってしまいます。そこで、送受信ボタンの隣の下向き三角から自分のアカウントをクリックで選んで送受信を行っています。 これでもいいのですが、少し不便を感じますので、わかる方よろしくお願いいたします。Ver.6です。

  • multipart/form-dataを使ったデータ送信について

    色々調べましたが分からなかったので質問させてください。 ある配列データをmultipart/form-dataを使い送信したいと、 考えています 例) [sample1.php] $data = array("saitama","kanagawa","chiba"); //このsample1.phpファイルから$dataをmultipart/form-dataを使い、 //sample2.phpファイルに送信したいと考えています。 [sample2.php] //$dataを受け取る 調べましたがフォームを介して送信する方法はいくつかありましたが、 フォームを使わずに送信する方法がわかりませんでした。 どなかた教えていただけないでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • アウトルックエクスプレスの送受信

    受信メールがあるかどうかを確認するため、送受信ボタンをクリックします。  この時、送信メールはない状態です。 送受信ボタンをクリックした時、何か送信されているようなのです。 送信メールや受信メールがある場合に、 青いラインが左から右に伸びて、送信や受信の度合いを示してくれますよね? その青いラインが伸びていくのが、一瞬だけ見えるのです。一瞬なので何も読み取れません。 受信メールがある時も、受信の際の青いラインが伸びる前に、一瞬その青いラインが伸びるのが見えます。 通常、送信が先なので 何かを送信しているのではないかと思います。 開封確認メッセージは送らない、を設定しています。 それと、 知らないところからメールが届き、本文内に「このメールは自動返信によるものです」などと書いてありました。 送った覚えが無いところからのメールなので、上記の、「送信していると思われる状態」は、本当に何かを勝手に送信しているのでしょうか? 1.これとの関連の有無も、 2.何が送られているのか、も分かりません。 3.自動で送信する仕組みを、パソコンに仕組まれているのでしょうか? 毎日のコンピュータのスキャンでウイルスは検知されませんが、スキャンで検知されないウイルスもあると聞いたことがあります。 メールもノートンがスキャンしています。 4.それらをすり抜けるウイルスもあるのでしょうか? WindowsやOfficeの更新も、LiveUpdataも行っています。 数日前から、「侵入を試みたのを遮断した」という表示が出ていて、これも関係があるのかと気になり始めました。 IPアドレスはそれぞれ異なります。 5.もし既に侵入されていたとしたら、上記のようなことが起こるのでしょうか? 6.侵入された方は、普通は気付きようがないのでしょうか? とても気持ち悪くて、怖いです。 ご存知の方がいらしたら、教えてください。

  • メールの送受信ができない!!

    アウトルックエクスプレス6を使っています。メールの送受信ボタンをクリックするとネットが切断されてしまいメールの送受信ができません。ちなみにメールの送受信が終わったら切断する、の欄にはチェックは入っていません。どういったことが考えられるでしょうか?

  • ウィンドウズメールの送受信について

    ウィンドウズメールの送受信についてご質問致します。 以前はウィンドウズメールを立ち上げればそのまま受信したメールなどが見れましたが、 最近では立ち上げて送受信ボタンをクリックしないと受信しなくなりました。 送信後も未送信のとこに入り、未送信をクリックして未送信のメールを選んで送受信ボタンを押して やっと送信するような状況です。 また、特定のアドレスより届いたメールは携帯に転送されるようにメッセージルールで設定したのですが、こちらもウィンドウズメールを立ち上げて送受信をしないと届きません。 これは何が原因なんでしょうか? 詳しい方、ご教示ください。 宜しくお願い致します。

  • メールの送受信ができません

    XP、Outlook2003を使っています。 設定をし終え(ADSL接続なのですが、『詳細設定』の『接続』はLANのところにチェックでいいんですよね?)、携帯からメールを送ってみましたが何も応答がありません。(エラーのメールも返ってきません) また逆にOutlookで携帯宛にメールを作成し、送信ボタンを押すと送信トレイに(1)と表示され、送受信ボタンをクリックしてもずっと送信トレイにあります。 『アカウント設定のテスト』を実行したところ滞りなく完了します。 送受信できない原因は何でしょうか? あまりパソコンには詳しくないので分かりやすい説明をしてくださるとありがたいです。よろしくお願いします。

  • 送受信出来るんですが、送受信出来ません

    最近PCの調子が悪く、リカバーしました。 全て設定が終わり、インターネットもメールも利用可能なんですが 送受信ボタン(全てを送受信)を押すと 「要求されたタスクの処理中にエラーが出ました・・・・・」 と出てしまいます。 しかし送受信ボタンの横のタブ(▽マーク)で『全て受信』を クリックすると 受信が出来ます。送信も出来ます。 メールの機能としては利用出来るのですが、出来ることなら 『送受信ボタン』一つで確認をしたいものです。 ちなみにエラーが出ました、という表示が出ても特にエラーの詳細が記載されておりません。空白です。 PCのメーカーにも問い合わせをしましたが、エラー内容が出ていないので マイクロソフトに聞いてくれと言われ、マイクロソフトに電話したら 既にインストールされた状態の物をサポートできないと言われ困っております。 OSはvistaです。outlook express6.0を使用しています。 何かおわかりの方は宜しくお願い致します。

  • Windows live メールの送受信ボタンについて

    Wondows 7 Professional 64Bit版で、Windows live メールでメールを作成してそのメールの枠内には送受信ボタンがありますが、 「ツール(T)」/「オプション(O)」/「送信タブ」で、送信欄内の「□メッセージを直ちに送信する(I)」の□をクリックして、OFFにした場合、ツールバー内にOutlook Express」のように「送受信ボタン」が無いので、これの設定方法をご教示お願いいたします。

  • JavaアプレットからPHPを経由してデータ保存

    現在Javaアプレットを作成しており,サーバ上でデータ保存を行いたいのでPHPを勉強しています. アプレットから送信したデータをPHPで受信することができず,苦戦しています. アプレットからPHPを呼び出す,PHPによるファイルに書き込むことはなんとかできました. アプレット,PHP間の送受信を行う簡単なサンプルがあれば教えていただきたいです. 似たような質問はありましたが,理解が追いつかなかったため,できれば具体的に教えていただけると嬉しいです. よろしくお願いいたします.

    • ベストアンサー
    • PHP
  • CGIメールフォーム送信アラートについて

    よくCGIのメールフォームのサンプルの動作を試したりするのですが中には 送信ボタンをクリックすると「サンプルです。」や「サンプルのため送信できません。」 などのアラート表示されますがJava Script だと思うのですがCGIに同じ仕組みを取り入れるには どうすればいいでしょうか? 詳しい方教えて下さい。 参考になりそうなURLでも よろしくお願いします。

    • ベストアンサー
    • CGI
Macでの印刷に関する問題
このQ&Aのポイント
  • Macで印刷をする際に、サイズが小さく切り取り線まで印刷できずに困っています。
  • 4枚も紙を無駄にしてしまいましたので、どうにか解決方法を知りたいです。
  • エレコム株式会社の製品に関連する問題です。
回答を見る