• ベストアンサー
  • 困ってます

PHPでのCookie

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; ?>

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数78
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • shimix
  • ベストアンサー率54% (865/1590)

setcookieはクライアントにCookieを保存させる(ようにhttpレスポンスを送る)だけで、$_COOKIEの値(クライアントから送られてきたもの)を書き替えるわけではありません。自分で$_COOKIEも書き替えるか、($_COOKIEでなく)$_SESSIONを使うとかの工夫が必要です。 >「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 表示するときにhtmlspecialcharsしていないからです。クライアントから受け取ったデータを表示するときには必ずhtmlsepecialchars(第二引数はENT_QUOTESを指定)を使ってください。 http://php.net/manual/ja/function.htmlspecialchars.php

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 >$_COOKIEの値(クライアントから送られてきたもの)を書き替えるわけではありません。 これで意味がわかりました。 ネットで情報見ながら、$_SESSIONを併用してやってみようとおもいます。 htmlsepecialchars これもありがとうございます。 こちらは先ほど実行してうまく表示されました。 本当にありがとうございました。

関連するQ&A

  • PHPでのクッキー

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 直接form2.phpへ飛ぶと、クッキーの値がなくなってしまいます。 setcokkieが、何の値もないのを上書きしていることは理解できるのですが、これを上書きせず回避?する方法はありますでしょうか? よろしくお願いします。 【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 $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; ?>

    • ベストアンサー
    • PHP
  • $POSTの送信

    POSTデータを送信する方法を教えてください。 PHPのPOSTを用いたプログラミングを行っています。 以下のように、前ページ受信したPOSTの内容(「aaa」)を hiddenで送信したいと思いましたが 次ページ(result.php)にて「$name」と受信してしまいます。 (前略) <?php $name = $_POST['name']; echo $name; ?> <form action="result.php" method="POST"> <input type="hidden" name="name2" value=$name> <input type="radio" name="name3" value=" (以下略) 説明下手ではありますがご回答頂きたいと思います。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 画面の再読込をせずに動作する方法について

    下記のソースで動作は出来ているのですが、画面の再読込が必要な状況となっております。 そのため、再読込をせずに動作させたいと思ったのですが、どうすればできるかわからなかったのでアドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 【やりたい事】 1. サブ入力画面でcopyボタンを押下時、入力画面の名前とメールアドレスをサブ入力画面にコピーしているのですが、画面の再読込が必要になっているのを、再読込無しで動作させたいです。 2. 入力画面でdel2ボタンを押下時、3rdの行の内容を2ndにコピーした上で、3rdの内容を削除しているのですが、画面の再読込が必要になっているのを、再読込無しで動作させたいです。 3. これは出来ればで結構なのですが、del2(またはdel3)ボタン押下時、その行に何もデータが存在しない場合は、何かしら警告メッセージを表示できるとありがたいです。 【動作確認方法】 下記の3つのファイルをドキュメントルート直下にtestフォルダを設置し、ブラウザからindex.phpにアクセスしてください。 その後、任意の名前とメールアドレスを入力し、add2ボタンを押下するとサブ入力画面に遷移するため、そこでcopyボタンの動作を試すことができます。 また、del2ボタンの動作は、サブ入力画面で任意の名前とメールアドレスを入力後、saveボタンを押下すると入力画面に遷移するため、そこでdel2(del3)ボタンの動作を試すことができます。 【ソースコード】 1. index.php <?php mb_internal_encoding('UTF-8'); $document_root = $_SERVER['DOCUMENT_ROOT']; $list=array( "mode" , "submit" , "name" , "name1" , "name2" , "name3" , "mail" , "mail1" , "mail2" , "mail3" ); foreach($_POST as $key=>$value){ if (in_array($key, $list)) { $$key=strip_tags($value); } } if($mode=="input") { if($submit == "add2") { $name1 = $name2; $mail1 = $mail2; require_once($document_root . "/test/sub_input.html"); } elseif($submit == "add3") { $name1 = $name3; $mail1 = $mail3; require_once($document_root . "/test/sub_input.html"); } elseif($submit == "del2") { $name2 = $name3; $mail2 = $mail3; $name3 = ""; $mail3 = ""; require_once($document_root . "/test/input.html"); } else { $name3 = ""; $mail3 = ""; require_once($document_root . "/test/input.html"); } } else if($mode=="sub_input") { if($submit == "copy") { $name1 = $name; $mail1 = $mail; require_once($document_root . "/test/sub_input.html"); } else { if($name2 == "") { $name2 = $name1; $mail2 = $mail1; require_once($document_root . "/test/input.html"); } else { $name3 = $name1; $mail3 = $mail1; require_once($document_root . "/test/input.html"); } } } else { require_once($document_root . "/test/input.html"); } ?> 2. input.html <form action="./index.php" method="post"> <table width="100%"> <tr> <td>名前</td> <td><input type="text" name="name" id="name" value="<?php echo $name ?>" /></td> <td>&nbsp;</td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="mail" id="mail" value="<?php echo $mail ?>" /></td> <td>&nbsp;</td> </tr> <tr> <td>2nd</td> <td><?php echo $name2; ?><input type="hidden" name="name2" value="<?php echo $name2; ?>" /><input type="hidden" name="mail2" value="<?php echo $mail2; ?>" /></td> <td><input type="submit" name="submit" value="add2" /> <input type="submit" name="submit" value="del2" /></td> </tr> <tr> <td>3rd</td> <td><?php echo $name3; ?><input type="hidden" name="name3" value="<?php echo $name3; ?>" /><input type="hidden" name="mail3" value="<?php echo $mail3; ?>" /></td> <td><input type="submit" name="submit" value="add3" /> <input type="submit" name="submit" value="del3" /></td> </tr> </table> <input type="hidden" name="mode" value="input" /> </form> 3. sub_input.html <form action="./index.php" method="post"> <input type="submit" name="submit" value="copy" /> <table width="100%"> <tr> <td>名前</td> <td><input type="text" name="name1" id="name1" value="<?php echo $name1 ?>" /></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="mail1" id="mail1" value="<?php echo $mail1 ?>" /></td> </tr> </table> <input type="submit" name="submit" value="save" /> <input type="hidden" name="mode" value="sub_input" /> <input type="hidden" name="name" id="name" value="<?php echo $name ?>" /> <input type="hidden" name="name2" id="name" value="<?php echo $name2 ?>" /> <input type="hidden" name="name3" id="name" value="<?php echo $name3 ?>" /> <input type="hidden" name="mail" id="mail" value="<?php echo $mail ?>" /> <input type="hidden" name="mail2" id="mail" value="<?php echo $mail2 ?>" /> <input type="hidden" name="mail3" id="mail" value="<?php echo $mail3 ?>" /> </form> 以上、宜しくお願いします。

  • PHPからHTMLへの変数の受け渡し

    form.html→page1.php→page2.php というようなページをつくり、form.htmlでテキストエリア等<form>を使いpage1.phpにデータ:nameを送るとします。 その際$name = $_POST['name'];とするとphpでの変数になってしまってpage1のhtml上では認識されませんよね? page1からpage2に移動するときにform.phpでいれたnameのデータも <input type="hidden" name="名前" value="name"> というように使いたいのですがその際page1内でphpでの$nameをhtmlのnameに代入というかデータの受け渡しが必要になるかと思うのですがそれはどのように記述すればいいのでしょうか? ご教授よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ページ時のセッション保持

    似たような質問は他にもたくさんあったんですが、どうも肝心の部分が違っていたので新規で失礼します。 http://oshiete1.goo.ne.jp/qa3102414.html ↑ここを参考にlist.phpというファイルを作りました。 【list.php】 session_start(); $thisphp = "list.php"; $key = 'page'; $child = 'ss'; if( array_key_exists($key,$_GET) ){ $no = $_GET[$key]; readfile("$child$no.php");} else{for( $i=1; $i<=2; $i++){ $no = "00$i"; echo "\n<a href='$thisphp?$key=$no'>子ページ($thisphp?$key=$no)</a><br>";}} list.phpを見る前に、まずsubmit.phpでセッションに格納する情報を登録して頂くんですが…。 【submit.php】 <?php session_start(); $_SESSION["name1"] = $_POST['name1']; $_SESSION["name2"] = $_POST['name2']; $thisphp = "submit.php"; ?> <form method="POST" action="<?php echo $thisphp;?>"> name1:<input type="text" name="name1" size="10" maxlength="10"> name2:<input type="text" name="name2" size="10" maxlength="10"> <input type="submit" name="submit" value="登録"></form> 全体の処理の順序は ●submit.phpで情報を登録してlist.phpへ移動。 ●list.phpに表示されている子ページへ移動。 ●子ページ(list.php?page=001など)で、submit.phpで登録した情報を表示する。 というものです。 その子ページの内容は <?php session_start(); ?><html><body> <?php echo $_SESSION["name2"];?> </body></html> というものなのですが、この子ページでだけセッションの情報が反映されません。 『<?php echo $_SESSION["name2"];?>』がソースにもろに表示されている状態です。 説明が解りにくければ追記致します。 改善策が思い当たる方、回答お願いします。

    • ベストアンサー
    • PHP
  • phpがうまく動きません。

    phpで4択のクイズを作りたいのですが 正解のラジオボタンを選んでもカウントされないのと 答え合わせを押すと正解だった箇所を赤く表示したいのですがなんて書けばよいのか どこにそのコードを入れるのかよくわかりません <状態> ・5つのデータがmyadminに保存されています ・データベースの内容は表示されます。 ・答え合わせを押すと正解のラジオボタンを選んだ数が表示されるようにしたいです ・保存ボタンは閉じても答えを保存するためにあります ・q_noは8ケタ固定であり、左から5つ目までは固定であと3桁は999問入れられるよう設定してあります ・q_ansはデータベースに答えの値(1~4)が入れてあります ・データベース名はproblemです <省略> $res_set = mysql_query($sql); while ($row=mysql_fetch_array($res_set)){ ?> <form method="POST" action="H2102.php"> <?php echo $row['q_no'] . " "; ?> <br> <?php echo $row['q_text'] . " "; ?><br><br> <br> <?php echo "ア"; ?> <input type="radio" name="q_ans" value="1"> <?php echo $row['q_point1'] . " "; ?> <br><br><br> <?php echo "イ"; ?> <input type="radio" name="q_ans" value="2"> <?php echo $row['q_point2'] . " "; ?> <br> <br><br> <?php echo "ウ"; ?> <input type="radio" name="q_ans" value="3"> <?php echo $row['q_point3'] . " "; ?> <br><br><br> <?php echo "エ"; ?> <input type="radio" name="q_ans" value="4"> <?php echo $row['q_point4'] . " "; ?> <br><br><br> <br> <input type = "submit" name="save" value="保存"> <?php if(isset($_POST['save'])){ $_SESSION['save'] = $_POST['q_ans']; //保存すると選んだ回答を保存 } ?> <?php } ?> </form> <form method="POST" action="H2102.php"> <input type = "submit" name="ans" value="答え合わせ"> <?php //正解かどうかをチェック if(isset($_POST['ans'])){ $a = $_SESSION['a']; if($row['q_no'] == $_POST['q_no'] && $_POST['q_ans'] || $_SESSION['save'] == $row['q_ans'] ){ $_SESSION['a'] = $a + 1; //q_noが一致かつ保存した値または選んだ解答(値)が一致していれば1問につき1つカウントする $a = $_SESSION['a']; } echo $a; //カウントされているかをチェック } ?> <input type = "submit" name="del" value="カウント初期化"> <?php if(isset($_POST['del'])){ session_unset(); } ?> </form> <br> <?php } ?> 足りない情報があれば追記します

    • 締切済み
    • PHP
  • 指定のinputに入力

    恐れいります。 <form action="./xxx.cgi" method="POST"> <input type="text" name="name1"> <input type="text" name="name2"> <input type="text" name="name3"> <input type="text" name="name4"> <input type="text" name="name5"> <input type="submit" value="送信"> </form> と、5つの入力欄があり、別ウィンドウから、指定の場所に代入することは可能でしょうか。例えば、name1のエリアに、別ウィンドウからformで「test」という文字を送信して入力する感じです。 よろしくお願いします。

  • mysql データ登録

    phpにてmysqlにデータ登録の流れを作っているのですが、わからないことがあり投稿しました。 簡単に流れを説明しますと mysqlのテーブル(テーブル名member)の構成は id | name だとして phpのフォームで <input type="text" name="name1" value=""> <input type="text" name="name2" value=""> <input type="text" name="name3" value=""> というものを作っています。 ここでフォームのname1、name2、name3をそれぞれ入力したときにmysqlに登録されるのですが、 mysqlのなかに id | name 1 | A 2 | B 3 | C としたいのですが、下記の記述ではできません。 (INSERT INTO `member` SET `name`='$name1',`name`='$name2',`name`='$name3') エラー文はColumn 'name' specified twiceと表示されます。 レコード数は増やしたくないので、何か方法が御座いましたら教えていただけないでしょうか? まだ、PHPを勉強し始めたばかりで困っています。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ラジオボタンでうまくするには・・・・

    初めまして。 現在下記のプルダウン形式で、一つの価格が同じなので問題なく動くのですが <FORM action="cart/sys/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> <SELECT name=sur> <OPTION value="" selected>購入数量</OPTION> <OPTION value=1>1</OPTION> <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> <OPTION value=5>5</SELECT> <INPUT type=submit value=カートに入れる> </FORM><BR> <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> </FORM> 同じ商品で1・2・3・4・5のそれぞれに単価が変わる設定をしたいのですが、うまくいく方法が見つからないです。 ラジオボタン形式で作ってみたものの・・・・ <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=submit value=カートに入れる> </FORM> <FORM> <INPUT type="radio" name="name1" value="2000">1袋<BR> <INPUT type="radio" name="name1" value="3900">2袋<BR> <INPUT type="radio" name="name1" value="5800">3袋<BR> <INPUT type="radio" name="name1" value="7500">4袋<BR> <INPUT type="radio" name="name1" value="8500">5袋</FORM> としてみましたがうまくいきません。 なにか方法ございましたら、ご教授いただければと思います。

    • ベストアンサー
    • HTML
  • postのタイムラグ

    以下のソースでPOSTの値が取れないときがあるので困っています。 具体的にはページを表示してから30秒程度待ってからの クリックじゃないとPOSTの値が取れません。 GETの場合はページ表示後すぐにボタンをクリックしても大丈夫でした。 原因が分からず途方に暮れています。 お知恵をお貸しください。 PHP Version 5.2.3 <?php $P_data = $_POST["pg"]; print("POST=>".$P_data."<BR>"); $G_data = $_GET["pg"]; print("GET=>".$G_data."<BR>"); print <<< DOC_END <html> <head> </head> <body> DOC_END; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=1>"; echo"<input type=submit value=あ>"; echo"</form>"; echo"<form action=test.php method=post>"; echo"<input type=hidden name=pg value=2>"; echo"<input type=submit value=い>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=3>"; echo"<input type=submit value=う>"; echo"</form>"; echo"<form action=test.php>"; echo"<input type=hidden name=pg value=4>"; echo"<input type=submit value=え>"; echo"</form>"; print <<< END </body> </html> END; ?>

    • 締切済み
    • PHP