foreach gelen PHP veritabanına veri eklemek

1 Cevap php

Ben Codeigniter framework kullanıyorum ve giriş alanları ile bir form var. Ben veritabanına giriş alanlarının değerlerini eklemek istediğiniz zaman bu kodu kullanabilirsiniz

function add($tableName)
{
    $fieldsData = $this->db->field_data($tableName); // to get all fields name of the table like (id,title,post .. )
    foreach ($fieldsData as $key => $field)
    {
        $datacc = array(  $field->name => $this->input->post($field->name) ); 
        echo $this->input->post($field->name) ; // when I submit the form I get all that data I need like (mySubjet, MyPost...)
    } // but when I insert the data it insert just the last filed like ( cat_id = 3 ) only !// and the other fields are empty ..
    $this->db->insert($tableName, $datacc);
}

bu yüzden veritabanına eklenen sadece son değeri olsun ama ben foreach döngü gibi içeride sorgu satırı koymak:

function add($tableName)
{
    $fieldsData = $this->db->field_data($tableName);
    $datacc = "";
    foreach ($fieldsData as $key => $field)
    {
        $datacc = array(  $field->name => $this->input->post($field->name) );
        $this->db->insert($tableName, $datacc); // inside the loop !
    }
}

Bu 15 kayıtları / satır (tablodaki alanların sayısı) yerleştirin ve her satır için benzersiz bir değer eklemek. Böylece ilk satırdaki TITLE alanını, üçüncü bir sonraki satırda ve dateOfpost alanındaki POST alanını ve ekler.

1 Cevap

Sen $ datacc adında bir dizi var, ama bunu her zaman sıfırlıyorsanız. Buna eklemek gerekir.

function add($tableName)  
{
    $fieldsData = $this->db->field_data($tableName);
    $datacc = array(); // you were setting this to a string to start with, which is bad
    foreach ($fieldsData as $key => $field)
    {
        $datacc[ $field->name ] = $this->input->post($field->name);
    }
    $this->db->insert($tableName, $datacc);

}

Bu bir satır ekler, ancak gider gibi $ datacc dizi kurar.

Sen http://php.net/array diziler nasıl çalıştığı hakkında daha fazla bilgi edinmek için bir göz atmalısınız.