PDA

View Full Version : آموزش: آموزش و سوال: جستجو در دیتابیس به صورت ajax live search



hamidhassas
دوشنبه 26 اسفند 1392, 19:09 عصر
دراینجا یک تکنیک برای جستجوی سریع در دیتابیس قرار میدم کاربرد این تکنیک بیشتر زمانی است که شما بخواهید مثلا با وارد کردن اسم یک شخص در همون لحظه کل اسامی که با نام وارد شده در تکس باکس است لیست بشه مشکل این تکنیک اینه که با فارسی مشکل دارد و مقادیر انگلیسی را لیست میکنه اگه کسی میتونه کمک کنه تا با فارسی هم مشکلش حل بشه

کد صفحه index.html



<!DOCTYPE html>
<html>
<head>
<title>مثال کاربرد Ajax در PHP</title>
<script type="text/javascript">
function showHint(str) {
var xmlhttp;
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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="text-align: right; direction: rtl">
<h3>
کاراکتری را در جدول زیر وارد نمایید ( به زبان انگلیسی ) :</h3>
<form action="">
نام :
<input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>
پیشنهادات : <span id="txtHint"></span>
</p>
</body>

کد صفحه search.php


<?php
require_once("../../../include/membersite_config.php");
software_connection($username,$password,$software_ database);
mysql_query('SET NAMES \'utf8\'');
$sql=mysql_query('select * from `product_services` where `name_family` LIKE %'.$q.'% ORDER BY `product_id` DESC');
// لیست نام های مثال
while($row = mysql_fetch_array($sql))
{
$a[]=$row['name_family'];
}
// از صفحه مبدا q دریافت پارامتر
$q = $_GET["q"];

// جستجو برای نام مورد نظر در صورت وارد کردن مقداری از سوی کاربر
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];
}
}
}
}
// اگر نتیجه ای پیدا نشد ، عبارت بدون نتیجه تعیین شود
// یا اینکه جواب خروجی ارسال شود
if ($hint == "")
{
$response="موجود نیست";
}
else
{
$response=$hint;
}
// ارسال نتیجه خروجی به صفحه مبدا - دستور ایجکس
echo $response;
?>

فرزند کوروش
دوشنبه 26 اسفند 1392, 19:15 عصر
فک نمیکنم تو فارسی مشکلی داشته باشه، ضمن ایینکه برای این کارا بهتره از جیکوئری استفاده کنی

hamidhassas
دوشنبه 26 اسفند 1392, 19:19 عصر
فک نمیکنم تو فارسی مشکلی داشته باشه، ضمن ایینکه برای این کارا بهتره از جیکوئری استفاده کنی
من رو سیستم چک کردم وقتی فارسی تایپ میکنم عمل نمیکنه ولی با انگلیسی عمل میکنه و هیچ مشکلی نداره

خو اگر لطف کنید با جیکوئری آموزش بدین ممنون میشم

white tower
دوشنبه 26 اسفند 1392, 23:31 عصر
این برنامه چطوری کار می کنه اصن?!
پارامتر ارسالی رو قبل از اینکه با متد GET بگیری تو کوئری استفاده کردی ازش.
کوئری اگر نتیجه ای نداشت نباید fetch بشه شما اول fetch کردی بعد رشته ای که وجود نداره رو اندازه اش رو بررسی کردی؟
توی کد جاوا اسکریپت هم به نظرم بهتره با هر keyup مقدار رو ارسال نکنی.من با یه تاخیر بین نیم تا یک ثانیه مقدار رو ارسال می کنم.اینطوری میشه بذاری به حساب اینکه کاربر ورودی ش رو وارد کرده و تموم شده.اینطوری بار سرور کمنر میشه.
با فارسی هم مشکل نداره.