Anasayfa » Codeigniter, Php

Codeigniter Dersleri – 14 – Veritabanına Veri Ekleme

12 Temmuz 2011 7.312 kez okundu 25 yorum
1 Star2 Stars3 Stars4 Stars5 Stars (2 oy,5 üzerinden : 5,00 )
Loading...

Bu dersimizde hazırlamış olduğumuz formu kullanarak database imize veri ekleyeceğiz. Bunun için ilk yapmamız gereken controller dosyamızda submit butonuna basıldığını anlayan bir fonksiyon yazmak. pizza.php dosyamızı aşağıdaki gibi düzenleyelim. İçine model dosyamızı çağıran fonksiyon yazıyoruz.

function order()
	{
		$this->load->helper('form');
		$this->load->helper('html');
		$this->load->model('pizza_model');
 
		if($this->input->post('mysubmit'))//formda sumbit tuşuna basıldığında çalışacak fonksiyon
		{  
			$this->pizza_model->insert_new_entry();  //yeni elemanı database eklemek için model dosyamızı çağırıyoruz
		}
 
		$data=$this->pizza_model->genel();
		$this->load->view('pizza_order',$data);
	}

Burada submit butonuna bastığımızda insert_new_entry() fonksiyonu çağrılacak.

Şimdi bu insert_new_entry() fonksiyonumuzu model dosyamıza yazalım. Bu yeni bir fonksiyon olarak pizza_model.php içine yazılacak. Başka herhangi bir fonksiyonun içine yazılmayacak.

function insert_new_entry()
	{
 
		$data = array(
		 'name'=>$this->input->post('isim'),
		 'pizza'=>$this->input->post('pizza'),
		 'type'=>$this->input->post('tip'),
		 'thin_edge'=>$this->input->post('kenar'),
		 'unit'=>$this->input->post('adet'),
		 'address'=>$this->input->post('adres'),
 
		 'cost'=>'20' //daha sonra bunun hesabı için fonksiyon yazılabilir.
		 );
		  $this->db->insert('pizza',$data); 
	}

Bu değişikliğide yaptıktan sonra view dosyamızda verileri daha iyi çekebilmek için küçük bir değişiklik yaptık. Burası çok önemli değil ancak pizza_view.php dosyanızı güncellerseniz iyi olur.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<html>
<head>
<link rel="stylesheet" type="text/css"  href="<?php echo $base.'css/'.$css?>"><!-- Css dosyamızı burada include ettik -->
</head>
<body>
<div id="header">
<?php $this->load->view('pizza_header'); ?><!-- header dosyamızı burada include ettik -->
</div>
<div id="menu">
<?php 	$this->load->view('pizza_menu'); ?><!-- menü dosyamızı burada include ettik -->
</div>
 
<h3>Siparişler</h3>
<table border="1">
<tr><th>İsim</th><th>Pizza</th><th>İnce Kenar</th><th>Adet</th><th>Adres</th><th>Tip</th><th>Fiyat</th></tr>
<?php foreach($orders as $row){ ?>
<tr>
<td>
<?php echo $row->name;?>
</td>
<td>
<?php echo $row->pizza;?>
</td>
<td>
<?php if($row->thin_edge)
{
	echo "Evet";
}
else
{
	echo "Hayır";
}
?>
</td>
<td>
<?php echo $row->unit;?>
</td>
<td>
<?php echo $row->address;?>
</td>
<td>
<?php echo $row->type;?>
</td>
<td>
<?php echo $row->cost;?>
</td>
</tr>
<?php } ?>
 
</table>
 
<div id="footer">
<?php $this->load->view('pizza_footer'); ?><!-- footer dosyamızı burada include ettik -->
</div>
 
</body>
</html>

Şimdi forma bir şeyler yazın ve çalışmasını gözlemleyin.
Ancak öncesinde databaseimizde yaptığımız bir değişikliği söylemeliyim ki hata oluşmasın. Kolaylık olması açısından pizza tablomuzda bulunan type ve thin_edge alanlarını int yerine varchar a dönüştürdük.

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

