e-posta adresim: [email protected]
İş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
}
?>
Ben Pdo kullanan birisi değilim algılamam zaman aldı biraz. :)
Script içinde foreach öncesi tekrar istek attırmak gerekiyor.
Veya mysqli_query()
kullanımında while ile döngüye soktuğumuzda her satırı tek tek yakalayıp bir değişkene atıyoruz. Örnek: $rows[] = $row
Sonra değişkeni istediğimiz yerde döngüye sokuyuyoruz.
Pdo ile çekilen veriler de aynı şekilde foreach ile her satır tek tek yakalanıyor ve anlık yazdırılıyor bir daha da kullanılmıyor.
// Bu pek sağlıklı değil her seferinde veritabanına istek atacak. Yeni değerlerin eklenme ihtimali varsa kullanılabilir.
<?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 ?>
<?php>
foreach($urunsor as $cek) {
$urunler[] = $cek;
}
?>
<?php foreach ($urunler as $cek): ?>
<option value="<?=$cek['id']?>"><?=$cek['ad']?></option>
<?php endforeach ?>
Sanırım istediğin bu şekilde?
[
"userid1"=> ["resim1", "resim2", "resim3", "resim4"],
"userid2"=> ["resim1", "resim2", "resim3", "resim4"],
...,
...
]
While döngüsü içinde yaptığın zaman sanırsam işini görecektir.
$img[$row["tasksFileUserID"]][] = $row["tasksFileName"]
Not: Bir de bu sorguda userid ve resimler dışında başka bir şeye ihtiyacın yoksa
SELECT * FROM
şeklinde kullanmanı pek önermem. Hangi sütunlara ihtiyacın varsa onları belirt.
Daha az veri olması daha verimli olmasını sağlar.
Hangi kullanıcıyı aradığını belirtmezsen nasıl bulmasını bekleyebilirsin?
"SELECT * FROM users as u
INNER JOIN taskfile as tf
ON u.personelId = tf.tasksFileUserID
WHERE tf.tasksFileTaskID = $taskID AND tf.tasksFileUserID = $userID
ORDER BY tf.date DESC"
Kodların tamamını görmediğim için net bir yorum yapamam tahmin yürüterek bir örnek hazırladım.
Görseldeki gibi açılır kutu boş geliyorsa $urunsor
değişkeni aşağıdaki gibi bir fonksiyonun içinde olursa değişkene ulaşılamadığı için option etiketleri oluşmayacaktır.
Select etiketini incele bir php uyarısı var mı kontrol et. Tahmin ettiğim gibi bir durumsa ikinci örnekteki gibi bir uyarı alırsın.
<body>
<?php
function iller() {
$iller = [
[
"key"=> "06",
"text"=> "Ankara"
],
[
"key"=> "08",
"text"=> "Artvin"
],
[
"key"=> "35",
"text"=> "İzmir"
]
];
?>
<div>
<select>
<option></option>
<?php foreach ($iller as $val): ?>
<option value="<?=$val['key']?>"><?=$val['text']?></option>
<?php endforeach ?>
</select>
</div>
<?php
};
iller();
?>
<script>
$("div").append(`<select>
<option></option>
<?php foreach ($iller as $val): ?>
<option value="<?=$val['key']?>"><?=$val['text']?></option>
<?php endforeach ?>
</select>`)
</script>
</body>
Alınan uyarı:
<select>
<option></option>
Notice: Undefined variable: degisken in D:laragonwwwreamworksZirveExp est.php on line 44
Warning: Invalid argument supplied for foreach() in D:laragonwwwreamworksZirveExp est.php on line 44
</select>
<script>
$("div").append(`<select>
<option></option>
<br />
<b>Notice</b>: Undefined variable: degisken in <b>D:\laragon\www\freamworks\ZirveExp\test.php</b> on line <b>44</b><br />
<br />
<b>Warning</b>: Invalid argument supplied for foreach() in <b>D:\laragon\www\freamworks\ZirveExp\test.php</b> on line <b>44</b><br />
</select>`)
</script>
Tayfun Hoca'nın yaptığı nasıl bir şeydir bilmiyorum.
Bir Php server kullanıyorsan aşağıdaki gibi jquery dahil ederek 1. veya 2. yöntemi kullanabilirsin.
Tek olay input etiketini yakalamak ve "keyup" ile dinlemek.
<input type="text" onkeyup="fn(this)" id="input">
<script>
// etiket içinde onkeyup kullanırsan
function fn(e) {
$.post("post.php", {postValue = e.value}, (resp)=> {
console.log(resp)
},"json") // "json" belirtilmezse varsayılan olarak text gelir, "xml", "html", "json", "text"
}
// Jquery
$("#input").on("keyup", (e)=>{
$.post("post.php", {postValue = e.target.value}, (resp)=> {
console.log(resp)
},"json") // "json" belirtilmezse varsayılan olarak text gelir, "xml", "html", "json", "text"
})
</script>
https://www.youtube.com/watch?v=JeVkrHBPVgg&ab_channel=Divinector
bu videoda gördüğüm kadarı ile strings: []
nesneli dizi kabul etmiyor.
Ama php tarafından dönen değerler yanlış yorumlamadı isem dizi içinde obje olarak dönüyor.
// Php tarafından gelen json
[
{
"icerik": "İçerik 1"
},
{
"icerik": "İçerik 2"
}
]
Olması gereken
// Eklentinin okumak istediği Json
["İçerik 1", "İçerik 2"]
Php tarafını bu şekilde değiştir => $data[] = $gelsin['icerik']
Javascript tarafını da bu şekilde değiştir => strings: response
Network'a bak istek attığın sırada Payload içeriğinde gorsel=
anahtarı var mı kontrol et.
Ayrıca $uzanti = explode(".", $_FILES[gorsel][name]);
bu kodda tırnakları unutmuşsun.