• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
جستجو درون دیتابیس با ajax
#1
Tongue 
سلام . میخوام وقتی اسم شخصی درون textfield تایپ میشه ،تمام اسامی که ابتداشون شبیه اسم تایپ شده در تکست فیلد هست بیان.کدهامو به این صورت نوشتم ، اما کوئری error میده . ممنون میشم راهنمایی کنید:
کدهای آجاکس:
کد:
<script type="text/javascript">
function showHint(str)
{
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","search.php?q="+str,true);
xmlhttp.send();
}
</script>
کدهای html صفحه :
کد:
<p><b>Start typing a name </b></p>
<form>
First name: <input type="text" onkeyup="showHint(this.value)" size="20" />
</form>
<p>result: <span id="txtHint"></span></p>
کدهای search.php
کد پی‌اچ‌پی:
$q=$_GET["q"];

$con mysql_connect('localhost''root''');
if (!
$con)
  {
  die(
'Could not connect: ' mysql_error());
  }
@
mysql_query("SET NAMES 'utf8'");
mysql_select_db("db"$con);

$sql="SELECT * FROM person WHERE Fname like  ' "$q"."%" '   ";

$result mysql_query($sql) ;

while(
$row mysql_fetch_array($result))
{

$a[]=$row['Fname'];

}
//get the q parameter from URL


