-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtopic-post390.html
154 lines (138 loc) · 9.09 KB
/
topic-post390.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
<head>
<title>日本PHPユーザ会 掲示板: PHP 5 » $_POSTのキー名での変数宣言</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。" />
<meta name="keywords" content="php,web,php.gr.jp,community,usebb" />
<link rel="stylesheet" type="text/css" href="./templates/phpgrjp0.3/styles.css" />
<link rel="shortcut icon" href="./templates/phpgrjp0.3/gfx/usebb.ico" />
<link rel="alternate" type="application/rss+xml" title="日本PHPユーザ会 掲示板 RSS フィード" href="rss.xml" />
<script type="text/javascript" src="sources/javascript.js"></script>
</head>
<body onload="javascript:init_external()">
<div id="pagebox-bg">
<div id="shadow-left">
<div id="shadow-right">
<p id="logo"><a href="index.html"><img src="./templates/phpgrjp0.3/gfx/usebb.png" alt="UseBB" title="ホーム" /></a></p>
<h1 id="boardname"><span id="line">日本PHPユーザ会 掲示板</span></h1>
<h2 id="boarddescr">日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。</h2>
<div id="topmenu"><ul>
<li><a href="index.html">ホーム</a></li><li><a href="faq.html">FAQ</a></li><li><a href="active.html">活発なトピック</a></li>
</ul></div>
<div id="topmenu-shadow"></div>
<p class="locationbar">
• <a href="index.html">日本PHPユーザ会 掲示板</a> » <a href="forum-4.html">PHP 5</a> » $_POSTのキー名での変数宣言
</p>
<h3 id="forumname"><a href="topic-138.html">$_POSTのキー名での変数宣言</a></h3>
<p id="forummods"></p>
<p id="toolbartop"> </p>
<p id="pagelinkstop">ページ: 1</p>
<table class="maintable">
<tr>
<th>投稿者</th>
<th>投稿</th>
</tr>
<tr class="tr1">
<td class="postername">
<div class="posternamecontainer"><a href="profile-209.html">Notty</a></div>
</td>
<td class="postinfo">
<div class="postlinks"></div>
<div class="postdate"><a href="topic-post388.html#post388" name="post388" rel="nofollow">#1</a> 2009 年 5 月 13 日(水) 18:32</div>
</td>
</tr>
<tr class="tr1">
<td class="posterinfo">
会員
<div class="avatar"></div>
<div class="field">登録者: 5 月 2009</div>
<div class="field">返信数: 2</div>
<div class="field"></div>
</td>
<td class="postcontent">
<div class="post">初めて投稿させて頂きます。<br />どうぞよろしくお願いいたします。<br /><br />早速ですが、<br />現在メールフォームを作成しておりまして、<br />ハマってしまったのでご教受下さい。<br /><br />内容は、<br />$_POSTに、"name", "from", "title", "message"<br />という4つのキーが入っており、<br /><br />foreach ($_POST as $k => $v) {<br /> $$k = $v;<br />}<br /><br />というコードで、$_POSTのキー名の変数を動的に宣言しようとしたのですが、<br />isset()で調べても変数は宣言されていなかったのです。<br /><br />これは何が原因だと考えられますか?</div>
</td>
</tr>
<tr class="tr2">
<td class="postername">
<div class="posternamecontainer"><a href="profile-36.html">kona@m</a></div>
</td>
<td class="postinfo">
<div class="postlinks"></div>
<div class="postdate"><a href="topic-post390.html#post390" name="post390" rel="nofollow">#2</a> 2009 年 5 月 13 日(水) 22:24</div>
</td>
</tr>
<tr class="tr2">
<td class="posterinfo">
会員
<div class="avatar"></div>
<div class="field">登録者: 10 2007</div>
<div class="field">返信数: 71</div>
<div class="field"></div>
</td>
<td class="postcontent">
<div class="post">コピー&ペーストして試してみたのですが・・・。<br /><br />・・・なんででしょうね?。こちら(PHP5.2.5 linux)ではisset()でtrueが返ってきました。<br />値が入っていないと無視されてisset()でfalseが返ってくることもあるようです。またPOSTとGETを間違えていた、なんてことは私もやったことがあります。<br /><br />少し話が変わりますが、name=kやname=vなど、phpの中で使われる変数と同じ名前を含むフォームから呼び出されるととんでもないことになりそうなので、<pre class="code">$name = $_POST['name'];<br />$from = $_POST['from'];<br />$title = $_POST['title'];<br />$message = $_POST['message'];</pre>か、<pre class="code">foreach ( array("name", "from", "title", "message") as $k ) {<br /> if ( isset($_POST[$k]) ) $$k = $_POST[$k];<br />}</pre>のようにしたほうが安全かと考えてみましたが、いかがでしょうか?。</div>
</td>
</tr>
<tr class="tr1">
<td class="postername">
<div class="posternamecontainer"><a href="profile-209.html">Notty</a></div>
</td>
<td class="postinfo">
<div class="postlinks"></div>
<div class="postdate"><a href="topic-post391.html#post391" name="post391" rel="nofollow">#3</a> 2009 年 5 月 13 日(水) 23:11</div>
</td>
</tr>
<tr class="tr1">
<td class="posterinfo">
会員
<div class="avatar"></div>
<div class="field">登録者: 5 月 2009</div>
<div class="field">返信数: 2</div>
<div class="field"></div>
</td>
<td class="postcontent">
<div class="post">kona@m様<br /><br />早速のご回答有り難うございます。<br />つい先週PHPを始めたばかりで、このコードも勉強用の書籍の通りに記述していたので、<br />書籍のサンプルコードからコピーペーストしてもisset()でfalseが返ってきてしまいました。<br /><br />結局、フォームのhtmlと、内容確認用のphpファイル、<br />問題の起きた、実際にmb_send_mail()を実行するphpファイルをすべて書き直して見ると、<br />変数宣言が出来ていました。<br /><br />ただ、すべて書き直す前に、<br />foreach ($_POST as $k => $v) {<br /> $$k = $v;<br /> echo $k, $v;<br />}<br /><br />というコードで、そもそも$_POSTに値が入っているのか検証したところ、<br />$_POSTにはちゃんと値が入っていたので、<br />原因に関しては謎のままなのですが・・・。<br /><br />しかしそもそも論として、<br />フォームで情報を送信する際、<br />for分で動的に変数宣言する程大量の変数は必要にならないでしょうから(私の場合ですが)<br />kona@m様のご指摘の通り、<br /><blockquote class="quote"><div class="title">引用</div><div class="content">$name = $_POST['name'];<br />$from = $_POST['from'];<br />$title = $_POST['title'];<br />$message = $_POST['message'];</div></blockquote><br />と書いた方が安全かつ、間違いないですね。<br /><br /><br />ご回答下さり有り難う御座いました。</div>
</td>
</tr>
<tr class="tr2">
<td class="postername">
<div class="posternamecontainer"><a href="profile-36.html">kona@m</a></div>
</td>
<td class="postinfo">
<div class="postlinks"></div>
<div class="postdate"><a href="topic-post392.html#post392" name="post392" rel="nofollow">#4</a> 2009 年 5 月 14 日(木) 8:52</div>
</td>
</tr>
<tr class="tr2">
<td class="posterinfo">
会員
<div class="avatar"></div>
<div class="field">登録者: 10 2007</div>
<div class="field">返信数: 71</div>
<div class="field"></div>
</td>
<td class="postcontent">
<div class="post">実はもともとPHPにはフォームからのデータを自動的に変数にする機能があるのです。<br />私がPHPを知る前のことですが、デフォルトで有効になっていたのをセキュリティ上の理由で無効に変更されました。<br />少し回りくどい説明になってしまいました。ごめんなさい。<br /><br />文献:<a href="http://www.php.net/manual/ja/security.globals.php" title="http://www.php.net/manual/ja/security.globals.php" rel="external">グローバル変数の登録機能の使用法</a></div>
</td>
</tr>
</table>
<p id="toolbarbottom"> </p>
<p id="pagelinksbottom">ページ: 1</p>
<div id="bottomfix"></div>
<p id="actionlinks"></p>
<p class="locationbar">
• <a href="index.html">日本PHPユーザ会 掲示板</a> » <a href="forum-4.html">PHP 5</a> » $_POSTのキー名での変数宣言
</p>
<p id="linkbar">
</p>
<p id="bottom">
日本PHPユーザ会 掲示板 は <a href="http://www.usebb.net">UseBB 1 フォーラムソフトウェア</a> を使用しています
</p>
<div id="bottom-shadow"></div>
</div>
</div>
</div>
</body>
</html>