2009-08-15 14 views
0

htmlフォームを別のページに送信するか、同じページに戻すのが良いですか?フォームを別々のページに送信して処理したり、同じページに戻ったりしますか?

私はプレゼンテーションから論理を分離して聞いていますので、フォームハンドラからフォームを分離する必要があるかどうかは疑問でした。今のよう

は、Imはこれをやって...

<?php 

if(isset($_POST['submitted'])){ 

    //Validate the form 
    if(empty($_POST['name'])){ 
    $errors['name'] = 'Please enter your name'; 
    } 

    //IF no errors INSERT INTO database and redirect 
} 
?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="text" name="name" value="<?php if(isset($_POST['name'])) echo $_POST['name']; ?>" /> 
    <?php if(isset($errors['name'])) echo '<span class="error">'.$errors['name'].'</span>'; ?> 
    <input type="submit" /> 
</form> 

はこの良いですか、私は完全にフォームからPHPを区切ると、ちょうど他に1 ...または並べ替えのようなものを含める必要があります

+0

にFYIあなたが本当に)(ISSETを必要としません。警告を受け取っている場合は、 'display_errors(E_ALL^E_STRICT)'を使って警告を隠すことができます。 – whichdan

答えて

1

実際に私のクラスのクラスでは、あなたのロジックをプレゼンテーションから遠ざけることができますが、バリデーションのエラーなどを含むことができる別のファイルに提出処理ロジックがあることがわかります。あなたが期待しているところにフォームを作成します。私が提案する何の小さな例:フォームの値を印刷するとき

<?php // form.php 
    $form = array(
    "test"=>"default value", 
); 
    $errors = array(); 

    if (count($_POST)) { 
    include "form.process.php"; 
    } 

    if (count($errors)) { 
    echo "<ul class='errors'>"; 
    foreach ($errors as $error) { 
     echo "<li>".htmlentities($error)."</li>"; 
    } 
    echo "</ul>"; 
    } 
?> 
<form method="POST"> <!-- no action means submit to the same page you are on --> 
<input type='text' name='test' value='<?php echo $form["test"]; ?>'/> 
<input type='submit'> 
</form> 

はその後form.process.php

<?php 
    if (isset($_POST['test')) { 
    $test = $form['test'] = $_POST['test']; 
    if (!trim($test)) // empty string? { 
     $errors[] = "Please fill in test field"; 
    } 
    } 

    if (!count($errors)) { 
    header("Location: formsubmitted.php"); 
    exit; 
    } 
0

ほとんどの質問に対する答えと同じように、この回答は「それは依存しています。

原則として、フォームを表示しているページとは別の投稿を「処理している」コードを使用する方がよいでしょう。しかし、私はしばしば、小さなフォーム(すなわちあまり効果がないフォーム)では、そのロジックを引き離すという複雑さが増しても、それを分離する利点はないことがよくあります。古典的なフォームの送信に

一つの一般的なアプローチは、index.php、たとえば、上でコードを表示することである、と言うにsave.phpそれを提出し、そして次いでその後index.php(または代替ページ)に戻ってリダイレクト、理論的POSTなるように最も最近表示されたページではなくなり、ページをリフレッシュしてもフォームは再送信されません(もちろん、すべてのブラウザがそのロジックに従っているわけではありません)。

0

VIEW +ロジックを分割する方が良いです。

最良の方法:外部ファイルのCSS、外部ファイルのJS、外部ファイルのPHP。

0

小さなページでは説明したとおりです。分離が必要な場合は、HTMLとPHPを2つのファイルに分けることを検討することもできますが、同じページに配置することはできます。

0

他の言われたように、2つのファイルを分けることは良いことです。しかし、セッションを使わずにフォームを再入力できるように、同じファイル内で両方を処理するのが便利な場合もあります。

0

私は別のサイトを設定する方法を変えがちですが、新しいサイトを作成するたびに変わってしまいますが、私のクエリをxmlファイルに分けることさえできました。

すべてが家を持っているときは、物事を修正/強化する場所を知っています。一時間前に、将来の日数が節約されます。

前述のとおり、分離の重要性はアプリケーションのサイズとともに増加します。パンフレットのウェブサイトにある簡単なコメントフォーム - フォーム処理を同じファイルに置くことに問題はありません。

関連する問題