海外旅行から帰ってきたら、まず何を食べる?

PHPでクッキーを使い、下記のような入力フォームを作りました。
form.phpで入力→form2.phpで正常出力出来るのですが、

form2.phpで一度更新しないと、結果が画面に表示されません。

これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。


後1つあります。form.phpで
「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。
これはなぜでしょうか?

お願いします。

【form.php】

<?PHP
parse_str($_COOKIE["city"]);
parse_str($_COOKIE["city_name"]);
?>


<html>
<form method="post" action="form2.php">
<?PHP
echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1>
<BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>";
echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2>
<BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>";
?>
<input type="submit" value="実行">
</form>
</html>

【form2.php】

<?php
if ($_POST) {

$city1 = $_POST["p1"];
$city2 = $_POST["p2"];

$city_name1 = $_POST["name1"];
$city_name2 = $_POST["name2"];

setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90);
setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90);
}

parse_str($_COOKIE["city"]);
parse_str($_COOKIE["city_name"]);

echo $set_name1;
echo $set1;

echo $set_name2;
echo $set2;

?>

A 回答 (1件)

setcookieはクライアントにCookieを保存させる(ようにhttpレスポンスを送る)だけで、$_COOKIEの値(クライアントから送られてきたもの)を書き替えるわけではありません。

自分で$_COOKIEも書き替えるか、($_COOKIEでなく)$_SESSIONを使うとかの工夫が必要です。



>「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。

表示するときにhtmlspecialcharsしていないからです。クライアントから受け取ったデータを表示するときには必ずhtmlsepecialchars(第二引数はENT_QUOTESを指定)を使ってください。

http://php.net/manual/ja/function.htmlspecialcha …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>$_COOKIEの値(クライアントから送られてきたもの)を書き替えるわけではありません。
これで意味がわかりました。

ネットで情報見ながら、$_SESSIONを併用してやってみようとおもいます。


htmlsepecialchars
これもありがとうございます。
こちらは先ほど実行してうまく表示されました。

本当にありがとうございました。

お礼日時:2012/02/23 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!