Numarası ve giriş alanların isimleri değişecektir zaman, MySQL insert için sütun maçı sigorta nasıl?

2 Cevap php

Alanları dinamik olarak oluşturulan bir numarası olan bir html formu ayrıştırır önceden varolan bir program üzerinde çalışıyoruz, ve ileri uyumluluğu çıkarına, hatta mysql sütun sayısını bilmiyor olabilir ...

Ben bu iki dizi oluşturma ve karşılaştırma / yeniden sipariş çeşit, ama oldukça etrafında başımı sarmak olamaz gerektirdiğini düşünün ...

Bu gibi bir şey olurdu:

A) Database Array - 1) get # of MySQL columns 2) loop through this number and get MySQL column names

B) Form Array - 1) get # of form fields 2) get form field names/values

C) Match Array - match name.form_field[f] to name.mysql_column[c]

D) Execute Insert - insert value of name.form_field[f] into name.mysql_column[c] (INSERT INTO name.mysql_column[c], name.mysql_column[c+2], name.mysql_column[c+5], name.mysql_column[c+n] VALUES value(name.form_field[f]), value(name.form_field[f+9]), value(name.form_field[f+3]), value(name.form_field[f+x]))

Ben cevabını tahmin ediyorum yukarıdaki gibi bir şey, ama oldukça sonuca ulaşmak için gerekli iç içe döngüler hayal edemiyorum ...

Herhangi bir olası çözümleri orada akla bahar?

Tüm yanıtları greatly takdir olacak!

Teşekkürler,

Sean McKernan

McK66 Productions

2 Cevap

Bu daha uzun bir cevap gerektirir, ama ben bir yarım terbiyeli giriş deneyeceğim.

Ben diğer yönden sorunu yaklaşan öneririz. İdeal olarak, kod yerleştirin ve sonra ilgili satırları oluşturmak için sunulan verilere bakarak gitmek alanların o kendi listesi olurdu. Bu da bu sütunları 'kayıp' için varsayılan değerleri var sağlar, bu yüzden her zaman alanları doğru sayısı ile satır veri oluşturabilir.

SQL oluşturmak yerine alan adları bilinen bir liste ile başlayan teslim alan adlarını kullanan bir PHP üzücü yüksek miktarda bulunmaktadır. Benim durumumda, programcılar onlar oluşturulan form kontrolü vardır, çünkü bunu yapmak, ama onlar sunulan formun kontrolü gerçekten olmadığını unutmayın. Tüm bu alır Kundakçı biraz düzenleme ve potansiyel veritabanı bozarak, altı sayfasını vuruş yapabilir.

Bu tam olarak durumu uygun olmadığını ben emin değilim, ama biz mutlak kontrole sahip emin değilseniz veri sorguları işlemek için aşağıdaki benzer bir şey kullanın. Lütfen en, doğru haritalama ile gelmek gerekir yoksa öylesine form giriş adları sütun adlarıyla eşleşen.

Bu tablodan sütun veri alır ve sonra tabloda mevcut sütunları eşleşen öğeleri kullanarak formu veri sorgusu oluşturur.

DB () mdb2 etrafında sarıcı.

$db = new DB();
$sql = 'DESCRIBE `table`';
$result = $db->query($sql);
$row = array();
$query = array();

while ($row = $result->fetchRow())
{
    if (array_key_exists($row['field'], $form_data))
        if (is_null($form_data[$row['field']]))
            $query[$row['field']] = 'NULL';
        else
            $query[$row['field']] = $db->quote($form_data[$row['field']]);
}

$keys = array_keys($query);

foreach ($keys as &$key)
    $key = $db->quoteIdentifier($key);

unset($key);

$vals = array_values($query);

$sql = 'INSERT INTO `table` '
     . '(' . implode(', ', $keys) . ') '
     . 'VALUES(' . implode(', ', $vals) . ')';