セッション配列の取得の仕方

このQ&Aのポイント
  • PHPで画像ファイルのアップロードスクリプトを作成中です
  • アップロード用のフォームボタンは1つで、複数のファイルをアップロードしています
  • 最後にアップロードしたファイル一覧表示用のセッション配列を取得するところがうまくいきません
回答を見る
  • ベストアンサー

セッション配列の取得の仕方

PHPで、画像ファイル(複数)のアップロードのスクリプトを作成しています。 アップロード用のフォームボタンはひとつです。1ファイルアップロードしたら、同じフォームに戻って次をアップロードして、最後に一覧表示で確認するというやり方です。 newfile.php(アップロード用のフォームボタン) ↓ newfileconf.php(アップロードファイルの表示確認) ↓ newfiledone.php(アップロードできました!のメッセージ(とアップロードファイル一覧表示用の配列取得)) 買い物などで、商品を追加していくやり方などと似ているのではと思います。 セッション配列にファイル名を入れていけばできるはずだと思うのですが、最後の一覧表示用のセッション配列を取得するところ(newfiledone.php)だけがなぜだかうまくいきません。 アップロードじたいはうまくいっており、$imagefile(ファイル名)、$count も取れています。 単純ミスかもしれませんが、一晩ひっかかっています。わかる方いたら教えて下さい。 newfiledone.phpのコードは下記です。 <?php /****************************************/ /* 写真の新規登録実行ページ */ /****************************************/ //共通データをインクルードします require_once("photolibini.php"); session_start(); if( isset( $_SESSION[ "count" ] ) ) { $_SESSION[ "count" ]++; } else { $_SESSION[ "count" ] = 1; } //前のページからデータを受け取る $imagefile = $_POST[imagefile]; $cancel = $_POST[cancel]; if (isset($cancel)) { //キャンセルボタンが押されたとき //アップロードされた写真のファイルの実体を削除 unlink("$PHOTOTMP$imagefile"); //写真の新規登録ページへリダイレクト header("Location: photonew.php"); exit(); } $body = "登録を完了しました!"; //写真のファイルを一時保存先から最終保存先に移動 rename("$PHOTOTMP$imagefile", "$PHOTODIR$imagefile"); $body .= "<BR><BR> <INPUT type='button' value='次の写真を登録' onclick='window.location=\"photonew.php\"'> <INPUT type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>"; //カウンタの数字を配列に入れる $count = $_SESSION[count]; //imagefileをセッション配列に入れる $_SESSION['imagefile'][$count] = $imagefile; //配列がうまくいっているかどうか試しに表示してみる foreach ( $_SESSION['imagefile'] as $count => $value ){ echo $value."<br />\n"; } //ページヘッダを出力します print htmlheader("写真の新規登録実行"); //ページ本文を出力します print $body; //ページフッタを出力します print htmlfooter(); ?>

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yui-magic
  • ベストアンサー率62% (20/32)
回答No.1

session_start();は最初に記述しなければいけません。 <?php session_start(); require_once("photolibini.php"); if( isset( $_SESSION[ "count" ] ) ) { $_SESSION[ "count" ]++; } else { $_SESSION[ "count" ] = 1; } ---以下省略--- ?>

lovecream
質問者

お礼

。。。できました。 ありがとうございました!

