• ベストアンサー

初心者で数当てゲームを作っているのですが.....

プレイ画面で大体レイアウトは完了して、数字を入力してボタンを押すと それが表示されるようにするところまではできたのですが、二回目に入力し ボタンを押して表示しなおすとその前に表示した数字が消えてしまいます。 セッションを使わないといけないようなのですが、 どのサイトを見てもいまいち書き方が分かりません。 上に述べたようなプログラミングの場合、セッションはどのように 書いたらいいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
noname#244856
noname#244856
回答No.4

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

hitosashi
質問者

お礼

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

その他の回答 (3)

noname#244856
noname#244856
回答No.3

【追記】 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

noname#244856
noname#244856
回答No.2

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

noname#244856
noname#244856
回答No.1

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

hitosashi
質問者

補足

迅速で詳しい回答ありがとうございます。 因みにすいませんが、この更新ボタンの下に更新した文字を縦にずらーっと 並べるにはどうすればよいでしょうか?下のようにしたいのですが。 一回目の入力 ---------- あいうえお|←textarea ---------- 更新ボタン あいうえお 二回目の入力 ---------- かきくけこ| ---------- 更新ボタン あいうえお かきくけこ 何回も申し訳ないですけど、もう一回だけ回答よろしくお願いしますm(_ _)m

関連するQ&A