ここから本文です

数字を送信してそれを表示するだけのテストコードです 29番のname="key"を受信し...

s_m********さん

2012/7/2821:15:46

数字を送信してそれを表示するだけのテストコードです
29番のname="key"を受信して、printで表示しようとしても何も表示されません。

name="key"以外は全て表示されます。何がおかしいのでしょうか?教えて下さい。お願いします。


01 <?php
02 session_start();
03
04 $rand = mt_rand();
05 $_SESSION['key'] = md5($rand);
06 $key = $_SESSION['key'];
07 ?>
08
09 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
10 <html>
11 <head>
12 <meta http-equiv="content-type" content="text/html; charset=utf8">
13 <meta http-equiv="content-style-type" content="text/css">
14 <meta http-equiv="content-script-type" content="text/javascript">
15 <title>test</title></head>
16 <body>
17
18 <?php
19 if($_POST['su']<>"") {
20 print $_POST['su']."<br>";
21 print $_POST['key']."<br>";
22 print $_SESSION['key']."<br>";
23 print $key."<br>";
24 }
25 ?>
26
27 <form method="POST" action="";>
28 コメント<input type="text" name="su" size="50">
29 <input type= "hidden" name="key" value="<?php htmlspecialchars($key, ENT_QUOTES); ?>">
30 <input type="submit" value="送信">
31
32 </body>
33 </html>

補足>>フォームに入力が無いときにも乱数は発生してしまうので、適宜処理を変更すると分かりやすいサンプルになると思います。
フォームに入力が無い時は乱数は発生しないようにするにはどうすれば良いですか?それが書いてあるサイトでも良いので教えて下さい。どうかお願いします。

閲覧数:
215
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tezcelloさん

2012/7/2923:42:21

> printで表示しようとしても何も表示されません。
最初の回答者さんの仰るように、
<?php htmlspecialchars($key, ENT_QUOTES); ?>
ではエスケープした結果を表示する事はできません。
print や echo を使わないと。
__もうお一人はショートオープンタグ(<?= ?>)と勘違いされたのでしょうか?

また、($_POST['su']<>"") という条件式は破たんしているようにも思えませんが...
僕なら <> を使わずに empty() を使います。
__フォームがこのファイル内にあるって事は、最初にフォームを表示するときにも
__このスクリプトが呼ばれるのでしょう。その時点では $_POST['su'] は未定義でしょうから。


> フォームに入力が無い時は乱数は発生しないようにするには
既に入力がない時には入力値を表示しないようにしているではありませんか。
乱数を発生する部分でも同様の事をするだけです。

でも、本当にそういう仕様でいいんでしょうかねぇ...
そうだと、わざわざセッションに入れておく意味がない気がします。

また、僕なら Submitボタン にちゃんと名前を付けて、そのボタンがクリックされたかを調べますけどね。
それと、何を入力されるのかわからないフィールドの値をエスケープなしに表示するのは危険です。
htmlspecialchars() でキチンとエスケープしておくべきでしょう。
__初心者だからとか、テストコードだからって、ノーガードでいいって事はありません。

<?php
session_start();
$result = '';
$key = '';

if (!empty($_POST['btn_submit'])){
$rand = mt_rand();
$_SESSION['key'] = md5($rand);
$key = $_SESSION['key'];

$result .= htmlspecialchars($_POST['su'], ENT_QUOTES).'<br>';
$result .= htmlspecialchars($_POST['key'], ENT_QUOTES).'<br>';
$result .= htmlspecialchars($_SESSION['key'], ENT_QUOTES).'<br>';
$key = htmlspecialchars($key, ENT_QUOTES);
$result .= $key.'<br>';
}

print <<<EOL
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf8">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<title>test</title></head>
<body>
$result
<form method="POST" action="";>
コメント<input type="text" name="su" size="50">
<input type= "hidden" name="key" value="{$key}">
<input type="submit" name="btn_submit" value="送信">
</body>
</html>

EOL;

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

編集あり2012/7/2914:08:29

19行目の
if($_POST['su']<>"")

が、PHPの文法的に破綻してるので、if以下でセットされるはずの変数がセットされずに処理が進んでないんだと思います。正しくは

if(true === isset($_POST['su']))

です。


また、2~6行目で乱数を発生させてセッションに値をセットしてますが、この記述だと、フォームに入力が無いときにも乱数は発生してしまうので、適宜処理を変更すると分かりやすいサンプルになると思います。



【追記】
あまりうまいコードではないですが


<?php
session_start();

$rand = mt_rand();
$_SESSION['key'] = md5($rand);
$key = $_SESSION['key'];
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf8">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<title>test</title>
</head>
<body>

<?php
if (isset($_POST['su']) && '' != $_POST['su']) {
print $_POST['su'] . "<br>";
print $_POST['key'] . "<br>";
print $_SESSION['key'] . "<br>";
print $key . "<br>";
}
?>

<form method="POST" action="">
コメント<input type="text" name="su" size="50"> <input
type="hidden" name="key"
value="<?php htmlspecialchars($key, ENT_QUOTES); ?>"> <input
type="submit" value="送信">
<?php $_SESSION = null ?>
</body>
</html>

hok********さん

2012/7/2822:15:59

29行目のvalueをセットする部分ですが、htmlspecialchars()を呼んだだけではダメで、
htmlspecialchars()の結果を出力しなければなりません。
以下のような感じです。

value="<?php htmlspecialchars($key, ENT_QUOTES); ?>"

value="<?php print htmlspecialchars($key, ENT_QUOTES); ?>"

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる