v2.5.2
Giriş yap

Php Array Insert Nasıl Yapılır

yazilimyolcusu
944 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhabalar. Arkadaşlar elinizde post edilen datayı, dizi şeklinde insert edebileceğim bir kod örneği var mı? veya aşağıkdaki kodlarda nerede hata yapıyorum, bakabilir misiniz?

<?php
if ($_POST['formbir']) {

  $aliciadisoyadi      = $_POST['aliciadisoyadi'];
  $alicifirma          = $_POST['alicifirma'];
  $Sehir	             = $_POST['Sehir'];
  $aliciilce           = $_POST['aliciilce'];
  $alicitelefon        = $_POST['alicitelefon'];
  $alicieposta         = $_POST['alicieposta'];
  $siparisnotlari	     = $_POST['siparisnotlari'];
  $urununstokkodu      = $_POST['urununstokkodu'];
  $urununstoksayisi	   = $_POST['urununstoksayisi'];
  
  $dizi = array(
  '$aliciadisoyadi',
  '$alicifirma',
  '$Sehir',
  '$aliciilce',
  '$alicitelefon',
  '$alicieposta',
  '$siparisnotlari',
  '$urununstokkodu',
  '$urununstoksayisi'
  );

  $onaylananurunlerigoster = $db->prepare("INSERT INTO sepetonaylanan 
  (sepetonaylanan_adisoyadi, sepetonaylanan_firmaadi, sepetonaylanan_sehiradi, 
  sepetonaylanan_ilcesemt, sepetonaylanan_telefon, sepetonaylanan_eposta, 
  sepetonaylanan_siparisnotlari, sepetonaylanan_urun_stokkodu, 
  sepetonaylanan_urun_stoksayisi) VALUES (:aliciadisoyadi, :alicifirma, :Sehir, 
  :aliciilce, :alicitelefon, :alicieposta, :siparisnotlari, :urununstokkodu, 
  :urununstoksayisi)");
  $onaylananurunlerigoster->execute([':aliciadisoyadi => $dizi[0]', 
  ':alicifirma => $dizi[1]', ':Sehir => $dizi[2]', 
  ':aliciilce => $dizi[3]', ':alicitelefon => $dizi[4]', 
  ':alicieposta => $dizi[5]', ':siparisnotlari => $dizi[6]', 
  ':urununstokkodu => $dizi[7]', 
  ':urununstoksayisi => $dizi[8]']);
  if ($onaylananurunlerigoster) {
    echo "New record created successfully";
  } else {
    echo "Failed";
  }
}
  ?>
Cevap yaz
Cevaplar (17)
humbldump
904 gün önce
<?php

$a = array('aliciadisoyadi' => null, 'alicifirma' => null, 'Sehir' => null);

foreach ($a as $k => $v) {
    if (!$_REQUEST[$k]) {
        header("HTTP/1.1 204 No content");
        die;
    }

    $a[$k] = $v;
}
yazilimyolcusu
905 gün önce

Yapmak istediğim şey bu vidyonun sonunda var. Burada adam farklı bilgileri grup şeklinde kayıt ediyor. Ben sepetteki ürünleri kayıt etmek istiyorum.
https://www.youtube.com/watch?v=MFqVkF-m8Gg

yazilimyolcusu
905 gün önce

Tekrar merhabalar. Arkadaşlar şu an kayıt yapabiliyorum. Sorunu buldum. Form'daki input'ların "name" değerlerinin yanına [] işaretlerini koymuştum. Kaldırınca kaydetmeye başladı. Yalnız, ben tek post ile sepetteki ürünlerimin hepsini kaydetmek istiyorum. Halâ yapamadım anlayacağınız. Yani sepetimde 5 ürün var. Form'u post edince o 5 ürün de kaydolacak. ister veritabanına ister txt belgesine farketmez. Az daha sabır :) başaracacağız.

abdullahx
905 gün önce

@qplot Valla hocam ben artık karar verdim bu arkadaşın gönderilerine yazmamaya :) ne zaman yazsam sorun asla çözüme ulaşmıyor

qplot
905 gün önce

hem arkadaşın kafasını hemde bunu okuyanların kafasını karıştırmamak lazım :)
ocelıkle kod yazım kurallarına uymalı arkadas başta nasıl alışırsa oyle gıder

yazilimyolcusu
906 gün önce

Önemli değil. Yalnız şöyle bir hata alıyorum. Tam da execute($arr) yazan yerde.

PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\\AppServ\\www\\ornek\\tamamlanansiparisler.php on line
abdullahx
906 gün önce

Aslında şu an fark ettim de ben o operatöre kafayı o an taktığım için biraz gereksiz uzatmışım :) Aksiyona gerek yokmuş azıcık düşününce fark ettim. Direkt olarak şöyle de olabilir. Siz de daha sonra bu gönderiyi okuyanlar da kusura bakmayın :)

if (isset($_POST['formbir'])) {
    $arr = array_values($_POST);
    array_pop($arr);

    $onaylananurunlerigoster = $db->prepare("INSERT INTO sepetonaylanan
  (sepetonaylanan_adisoyadi, sepetonaylanan_firmaadi, sepetonaylanan_sehiradi, 
  sepetonaylanan_ilcesemt, sepetonaylanan_telefon, sepetonaylanan_eposta, 
  sepetonaylanan_siparisnotlari, sepetonaylanan_urun_stokkodu, 
  sepetonaylanan_urun_stoksayisi) VALUES (?,?,?,?,?,?,?,?,?)");
    $execute = $onaylananurunlerigoster->execute($arr);
    echo $execute ? 'New record created successfully' : 'Failed';
}
yazilimyolcusu
906 gün önce

Abdullah bey, daha kolay bir yöntemi yok mu? Program silip yeniden başka bir program kurmam lazım.

abdullahx
906 gün önce

Lokalde bu özelliği kullanmak istiyorsanız 7.4 ü yüklemeniz gerekir, sunucuda ise zaten versiyon seçme opsiyonu vardır diye düşünüyorum

yazilimyolcusu
906 gün önce

abdullah bey benim versiyon 7.3. Ne yapabilirim acaba? :)

