Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Site içi arama?

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
merhaba arkadaşlar php scriptimde site içi arama için bir scriptten yararlandım aldığım kodlarla arama yapıyor ama sadece istediğim sütunun ilk başlarında yapıyor mesela


işte bir örnek yazıyorum ne olduğu önemli değil

bu şekilde bir içerik var db'de. arama motoruna "ne" yazdığımda sonuç çıkmıyor ama cümlenin başındaki i iş işt şeklinde aramalar yaptığımda sonuçlar çıkmakta yani aramayı cümlenin başına göre yapıyor.

kullandığım kod


PHP:
$sorgu = mysql_query("SELECT * FROM makale LIMIT 20");
while ($cek = mysql_fetch_array($sorgu)) {
$ara = $_POST[ara];
$leng = strlen($ara);
$ara= strtolower( $ara);
$makaleara = $cek[makale];
$makaleara = strtolower( $makaleara );
$makale_ara = substr( $makaleara ,0, $leng );

aradığım kelime cümlenin ortasında olsada sonuç verecek şekile kodu nasıl düzenleyebilirim? yardım ederseniz sevinirim.

not: formdan gelen input alanının adı ara.
 

UnPoo

0
Onaylı Üye
Üye
Katılım
10 Mart 2008
Mesajlar
446
Açılan Konu
19
Tepki puanı
3
Konum
Dünya
kardeş php dilinde bilmiyorum ama yardımı olacaksa eğer bir asp kod yazayım sana hemen.

Kod:
Set rsCommon = server. CreateObject("ADODB.Recordset")
strSQLAra="Select * From tblFirmalar Where FOnay<>0" & " AND " & alan & " Like '%" & kelime & "%'" & " Order By FMusteri ASC"
rsCommon.Open strSQLAra,UpConn,1,3

alan: tabloda vereceğin alandır.
kelime: arama için girilen kelimedir.

kısaca tblFirmalar tablosunda "alan" olarak hangi alanları belirliyorsak açılır kutulu olabilir veya direk olabilir o alan içinde kelimeyi arıyor ve girdinin onaylımı onaysızmı olduğunuda kontrol ediyor. onaysızsa siteye onaysız kaydı vermiyor. cümle içinde başta ortada sonda nerede hangi kelime olursa olsun bulur sorun değildir.

kolay gelsin.
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
hocam malesef php gerekli ilgin için teşekkürler. diğer arkadaşlar ilgilenirse sevinirim
 

Ozcan

0
Onaylı Üye
Üye
Katılım
12 Mayıs 2007
Mesajlar
3,749
Açılan Konu
428
Tepki puanı
61
Konum
Antalya
SELECT * FROM tablo where alan LIKE '%$kelime%'

SELECT * FROM makale where makalenin_oldugualan like '%ne%'

php ile bi alakası yok aratırken link ile aratırsan çıkartır.
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
kodumu düzenleme imkanınız var mı nerde hata yaptığımı bulamadım istediğim şekilde arama yapamadı.



PHP:
<?php
$sorgu = mysql_query("SELECT * FROM makale WHERE makale LIKE '%$ara%'");
$i = 1;
while ($cek = mysql_fetch_array($sorgu)) {
$ara = $_POST['ara'];
$leng = strlen($ara);
$ara= strtolower( $ara);
$makaleara = $cek[makale];
$makaleara = strtolower( $makaleara );
$makale_ara = substr( $makaleara ,0, $leng );
$k = $i % 2;
$id = $cek[id];
$konu = $cek[konu];
$makale = $cek[makale];
$tarih = $cek[tarih];
if (strlen($cek['makale']) > 100) {
$makale = substr($cek['makale'], 0, 100)."...";
} else {
$makale = $cek[makale];
}
if (strlen($cek['konu']) > 30) {
$konu = substr($cek['konu'], 0, 30)."...";
} else {
$konu = $cek[konu];
}
if ($k == "1") {
echo '<tr>';
}
if ($makale_ara == $ara) {
echo "arama sonucu burada listelenmekte";
}
if ($k == "0") {
echo '</tr>';
}
$i++;
}
?>


aranmasını istediğim alan makale tablosunda makale sütunu.

ilgileriniz için teşekkürler
 

desoLate

0
Onaylı Üye
Üye
Katılım
14 Haziran 2006
Mesajlar
220
Açılan Konu
23
Tepki puanı
0
PHP:
if ($makale_ara == $ara) {
echo "arama sonucu burada listelenmekte";
}

Burdaki if koşulunu kaldırıp direkt arama sonuçlarını listeletirsen sorunun çözülecektir.
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
if koşulunu kaldırmıştım öncesinde denedim ama karşıma tüm db deki sonuçlar geldi yani arama yapmadan listeleme yaptı
 

desoLate

0
Onaylı Üye
Üye
Katılım
14 Haziran 2006
Mesajlar
220
Açılan Konu
23
Tepki puanı
0
Mantıklı olarak sadece aranan kelimenin içinde geçen kaydı/kayıtları çekmesi gerekli. Çünkü üstteki kodda, aranan kelimenin strlen ile karakter sayısına bakıyor ve substr ile gelen sonuçta başından itibaren karakter sayısını kesiyor ve if koşuluyla aranan kelime eğer makalenin başında geçiyorsa listeleme yapıyor.

Listeleme kodlarını yazabilir misin?
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
PHP:
<?php
$sorgu = mysql_query("SELECT * FROM makale WHERE makale LIKE '%$ara%'");
$i = 1;
while ($cek = mysql_fetch_array($sorgu)) {
$ara = $_POST['ara'];
$leng = strlen($ara);
$ara= strtolower( $ara);
$makaleara = $cek[makale];
$makaleara = strtolower( $makaleara );
$makale_ara = substr( $makaleara ,0, $leng );
$k = $i % 2;
$id = $cek[id];
$konu = $cek[konu];
$makale = $cek[makale];
$tarih = $cek[tarih];
if (strlen($cek['makale']) > 100) {
$makale = substr($cek['makale'], 0, 100)."...";
} else {
$makale = $cek[makale];
}
if (strlen($cek['konu']) > 30) {
$konu = substr($cek['konu'], 0, 30)."...";
} else {
$konu = $cek[konu];
}
if ($k == "1") {
echo '<tr>';
}
if ($makale_ara == $ara) {
echo "<TD width=9>  </TD><TD vAlign=top width=397>
                                <TABLE style='BORDER-COLLAPSE: collapse' 
                                cellPadding=0 width=272 border=0>
                                <TBODY>
                                <TR>
                                <TD width=60 height=60><A 
                                href='makale.php?id=$cek[id]'>
								<IMG 
                                height=60 src='$cek[resim]' width=60 
                                border=0></A></TD>
                                <TD width=10> </TD>
                                <TD vAlign=top width=202>
                                <TABLE style='BORDER-COLLAPSE: collapse' 
                                cellPadding=0 width='100%' border=0>
                                <TBODY>
                                <TR>
                                <TD vAlign=top height=17><B><A class=title2 
                                href='makale.php?id=$cek[id]'>$konu</A></B></TD></TR>
                                <TR>
                                <TD bgColor=#ecceec><IMG height=1 
                                src='images/1px.gif' width=1 
                                border=0></TD></TR>
                                <TR>
                                <TD height=5></TD></TR>
                                <TR>
                                <TD><A class=txt 
                                href='makale.php?id=$cek[id]'>$makale <br><A class=title2 
                                href='makale.php?id=$cek[id]'><font face='Arial' style='font-size: 8pt; font-weight:700' color='#FF1694'>Devamı...</font></A></A></TD></TR></TBODY></TABLE></TD></TR>
                                <TR>
                                <TD width=60> </TD>
                                <TD width=10> </TD>
                                <TD 
                                width=202>
								</TD></TR></TBODY></TABLE></TD>";
}
if ($k == "0") {
echo '</tr>';
}
$i++;
}
?>


tüm kod bu yardım ederseniz seivinirim teşekkürler
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
bir arkadaş yardım ederse sevinirim teşekkürler
 

desoLate

0
Onaylı Üye
Üye
Katılım
14 Haziran 2006
Mesajlar
220
Açılan Konu
23
Tepki puanı
0
Lord, söyleyeceklerimi yanlış anlama ama neden biraz kodların dilinden anlamaya çalışmıyorsun?

Php ile arama bölümü yapmak istiyorsun elinde örnek bir kod var, biraz hatalı olsa da temel olarak bir kısmı doğru sayılır.

Arama sayfası için gerekli olan nedir? form aracılığıyla post metoduyla alınacak bilgi ve gelen bilgiyle veritabanında uygun kayıtları bulmak.
Arama sayfasına post metoduyla gelen veriyi almak için $_POST['inputadi']; kullanılır. Temel olarak güvenliği sağlamak için alinan değer sql sorgusuna girmeden önce htmlspecialchars fonksiyonundan geçirilir. Sonra elindeki kodda bulunduğu şekilde sql sorgusu çalıştırılır.
PHP:
$sorgu = mysql_query("SELECT * FROM makale WHERE makale LIKE '%$ara%'");
//Türkçesi : makale tablosunda, makale sutununda $ara verisi geçen tüm satırları çek.

Sonrasında döngüyle sql sorgusundan gelen veriler listelenir ve o listelemedeki kodlar şunları söyler.
PHP:
while ($cek = mysql_fetch_array($sorgu)) {
//Döngüyü başlat

$ara = $_POST['ara'];
//Formdan gelen veriyi $ara değişkenine ata. Ama bunun yeri döngü içerisinde değil. sql sorgusunun üstüdür. Çünkü sql sorgusunda değişken kullanılmıştır. Burdaki yeri hatalıdır.

$leng = strlen($ara);
//strlen fonksiyonu ile $ara değişkeninin karakter sayısına öğren.
//http://tr2.php.net/strlen

$ara= strtolower( $ara);
//$ara değişkenindeki tüm harfleri küçült.
//http://tr2.php.net/strtolower

$makaleara = $cek[makale];
//tabloda makale sütununu çek.

$makaleara = strtolower( $makaleara );
//makale sütunundan çekilen değer $makaleara değişkenine atanmış. Üst satırlarda strtolower fonksiyonun Türkçesi açıklanmıştı.

$makale_ara = substr( $makaleara ,0, $leng );
//$makaleara değişkeninde olan veriyi, baştan başlayarak $ara değişkenin karakter sayısı miktarındaki kısmını kes. 
//http://tr2.php.net/substr

$k = $i % 2;
$id = $cek[id];
$konu = $cek[konu];
$makale = $cek[makale];
$tarih = $cek[tarih];
//tablodaki sütunlar çekilip değişkenlere aktaralıyor.

if (strlen($cek['makale']) > 100) {
$makale = substr($cek['makale'], 0, 100)."...";
} 
//Eğer makale sütunundaki değer 100 karakterden büyükse baştan başlayarak 100 karakterini kesip sonuna 3 nokta ekle.
else {
$makale = $cek[makale];
}
//Eğer 100 karakterden büyük değilse, aynı şekilde bırak.

if (strlen($cek['konu']) > 30) {
$konu = substr($cek['konu'], 0, 30)."...";
} else {
$konu = $cek[konu];
} 

echo $konu;

}

Yukardaki kodların Türkçesi basit olarak böyledir. Eğer PHP ile çalışıp, web siteleri yapmak istiyorsak sürekli başka scriptleri kurup çalıştırmak veya çalışmadıklarında sürekli kopyala/yapıştır yapmayı beklersek daha çok bekleriz.

Aslında günümüzde web tamamiyle ticari ortama döndü. Çoğu kişi programlamayı öğrenmek, kendine birşeyler yapmak veya kendini geliştirmek istemez. Sadece free veya marez scriptlerle veya kopyala/yapıştır metoduyla kısacası nasıl olursa olsun web site sahibi olmak ister. Bu web sitesini de bir an önce pazarlayıp, yükseğe çıkıp, köşeyi dönmek ister. Ama eğer gerçekten PHP ile web sitesi yapıyorum veya yapmak istiyorum diyorsak biraz hazır beklemekten vazgeçip, araştırma, deneme-yanılma yollarına başvurmalıyız. Örnek kodları, scriptleri inceleyip, php.net'i ziyaret ederek kodların dilinden birazcık da olsa anlamaya gayret etmeliyiz.

Bu söylediklerim kesinlikle Lord'a yönelik değildir. Geneli kapsamaktadır ve daha iyi yerlere gelebilmek için nacizane fikirlerimdir.
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
kodların dilinden anlamadığımı nerden çıkardın verdiğim kodları satırı satırına ben yazdım.

Yukardaki kodların Türkçesi basit olarak böyledir. Eğer PHP ile çalışıp, web siteleri yapmak istiyorsak sürekli başka scriptleri kurup çalıştırmak veya çalışmadıklarında sürekli kopyala/yapıştır yapmayı beklersek daha çok bekleriz

kopyala yapıştır ile sadece arama mantığını yapmaya çalıştım sonuç almadı. burdan bir yardım istemekteyim. zaten yardım edecek arkadaş kodu yazsa nasıl çalıştığını mantığını kavramaktayım sadece arama işini yapacak kod buldum oke gerisi sorun değil demiyorum kodları tek tek inceliyorum. öğrenmek için forum forum gezip onlarca makale okuyorum.

genel bir şey yazacaksan lütfen başka yerde yaz her ne kadar lord'a yönelik değil desende benim konum altında benim adımın içerdiği bir mesajı kendime algılarım. lütfen uzatmaya gerek yok konu altına yazma yardım edebilecek arkadaşlar yardım ederse sevinirim. etmeyenin canı sağolsun yardımlaşmak ve paylaşmak için burdayız teşekkürler
 

desoLate

0
Onaylı Üye
Üye
Katılım
14 Haziran 2006
Mesajlar
220
Açılan Konu
23
Tepki puanı
0
Ben düşünüp de foruma yazdığım için hatalıyım. Özür dilerim. Siz iyisini bilmektesiniz, satır satır yukardaki kodu yazmışsınızdır. Helal olsundur, kolay gelsindir, başarılardır..
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
hocam hatalı olduğunu söyleyen yok özür dilencek bir şey de yok iyisini bildiğimi de söylemedim. ama burda azarlar kodlama dilinden neden anlamıyorsun demenize sinirlendim. yukarda açıklamışsınız neyin ne olduğunu kodlarla teşekkürler ama hepsini biliyorum.neyse uzatmaya gerek yok bir arkadaş yardım ederse sevinirim teşekkürler
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
sorun çözülmüştür

not: localhosttan kaynaklanan bir sorun olsa gerek hostuma attım kodları düzenledim çalıştı ilgi gösteren herkese teşekkürler
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
merhaba arkadaşlar öncelikle hayırlı bayramlar bir şey arama hakkında ufak bir soru soracağım.

kişi açılır kutudan bir seçenek seçerek ona göre arama yapıyor farz edelim. aynı seçenekte hepsinde ara olacak

farz edelim şehirlere göre arıyor açılır kutuda

Konya
Hatay
İstanbul

var aynı zamanda Hepsi seçeneği var hepsinde aramasını nasıl yapabilirim ? yardım ederseniz sevinirim.
 

yagmayok

1
Onaylı Üye
Üye
Katılım
25 Ocak 2005
Mesajlar
7,131
Açılan Konu
304
Tepki puanı
86
merhaba arkadaşlar öncelikle hayırlı bayramlar bir şey arama hakkında ufak bir soru soracağım.

kişi açılır kutudan bir seçenek seçerek ona göre arama yapıyor farz edelim. aynı seçenekte hepsinde ara olacak

farz edelim şehirlere göre arıyor açılır kutuda

Konya
Hatay
İstanbul

var aynı zamanda Hepsi seçeneği var hepsinde aramasını nasıl yapabilirim ? yardım ederseniz sevinirim.

hepsi seçeneği value="" şeklinde yani boş olarak kodlarsanız tümünde arayacağını düşünüyorum...
 

Angelo

0
Onaylı Üye
Üye
Katılım
13 Aralık 2004
Mesajlar
9,603
Açılan Konu
164
Tepki puanı
106
Konum
AZ
MySQL'de wildcard %.
 

...::LorD::...

0
Onaylı Üye
Üye
Katılım
27 Aralık 2007
Mesajlar
2,109
Açılan Konu
124
Tepki puanı
2
Konum
cHeteM
valu="" boş bırakırsam aramaz diye düşünüyorum denemedim

Angelo value olarak value="wildcard" mı yapayım
 

yagmayok

1
Onaylı Üye
Üye
Katılım
25 Ocak 2005
Mesajlar
7,131
Açılan Konu
304
Tepki puanı
86
valu="" boş bırakırsam aramaz diye düşünüyorum denemedim

Angelo value olarak value="wildcard" mı yapayım

Eğer value=" " yaparsanız sonuç vermeyebilir ama "" şeklinde yani değersiz girerseniz hepsini var kabul edecektir...
En azından ben bu tarz seçimler gerektiği zaman value="" (hepsi) şeklinde kullanıyorum ve şuana kadar bir sorun ile karşılaşmadım.
 
Üst