- PR -

PHPについての質問

投稿者投稿内容
ma-kun
会議室デビュー日: 2004/04/25
投稿数: 4
投稿日時: 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を使用してます。
ma-kun
会議室デビュー日: 2004/04/25
投稿数: 4
投稿日時: 2004-04-25 02:57
補足です。
次のようなプログラムを実行したときは
echoでうまく表示できていました。
<?php
$a = 10;
$b = 1;
$a = $a + $b;
echo ($a);
?>
しかし、先ほど書いたプログラムでは、
入力フォームにきちんと書き込みをし、
入力ボタンを押しても画面に入力した
文字が表示されませんでした。
mays
常連さん
会議室デビュー日: 2004/01/17
投稿数: 22
投稿日時: 2004-04-25 05:42
<form>タグにACTION属性が付いていないようなのですが、
それが原因ってことはないでしょうか。

PHPは使った事がないので、見当違いだったらすいません。
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2004-04-25 05:46
おはようございます。
kalzeと申します。
私、これからPHPを勉強してみっかなーと思っているので、
PHPは知らないので、改善方法は提示できませんが、
思うところがあったので書き込みさせていただきました。

コード:
<?php 
$a = 10; 
$b = 1; 
$a = $a + $b; 
echo ($a); 
?> 


この場合、PHPが動き始めたときに、
$aに10をセット、
$bに1をセット、
$aに$aと$bの合計をセットとした後に、
$aを表示すると行っていますので、$aを表示できるとおもいます。

コード:
<html> 
<form> 
名前を入力してください!<br> 
<input type = "text" name = "username"><br><br> 
<input type = "submit" value = "data転送"> 
</form> 
次のように入力しました。 
<?php 
echo "$username"; 
?> 
</html>


は1ファイルに全て記述されているのですよね?

この場合、$usernameはどのタイミングでセットされているとお考えでしょうか?
PHP君的には、いきなり$usernameを表示するといわれていますよね。
#このファイルをPHPが実行した段階では、echo以前にusernameが定義されておらず、usernameは空だから

formでusernameを入力させ、それを表示するという場合、
1.formで入力させ送信させる
2.1で送信されたものを受け取る
3.2で受け取ったものを表示する
という手順が必要だとおもいます。

ご提示のソースでは、
・入力させる。
・表示させる
しかやっておらず、しかもそれが連動していないのではないでしょうか?
formで、methodとactionが指定されていませんが、
データを受け取るスクリプトとmethodはどうなんでしょう?

データを得る処理がわからないので具体的なソースを提示できないのですが、
test.phpというファイルネームと仮定すると
コード:
<html>
ヘッダー割愛
<body>
<form method="post" action="test.php" enctype="text/plain">
<input type = "text" name = "username"><br><br> 
<input type = "submit" value = "data転送"> 
</form>

次のように入力しました。
<?php
【ここにデータ受け取り処理】
echo "$username";
?>
</body>
</html>


【】内は必要な処理を記述してください。

とすると、初めて表示したときは、データが送信されていないのでなにも表示されず、
何らかのデータを入力し送信した場合、送信されたデータを受け取り表示されるのではないでしょうか。

後、仕様がよくわからないので、ねらいと異なっているかもしれませんが、
1.フォームを表示させる
2.フォームにデータを入力し、送信
3.送信されたデータを表示する
という前提でお話させていただきました。

フォームに入力されたデータをページの読み替えなしで表示させたいというのであれば、いろいろと変わってきそうですが、PHPではそういうのできるんでしょうか?
それをするならjavaScriptあたりかな?とおもったのですが。

PHP有識者の方、間違いがあればツッコミお願いします。
また、具体的な受け取り方なども・・・
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2004-04-25 06:17
再びkalzeです。
暇だったのでPHP調べました(笑)

php.iniにおいて、register_globalsがonになっているかどうかで話は変わってくるようですが、onになっている場合、formにactionを指定すれば問題ないようですよ。

私のサーバではoffにしてあるので、以下のようなソースでOKでした。

コード:
<html>
<head><title>test</title></head>
<body>

<form method="POST" action="test2.php">
<input type = "text" name = "username"><br><br> 
<input type = "submit" value = "submit"> 
</form>

次のように入力しました。
<?php
print $_POST["username"];
?>

</body>
</html>



register_globals=on
になってると、
print $username;
でも、formのinputでつけたnameと同じ変数名であればいけるようです。
ただ、セキュリティの観点から、register_globalsはoffにしていることが多いとおもいますけど・・・。

日本語などの2バイト文字を入力する場合、また話は変わってくるかもしれませんね。
taka
会議室デビュー日: 2004/04/25
投稿数: 1
投稿日時: 2004-04-25 07:07
変数名usernameをダブルクオーテーションで囲んじゃってるのが
原因ではないでしょうか?
そうすると文字列として扱われちゃいますからね。

実際、実行できたコードでは
echo ($a)
と、囲んでいませんよね。
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2004-04-25 07:54
私なりのまとめです。

引用:

変数名usernameをダブルクオーテーションで囲んじゃってるのが
原因ではないでしょうか?
そうすると文字列として扱われちゃいますからね。



ダブルクォーテーションの場合、変数を展開し、
シングルクォーテーションだと、変数を展開しないので、
大丈夫だとおもいますよ。
#実験してみました。

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をご存知の方、上記であっていますでしょうか?
#これを機に知識を得ようという・・・・
ma-kun
会議室デビュー日: 2004/04/25
投稿数: 4
投稿日時: 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>

スキルアップ/キャリアアップ(JOB@IT)