Bir "Isim # 1" tüm diğer "# 1" numaralı alanlar ile eşleştirilir, böylece tüm alanları doğru numaralandırılmış böylece en yapılandırılmış formu ise, o zaman bir döngü basit bir çözümdür.
start_transaction();
$errors = false;
for ($i = 1; $i <= 16; $i++) {
if (... all $i fields are properly filled in ...) {
$field = $_POST["field$i"];
$otherfield = $_POST["otherfield$i"];
vb..
... insert into database ...
} else {
... handle error condition here
$errors = true;
}
}
if (!$errors) {
commit_transaction();
} else {
rollback();
}
Firstname1 lastname42 ve address3.1415927 ile eşleştirilir, böylece onlar, rasgele sayılı ediyorsanız, o zaman birlikte tüm rastgele adlandırmaları eşleştirmek için bir arama tablosu oluşturmak zorunda ve bu üzerinde döngü olur
Yorumlarınız başına takibine:
Kesinlikle her satır tekrarlanan firstname / soyad / etc .. kayıtları 16 setleri içeren bu veritabanı yapısı, korunması üzerinde ısrar eğer iyi, o zaman böyle bir şey yapmak istiyorum:
$first = true;
for ($i = 1; $i <= 16; $i++) {
if (fields at position $i are valid) {
$firstname = mysql_escape_real_string($_POST["F{$i}name"]);
$lastname = mysql_real_escape_string($_POST["F{$i}lastname"]);
if ($first) {
$dbh->query("INSERT INTO table (f{$i}name, f{$i}lastname) VALUES ($firstname, $lastname);"
$recordID = $dbh->query("SELECT last_insert_id();");
$first = false;
} else {
$dbh->query("UPDATE table SET f{$i}name=$firstname, f{$i}lastname=$lastname WHERE idfield=$recordID");
}
}
}
Bu çirkin, ama temelde:
- loop through the form field sets until you find a valid set (all required fields filled in, valid data entered, vb.
- Yeni kayıt oluşturmak için veritabanına veri setini takın
- yeni kayıt kimliğini almak
- alanların geri kalanı üzerinde döngü devam
- Geçerli kayıt sonraki her set için, önceden oluşturulmuş kaydının bir güncelleme yapmak ve yeni fieldset veri eklemek.
Eğer tekrarlanan sütun 16 setleri ile tek bir tabloyu korumak için bazı son derece sıradışı tasarım ihtiyacı var sürece rağmen, dürüst, sen biraz normalleşmesi daha iyi olacak ve iki ayrı tablo korumak istiyorum. Bir veli "Kayıt" masa ve bir çocuk "üyeler" tablosu. Eğer şeklinde onları karşılaşmak gibi ana kayıt tablosu oluşturabilirsiniz Bu şekilde, o sadece yeni çocukları takın.
2. güncelleme:
iyi, bir normalleştirilmiş düzen basitleştirilmiş şekli olacaktır:
signups (id, name, vb..)
signup_members (id, signup_id, firstname, lastname)
ve aşağıdaki sorgu ile belirlenen tam kayıt kayıt çekmek istiyorum:
SELECT signups.id, signups.name, signup_members.id, firstname, lastname
FROM signups
LEFT JOIN signup_members ON signups.id = signup_members.signup_id
ORDER BY ...
O, size her 'üye' kaydolma için bir satır bir dizi verecek. CSV, henüz yeni bir kayıdı ulaştınız olmadığını görmek için kontrol bazı devlet ile basit bir döngü oluşturmak için:
$oldid = null;
$csv = ... put column headers here if you want ...
while ($signup = $result->fetchrow()) {
if ($signup['signups.id'] != $oldid) {
// current signup doesn't match previous seen id, so got a new signup record
$csv .= "\n"; // start new line in CSV
$csv .= ... add first few columns to new csv row ...
$oldid = $signup['signups.id']; // store new record id
} else {
$csv .= ... add extra member columns to current csv row ...
}
}