Form elemanlarının diziler atıfta (name = "blah []")

4 Cevap php

Ben ilgili gizli "todo" alanları vardır, her biri 3 dosya yükleme alanları, serisi ile bir form var.

Dosya yükleme alanları grileşmiş başlar ve bir kullanıcı, yeni bir dosya yüklemek biri daha önce bu pozisyonda yüklendi ise bir dosyayı kaldırmak veya (yani önceden yüklenen dosyayı kullanmak veya boş bırakın) değişmeden bırakın ya.

Todo alanları her bir dosya ile yapılması gereken ne saklamak gerekir (yani 0 = new yüklemek, 1 = mevcut silmek, 2 = değişmeden bırakın).

Ben yükleme alanının yanındaki düğmeleri bir dizi var. ) Dosya yükleme alanı sağlayan ve (gerekir (ki "yeni upload" için One 0 ilgili todo alanını; remove için bir (dosya yükleme kutusunu devre dışı bırakır) ve için bir de dosyayı devre dışı bırakan ("değişmeden bırakın" ) alanını yükleyin.

Ben formu güzel ve kolay dosyaları döngü yapan bir PHP belge gönderilen zaman dizileri oluşturmak için name = "blah []" tekniği buldum. Sorun ben ilgili "todo" alanlarında değerini düzenlemek gerekir ve tüm adlandırılmış eğer "todo []" sonra ben özellikle bir ifade değil ki ...

Kod böyle bir şey:

<input type="file" name="file[]" />
<input type="hidden" name="todo[]" />
<input type="button" onclick="enableFileField('file[]', 0)" value="Upload New" />
<input type="button" onclick="enableFileField('file[]', 1)" value="Remove Current" />
<input type="button" onclick="enableFileField('file[]', 2)" value="No Change" />

Ben bu aslında oldukça basit olduğunu şey eksik ve ben eminim ...

4 Cevap

Sen tarlalar verebilirsiniz id s in addition to names. The name sunucuya yazı için kullanılacak, ancak id JavaScript girişini referans için kullanılabilir:

<input type='hidden' id='todo_0' name='todo[]'>
<input type='hidden' id='todo_1' name='todo[]'>

JavaScript, document.getElementById("todo_0") Size ilk todo alanını verecektir. Tutmak için emin olun id Internet Explorer karışık almaz (bu ad hata var etrafında id ve name [bu eğilimi yeterince farklı s - { [(5)]} - Onlara)] aynı ad koymak.

Eğer Bu PHP bunu nasıl yorumlayacağını değiştirmek olmaz todo [0], todo [1], vb oluşturmak, böylece daha fazla alan eklemek gibi javascript bir sayaç artırmak olabilir.

Edit: Realised you aren't creating fields on the fly in javascript, but the naming still applies

Eğer hatırlıyorum benzersiz bir kimlik girişleri ya, ben kullanabilirsiniz inanıyorum yapılacaklarıma her verebilir

<input type='hidden' name='todo[0]' />
<input type='hidden' name='todo[1]' />

vb HTML.

Ben ne soruyorsun anlamak, bir dosyayı yüklemek için kullanılacak birden fazla alanlar var edebilmek istiyorum. Değiştirmek 3 dosya varsa Örneğin, üç gizli todo alan olurdu?

Hızlı ve kolay bir çözüm gibi dosyaların sayısı için gizli bir alanı tutmak olacaktır:

<input type='hidden' name='numFiles' value='1' />

ve güncelleştirme ekleyebilir veya javascript ile dosyaları kaldırmak gibi. Sonra diğerleri önerilen gibi, gibi eşsiz bir kimliği todo her verin:

<input type='hidden' name='todo1' />

Her dosyanın benzersiz bir tane olacak ve oradan güncellemek mümkün olacak çünkü artık kolayca bir todo bulabilirsiniz.

Eğer form göndermek sonra, dosya sayısı alan ve döngü tüm todo sonuna eklenmiş bir dizi aracılığıyla orada olacak dosyaların sayısını indirebiliriz.