Tek bir PHP dosyası ya da iki dosya ile bir FORM ve EYLEM uygulamak için daha iyi mi?

6 Cevap php

Ben bir intranet web sayfası için PHP ile bir FORM oluşturma. Başka bir PHP komut dosyası formu göndererek denir.

Herkes soruyor önce, formu not herhangi yüklenenler izin vermez, ve forma girilen değerlerin, bir SQL sorgusu içine kendi yolunu bulmak, ancak ben everything ama numaralarını şerit.

FORM ve EYLEM ikisi için aynı PHP dosyasını kullanarak bir avantaj olacağını merak ediyorum?

Yani, çağrıldığında FORM oluşturulacak ise, sergiyi veya GÖNDER butonuna tıklandığında ise - - Açıkçası, artan karmaşıklığı ceza ama ne faydaları olacak?

EDIT: Note, the PHP in 'submit' mode does not redisplay the form, it does something entirely different. Bu benim için endişelendim karmaşıklığı kaynağıdır.

Form DB değerlerine karşı kontrol edilir değerleri girmek için kullanılan, ancak DB için yapılan bir değişiklik söz konusudur.

6 Cevap

Ben form form tarafından denir php ayrı oluşturur php olması için daha sürdürülebilir bulmak eğilimindedir.

(Bu fark olmasa da) bu form istek veya formda dolum olup olmadığını deyimi belirlemek için eğer o da bir azaltacaktır.

Ancak, sorun, yeni bir sayfa onları almaya gidiyoruz sürece, geri daha karmaşık olabilir forma değerlerini almak zorunda olmasıdır.

Form işlendikten sonra bile, formda değerleri tutmak istiyorsanız Yani, o aksi takdirde sürdürülebilirlik için tercih ve iki dosya onları olurdu, dosyanın başında form işleme mantığını bırakın.

Çoğu durumda, bunu tercih ederim.

(Formu) kabul değerinin kodu gibi kod daha 'tutarlı' yapmak birlikte hem tutulması (bu bilgileri ve Kontrol denir) aynı php dosyasında. Benim için bu bir avantajdır.

Ancak, veritabanı işlemek kodu (bir model kütüphanesi olarak adlandırılır) kabul değeri aynı değil gibi diğer dosya ayrılmış olmalıdır. Bu kabul ve manipülasyon ayrılır gibi daha az kavrama yapmak. Bu ayrışma Eğer endişesi karmaşıklığı azaltacaktır.

Diğer avantajı URL. Kullanıcıların aynı sayfadan olarak göreceksiniz.

Ancak, bu tamamen genel sistem metafor ve çalışma akışına bağlıdır. Örneğin, addBook.php kolu kitap formunu ekleyerek ve ekleme başarılı veya başarısız olduğunu gösteriyor ki kullanıcılara daha mantıklı. Karşılaştırarak bu da iki addBook.php, addBookProcess.php sahip.

Ne söylemeye çalışıyorum sayfaları akışı onları ayırmak veya birleştirmek istiyorsanız olmadığını belirlemek için daha önemli bir etken olmasıdır. Arayüz / mantık kod iradesini Ayırma sayfaları tek bir php dosyasının içine birleştirmek gerekir eğer karmaşıklığını azaltmaya yardımcı olur.

Sadece benim olsa.

Form is about user interface, action is about doing something with data. The part of code that actually processes user input must certainly be separate from the form structure. The form code must accept default values (or values previously entered and found to be invalid), error messages etc. It must have nothing to do with usage of successfully submitted form data. If you allow user to change invalidated input, then you must have action URL the same as form. If successful submission leads to something unrelated, then its URL must be different from that of the form. Basically, you must redirect user from the URL where the form got accepted to the next URL.

Eğer AJAX yapıyorsanız, bu hiçbiri uygular.

Duruma göre değişir!

Tek bir dosyada onlara sahip ters tek bir yerde içine işlevselliği tek bir blok koyar ve form doğrulama işlemek için izin vermesidir. Dezavantajı karmaşıklığı artar. Bu gerçekten tek bir dosyanın içinde hem sayfalar için biçimlendirme varsa emmeye başlar.

Ana PHP işleyicisi, sonuç sayfası için form ve şablon için şablon - I 3 dosya sahip öneririm. Ana PHP dosyası gibi bir şey olacaktır:

<?php

        $error_message = "";

        if ($form_submitted){

                if ($form_validated){

                        include("inc-result.txt");
                        exit;

                }else{

                        $error_message = "something went wrong!";
                }
        }

        include("inc-form.txt");
?>

doğrulama başarısız olursa, mantık, ilgili hata mesajı ile birlikte, önceden girilen değerleri görüntüleyebilirsiniz forma, sizi geri düşer.

Veri kaybetmeden kullanıcılara yeniden göstermek formu istiyorsanız Eh, başta, o zaman sadece bu gibi bir şey yazabilirsiniz:

<input type="text" name="myInput" value="<?php
    echo htmlspecialchars(isset($_POST["myInput"]) ? $_POST["myInput"] : "");
?>">

Update: burada, bu yöntemin bir örneği aşağıda verilmektedir:

<?php
$error = "";
$result = "";

$a = isset($_POST["a"]) ? $_POST["a"] : "";
$b = isset($_POST["b"]) ? $_POST["b"] : "";

if ($a !== "" && $b !== ""){

if (is_numeric($a) && is_numeric($b))
    $result = sprintf("%s + %s = %s", $a, $b, $a + $b);
else
    $error = "You must enter two numbers!";

}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head><title>Sum numbers</title></head>
<body><form method="post" action="<?php print htmlentities($_SERVER["REQUEST_URI"]); ?>">
<p><strong>Enter two numbers to add them together.</strong></p>
<?php if ($error){ printf ("<p><em>%s</em></p>", htmlspecialchars($error)); } ?>
<p>
    <input type="text" name="a" value="<?php print htmlspecialchars($a); ?>">
    +
    <input type="text" name="b" value="<?php print htmlspecialchars($b); ?>">
    <input type="submit">
</p>
<?php if ($result){ printf("<p><strong>%s</strong></p>", htmlspecialchars($result)); } ?>
</form></body>
</html>

2 şeyler yapmalıyım gibi görünüyor:

1) create controller that steps in to see if you are doing an edit action or a display action you already have the start of one at the top of your file there, just make it include "form.php" (your form) after it does it's business. So yes, make 2 files.

2) kontrolör içine tüm bu boktan biçimlendirme kodunu çekin. Şeklinde önce tüm değerlerini hesaplamak hiç yüklenir. Bu ihtiyaç tüm form elemanları üzerinde htmlspecialchars çalıştıran içerir. Bu kod satırları kurtarmak için içlerinden döngü eşitlemek yapabilirsiniz:

yani

$cleanTheseVars = array ($a, $b, $c $error, $result);

array_walk($cleanTheseVars, 'htmlspecialchars' );