Diziyi Virgül İle Birleştirerek INSERT İşlemi
Merhaba.
Bir multiple select formu var. name'i mesajalan[] olan.
Ben bu formdan gelen değerleri virgül ile birleştirerek mesaj_alan_id sütununa yazdırmak istiyorum.
Ben implode ile denediğimde şu hatayı veriyor.
Data truncated for column 'mesaj_alan_id' at row 1
Bu konuda yardımcı olur musunuz?
<?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->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; ?>
ÖNCELİKLE mesaj_alan_id İNT sa TEXT veya varchar yap
boyle bır insert işlemi olmaz ondan hata alıyorsun Sen UPDATE işlemi ile karıştırmıssın
$mesaj = $db->prepare("INSERT INTO mesajlar SET mesaj_gonderen_id = :mesajgonderen, mesaj_alan_id = :mesajalan, mesaj_icerik = :mesajicerik");
DOĞRUSU
$mesaj = $db->prepare("INSERT INTO mesajlar (mesaj_gonderen_id, mesaj_alan_id, mesaj_icerik) VALUES (:mesajgonderen,:mesajalan,:mesajicerik)") ;
$mesaj->execute([
":mesajgonderen" => $mesajgonderen,
":mesajalan" => $alan,
":mesajicerik" => $mesajicerik
]);
ki bence bunca kod yazarak insert update işlemide gereksiz genel olarak bu şekilde kullanılıyor lakin bence kullanılması gereken yöntem bu
$mesaj = $db->prepare("INSERT INTO mesajlar (mesaj_gonderen_id, mesaj_alan_id, mesaj_icerik) VALUES (?,?,?)") ;
$mesaj->execute([$mesajgonderen,$alan,$mesajicerik]);