Nasıl bir form denetimleri yoluyla yineleme?

4 Cevap

Ben PHP için oldukça yeni ve ben şu anda benim ilk PHP Web sitesinde çalışıyorum. Ben tek bir formda bir tablodaki satırları görüntülemek (ve / düzenleme) eklemek için bir ihtiyaç var.

Ne için gidiyorum böylece kullanıcı tabloya daha fazla öğe ekleyebilirsiniz bir tablodaki her satır için formda satır artı bir boş satır olduğunu.

Onlar kaydetmek düğmesine tıkladığınızda tüm varolan satırları güncellemek istiyorsanız ve yeni satır (veri varsa) eklemek için.

Ben bir form veya tür bir şey tüm denetimleri yoluyla yineleme yapabilirsiniz kolay bir yolu var mı?

4 Cevap

Sen foreach yapısı kullanarak $ _POST dizi aracılığıyla iteratore, ancak sütun adları karşı anahtar adları doğrulamak için unutmayın (veya satır adları, ben sadece uyandım muhtemelen çünkü, veritabanı tasarımı idrak edemez).

foreach($_POST as $key => $value)
{
    // do stuff
}

Ve bu ilk PHP web sitesi ise, aynı zamanda SQl injection hakkında unutmayın.

Ben genellikle her denetim için satır numarası eklemek:

<input type='text' name='email_1'> ...
<input type='text' name='email_2'> ...
<input type='text' name='email_3'> ...

ve sonra sadece aracılığıyla roll:

<? for ($i = 1; $i <= {max number of rows}; $i++)
  { 
   if (isset($_POST["email_$i"]))......

Bu gereksiz döngüler bir dizi yol açar, ancak performans isabet IMO önemsiz, ve arka arkaya birçok alanları ile ilgileniyor özellikle alanları işlemek için kod, daha güzel görünüyor.

Diğer cevaplar hiçbir yükü vardır ki, önermek gibi de gerçek geçti POST değerleri üzerinden gidebilirsiniz. Bunu sizin satır unsurlardan biri, ve hangisinin olsun için POST her üyesi denetlemek için, ancak, olacak. Bu aşağı daha iyi gibi ne var.

PHP formları, tek biçimi ile anlaşma data. Etmez

// Cycle through each item POSTED (excludes GET, and FILES)
foreach ($_POST as $data) {
  echo $data . "<br/>";
}

Söyleniyor, ben körü körüne $_POST ile bisiklet tavsiye etmem. Bunun yerine, aradığınızı biliyorum ve bunun için izle

foreach ($_POST["emails"] as $email) {
  if (!valid($email)) $errors["emails"] = "Provide valid email addresses.";
}

Onların adı için dizi benzeri sözdizimi kullanılarak çok sayıda satır genelinde birçok e-posta adresini ilişkilendirmek:

<input type="text" name="emails[]" value="jane.doe@somedomain.com" />
<input type="text" name="emails[]" value="john.doe@somedomain.com" />

Sen bir sorgu ile tablodaki tüm alanları alabilirsiniz. MySQL, olurdu

Tablo_ismi DAN FİYATLARI ALANLARI;

Sonra çıktı form alanları için bu alanlar üzerinde döngü (bir onay kutusu, vb ne, bir metin ne işlemek için sabit kod bazı mantık olabilir) olabilir. Teslim olduğunda, sizinle alanları alabilirsiniz

foreach ($ _POST $ field_name => $ posted_data gibi)

EDIT: Ayrıca, bu başka bir cevapta belirtildiği gibi, SQL Injection konusunda çok dikkatli olmak, veritabanı tabloları için form alanını kravat kolaylaştırır nasıl kolay verilir.