アバターシステムについて。

http://riri.heteml.jp/mo/(モバゲさん許してね)
現在このようなアバターシステムを作成しています。服を選んで、ボトムを選んだ際、服を選んだ履歴が消えてしまっています。これを残すにはどうしたら良いでしょうか??

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/23 15:00:01
  • 終了:2011/10/30 15:00:03

回答(1件)

id:tigerjp No.1

たいがあ回答回数19ベストアンサー獲得回数62011/10/23 21:19:03

PHPなら、セッションで選択されたidを保持するのが定番です。



<?php

session_start();


$items['shirt']    = array(1=>'シャツ1',2=>'ぼろシャツ');

$items['trousers'] = array(3=>'ズボンだよ',4=>'ズボンやん');


$id = $_GET['id'];

switch($id){

  case 1:

  case 2:

    $_SESSION['shirt'] = $id; // idが1または2ならばシャツとしてセッション変数に保存

    break;

  case 3:

  case 4:

    $_SESSION['trousers'] = $id; // idが3または4ならばズボンとしてセッション変数に保存

    break;

  case 'reset':

    /* セッションを破棄する */

    $_SESSION = array();

    if(isset($_COOKIE[session_name()])){

        setcookie(session_name(),'',time()-42000,'/');

    }

    session_destroy();

}


if(!$_SESSION['shirt']){

  foreach($items['shirt'] as $key => $value){

    echo '<a href="?id='.$key.'">'.$value.'</a><br>';

  }

  echo '<a href="?id=reset">リセット</a>';

}elseif(!$_SESSION['trousers']){

  foreach($items['trousers'] as $key => $value){

    echo '<a href="?id='.$key.'">'.$value.'</a><br>';

  }

  echo '<a href="?id=reset">リセット</a>';

}else{

  $shirt = $_SESSION['shirt'];

  $trousers = $_SESSION['trousers'];

  echo '選択されたシャツは、'.$items['shirt'][$shirt].'<br>';

  echo '選択されたズボンは、'.$items['trousers'][$trousers].'<br>';

  echo '<a href="?id=reset">リセット</a>';

}

?>

id:rogotaro

ありがとう御座います!!これはa.phpに書いたらいいですか??