//lookup all hints from array if length of q>0
if (strlen($q) > 0)
  {
  
$hint="";
  for(
$i=0$i<count($a); $i++)
    {
    if (
strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
      {
      if (
$hint=="")
        {
        
$hint=$a[$i];
        }
      else
        {
        
$hint=$hint." , ".$a[$i];
        }
      }
    }
  }

// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == "")
  {
  
$response="no suggestion";
  }
else
  {
  
$response=$hint;
  }

//output the response
echo $response
با تشکر[/code]
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#2
کوئری شما مشکل داشت، از کوئری زیر استفاده کنید.

کد پی‌اچ‌پی:
$sql='SELECT * FROM `person` WHERE(`Fname` LIKE \'%'.$q.'%\')'

پیشنهاد، میتونید از توابع ایجکس جی کوئری استفاده کنید. کار کردن باهاش راحت تره.

موفق باشید
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : pary_daryayi
#3
اینجارو بخون http://forum.iranphp.org/Thread-SQL-Wildcards
غایب
  پاسخ
تشکر شده توسط : pary_daryayi
#4
نقل قول:اینجارو بخون http://forum.iranphp.org/Thread-SQL-Wildcards
ممنون . با مفهوم این موارد مشکلی نداشتم، موردی که من دنبالش بودم این بود که یک متغیر رو در این کوئری گذاشتم که نتیجه نمیده.
نقل قول:$sql='SELECT * FROM `person` WHERE(`Fname` LIKE \'%'.$q.'%\')';
این هم نتیجه نداد . or die که میگیرم ، معلومه کوئری مشکل داره ...
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#5
چه خطایی میده؟! من کوئری رو تست کردم و اینجا براتون گذاشتم، مشکلی نداشت.
یه بکاپ از دیتابیست بگیر بذار اینجا.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط :
#6
درست شد ... با یه کوچولو دست کاری...
اما یه مورد دیگه : فقط برای کلمات لاتین درج شده در جدول جواب میده ... کلمات فارسی نه ...
راه حل چیه؟
نقل قول:پیشنهاد، میتونید از توابع ایجکس جی کوئری استفاده کنید. کار کردن باهاش راحت تره.
درسته . این رو شنیدم . اما بهتر نیست اول با مفاهیمش آشنا بشم و بعد برم سراغ آجاکس در جی کوئری؟
و اینکه بعضی ها اعتقاد دارند جی کوئری بدلیل کتابخونه ای که داره و حجمش ( نمیدونم چرا اینو میگن چون حجم زیادی نداره ) بهتره برای هر موردی استفاده نشه !!

راستی بانک رو خواستم ارسال کنم ولی اینجا چرا attaach نداره ؟
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#7
نقل قول:اما یه مورد دیگه : فقط برای کلمات لاتین درج شده در جدول جواب میده ... کلمات فارسی نه ...

collation دیتابیستون رو روی UTF8_general_ci قرار دادین؟

نقل قول:درسته . این رو شنیدم . اما بهتر نیست اول با مفاهیمش آشنا بشم و بعد برم سراغ آجاکس در جی کوئری؟

اگر منظورتون از مفاهیم همون مسائل تئوری معماری ایجکس هست، موضوعی خاصی نداره، و بهتره که باهاشون اشنا باشید(فقط در حد اشنایی و دونستن) مثل XML,DOM,XMLHttpRequest و... .

نقل قول:و اینکه بعضی ها اعتقاد دارند جی کوئری بدلیل کتابخونه ای که داره و حجمش ( نمیدونم چرا اینو میگن چون حجم زیادی نداره ) بهتره برای هر موردی استفاده نشه !!

تقریبا 100 کیلوبایت موضوع زیاد مهمی نیست، از طرفی اگر قرار باشه یک صفحه ایجکس بشه و تمام اعمال فقط در همون صفحه انجام شه چه اشکالی داره در ابتدای کار و فقط یک بار این فایل شامل صفحه بشه؟ علاوه بر اون، با وجود جی کوئری میتونی از امکانات دیگرش هم استفاده کنی.

نقل قول:راستی بانک رو خواستم ارسال کنم ولی اینجا چرا attaach نداره ؟

روی دکمه ارسال پاسخ کلیک کن تا به اون صفحه هدایت شی، اونجا این بخش وجود داره(توی قسمت پاسخ سریع نیست)
یا توی تگ کد قرارش بده.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : pary_daryayi
#8
وای ... خیلی خیلی ممنونم آقا احسان .درست شد .. اصلا باورم نمیشه ....فکر میکردم آجاکس خیلی سخت و ترسناکه.
راستی من همیشه روی utf8_unicode_ci تنظیم میکردم و برای جستجو های ساده جواب میداد . یعنی علت همین بود؟
و یک مورد دیگه : کوئری که شما نوشتید باعث میشه وقتی بعنوان مثال حرف "ر" رو وارد کردم تمام اسامی که دارای حرف "ر" هستند بیان . نه الزاما اونهایی که با "ر" شروع میشن.
٪ رو از ابتداش برمیدارم جواب نمیده . ممنون میشم اینو بهم بگین

اینطور نوشتم درست شد . استاندارده؟
کد:
$sql='SELECT * FROM `person` WHERE(`Fname` LIKE  \''.$q.'%\' )';
آرام باش ؛ توكل كن ؛ تفكر كن و سپس آستينها را بالا بزن , آنگاه دستان خداوند را خواهي ديد كه زودتر از تو دست به كار شده است.امام علي عليه السلام.
  پاسخ
تشکر شده توسط :
#9
نقل قول:اینطور نوشتم درست شد . استاندارده؟
بهتره به این تغییر بدی،
کد پی‌اچ‌پی:
$sql="SELECT * FROM `person` WHERE `Fname` LIKE '{$q}%'"
اینطوری تمام ردیف هایی که با مقدار متغیر q آغاز میشه رو بدست میاره.
غایب
  پاسخ
تشکر شده توسط : undefined pary_daryayi
#10
نقل قول:راستی من همیشه روی utf8_unicode_ci تنظیم میکردم و برای جستجو های ساده جواب میداد . یعنی علت همین بود؟

نه، مشکل نمیتونه از utf8_unicode_ci باشه اما بهتره از UTF8_general_ci استفاده کنید.

نقل قول:و یک مورد دیگه : کوئری که شما نوشتید باعث میشه وقتی بعنوان مثال حرف "ر" رو وارد کردم تمام اسامی که دارای حرف "ر" هستند بیان . نه الزاما اونهایی که با "ر" شروع میشن.

بله، من یه نمونه کوئری براتون اماده کردم، برای نوشتن کوئری دلخواهتون میتونید به لینکی که علیرضا معرفی کرد مراجعه کنید.

کوئری جدیدی هم که گذاشتید مشکلی نداره.
هر چیزی که در جستن آنی آنی...
غایب
  پاسخ
تشکر شده توسط : pary_daryayi


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان