dポイントプレゼントキャンペーン実施中!

プレイ画面で大体レイアウトは完了して、数字を入力してボタンを押すと
それが表示されるようにするところまではできたのですが、二回目に入力し
ボタンを押して表示しなおすとその前に表示した数字が消えてしまいます。

セッションを使わないといけないようなのですが、
どのサイトを見てもいまいち書き方が分かりません。
上に述べたようなプログラミングの場合、セッションはどのように
書いたらいいのでしょうか?
よろしくお願いします。

A 回答 (4件)

訂正



if (isset($_POST['new']) && is_string($_POST['new']) && preg_match('/\A(?<!\z)/u', $_POST['new'])) {
$_SESSION['list'][] = $_POST['new'];
}
    • good
    • 0
この回答へのお礼

お礼が送れてしまい申し訳ありません。
4件もお答え頂いてありがとうございます(^^)
無事解決致しました。
いろんな書き方があるんですね。

お礼日時:2013/08/28 21:05

【追記】



POST送信されていない・配列で不正に送信された場合に加えて、何も入力されていない・UTF-8として不正な文字列を送信された場合も弾きたいならば、

if (isset($_POST['new']) && is_string($_POST['new']) && !preg_match('/\A(?<!\z)/u', $_POST['new'])) {
$_SESSION['list'][] = $_POST['new'];
}

としてください。
なおこういう風にバリデーション処理が膨らんでくると毎回書くのが面倒なので、こういう関数を作っておくといいです。
http://qiita.com/mpyw/items/c39b9ee695a5c2e74627
    • good
    • 0

<?php



// 「戻る」で戻ったあとも正常にページを表示したければこれが必要
session_cache_limiter('none');

// $_SESSIONを使えるようにする
session_start();

// 定義されていなければ配列で初期化する
if (!isset($_SESSION['list'])) {
$_SESSION['list'] = array();
}

// POSTで文字列として正しく受け取ったならば追加
if (isset($_POST['new']) && is_string($_POST['new'])) {
$_SESSION['list'][] = $_POST['new'];
}

// ヘッダ出力
header('Content-Type: text/html; charset=UTF-8');

?>
<!DOCTYPE html>
<html>
<head>
<title>メモ</title>
</head>
<body>
<form action="<?=basename($_SERVER['SCRIPT_NAME'])?>" method="post">
<fieldset>
<legend>新規入力</legend>
<p><input type="text" name="new"></p>
<p><input type="submit" value="追加"></p>
</fieldset>
</form>
<?php if ($_SESSION['list']): ?>
<fieldset>
<legend>リスト</legend>
<ul>
<?php foreach ($_SESSION['list'] as $item): ?>
<li><?=htmlspecialchars($item, ENT_QUOTES, 'UTF-8')?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<?php endif; ?>
</body>
</html>
    • good
    • 0

<?php



// 「戻る」で戻ったあとも正常にページを表示したければこれが必要
session_cache_limiter('none');

// $_SESSIONを使えるようにする
session_start();

// 定義されていなければ空文字で初期化する
if (!isset($_SESSION['memo'])) {
$_SESSION['memo'] = '';
}

// POSTで文字列として正しく受け取ったならば代入
if (isset($_POST['memo']) && is_string($_POST['memo'])) {
$_SESSION['memo'] = $_POST['memo'];
}

// ヘッダ出力
header('Content-Type: text/html; charset=UTF-8');

?>
<!DOCTYPE html>
<html>
<head>
<title>メモ</title>
</head>
<body>
<form action="<?=basename($_SERVER['SCRIPT_NAME'])?>" method="post">
<fieldset>
<legend>メモ</legend>
<p><textarea name="memo"><?=htmlspecialchars($_SESSION['memo'], ENT_QUOTES, 'UTF-8')?></textarea></p>
<p><input type="submit" value="更新"></p>
</fieldset>
</form>
</body>
</html>

この回答への補足

迅速で詳しい回答ありがとうございます。
因みにすいませんが、この更新ボタンの下に更新した文字を縦にずらーっと
並べるにはどうすればよいでしょうか?下のようにしたいのですが。

一回目の入力
----------
あいうえお|←textarea
----------
更新ボタン
あいうえお

二回目の入力
----------
かきくけこ|
----------
更新ボタン
あいうえお
かきくけこ

何回も申し訳ないですけど、もう一回だけ回答よろしくお願いしますm(_ _)m

補足日時:2013/08/27 11:21
    • good
    • 0

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