2011/10/23 21:22:45
  • id:rogotaro
    ありがとう御座います!!これはa.phpに書いたらいいですか??

  • id:tigerjp
    サンプルコードが正しく投稿できないので修正します。
    お待ち下さい。
  • id:tigerjp
    連続した]が投稿できないんですね。
    修正しました。

    サンプルコードを単体のPHPファイルとして動作させてみて下さい。
    意図した動作になっていると思います。
  • id:rogotaro
    ドリームウィーバに入れたところエラーが沢山でてしまいました。<body></body>間に入れるだけで合ってますでしょうか??
  • id:tigerjp
    ドリームウィーバーが生成するコードはすべて消して下さい。
    適当な名前で新規にPHPファイルを作成して、一度白紙にしてからサンプルコードをペーストします。
    それをサーバーに上げて動作を確認してみて下さい。
  • id:rogotaro
    Parse error: syntax error, unexpected '&', expecting ']' in /home/sites/heteml//web/mo/hate.php on line 10
    このようなエラーが出てしまいます。そのままアップしてますが書き換える部分等はありませんか??
  • id:tigerjp
    書き換える部分はありません。
    エラーメッセージで言われている&はサンプルコードでは使用していないのですが、コピペしてますか?
  • id:rogotaro
    書いて頂いた三行目です。$items[&apos;shirt&apos;] = array(1=>&apos;シャツ1&apos;,2=>&apos;ぼろシャツ&apos;);
    $itemsの次が[]内に&apos;shirt&apos;となってます。バグかなにかでしょうか??アンドが沢山でています。


  • id:tigerjp
    文字実体参照になっていますね。
    回答にて投稿したコードを、ソースではなく、ブラウザでレンダリングされた状態でコピーして下さい。
  • id:rogotaro
    すみません。ブラウザでレンダリングのやり方が分かりません。どうしたら良いでしょうか。何度もすみません。
  • id:rogotaro
    解決できました!!新米なので、また宜しくお願いします。自分なりに試行錯誤します!
  • id:tigerjp
    >ブラウザでレンダリングのやり方が分かりません

    普通に表示するだけです!!



    がんばってね。
  • id:rogotaro
    ちなみに使い方としては、このコードを改変し、一ページでシステムを表現するんでしょうか??
    それとも、これの変数を変える事で、今あるindex.php,a.php,b.phpに反映され情報が保持されるという感じでしょうか??
  • id:tigerjp
    サンプルでは、idを選択させる部分、選択されたidを受け取って保持する部分、保持したidを参照する部分、という3つの役割が1つのファイルになっています。

    既存のコードへの組み込みは、選択されたidを受け取って保持する部分を追加すればいいと思います。
    (下記)


    session_start();

    $items['shirt'] = array(1=>'シャツ1',2=>'ぼろシャツ');
    $items['trousers'] = array(3=>'ズボンだよ',4=>'ズボンやん');

    $id = $_GET['id'];
    switch($id){
    case 1:
    case 2:
    $_SESSION['shirt'] = $id;
    break;
    case 3:
    case 4:
    $_SESSION['trousers'] = $id;
    break;
    case 'reset':
    $_SESSION = array();
    if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-42000,'/');
    }
    session_destroy();
    }

    /* ここまでをファイルの先頭に記述 */

    /*
    $_SESSION['shirt']に選択されたシャツのidが、
    $_SESSION['trousers']に選択されたズボンのidが入っています。
    */
  • id:rogotaro
    ありがとう御座います!!大変助かりました。お時間ある時で構いませんので、またアドバイスいただければと思います。試してみます。
  • id:rogotaro
    お世話になります。昨日教えていただいた事を早速応用しようと思い、
    a.phpで
    $gazou1 = 'base.gif';
    $gazou2 = $row['gazou'];
    $gazou3 = $row['gazou2'];
    $output =uniqid("").'.gif';
    $cmd = 'convert -compose over ' . $gazou1 . ' ' . $gazou2 . ' ' . $gazou3 . ' ' . $output;
    system($cmd,$ret);
    if ($ret===0){
    print '<img src=' . $output . '>';
    }
    このように画像を合成していまして、
    $items['gazou'] = array(1=>"11.gif",2=>"22.gif");
    $items['gazou2'] = array(3=>"33.gif",4=>"44.gif");
    $id = $_GET['id'];
    switch($id){
    case 1:
    case 2:
    $_SESSION['gazou'] = $gazou2; // idが1または2ならばシャツとしてセッション変数に保存
    break;
    case 3:
    case 4:
    $_SESSION['gazou2'] = $gazou3; // idが3または4ならばズボンとしてセッション変数に保存
    break;
    case 'reset':

    こんな感じにしたら可能かな?と試しましたが、合成されなくなってしまいました。アドバイスお願いできないかと思った次第です。よろしくおねがいします。
  • id:rogotaro
    <?php
    session_start();

    $items['gazou'] = array(1=>'11.gif',2=>'22.gif');
    $items['gazou2'] = array(3=>'33.gif',4=>'44.gif');

    $id = $_GET['id'];
    switch($id){
    case 1:
    case 2:
    $_SESSION['gazou'] = $id;
    break;
    case 3:
    case 4:
    $_SESSION['gazou2'] = $id;
    break;
    case 'reset':
    $_SESSION = array();
    if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-42000,'/');
    }
    session_destroy();
    }


    ?>
    とa.phpの<html>上に記述しましたが、情報が保持されません。
    画像合成ソースは
    $gazou1 = 'base.gif';
    $gazou2 = $row['gazou'];
    $gazou3 = $row['gazou2'];
    $output =uniqid("").'.gif';
    $cmd = 'convert -compose over ' . $gazou1 . ' ' . $gazou2 . ' ' . $gazou3 . ' ' . $output;
    system($cmd,$ret);
    if ($ret===0){
    print '<img src=' . $output . '>';
    }
    です。gazou部分にDBではシャツの情報をいれてます。
    どうしたら保持されますでしょうか??
    何度もすみません。よろしきおねがいします。
  • id:tigerjp
    これらはすべてa.phpに書かれているのですか?
    別ファイルならばそちらでもセッションを利用しないといけません。

    >とa.phpの<html>上に記述しましたが、情報が保持されません。

    <html>上というのがよくわかりませんが、ファイルの先頭に記述して下さい。
    画像合成などより前です。

    >gazou部分にDBではシャツの情報をいれてます。

    gazou部分とは$row['gazou']の事でしょうか?
    $rowがidをキーとした画像パスの連想配列ならば、$row[$_SESSION['gazou']]で選択されたアイテムの画像を参照します。
  • id:rogotaro
    了解いたしました。夕方頃試し、結果報告いたします。一度で理解できず何度も尋ねてすみません。
  • id:rogotaro
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
    <title>無題ドキュメント</title>
    </head>
    <body>
    <?php

    session_start();
    $items['gazou'] = array(1=>$row['gazou'],2=>$row['gazou']);
    $items['gazou2'] = array(3=>$row['gazou2'],4=>$row['gazou2']);

    $id = $_GET['id'];
    switch($id){
    case 1:
    case 2:
    $_SESSION['gazou'] = $gazou2;
    break;
    case 3:
    case 4:
    $_SESSION['gazou2'] = $gazou3;
    break;
    case 'reset':
    $_SESSION = array();
    if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-42000,'/');
    }
    session_destroy();
    }

    DB接続文等

    $id = $_GET['id'];
    $query = "select * from mo where id= '{$_GET['id']}";

    $result = mysql_query($query);
    $num_rows=mysql_num_rows($result);

    while($row = mysql_fetch_array($result)){
    // Loop through the array of score data, formatting it as HTML
    echo '<table>';
    $i = 0;
    {
    // Display the score data
    echo '<head>';
    echo "<meta http-equiv='Pragma' content='no-cache'>";
    echo "<meta http-equiv='Cache-Control' content='no-cache'>";
    echo "<meta http-equiv='Expires' content='0'>";
    echo '</head>';
    $gazou1 = 'base.gif';
    $gazou2 = $row['gazou'];
    $gazou3 = $row['gazou2'];
    $output =uniqid("").'.gif';
    $cmd = 'convert -compose over ' . $gazou1 . ' ' . $gazou2 . ' ' . $gazou3 . ' ' . $output;
    system($cmd,$ret);
    if ($ret===0){
    print '<img src=' . $output . '>';
    }
    echo '<table>';
    $i = 0;
    {

    echo '<strong>商品名:</strong>'.$row['syou'].'<br/>';
    echo '<strong>価格:</strong> '. $row['kakaku'] . '<br />';
    $i++;
    echo '</table>';

    ?>
    <?php }}}?>
    <a href="b.php">ボトムを選ぶ</a><br/> この商品を買う

    やはりシャツを選んだ状態の画像が残りません。$row[$_SESSION['gazou']]にしてしまうと、画像が合成されなくなってしまいました。セッションについて知識が無くb.phpには<?php

    session_start();
    としか書いてませんが、これが原因でしょうか??最終的に服とズボンを着た画像を表示させたいですが。。

  • id:tigerjp
    何度も言いますが、ファイルの先頭です。

    <?php
    session_start();

    ↑これより前には何も出力してはいけません。
  • id:tigerjp
    何も出力しない処理ならば記述してもOKですが、提示されたコードではいきなりHTMLが出力されています。
    session_start()より前に出力があると、セッションが正常に開始されません。
  • id:rogotaro
    <?php
    session_start();
    $items['gazou'] = array(1=>$row['gazou'],2=>$row['gazou']);
    $items['gazou2'] = array(3=>$row['gazou2'],4=>$row['gazou2']);

    $id = $_GET['id'];
    switch($id){
    case 1:
    case 2:
    $_SESSION['gazou'] = $gazou2;
    break;
    case 3:
    case 4:
    $_SESSION['gazou2'] = $gazou3;
    break;
    case 'reset':
    $_SESSION = array();
    if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time()-42000,'/');
    }
    session_destroy();
    }
    ?>
    と、a.phpの先頭に書きましたが、やはりズボンを履かせたら服のデータは残ってませんでした。a.phpのみで服を合成、ズボンを合成する処理をするからいけないのでしょうか??
  • id:tigerjp
    $items['gazou'] = array(1=>$row['gazou'],2=>$row['gazou']);
    $items['gazou2'] = array(3=>$row['gazou2'],4=>$row['gazou2']);

    まず、↑この$rowは未定義じゃないですか?
  • id:rogotaro
    $items['gazou'] = array(1=>'11.gif',2=>'22.gif');
    こんな感じにファイル名を直接書くべきでしょうか??
  • id:tigerjp
    ↓こんな流れになるように組んでみて下さい。


    session_start();



    DBから商品データを取得して連想配列に入れる



    選択されたidを受け取って処理



    画像合成



    HTML出力

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません