2010-12-13 16 views
0

私は、よりクリーンな方法でPOSTデータを処理しようとしています。ここに私のフォームです:私は、フォームを処理するPHPページを作成し、このようなクラスと呼ばれる 処理フォーム

Email <input type="text" name="email" /><br/> 
Subject <input type="text" name="subject" /><br/> 
Message <input type="text" name="body" /><br/> 
<input type="submit" value="Submit"> 

:私のクラスでは

$mail = new Email(); 
$mail->processPost($_POST); 

を、私は持っている:

function processPost($post) { 
foreach($post as $key => $value) { 
$_POST[$key] = $$value; 
} 
} 

function Email($to, $subject, $body) { 
$this->processPost->email; 
$this->processPost->subject; 
$this->processPost->body; 
} 

しかし、 processPost関数で変数をpublicに設定する方法がわからないので、Email関数で使用できるようにします。私はこれにいくつかの助けに感謝したいと思います。上記のように呼び出すとprocessPost関数から何も出力されず、その下の変数をエコーし​​ます。ありがとう。

+0

を読み違えた場合申し訳ありませんが、私は逃しましたコードの一部をコードとしてコード化する。 – sehummel

答えて

1

ここで達成しようとしていることがわかりません。多分このような何か?

<?php 
class Email 
{ 
    protected $to = ''; 
    protected $subject = ''; 
    protected $body = ''; 

    public function __construct($to, $subject, $body) 
    { 
    // TODO: Validate input with `filter_var` 

    $this->to = $to; 
    $this->subject = $subject; 
    $this->body = $body; 
    } 

    public static function fromArray(array $array) 
    { 
    // TODO: Validate $array with `filter_var_array` 

    return new self($array['to'], $array['subject'], $array['body']); 
    } 

    public function send() 
    { 
    // TODO: Implement send() function 
    } 
} 

$mail = Email::fromArray($_POST); 
$mail->send(); 

PS:この例はPHP5であり、PHP4では動作しません。

+0

ありがとう、Joksnet。私は非常に抽象的な方法で、ポストのすべての変数を処理し、その場で変数を割り当てることができるほど柔軟なクラスを書くことができることを期待していました。私が望む結果の一部は、キーワードが変数名に割り当てられている$ email = $ _POST ['email']、$ subject = $ _POST ['subject']などです。スクリプトの他の部分の変数。 – sehummel

2

私はあなたがここにあなたの後処理機能で何をしようとしてわからない:

foreachの($キー=> $値として$ポスト){ $ _POST [$キー] = $ $値; }

ダブルドルは変数$$値(例の$メール)の値に$ _POST [$キー]を割り当てているが、$ Eメール変数は、私が言うことができるものから値を持ちません。

今、なぜ$ this-> processPost [$ key]の代わりに$ _POST [$ key]に割り当てるのですか?あなたがそのようにしなかった場合、あなたは電子メール機能の値にアクセスできるようにする必要がありますの$ this - > processPost [「メール」]

謝罪、私は質問

+0

いいえ、あなたは正しいと思います。私はこのようにそれを書き直し:パブリック関数processPost($ポスト){ \t \t \t foreachの($キー=> $値として$ポスト){ \t \t \t \t $$キー= $ _POST [$キー]。どのようにしてこの関数から変数を取得し、それを他の関数で使うのですか?私は彼らが公共にする必要がありますか、または私はそれがprocessPost関数から$メールを参照しているの$ this - > processPost->電子メール(とそれらにアクセスしない \t \t \t} \t \t} – sehummel

+0

私のような何かをするだろうか。 あなたがメンバー変数にあなたが割り当てられている場合、私はphp4または5を信じています。クラスで宣言していない場合は、自動的に公開されます。メール機能では、次のようにしてアクセスします: $ this-> postProcess ['email'] (これを関数に渡す必要はありません) 投稿パラメータをエスケープするための偽関数を追加しましたあなたが悪質な入力から保護したいと思うからです。しかし、それはこの答えの範囲を超えています。 – DTest

0
<?php 

class Email { 

    public $data=array(); 

    function __construct($array=array()) 
    { 
     foreach($array as $key=>$value) 
     { 
      $this->data[$key] = $value; 

     } 
     return (object) $this->data; /* :D */ 
    } 

    function get($key='') 
    { 
     return $this->data[$key]; 
    } 
} 

$foo = new Email($_POST); 

echo $foo->get('email'); 
echo $foo->get('subject'); 
?> 
+0

これは何をしているのか完全にはわかりませんが、$ _POSTの値をエコーし​​て、私は満足していました。私はそれを使用することをお勧めしません – Ross

+0

ありがとう、ロス。私はこれについて間違っていると思う。私はこのようにするのが初めてです(関数を書く)。 – sehummel

+0

ロス、私はポストからすべての変数をつかみ、クラスのどこかで使うことができる変数にそれらを代入したいので、これらの変数すべてを使ってsend関数を作成することができます。 – sehummel