25 yorum »

  • Hasan Hüseyin İŞLER dedi ki:

    Örneğin sipariş eklenince bir uyarı mesajı gelse güzel şekilde JQUERY ile filan olabilir mesela , siparişiniz alınmıştır. Veya bilgileri eksik girince hata mesajı verse şunlar olmadan sipariş alınamaz diye olsa süper olur.

  • admin dedi ki:

    Şu anda temel bilgileri vermeye çalışıyorum. Onlar biraz daha advance. Derslerimiz devam eder ve üst düzey anlatıma geçersem, onlarıda yaparız ama şu anda amacımız codeigniter temelli anlatım. İlginiz için teşekkürler.

  • Sadullah dedi ki:

    pizza_view sayfasında neden

    bu satırı kullandık?
    foreach in görevi nedir burada? onu kullanmasak olmaz mı?
    cevabınız için şimdiden teşekkür ederim. iyi çalışmalar…

  • admin dedi ki:

    Sorunuzda galiba eksilik var, tam anlayamadım sorunuzu.

  • Sadullah dedi ki:

    kodu yazdım ama yorumu gönderince gözükmedi sorumda.
    pizza_view.php sayfasında
    “php foreach($orders as $row)”
    foreach kullandık. bunun görevi nedir o sayfada onu tam anlayamadım. foreach kullanmadan da yapamaz mıyız acaba?

  • admin dedi ki:

    Bildiğiniz gibi ekrana siparişleri basıyoruz. Foreach kullanırken, her bir loop(dönüşte) ta sadece bir siparişin tüm bilgilerini row değişkenine atıyoruz, ve kodun ilerleyen kısmında bilgileri çekiyoruz. Eğer tek bir sipariş olsaydı dediğinize gerek kalmayacaktı. Sizin öneriniz nedir.

  • Sadullah dedi ki:

    söylediğinizi anladım. önerim olduğundan dolayı sormamıştım. foreach ile çalıştıramadım kodları. böyle bir hata alıyorum.

    A PHP Error was encountered

    Severity: Warning

    Message: Invalid argument supplied for foreach()

    Filename: core/Loader.php(679) : eval()’d code

    Line Number: 14

  • admin dedi ki:

    Şu haliyle hatayı anlayamadım. Hata muhtemelen foreach içine gönderdiğiniz parametre ile alakalı.Parametreyi bir daha kontrol edin. Yazının sonunda bi kaç düzeltmede bulunmuştum. Onları uyguladınız mı?

  • Sadullah dedi ki:

    evet uyguladım ama yine aynı malesef 🙁

  • admin dedi ki:

    Projenin kaynak kodlarını paylaştım. İndirip kontrol edebilirsiniz.
    Codeigniter Pizza Projesi Kaynak Kodları

  • Sadullah dedi ki:

    tamam teşekkür ederim. kolay gelsin

  • semih dedi ki:

    Merhaba,
    Verdiğiniz adımları adım adım uyguladım ancak şöyle bir problem var, model içindeki datayı doldururken id değişkenini default olarak sıfır alıyor, eger orada kendim bir id ataması yaparsam (var olmayan) kabul edip onuda tabloya yazıyor, acaba bu id değişkenini her kayıt için nasıl artan yapabiliriz.

    Paylaşımlarınız için teşekkürler.

  • semih dedi ki:

    Problemi aşagıdaki kodu ekleyerek ve sonra data dizinde ‘id’ => $id eklemesini yaparak

    $this->db->select_max(‘id’);
    $query = $this->db->get(‘pizza’);
    foreach($query->result() as $row){
    $id = $row->id + 1;
    }

    Çözmüş oldum ama bu durumda id yaratmasını ben yapmış oluyorum bunu her yeni girdi için kendisinin oluşturması gerekmezmiydi ?

  • Gürcan Kavakçı dedi ki:

    Database inizde tablo oluştururken id alanını auto_increment yaparsanız id ler otomatik artan olacak ve sizin birşey yapmanıza gerek kalmayacaktır. Bunu deneyebilirsiniz.

  • eren dedi ki:

    merhabalar.
    oluşturduğum form sayfamdan veri tabanına veri eklerken hatalı ekliyor.form sayfasından kullanıcı adı, kombi aç-kapa,televizyon aç-kapa bilgilerini giriyorum.ama kombi ile televizyon değişkenlerimi veri tabanında int(1) olarak alırsam ne seçersem seçim “kapalı” varchar alırsam ikisi de açık olarak kaydediliyor.
    bunu nasıl düzeltebilirim??

  • eren dedi ki:

    merhabalar.
    dediklerinizi uygulayarak kendi sitemi yapmaya çalışıyorum ama bir sorunum var.form sayfamda kombi aç-kapa ve televizyon aç-kapa diye butonlar bulunuyor.değişkenleri veri tabanında int(1) şeklinde tanımladığımda hangi butonu seçersem seçim açık olarak kaydoluyor.varchar yapınca da kapalı olarak.
    bunu düzeltmek için ne yapabilrim??

  • admin dedi ki:

    Eren, Öncelikle bu kombi aç kapa için checkbox mı kullanıyorsun? Bunu bilmem gerekiyor. Eğer checkbox kullanıyorsan bizim derslerimizdeki örneklerin aynısını yapsan çalışması gerekir. Örneğin database de int(1) olara tutuyorsan, insert veya update işlemi sırasında şu şekilde kullanabilirsin. 'thin_edge'=>$this->input->post('kenar')=='yes'?1:0
    Eğer varchar kullanacaksan 'thin_edge'=>$this->input->post('kenar') şeklinde kullanman gerekiyor.

  • Fırat dedi ki:

    merhaba ^^ formdaki alanı name="gsira[]" şeklinde yapıp oluşan diziyi veri tabanına ekletmek istiyorum nasıl yaparım =)

    $getir = implode('-',$this->input->post('dgsira'));
    $gsira = explode('-',$getir);

    bu şekilde veri elemanlarını oluşturdum (doğru oaln bumu bilmiyorum ama 😀 ) fakat bunu insert ettiremiyorum =/ yardımınız için teşekkrüelr koaly gelsin

  • levent dedi ki:

    şimdi option var elimde şehirler için onu nasıl seçebilirim seçili itemi nasıl görebilirim kodla

  • levent dedi ki:

    öncelikle paylaşımlarınız için teşekkürler
    pizza eklerken mesela kendi projemde gerekli sizin projenizde saçma dura
    bilir kullanıcın idsi gerek postla olmaz sessionla denemeye çalışıyorum çıkamadım 🙁 bunu nasıl yapabilirim pazartesine kadar yanıt verebilriseniz sevirim aksi takdirde bulmuş olmam gerek :=)

  • admin dedi ki:

    Tam olarak anlayamadım sorunuzu, pizzayı ekleyen kullanıcının kullanıcı id’si mi gerekiyor o anda? Peki session la neden yapamadınız?

  • levend dedi ki:

    gençlik işte teşekkürler ben sessiondan almıyordum ilkte baya bir karıştırdım sonralarda sayenizde yayınladım sitemi
    http://www.yemekciyiz.net/
    yardımınız için teşekkür edeirm.
    saygılarım

  • Emre dedi ki:

    Merhaba şu ana kadar olan derslere ait 2 problem yaşadım.
    Birincisi oluşturulan formda, butonun value değeri “Sipariş Ver!” yazısı çıkmıyor. İkincisi ise veri eklemiyor. Butonu tıklayınca, sayfa yenileniyor ancak herhangi bir işlem yapmıyor. Sizin paylaştığınız kodları da indirip denedim ancak onda da bu iki hata mevcut. İşin enteresanı indirdiğim dosyada ilerleyen derslerde anlatılcak olan sil komutu vardı ve onlar çalışıyordu.

    Sorun neden kaynaklanıyo olabilir?

  • Emre dedi ki:

    Bu arada “Sipariş Ver!” yerine “Siparis Ver!” şeklinde yazınca iki sorun da düzeldi. Türkçe karakter yüzünden sorun yaratıyormuş.

    Çok enteresan.

  • arif dedi ki:

    Merhaba.

    Fatal error: Call to undefined method pizza_model::insert_new_entry() in C:\xampp\htdocs\Codeigniter\application\controllers\pizza.php on line 24

    böyle bir problem ile karşılaşıyorum.

    pizza.php dosyamın 24. satırı bu şekilde : $this->pizza_model->insert_new_entry(); // yeni eleman eklemek için model dosyamızı çağırdık

    bu satır yerine echo 1; yazınca 1 geliyor, sorunsuz çalışıyor. insert_new_entry’i bulamıyor galiba sorunu nasıl düzeltebilirim ?

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.