関連するQ&A

  • PHPでセッション管理

    PHPでセッション管理の勉強をしています、 テストに以下の文章があるのですが カウント2回です は表示するのですが 3回目以降も カウント2回です と表示します。 文章がどこかおかしいでしょうか? また、このセッション管理は携帯電話でも有効なのでしょうか? スミマセン、教えてください。 バージョンは MYSQL ver4.0.26 PHP ver4.2.2 です <?php session_start(); $count = 1; if (isset($_SESSION["count"])) { $count = $_SESSION["count"]; $count++; } $_SESSION["count"] = $count; ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>セッション変数のテスト</title> </head> <body> セッション変数のテスト<BR> <BR> <?php if ($count == 1) { ?> はじめての訪問です。<BR> <BR> セッション変数にデータがありません。<BR> このページをリロードしてください。<BR> <?php } else { ?> あなたの訪問は<?=$count?>回目です。<BR> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP セッションの受け渡しと取得

    お世話になります。 サムネイル画像を下記で表示させ、 <button type="button" onclick="window.open('1.html','main');" name="写真1" value="<?php echo $file1; ?>"><img src="1S.jpg" width="150" height="110"></button> 上記の画像クリックすると拡大表示するようにしています。 その際、画像のname値「写真1」を保持したまま、次ページへ受け渡して取得したいのですが、 どうすれば良いでしょうか? 下記はサムネイル画像のページと次ページどちらにも入れております。 <?php // セッションスタート session_start(); $file1 = isset($_SESSION['file1']) ? $_SESSION['file1'] : ''; $_SESSION[ 'file1' ] = $file1; ?> 表示箇所には下記を入れています。 <?php echo $file1; ?> どなたかご教授をお願いします。

    • ベストアンサー
    • PHP
  • 初心者ですみません。画像ファイルのアップロードについて

    任意の画像ファイルをHTMLフォームで入力して 登録確認画面に渡した後、ファイルをアップロード したいのですが上手くいきません。 ・フォーム入力ページ <FORM action="登録確認ページ.php" method="POST" enctype="multipart/form-data"> <INPUT type="file" name="uploadfile" size="50"> <INPUT type="submit" name="reg" value="OK"> ↓ ・登録確認ページ $uploadfile = $_FILES['uploadfile']; move_uploaded_file($uploadfile, "$PHOTOTMP$imagefile"); $body .= "<IMG src='$PHOTOTMP$imagefile' width='240' height='180'>"; として、登録確認ページでアップロードする 画像ファイルをいったん表示させてから 最終的にアップロードさせたいのですが 「×」マークが出て画像が表示されません。 データの受け渡しが上手くできていないのでしょうか。 どなたか教えて下さい。よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションについて

    PHP初心者です。 今、セッションについて勉強しています。 名前を入力してログインすると次のページに名前が表示するようにしたいのですが、表示されません。どうしたらよいでしょうか? ソース(ログインページ) <? session_start();// セッション管理の開始 session_register("namae1");//現在のセッションに1つ以上の変数を登録する ?> <? header("Content-type: text/html;charset=EUC_JP"); ?> <html><head><title>ログイン</title></head> <form action="sessiontop.php" method="post"> 名前: <input type="text" name="namae"><br><br> <input type="submit" value="ログイン"> </form> </body></html> ソース(名前が表示されるページ) <? session_start();// セッション管理の開始 header("Content-type: text/html;charset=EUC_JP"); //ディレクトリー内に入っているHTMLファイルは全てEUC-JPですという命令がブラウザに送信される。 ?> <html> <head> <title>セッションメインページ</title></head> <? $name = $_POST["namae"]; $_SESSION["s_name"]=$name; ?> <?= $s_name ?>さんこんにちわ<br><br> <a href="session3.php">ログイン画面に戻る</a><br> </body></html> よろしくお願いします。

    • ベストアンサー
    • PHP
  • sessionが分かりにくいです

    try4.html <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <title>カンタンアンケート</title> </head> <body> <form action='try4-2.php' method='GET'> 性別:<br> <input type="radio" name="gender" value=0>男性 <input type="radio" name="gender" value=1>女性<br><br> 趣味(複数選択可):<br> <input type="checkbox" name="movies" value=1>映画  <input type="checkbox" name="music" value=1>音楽  <input type="checkbox" name="books" value=1>読書  <input type="checkbox" name="sports" value=1>スポーツ<br><br> ご意見をお書きください:<br> <textarea name="comment" rows="4" cols="40"></textarea><br><br> <input type="submit" value="送信"> <input type="reset" value="リセット"><br><br> </form> </body> </html> ////////////////////////////////////////////////////// try4-1.php <?php session_start(); ?> <html> <head><title>try4-1.php</title></head> <body> <?php $_SESSION = array(total_cnt => 0, male => 0, female => 0, movies => 0, music => 0, books => 0, sports => 0, comment => array("")); ?> //////////////////////////////////////////////////////////////// try4-2.php <?php session_start(); ?> <html> <head><title>try4-2.php</title></head> <body> <?php if ($_GET['gender'] == 0) ++$_SESSION['male']; elseif ($_GET['gender'] == 1) ++$_SESSION['female']; if ($_GET['movies']) ++$_SESSION['movies']; if ($_GET['music']) ++$_SESSION['music']; if ($_GET['books']) ++$_SESSION['books']; if ($_GET['sports']) ++$_SESSION['sports']; $_SESSION['comment'][] = $_GET['comment']; ++$_SESSION['total_cnt']; ?> 登録しました。さらに<A href="try4.html">入力する</A><br> これまでの集計結果を<A href="try4-3.php">表示する</A><br> </body> </html> ////////////////////////////////////////////////////////// try4-3.php <?php session_start(); ?> <html> <head><title>try4-3.php</title></head> <body> <?php echo "これまでにアンケートに応えたのは{$_SESSION['total_cnt']}人です。そのうち<br>"; if ($_SESSION['total_cnt']){ $male_rate = (int)($_SESSION['male'] / $_SESSION['total_cnt'] * 100); $female_rate = (int)($_SESSION['female'] / $_SESSION['total_cnt'] * 100); } else { $male_rate = 0; $female_rate = 0; } echo "男性:{$_SESSION['male']}人 $male_rate %<br>"; echo "女性:{$_SESSION['female']}人 $female_rate %<br><br>"; echo "趣味は映画:{$_SESSION['movies']}人、音楽:{$_SESSION['music']}人、読書:{$_SESSION['books']}人、" . "スポーツ:{$_SESSION['sports']}人<br><br>"; echo "意見:<br>"; foreach ($_SESSION['comment'] as $comment) echo $comment . "<br>"; ?> 集計を<A href="try4-1.php">初期化する</A><br> さらに<A href="try4.html">入力する</A><br> </body> </html> //////////////////////////////////////////////////////// とファイルが4つあるのですがセッション情報はどこに格納されているのでしょうか。TXTファイルでもなさそうなので教えて下さい。

    • ベストアンサー
    • PHP
  • セッションについて

    php初心者&ど素人です 勉強のためにphpとmysqlで簡単なログイン機能を作ってみようと思いました しかし、Locationでページ移動したときのセッションがセキュリティ的に安全なのかわかりません ログインフォームのlogin.phpから自分自身に送信、ログインできたらセッションを付けてから header("Location:hoge.php");でhoge.phpに飛ばしています ログインした後のhoge.phpページではログイン確認をセッションidがあるかだけ確認しています セッションidがなかったらログインページ戻す if(!$_SESSION['id']){ header('Location: login.php'); exit(); } 質問1 セッションidは表示されている誰でも見れるidなのでセキュリティ的にまずいですか? 簡単にセッションのっとれるもんなんでしょうか? 質問2 一般的にはどうやているのでしょうか? ログインページ全て(例えば編集画面とか会員情報とか)にmysqlから暗号化されたパスワードを取得して、それをセクションに入れて、また、mysqlからパスワードと照合したりしてるんでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP
  • 配列のSession格納、及び取得方法について

    お世話になります。 現在Visual Studio 2005でプログラム作成中です。 質問内容は、 配列(文字列を格納)をSessionに渡し、次ページでその配列の値を取得できるかという点です。 ***(a.aspx.vb)抜粋*** Dim a() As String Redim a(DataTable1.Rows.Count) For i As Integer 0 to DataTable1.Rows.Count - 1 a(i) = CType(DataTable1.Rows(i).Item(0)) Next Session("a.list") = a(DataTable1.Rows.Count) Session("a.count") = DataTable1.Rows.Count ***(b.aspx)抜粋*** Dim b() As String = CType(Session("a.list"), String) Dim bCount as integer = CType(Session("a.count"),Integer) Dim Name as String For i As Integer 0 To bCount Name = CType(b(i),String) Next としているのですが、取得できません。 配列に格納されたものをSessionに格納し、取得することは可能なのでしょうか。 また、その他に適切なものがあればご教授ください。 よろしくお願いいたします。

  • AからBへセッション変数の受け渡し(ページ間の移動うまくできない)

    Aプログラム後半部分より //下記をセッション変数に登録 //$_SESSION[セッション変数名] = 値; $_SESSION[suid] = $uid; print "uid = ".$_SESSION[suid]. "<br>"; //確認してます //ページをadminpageに飛ばす ?><BR> <a href="adminpage.php">認証されました。管理者ページへ</a> </body> </html> Bプログラム前半部分/*管理者ページadminpage.php*/ session_start(); print "uid = ".$_SESSION[suid]. "<br>";//確認表示 // いきなりこのページにアクセスがあった場合 if( !$_SESSION[suid] ){ session_destroy(); header("Location: index.php"); exit; } ?> というプログラムですが、Bのプログラムの確認表示部分で"$_SESSION[suid]"が表示されません。Aプログラムでは表示されます。 プログラムの他の部分は個別に動作確認済みです。 エラーとして、ユーザーページの移動時(成功プログラム)に使った$_SESSION[suid]の値が表示されたりもします。原因を教えて下さい。

    • 締切済み
    • PHP
  • セッションが変数が取得できません

    こんにちは。初心者で大変申し訳ないのですが、2日間悩みましたがどうしても解決できないため質問させて頂きました。どうかご教授下さい。 PHPのセッション機能の利用をしようと以下のような環境でテストスクリプトを実行したのですが、うまくいきません。 PHPバージョン4.3.10 register_globals On session.auto_start Off session.bug_compat_42 On session.bug_compat_warn On session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value no session.entropy_length 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 1 session.name PHPSESSID session.referer_check no value session.save_handler files session.save_path /tmp session.serialize_handler php session.use_cookies Off session.use_only_cookies Off session.use_trans_sid On SESSION登録側スクリプト <?php session_start(); $_SESSION['tarou'] = 50; ?> <a href="test.php">test</a> 結果表示側スクリプト <?php session_start(); echo($_SESSION['tarou']); ?> session.use_trans_sid Onで透過的にURIにセッションIDを埋め込むタイプで、 セッションファイル自体は作られているのですが セッション変数は登録されておらず、空のセッションファイルとなってしまっています。 色々と調べてみたのですがどうしても解決できません。 大変お手数ですがどうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのセッションIDについて

    PHP5.3.14を使っています。 セッションについて勉強中です。 セッションを使ってページの表示回数をカウントアップするソースと、 そのセッションを破棄するソースの2種類を用意しました。 ※それぞれ、session_id()をecho表示しています。 クッキーを使った状態でこれらを動かすと、 リセットする(リンクを押してリロードする)度にセッションIDが変わるのですが、 クッキーを使わずに定義済み定数SIDを使って動かすと、 カウント値は元に戻るのですが、 リセットしてもセッションIDが変わりません。 どうすれば、新しいセッションIDを発行(SIDの値を更新)できるのでしょうか? よろしくお願いします。 【以下、ソース2種類と、iniファイルの一部です】 ●up.php <?php session_start(); if (empty($_SESSION['count'])) { $_SESSION['count'] = 1; } else { $_SESSION['count']++; } echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); ?> <p> <?php echo $_SESSION['count']; ?> 回目。 </p> <p><a href="up.php">カウントアップ</A> </p> <p> <a href="reset.php">リセット</A> </p> ●reset.php <?php session_start(); echo ("###".'"'.session_name().'='.session_id().'"'."</br>"); echo ("##### ". $_SESSION['count']."回表示しました。</br>"); $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } if(isset($_REQUEST[session_name()])){ $_REQUEST[session_name()]="" ; } session_destroy(); ?> <p> <a href="up.php">初めからカウントする</A> </p> ●php.ini (クッキーを使わずSIDを使うを設定) session.use_trans_sid = 1 session.use_only_cookies=0 session.use_cookies=0

    • 締切済み
    • PHP

専門家に質問してみよう