2013-06-19 28 views
0

我有一个表单来添加属于公司的报价。我可以删除并添加它们,但我无法使用编辑。如何用4个id字段同时更新3个表格?

当我点击编辑时,只有一个表变化,我不知道如何解决这个问题。我正在使用codeigniter。

我的表结构:

Aanbiedingen 
idaanbiedingen | Aanbieding | Omschrijving | prijs | conditie 

fotoaanbiedingen 
idfotoaanbiedingen | fotonaam 

bedrijfaanbiedingen 
idbedrijfaanbiedingen | idaanbiedingen | idfotoaanbiedingen | idbedrijven 

我bedrijven表只是公司。我使用ID将它们链接到报价。

我的控制器看起来是这样的:

function editaanbieding() 
{ 
    $id = $this->uri->segment(3); 
    $data = array(
     'Aanbieding' => $this->input->post('aanbiedingnaam'), 
     'Tekst' => $this->input->post('aanbiedingomschrijving'), 
     'Prijs' => $this->input->post('aanbiedingprijs'), 
     'Conditie' => $this->input->post('aanbiedingconditie') 
    ); 
    $this->aanbieding_model->edit_aanbieding($data, $id); 
    redirect('members/aanbiedingen'); 
} 

我的模型看起来像:

function get_aanbiedingen() 
{ 
    $id = $this->uri->segment(2); 
    $this->db->where('bedrijfaanbiedingen.idbedrijven', $id); 
    $this->db->join('fotoaanbiedingen', 'bedrijfaanbiedingen.idfotoaanbiedingen = fotoaanbiedingen.idfotoaanbiedingen'); 
    $this->db->join('bedrijven', 'bedrijfaanbiedingen.idbedrijven = bedrijven.idbedrijven'); 
    $this->db->join('Aanbiedingen', 'bedrijfaanbiedingen.idaanbiedingen = Aanbiedingen.idaanbiedingen'); 

    $query = $this->db->get('bedrijfaanbiedingen'); 
    return $query->result_array(); 
} 

function edit_aanbieding($data, $id) 
{ 
    $this->db->where('idaanbiedingen', $id); 
    $this->db->update('Aanbiedingen', $data); 

    $this->insert_bedrijfcat1($id); 
} 

function insert_bedrijfcat1($id) 
{  
    $id2 = $this->session->userdata('idbedrijven'); 
    echo '<pre>'; 
    print_r($id2); 
    die; 
    $this->db->query("DELETE FROM `bedrijfaanbiedingen` WHERE `idaanbiedingen` = '" . $id. "'"); 

    $this->db->query("INSERT INTO `bedrijfaanbiedingen` (`idaanbiedingen`, `idbedrijven`, `idfotoaanbiedingen`) VALUES ('".$id."', '".$id2."', '".$id3."')"); 
} 

但我错过了很多的代码。我一整天都在苦苦挣扎。所以我没有看到这个解决方案。

我的编辑形式如下:

<div id="cpanel"> 
<?php foreach($aanb as $aanb) ?> 
<h2>Aanbieding: <?php echo $aanb['Aanbieding']; ?> voor: <?php echo $aanb['Bedrijfsnaam'];?>, aanpassen</h2> 
<br/> 
<b>Pas hier uw aanbieding toe.</b> 
<?php echo br(2); ?> 
<?= validation_errors(); ?> 
<?php $id = $this->uri->segment(3); ?> 
<?= form_open_multipart("members/editaanbieding/$id");?> 

<?php $options = array(
    'Nieuw' => 'Nieuw', 
    'Gebruikt' => 'Gebruikt' 
    ); 
?> 

<table> 

    <tr> 
    <td><?= form_label('Aanbieding:');?></td> 
    <td><?= form_input('aanbiedingnaam', $aanb['Aanbieding']);?></td> 
    </tr> 

    <tr> 
    <td><?= form_label('Omschrijving:');?></td> 
    <td><?= form_textarea('aanbiedingomschrijving', $aanb['Tekst']);?></td> 
    </tr> 

    <tr> 
    <td><?= form_label('Prijs:');?></td> 
    <td>€ <input type="number" name='aanbiedingprijs' step="any" value="<?php echo $aanb['Prijs']?>" /><td> 
    </tr> 

    <tr> 
    <td><?= form_label('Conditie:');?></td> 
    <td><?= form_dropdown('aanbiedingconditie', $options);?></td> 
    </tr> 

    <tr> 
    <td><?= form_label('Foto');?></td> 
    <td><?= form_upload('aanbiedingfoto');?></td> 
    </tr> 

    <tr> 
    <td><?= form_submit('submit', 'Verzenden');?></td> 
    <td><?= form_reset('reset', 'Reset'); ?></td> 
    </tr> 
</table> 
<br/> 
<a href="<?php echo base_url();?>members/aanbiedingen">Terug</a> 
<?php form_close(); ?> 
</div> 

希望有人能帮助我。

回答

1

您的意思是更新查询?

UPDATE table_name 
SET column_name 
WHERE ; 
+0

请阅读我的问题。我正在更新,但它不起作用。我无法更新我的三张桌子。 –

+0

插入和删除工作。但是你以不同的方式使用更新。尝试像插入和删除?同时使用多个查询? – Loko

0

尝试这种方式

$this->db->where('a_id',$a_id); 
$this->db->where('b_id',$b_id); 
$this->db->where('c_id',$c_id); 
$this->db->where('d_id',$d_id); 
$this->db->update('yourtable',$data_posted); 
+0

这是什么意思?目前尚不清楚。 –

+0

我没有所有的ID。我只有Aanbiedingen.idaanbiedingen bedrijfaanbiedingen.idaanbiedingen和bedrijven.idbedrijven –

+0

现在这不好吗? – Loko

0

不完全知道你正在尝试做的,因为我是无法理解的问题,你想什么,在每个表更新,但有你使用MySQL考虑触发?

+0

这可能是发表评论。但我考虑过。但我不知道如何构建te查询。这就是我问这个问题的原因。 –

+0

你是对的 - 这可能是在评论中,但我不能添加评论,我喜欢MySql触发器和外键,它给数据库本身提供了很大的权力,并从PHP中获取一些负载。 – Lupin

0

这是我认为最简单的解决方案,使用transactions,codeigniter中事务的优点是,如果其中一个查询失败,它将回滚。

function update($table1data,$table2data,$table3data,$table1id,$table2id,$table3id) 
{ 
    $this->db->trans_start(); //start transaction 
    $this->db->set($table1data)->where('id',$table1id)->update('table1'); 
    $this->db->set($table2data)->where('id',$table2id)->update('table2'); 
    $this->db->set($table3data)->where('id',$table3id)->update('table3'); 
    $this->db->trans_complete(); // end transaction 
} 

你也可以使用active record的事务块里面,在你的问题,所有你需要做的就是通过idfotoaanbiedingenidaanbiedingen方法内,并从那里做了更新你要。

阅读更多。 transaction - codeigniter userguide

+0

我需要知道如何进行查询。而不是对查询的调用。你可以编辑吗? –

+0

@KeesSonnema,基本上只是传递你需要更新的id和数据。只需一个简单的更新即可。而在你的更新表单上,只需查询** idfotoaanbiedingen **和** idaanbiedingen **并将其作为隐藏字段发送到视图。 – tomexsans

+0

是的,我有点卡住了所有的id值。我猜只能得到其中2个。但会看看这个明天:) –

相关问题