Php Array Insert Nasıl Yapılır
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";
}
}
?>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (17)
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
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.
Ö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
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';
}
Abdullah bey, daha kolay bir yöntemi yok mu? Program silip yeniden başka bir program kurmam lazım.
abdullah bey benim versiyon 7.3. Ne yapabilirim acaba? :)
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
'$arr[0]', '$arr[1]'
Bunun gibi mi? Bu söylediğim yerde syntax hatası var diyor. Benim versiyon 7.3 yalnız.
"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.
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
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?
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);