Aslında sorunun temel noktası aşağıda belirttiğim kod demetinde yer alıyor;
$mesaj = $db->prepare("INSERT INTO mesajlar SET mesaj_gonderen_id = :mesajgonderen, mesaj_alan_id = :mesajalan, mesaj_icerik = :mesajicerik");
$mesaj->execute([
":mesajgonderen" => $mesajgonderen,
":mesajalan" => $alan,
":mesajicerik" => $mesajicerik
]);
Eğer :icerik
şeklinde bir tanımlama yapıyorsan sorgunda, sorgunu execute ederken dizide yer alan anahtarlarda :
ifadesini kaldırman gerekiyor.
$mesaj = $db->prepare("INSERT INTO mesajlar SET mesaj_gonderen_id = :mesajgonderen, mesaj_alan_id = :mesajalan, mesaj_icerik = :mesajicerik");
$mesaj->execute([
"mesajgonderen" => $mesajgonderen, // : işareti kaldırıldı
"mesajalan" => $alan, // : işareti kaldırıldı
"mesajicerik" => $mesajicerik // : işareti kaldırıldı
]);
Yada istersen :
ifadesi yerine sorgunda ?
kullanarak sıralı veri yönetimi de yapabilirsin.
$mesaj = $db->prepare("INSERT INTO mesajlar SET mesaj_gonderen_id = ?, mesaj_alan_id = ?, mesaj_icerik = ?");
// Sıralı sorgularda execute metodumuzda yer alan dizide herhangi bir anahtar girişine ihtiyaç duymayız. Dizimizde yer alan veriler sorgumuzda yer alan ? bölgelerine sırası ile eklenecektir
$mesaj->execute([
$mesajgonderen,
$alan,
$mesajicerik
]);
implode
kullanımında bir problem göremedim, sadece 1, 2, 3
tarzında yapıcaksan virgüllerin sonunda yer alan boşluğu da implode fonksyonunda belirtmen gerekir.
$alan = implode(",", $mesajalan); // çıkış: 1,2,3
$alan = implode(", ", $mesajalan); // çıkış: 1, 2, 3
Sql sorgusunda INSERT INTO
eğer SET
ile birlikte kullanılıyorsa UPDATE sorgusu gibi sutun_adı = 'deger'
şeklinde kullanılabilir, o kısımda da bir problem görüntüleyemedim.
Kodun son düzenlenmiş haline de aşağıda yer verdim;
<?php if($_POST):
$mesajgonderen = $_SESSION["uye_id"];
$mesajalan = $_POST["mesajalan"]; // Dizi olarak gelen bu veriyi mesaj_alan_id sütununa virgül ile birleştirerek yazdırmak istiyorum. Örneğin 1,2
$mesajicerik = $_POST["mesajicerik"];
$alan = implode(",", $mesajalan);
$mesaj = $db->prepare("INSERT INTO mesajlar SET mesaj_gonderen_id = :mesajgonderen, mesaj_alan_id = :mesajalan, mesaj_icerik = :mesajicerik");
$mesaj->execute([
"mesajgonderen" => $mesajgonderen,
"mesajalan" => $alan,
"mesajicerik" => $mesajicerik
]);
$hata = $mesaj->errorInfo();
echo $hata[2];
else: ?>
<form action="mesaj-gonder.php" method="post">
<div class="form-group">
<label for="mesajalan">Alıcı</label>
<select class="form-select form-control" name="mesajalan[]" multiple aria-label="multiple select example">
<?php
$uyeler = $db->query("SELECT * FROM uyeler"); // burada istemci tarafından herhangi bir veri kullanmadığın için, direkt olarak query metodundan faydalanabilirsin
/*
$uyeler = $db->prepare("SELECT * FROM uyeler");
$uyeler->execute();
*/
foreach ($uyeler->fetchAll(PDO::FETCH_ASSOC) as $uye):
?>
<option value="<?php echo $uye["uye_id"]; ?>"><?php echo $uye["uye_kullanici_adi"]; ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="form-group">
<label for="mesajicerik">Mesaj İçerik</label>
<textarea class="form-control" id="mesajicerik" name="mesajicerik" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-info w-100 mt-1">Mesajı Gönder</button>
</form>
<?php endif; ?>
Detaylı PDO kullanımı ve örnekleri için buraya göz atabilirsin.
GÜNCELLEME
- Ek olarak,
mesaj_alan_id
sütununun,
gibi bir karakter içerdiği için veritabanı tarafında virgül gibi özel karakterlere izin veren bir veri yapısı kullanmalısın. Eğer ilgili sütunun veri tipiINTEGER
ise, bu veri tipi yalnızca rakamları alabildiği içinVARCHAR
veyaTEXT
gibi özel karakterleri de barındıran veri tiplerinden birini tercih etmelisin.
Zaten #002920
kodlu cevap soruyu çözüme kavuşturmaya yetiyor. Fakat ben de fetch ile bir örneğimi aşağıya ekledim. Belki bir alternatif ararsın diye jQuery olmadan bu yöntemle de api.php dosyana istek gönderebilirsin.
// app.js
(async () => {
let result = await fetch("api.php", {
headers: {
"method": "GET",
"Content-Type": "application/json"
}
})
.then(res => res.json())
.catch(e => console.error(e))
alert(result.mesaj);
})();
Merhaba,
Öncelikle Node JS projelerini Plesk panel üzerinden çalıştırmanı pek tavsiye etmem. Kendine ait bir sanal sunucu alarak onun üzerinde web sayfanı çalıştırabilirsin.
Ancak yine de Plesk üzerinde NodeJS projeni çalıştırmak istiyorsan, bu mümkün. Bunun için Plesk paneline NodeJS eklentisini kurman gerekiyor. Eğer bu eklenti kurulu değilse, Hosting sağlayıcından bunu talep edebilirsin.
Proje dosyalarını web sayfan için ayrılmış olan dosya yöneticine kurduğunu ve Plesk paneline NodeJS eklentisinin kurulmuş olduğunu var sayarak devam ediyor.
Plesk Panelin üzerinden alan adını bul ve
Node.JS
alanına git;
Karşına çıkan bölümler ve anlamlarını aşağıya ekledim. Kendine uygun şekilde doldur;
Node.JS Sürümü:projenin hangi nodejs sürümünde çalışacağını gösterir.
Belge Kökü:web sayfanı göstereceğin alan adının veya alt alan adının belge klasörünü gösterir.
Uygulama Modu:Uygulamanın hangi modda çalıştıracağını gösterir. Geliştirici araçlarının erişilmesini istiyorsan 'development', uygulamanın paylaşıma açık olduğunu düşünüyorsan 'production' seçebilirsin
Uygulama URL'si:Uygulamanın paylaşıma açık bağlantısını gösterir.
Uygulamanın Başlatma Dosyası:NodeJS projeni çalıştıracağın dosyayı gösterir. Plesk NodeJS eklentisi, uygulamanın başlattığın zaman bu dosyayı node ile çalıştıracaktır.
Bu alanları doldurduktan sonra sol üstte bulunan
Node.js'yi etkinleştir
butonuna tıkla.
Node.js eklentisini etkinleştirdikten sonra, eğer bölümleri doğru bir şekilde doldurduysan, uygulaman içerisinde NPM ile indirdiğin modülleri kullanmak için
NPM kurulumu
butonuna tıkla.
DIKKAT: Bu işlemi yapabilmen için sağ kısımda bulunanYapılandırma Dosyalarına erişim
bölümündepackage.json
dosyasını görebilmen gerekiyor.
Kurulum tamamlandıktan sonra
Uygulamayı yeniden başlat
butonuna tıkla ve kendini plesk in sihirli ellerine bırak.
Belirttiğim gibi benim de çok anladığım bir konu değil Plesk. Ancak, anladığım kadar anlatmaya çalıştım.
İyi çalışmalar.
Merhabalar,
Ajax üzerinden alacağınız verinizi JSON olarak belirlemek isterseniz dataType:"JSON"
parametresini ajax objenizde belirtebilirsiniz.
Böylece success:function(answer)
kısmında alacağınız answer
değeri direk size json olarak gelecektir. Herhangi bir parse işlemi yapmanız gerekmez.
<script type="text/javascript">
$(document).ready(function(){
$("#forms").submit(function(){
var formID=$(this).attr('id');
var formDetails=$('#'+formID);
$.ajax({
type:"POST",
url:'../adminn/islem.php',
data:formDetails.serialize(),
dataType:"JSON", //Burada eklediğim gibi
success: function(data) {
swal("Giriş Başarılı",veri.message,veri.status);
}
});
return false;
});
});
</script>
Belki daha farklı bir yöntem vardır, uzun süredir kullanmıyorum fakat kullandığım zamanlarda hep bu yöntemi kullandım.
Kolay gelsin