- - PR -
PHPについての質問
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-25 02:05
PHPのプログラミングを勉強しはじめたばっかりの素人です。
設定まではHPなどをみながらやったので一様うごいてはいるのですが、 <html> <form> 名前を入力してください!<br> <input type = "text" name = "username"><br><br> <input type = "submit" value = "data転送"> </form> 次のように入力しました。 <?php echo "$username"; ?> </html> というようなプログラムをつくって勉強していたのですが、 (入力したデータがechoで表示されません。) どうもうまく実行されていないみたいなのでアドバイス よろしくお願いします。 ちなみにWindowsXPにアパッチを入れてPHP4.3.6を使用してます。 | ||||||||||||
|
投稿日時: 2004-04-25 02:57
補足です。
次のようなプログラムを実行したときは echoでうまく表示できていました。 <?php $a = 10; $b = 1; $a = $a + $b; echo ($a); ?> しかし、先ほど書いたプログラムでは、 入力フォームにきちんと書き込みをし、 入力ボタンを押しても画面に入力した 文字が表示されませんでした。 | ||||||||||||
|
投稿日時: 2004-04-25 05:42
<form>タグにACTION属性が付いていないようなのですが、
それが原因ってことはないでしょうか。 PHPは使った事がないので、見当違いだったらすいません。 | ||||||||||||
|
投稿日時: 2004-04-25 05:46
おはようございます。
kalzeと申します。 私、これからPHPを勉強してみっかなーと思っているので、 PHPは知らないので、改善方法は提示できませんが、 思うところがあったので書き込みさせていただきました。
この場合、PHPが動き始めたときに、 $aに10をセット、 $bに1をセット、 $aに$aと$bの合計をセットとした後に、 $aを表示すると行っていますので、$aを表示できるとおもいます。
は1ファイルに全て記述されているのですよね? この場合、$usernameはどのタイミングでセットされているとお考えでしょうか? PHP君的には、いきなり$usernameを表示するといわれていますよね。 #このファイルをPHPが実行した段階では、echo以前にusernameが定義されておらず、usernameは空だから formでusernameを入力させ、それを表示するという場合、 1.formで入力させ送信させる 2.1で送信されたものを受け取る 3.2で受け取ったものを表示する という手順が必要だとおもいます。 ご提示のソースでは、 ・入力させる。 ・表示させる しかやっておらず、しかもそれが連動していないのではないでしょうか? formで、methodとactionが指定されていませんが、 データを受け取るスクリプトとmethodはどうなんでしょう? データを得る処理がわからないので具体的なソースを提示できないのですが、 test.phpというファイルネームと仮定すると
【】内は必要な処理を記述してください。 とすると、初めて表示したときは、データが送信されていないのでなにも表示されず、 何らかのデータを入力し送信した場合、送信されたデータを受け取り表示されるのではないでしょうか。 後、仕様がよくわからないので、ねらいと異なっているかもしれませんが、 1.フォームを表示させる 2.フォームにデータを入力し、送信 3.送信されたデータを表示する という前提でお話させていただきました。 フォームに入力されたデータをページの読み替えなしで表示させたいというのであれば、いろいろと変わってきそうですが、PHPではそういうのできるんでしょうか? それをするならjavaScriptあたりかな?とおもったのですが。 PHP有識者の方、間違いがあればツッコミお願いします。 また、具体的な受け取り方なども・・・ | ||||||||||||
|
投稿日時: 2004-04-25 06:17
再びkalzeです。
暇だったのでPHP調べました(笑) php.iniにおいて、register_globalsがonになっているかどうかで話は変わってくるようですが、onになっている場合、formにactionを指定すれば問題ないようですよ。 私のサーバではoffにしてあるので、以下のようなソースでOKでした。
register_globals=on になってると、 print $username; でも、formのinputでつけたnameと同じ変数名であればいけるようです。 ただ、セキュリティの観点から、register_globalsはoffにしていることが多いとおもいますけど・・・。 日本語などの2バイト文字を入力する場合、また話は変わってくるかもしれませんね。 | ||||||||||||
|
投稿日時: 2004-04-25 07:07
変数名usernameをダブルクオーテーションで囲んじゃってるのが
原因ではないでしょうか? そうすると文字列として扱われちゃいますからね。 実際、実行できたコードでは echo ($a) と、囲んでいませんよね。 | ||||||||||||
|
投稿日時: 2004-04-25 07:54
私なりのまとめです。
ダブルクォーテーションの場合、変数を展開し、 シングルクォーテーションだと、変数を展開しないので、 大丈夫だとおもいますよ。 #実験してみました。 PHPの勉強をしたいとおもっていたところなので、 ちょうどいい課題ができた(笑)と思っていろいろ調べて試してみました。 環境がLinuxなので、Windowsの場合、相違があるかもしれません。 其の場合、ご指摘ください。 register_globals=onの場合、テキストボックスなどに指定した名前が受け取り側のPHPでの変数名として使用できる(global変数に登録される)できるようです。 なので、受け取り側のPHPスクリプトで、 echo $username; としても、表示されるようです。 しかし、全ての画面でGETパラメータを使って値を指定することができてしまうので、通常、不要なGETパラメータを受け付けないようにするためにregistr_globalsはoffにするようです。 また、PHP4.2.xではデフォルトではoffとなっているみたいです。 #たぶん、それ以降のバージョンでもデフォルトはoffになっているんじゃないでしょうか formにactionを指定しない場合、そのファイルがaction先として呼び出されるようなので、 今回の場合は、値を受け取れていないだけのようですね。 formでmethodを指定しない場合、GETになるはずなので、 指定しない場合は、$_POST[username]の部分を$_GET[username]にすればOKみたいです。 たぶんPOSTの方が一般的かとおもわれるので、POSTを指定したほうがいいかも。 ということで、ma-kun様の環境ではregister_globalsがoffになっているのではないでしょうか。 はなはだ僭越ながら。 PHPをご存知の方、上記であっていますでしょうか? #これを機に知識を得ようという・・・・ | ||||||||||||
|
投稿日時: 2004-04-25 11:51
おはようございます。kalzeさん、takeさん、maysさんお返事ありがとうございます。
kalzeさんのご指摘のとおり register_globals=off になっています。 onにするとセキュリティ面であまりよくないとのことなので 出来れば、offのままで正常に動くようにしたいと考えています。 takeさんのご指摘のダブルクォーテーションで囲むのではなく、 ()でという部分は変更してみたのですが、今までと同じ状態でした。 実際に書き換えたプログラムを乗せます。 ただPHPをはじめたばかりなので間違っているかもしれませんが よろしくお願いします。 <html> <form> あなたの名前をここに入力してください!<br> <input type = "text" name = "username" method="post" action="ttt.php"><br><br> <input type = "submit" value = "data転送"> </form> あなたは次のように入力しました。 <?php echo ($username); ?> </html> |