PHP Where koşulu ile dinamik veri listeleme nasıl ayarlanır?

Arsen Lüpen

Hectopat
Katılım
28 Şubat 2021
Mesajlar
80
Daha fazla  
Cinsiyet
Erkek
Kod:
if(isset($_POST['start'])){

 $total_head = $_POST['total_head'];

 $bilgilerimsor=$db->prepare("SELECT * from demo WHERE b=:b");
 $bilgilerimsor->execute(
 [
 'b' => $total_head
 ]

 );

 while($bilgilerimcek=$bilgilerimsor->fetch(PDO::FETCH_ASSOC)) {

 echo $bilgilerimcek['b']; echo "<br>";

 }
 }

Merhaba. Kullanıcı input değerine 30 girdi ise veri tabanındaki b sütunu (input değeri - 5 < input değeri < input değeri + 5) aralığındaki olan pompaları tablo halinde listelemek istiyorum ama sürekli hata alıyorum ya da kod çalışmıyor. İnternete girip baktığımda herkes statik veri üzerinden örnek veriyor. Statik veri ile ben de yapabiliyorum. Benim istediğim dinamik veri yani kullanıcının girdiği veriyi döndürmek istiyorum.
 
Merhaba! Kodunuzda birkaç sorun gözüküyor. İlk olarak, sorgunuzu yazarken "WHERE b=:b" şeklinde bir şey yazmışsınız. Ancak bu sorgu, "b" sütunundaki tam olarak belirtilen değeri döndürecektir. Yani, bu sorgu, "total_head" değişkeninin değeriyle tam olarak eşleşen satırları getirmeyecektir. Sorgunuzu "WHERE b BETWEEN :min_head AND :max_head" şeklinde değiştirmeniz gerekiyor.

İkinci olarak, "total_head" değişkeninin değeri 30 ise, sorgunuz "25 < b < 35" gibi bir şey yapmaz. Bu nedenle, "min_head" ve "max_head" değişkenlerini tanımlamanız ve bunları kullanarak sorgunuzu oluşturmanız gerekiyor.

Ayrıca, kodunuzda bir form gönderme işlemi var, ancak formun gönderildiğinden emin olmalısınız. Ayrıca, PDO sorgularını kullanırken hataları yakalamak için try-catch bloklarını kullanmanız önerilir.

Aşağıda düzeltilmiş bir kod örneği bulabilirsiniz:

<?php
if(isset($_POST['start'])){

$total_head = $_POST['total_head'];
$min_head = $total_head - 5;
$max_head = $total_head + 5;

try {
$bilgilerimsor = $db->prepare("SELECT * FROM demo WHERE b BETWEEN :min_head AND :max_head");
$bilgilerimsor->execute(array(
':min_head' => $min_head,
':max_head' => $max_head
));

echo "<table>";
while($bilgilerimcek = $bilgilerimsor->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td>" . $bilgilerimcek['column1'] . "</td>";
echo "<td>" . $bilgilerimcek['column2'] . "</td>";
// burada sütunlarınızın adlarını yazmanız gerekiyor
echo "</tr>";
}
echo "</table>";
} catch(PDOException $e) {
echo "Sorgu hatası: " . $e->getMessage();
}
}
?>

Bu örnekte, "demo" tablosunda "column1" ve "column2" adında iki sütun olduğunu varsayıyorum. Sütun adlarını kendi veritabanınızdaki sütun adlarıyla değiştirmeniz gerekiyor.

CHATGPT cevabı bu. Umarım yardımcı olur.
 
Buradaki işlemi çözemedim, ne yapmak istiyorsun daha net anlatırsan yardımcı olmaya çalışayım.

Örneğin tablomda kalemlerin ücreti var kullanıcı 30 TL girdiğinde 25 ile 35 lira arasındaki kalemlerini göstermesini istiyorum.

Merhaba! Kodunuzda birkaç sorun gözüküyor. İlk olarak, sorgunuzu yazarken "where b=:b" şeklinde bir şey yazmışsınız. Ancak bu sorgu, "b" sütunundaki tam olarak belirtilen değeri döndürecektir. Yani, bu sorgu, "total_head" değişkeninin değeriyle tam olarak eşleşen satırları getirmeyecektir. Sorgunuzu "where b between: Min_head and: Max_head" şeklinde değiştirmeniz gerekiyor.

İkinci olarak, "total_head" değişkeninin değeri 30 ise, sorgunuz "25 < b < 35" gibi bir şey yapmaz. Bu nedenle, "min_head" ve "max_head" değişkenlerini tanımlamanız ve bunları kullanarak sorgunuzu oluşturmanız gerekiyor.

Ayrıca, kodunuzda bir form gönderme işlemi var, ancak formun gönderildiğinden emin olmalısınız. Ayrıca, pdo sorgularını kullanırken hataları yakalamak için try-catch bloklarını kullanmanız önerilir.

Aşağıda düzeltilmiş bir kod örneği bulabilirsiniz:

<?PHP
İf(isset($_post['start'])){

$Total_head = $_post['total_head'];
$Min_head = $total_head - 5;
$Max_head = $total_head + 5;

Try {
$Bilgilerimsor = $db->prepare("select * from demo where b between: Min_head and: Max_head");
$Bilgilerimsor->execute(array(
':Min_head' => $min_head,
':Max_head' => $max_head
));

Echo "<table>";
While($bilgilerimcek = $bilgilerimsor->fetch(pdo: Fetch_assoc)) {
Echo "<tr>";
Echo "<td>". $bilgilerimcek['column1']. "</td>";
Echo "<td>". $bilgilerimcek['column2']. "</td>";
// Burada sütunlarınızın adlarını yazmanız gerekiyor.
Echo "</tr>";
}
Echo "</table>";
} Catch(pdoexception $e) {
Echo "sorgu hatası: ". $e->getMessage();
}
}
>

Bu örnekte, "demo" tablosunda "column1" ve "column2" adında iki sütun olduğunu varsayıyorum. Sütun adlarını kendi veritabanınızdaki sütun adlarıyla değiştirmeniz gerekiyor.

ChatGPT cevabı bu. Umarım yardımcı olur.

Yardımınız için teşekkür ederim. Deneyceğim.
 
Bu şekilde kullanabilirsin, güvenlik eklemedim sen kendine göre düzeltirsin.

PHP:
$gelen_deger = $_POST['gelendeger']; // gelen değer 30 olsun

$alt = $gelen_deger - 5; // alt değişkeni 25 olur
$ust = $gelen_deger + 5; // ust değişkeni 35 olur

 
$sql = "SELECT * FROM demo WHERE b BETWEEN $alt AND $ust";
 
Bu şekilde kullanabilirsin, güvenlik eklemedim sen kendine göre düzeltirsin.

PHP:
$gelen_deger = $_POST['gelendeger']; // gelen değer 30 olsun.

$alt = $gelen_deger - 5; // alt değişkeni 25 olur.
$ust = $gelen_deger + 5; // ust değişkeni 35 olur.

$sql = "SELECT * FROM demo WHERE b BETWEEN $alt AND $ust";

Açıkladığınız için teşekkür ederim. Benim yaşadığım asıl sorun, benim yazdığım kodda posttan gelen veriyi invalid parameter hatası alıyorum. Ama statik veri yazınca çalışıyor.
 

Yeni konular

Geri
Yukarı