質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

PHPでオブジェクト指向を用いて「select」タグでデータを送る方法について

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 179

rendo

score 4

前提・実現したいこと

ProgateⅡを見ながら洋服の受注画面を作ろうと思っています。

レッスン中のオブジェクト指向を使って「受注数」や「受注サイズ」の送受信を行えるようにするのが目標です。

発生している問題・エラーメッセージ

受注数についてはProgateのやり方そのままで動きました。

≪クラス設定画面≫

public function getOrderCount() {
return $this->orderCount;
}

public function setOrderCount($orderCount) {
$this->orderCount = $orderCount;
}

≪index.php≫

<input type="text" value="0" name="<?php echo $shohin->getName() ?>" >

≪confirm.php(受取画面)≫

<?php
$orderCount=$_POST[$shohin->getName()];
$shohin->setOrderCount($orderCount);
?>
<?php echo $orderCount ?>

で送受信ができました。

次にサイズを送ろうと思って以下のようにしたのですがconfirm.phpでサイズを受け取ることができません(<table>タグで表にしているなかサイズだけ表示されず)。

エラーメッセージ

該当のソースコード

≪クラス設定画面≫

public function getOrderSize(){
return $this->orderSize;
}

public function setOrderSize($orderSize){
$this->orderSize=$orderSize;
}

≪index.php≫

<form action="confirm.php" method="post">
<select name="<?php echo $shohin->getOrderSize() ?>">
<option value="160">160</option>
<option value="165">165</option>
<option value="170">170</option>
<option value="175">175</option>
<option value="180">180</option>
<option value="185">185</option>
</select>
</form>

≪confirm.php(受取画面)≫

<?php
$orderSize=$_POST[$shohin->getOrderSize()];
$shohin->setOrderSize($orderSize);
?>

<?php echo $shohin->getOrderSize() ?>

ソースコード

試したこと

name属性や$_POSTの中を変えてみましたが表示されませんでした。

根本的なことが間違っているのかもしれませんがどのようにしていいか分かりません。よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ドットインストールのローカル開発環境レッスンと同じです。

Windows 10 / Vagrant 1.8.6 / PuTTY 0.67 / VirtualBox 5.1.8 / Cyberduck 5.2.0

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/03/15 22:37

    コードはマークダウンのcode機能を利用してご提示ください

    キャンセル

回答 1

+1

クラスの表記が中途半端、クラスを用いているならクラスの宣言の部分から書かないと
質問の趣旨がボケてます

<select name="<?php echo $shohin->getOrderSize() ?>">

上記PHPを表記後ソースをみたときnameは何になっているか
それは

confirm.phpにおける

$_POST[$shohin->getOrderSize()];

を、

var_dump($shohin->getOrderSize());


したときにちゃんと同じ名前で参照できているのかを検証ください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/15 20:33

    早速にありがとうございます。

    var_dumpしてみたらNULLでした。

    クラスは以下のとおりです。

    <?php

    class Seifuku{
    private $name;
    private $price;
    private $orderSize;
    private $orderCount=0;

    public function __construct($name,$price){
    $this->name=$name;
    $this->price=$price;
    }

    public function getName(){
    return $this->name;
    }

    public function getPrice(){
    return $this->price;
    }

    public function getImage(){
    return $this->image;
    }

    public function getOrderSize(){
    return $this->orderSize;
    }

    public function setOrderSize($orderSize){
    $this->orderSize=$orderSize;
    }

    public function getOrderCount(){
    return $this->orderCount;
    }

    public function setOrderCount($orderCount){
    $this->orderCount=$orderCount;
    }

    public function getTaxIncludedPrice(){
    return floor($this->price*1.08);
    }

    public function getTotalPrice(){
    return $this->getTaxIncludedPrice()*$this->orderCount;
    }
    }
    ?>

    商品名、価格、税込価格、注文数、小計、支払額合計があって、あと残りがサイズに関する部分なのですが、ここがうまくいきません。

    オブジェクト指向ではない通常の<form>→$_POST[' '];のやり方でならできるのですが、どうにかしてこの方法で送受信ができるようにしたいです。

    NULLにならない方法も探してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる