PHP seçilen değere göre otomatik doldurma
Merhaba arkadaşlar,
Bir formum var yapmak istediğim Ürün seçiniz kısmından bir ürün seçilirse barkod ve fiyat kısmının ürüne göre otomatik dolmasını istiyorum. Fakat ürün seçmezde barkod no girerse bu seferde ürün ve fiyatın otomatik olarak gelmesini istiyorum. Nasıl yapabilirim. Yardımcı olabilecek arkadaşlar varmıdır. Teşekkürler
<div class="row mb-3">
<div class="col-md-3">
<select name="urun_id[]" class="form-select" data-search="on" required>
<option>Ürün Seçiniz</option>
<?php $urunsor = $db->query("SELECT * FROM urunler ORDER BY id DESC", PDO::FETCH_ASSOC); ?>
<?php foreach ($urunsor as $cek): ?>
<option value="<?=$cek['id']?>"><?=$cek['ad']?></option>
<?php endforeach ?>
</select>
</div>
<div class="col-md-3">
<input type="text" class="form-control" name="barkod" placeholder="Barkod" required>
</div>
<div class="col-md-2">
<input type="number" class="form-control" name="fiyat" placeholder="Fiyat" required>
</div>
<div class="col-md-2">
<input type="number" class="form-control" name="adet" placeholder="Miktar" required>
</div>
<div class="col-md-2">
<button class="btn btn-danger w-100 remove_item_btn">Sil</button>
</div>
</div>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
@trsherlock desteğin için teşekkürler. Fakat değeri boş gönderiyor sonuca ulaşamadım. Buranın kurallarına aykırı mı bilmiyorum ama iletişim için mail yada instagram verme şansın olur mu? İşi tamamlamam lazım ve geç kalıyorum. Sorun çözülürse cevabıda burada iletiriz.
İşte iken aşağıdaki gibi yapmanı önerecektim fakat fırsat bulamadım. Aşağıdaki gibi bir düzen oluşturursan.
Tekrar post isteği atmana gerek kalmayacaktır. Yalnız test edemedim bazı yerleri yanlış yorumlamış olabilirim.
Bir hata ile karşılaşırsan yardımcı olurum.
<?php
require_once 'inc/db.php';
$urunsor = $db->query("SELECT * FROM urunler ORDER BY id DESC", PDO::FETCH_ASSOC);
foreach($urunsor as $cek) {
$urunler[] = $cek;
}
?>
<script>
let $urunler = <?= json_encode($urunler) ?> // Php ile gelen diziyi json'a çevirerek js değişkenine ata
tahminiCikti = [
{
"id": 1,
"ad": "Lacivert",
"barkod": "00000001",
"fiyat": 500.50
},
{
"id": 2,
"ad": "Yeşil",
"barkod": "00000002",
"fiyat": 300.50
}
];
</script>
<!-- Select etiketi -->
<body>
<select name="urun_id[]" class="form-select" data-search="on" required>
<option>Ürün Seçiniz</option>
<?php foreach ($urunler as $cek): ?>
<option value="<?=$cek['id']?>"><?=$cek['ad']?></option>
<?php endforeach ?>
</select>
</body>
<script>
// bir önceki cevabımda dizi olarak oluşan veri girişi etiketlerine ulaşmak için name=barkod[] tırnak içine almak gerekiyormuş köşeli parantez yoksa gerek yok.
$("select[name='urun_id[]']").on("change",(e)=>{
$urun = $urunler.find(f=> f.id == e.target.value)
$(e.target).parent().parent().find("input[name='barkod[]']").val($urun.barkod);
$(e.target).parent().parent().find("input[name='fiyat[]']").val($urun.fiyat);
})
</script>
Js ile Php değişkenlerini değiştiremeyeceğin için js ile post edip gelen değeri yakalaman gerekecek.
Daha önceki soruna verdiğim cevapta hatalı bir yorum yapmışım. O konuyu sonra açıklarım.
Php arka planda kodları çalıştırıp sonucu ekrana döker. Yüklenmiş sayfada tekrar php kodu çalıştıramazsın.
O yüzden ek bir php sayfasına js ile istek atman gerekiyor.
<script>
$(".select").on("change",(e)=>{
$.post("urunler.php", {urunid = 1}, (resp)=>{
$(e.target).parent().parent().find("input[name=barkod]").val(resp.barkod);
$(e.target).parent().parent().find("input[name=fiyat]").val(resp.fiyat);
})
})
</script>
<?php
$urun = $db->query("SELECT barkod, fiyat FROM urunlar WHERE id=$_POST[urunid]", PDO::FETCH_ASSOC);
// başka bilgi istemiyrosan sadece barkod, ve fiyat bilgisini sorgula
foreach($urun as $cek) {
echo json_encode($cek); // {"bakrod": "00000000", "fiyat": "350"} benzeri çıktı gelecek
}
?>