abdullahx
906 gün önce

Hayır hocam, ne görüyosanız onu yazın

$execute = $onaylananurunlerigoster->execute([...$arr]);

[...$arr] bunun açılımı şu demek;

[$arr[0], $arr[1], $arr[2], $arr[3],$arr[4],$arr[5],$arr[6],$arr[7],$arr[8],$arr[9]]

ama dediğim gibi bu özellik sadece PHP 7.4 ve üzerinde çalışır

yazilimyolcusu
906 gün önce
'$arr[0]', '$arr[1]'

Bunun gibi mi? Bu söylediğim yerde syntax hatası var diyor. Benim versiyon 7.3 yalnız.

abdullahx
906 gün önce

$arr yazan yere bir şey yazmayacaksınız, o $arr değişkeninin içerisindeki değerleri execute metodunun içerisine yayıyoruz. Spread operatörü araştırın

Bunlardan önce de Post ile gelen değerleri alıp içerisinden submit butonunun değerini çıkardık.

yazilimyolcusu
906 gün önce

"array" lerin değerlerini alıyoruz ve "$arr" değişkenine aktardık. "array_pop", ise diziden son elemanı silme işlemi yapıyordu. Biz burada ne yapmış oluyoruz. Daha da önemlisi "...$arr" yazan yere ne yazmam lazım. Hata var gibi orada.

abdullahx
906 gün önce

Alın size en kısa yöntem, ama arkadaşın yaptığı gibi bu CRUD işlemleri için ayriyeten bir sınıf yazmanızı tavsiye ederim yine de

if (isset($_POST['formbir'])) {
    $arr = array_values($_POST);
    array_pop($arr);

    $onaylananurunlerigoster = $db->prepare("INSERT INTO sepetonaylanan
  (sepetonaylanan_adisoyadi, sepetonaylanan_firmaadi, sepetonaylanan_sehiradi, 
  sepetonaylanan_ilcesemt, sepetonaylanan_telefon, sepetonaylanan_eposta, 
  sepetonaylanan_siparisnotlari, sepetonaylanan_urun_stokkodu, 
  sepetonaylanan_urun_stoksayisi) VALUES (?,?,?,?,?,?,?,?,?)");
    $execute = $onaylananurunlerigoster->execute([...$arr]);
    echo $execute ? 'New record created successfully' : 'Failed';
}

Şartlar:

  • PHP Sürümü 7.4 veya üzeri olması lazım
  • Posttan gönderdiğiniz veriler veri tabanına kaydederken yazdığınız sırada olması lazım
  • Formda submit butonu name i olarak düşündüğüm 'formbir' name i dışında bir input name daha olmaması lazım ve bu onay butonunun en sonda olması lazım
yazilimyolcusu
906 gün önce

Merhaba. Şimdi benim bu kodları düzenleyebilmem için ne yaptığını anlamam lazım. Öncelikle bu (ilk) satırda hata veriyor. Ne hatası olduğu belli değil.

public function insert(string $table, array $data): bool

Şimdi burada "insert" isimli bir fonksiyon kullanmışız. Burada "string" i ve "array" i niye yazdık. Aşağıdaki kodda da, "sql" isimli bir dizi değişken oluşturmuşuz.

$sql = [];
	foreach ($data as $key => $value) {

Ben bu yapıdan pek bir şey anlamadım. Açıklayabilir misiniz, size zahmet?

okumusmr
906 gün önce

Merhaba @yazilimyolcusu,

Insert işlemleri için bir fonksiyon yazarak bunu çözebilirsin. Bunun için temel CRUD işlemleri yapan bir paket kullanabilirsin.
Ben böyle bir durumda aşağıdaki gibi bir yol izlerdim.

/*Veri tabanı insert işlemi. Burasının Database sınıfına ait bir fonksiyon olarak kurgulandı.
Eğer php7.4 altında bir sürüm kullanıyorsan fonksiyonun beklediği ve döndüğü değerler hataya sebep olur. 
Onları silerek hata almaktan kurtulabilirsin. (string, array, :bool)
*/
public function insert(string $table, array $data): bool
{
	$sql = [];
	foreach ($data as $key => $value) {
		$sql[] = $key . "=:" . $value;
	}
	$query = implode(", ", $sql);
	$insert = $this->db->prepare("INSERT INTO " . $table . " SET " . $query . " ");
	foreach ($data as $key => $value) {
		$insert->bindValue(':' . $key, $value);
	}
	return $insert->execute();
}

Daha sonrasında kayıt yapmak için kullanacağım yerde şu şekilde bir yol izlerdim.

/*
Data değişkeninin key değerleri tablondaki sutun değerleriyle eş olmak zorunda. 
*/
$data = [
	'aliciadisoyadi' => $_POST['aliciadisoyadi'],
	'alicifirma' => $_POST['alicifirma'],
	'Sehir' => $_POST['Sehir'],
	'aliciilce' => $_POST['aliciilce'],
	'alicitelefon' => $_POST['alicitelefon'],
	'alicieposta' => $_POST['alicieposta'],
	'siparisnotlari' => $_POST['siparisnotlari'],
	'urununstokkodu' => $_POST['urununstokkodu'],
	'urununstoksayisi' => $_POST['urununstoksayisi'],
];


$result = $db->insert('onaylanan_urunler', $data);