Php arama motoru yardım
Arkadaşlar kendi siteme bir arama motoru yapmayı deniyorum php de yeniyim ve arama motoru her ne kadar bilenler için basit olsa da bana karmaşık geliyor. Yapacağım şey site sayfalarını kolayca bulmak için veritabanındaki kayıtlarını sonuc olarak yansıtıp her sonuca da tıklanıldığında o sayfaya atmasını istiyorum bunu nasıl yapabilirim? Yani çıkan sonuca ait sayfa linkini html de bulunan href gibi nasıl ekleyebilirim?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
Veritabanından dönen sonuçları listelerken bu sonuçları linklendirebilirsin. @webdevyusuf arkadaşımızın önerdiği kodu şu şekilde düzenlersek istediğine ulaşmış olacaksın.
<?php
$db = new mysqli("localhost", "root", "password", "veritabani");
$word = @$_GET["q"];
$sql = $db->query("SELECT * FROM veritabani WHERE baslik LIKE '%".$word."%' ");
if ($sql->num_rows) {
while ($row = $sql->fetch_assoc()) {
//Linklendirme yapacağın alan
$baslik = $row["baslik"];
$url = $row["url"];
echo "<a href=$url>$baslik</a><br>";
}
} else {
echo "sonuç yok";
}
?>
Tabii bunun için veritabanında içeriklerini tuttuğun bir tablo olmalı. Bu tabloda baslik ve url değerleri de tutulmalı. Merhaba olan başlığın urlsi https://siten.com/merhaba olarak tutulabilir. Url değeri yerine id değeri de girersin ve listeleme kısmında
<a href=https://siten.com/icerikgoster.php?id=$id>$baslik</a>
olarak gösterebilirsin. Nasıl bir çözüm arıyorsan detay verirsen daha da yardımcı olmaya çalışırız.
$ara=$_POST['arama']; <-- Post ile veya GET ile --> $ara=$_GET['arama'];
$sonuc=$db->prepare("SELECT * FROM WHERE baslik LIKE ?");
$sonuc->execute(["%$ara%"]);
$say=$sonuc->rowCount();
BUDA BI TIK ILERI VERSIYON
$ara=$_POST['arama']; <-- Post ile veya GET ile --> $ara=$_GET['arama'];
$sonuc=$db->prepare("SELECT * FROM WHERE CONCAT(baslik, ' ', detay) LIKE ?");
$sonuc->execute(["%$ara%"]);
$say=$sonuc->rowCount();
buda listeleme
if($say>0){ // burası kayıt var ıse goster
while($row_sonuc=$sonuc->FETCH(PDO::FETCH_ASSOC)){
echo '<a href="'.$row_sonuc['sayfaid'].'">'.$row_sonuc['bas'].'</a>';
}
}else{
echo "kayıt yok";
}
ek olarak $ara degıskenını süzersın strip_tags($ara) veya benzerı ıle
$ara=strip_tags($_POST['arama']);
burada editorde yazdım hata olursa soyle
index.html
<form action="ara.php" method="get">
<input type="text" name="q" placeholder="aranacak kelime..." />
<button type="submit">ara</button>
</form>
ara.php
<?php
$db = new mysqli("localhost", "root", "password", "veritabani");
$word = @$_GET["q"];
$sql = $db->query("SELECT * FROM veritabani WHERE baslik LIKE '%".$word."%' ");
if ($sql->num_rows) {
while ($row = $sql->fetch_assoc()) {
echo $row["baslik"]."<br />";
}
} else {
echo "sonuç yok";
}
?>