PDA

View Full Version : سوال: جستجوی پیشرفته (لطفا کمک کنید)



baran.f.a
پنج شنبه 25 دی 1393, 19:47 عصر
سلام من یک فرم جستجوی پیشرفته طراحی کردم که کاربر هم می تونه تمام فیلد های این فرم را پر کند و یا فقط قسمت های خاصی را تکمیل کند . اما دچار یه مشکل شدم خطایی میده که من چیزی ازش سر در نمیارم لطفا کمک کنید . آیا کد من اشتباهه ؟


if($_SERVER["REQUEST_METHOD"] == "POST"){



$psp = $_POST['psp_project'];
$project = $_POST['project'];
$branch = $_POST['branch'];
$city = $_POST['city'];
$technician = $_POST['technician'];
$from_date = $_POST['from_date'];
$until_date = $_POST['until_date'];
$from_amount = $_POST['from_amount'];
$until_amount = $_POST['until_amount'];
$from_number = $_POST['from_number'];
$until_number = $_POST['until_number'];

$arr = array();
if (!empty($psp))
{
$sql=mysql_query("select *
from psp
where psp_name
LIKE '%$psp%'") or die(mysql_error());
$count=mysql_num_rows($sql);
while($rows=mysql_fetch_array($sql)){
$psp_project=$rows['psp_project'];
$search=mysql_query("select *
from psp
where psp_project='$psp_project'") or die(mysql_error());
$count=mysql_num_rows($search);
while($rows=mysql_fetch_array($search)){
$arr['psp'] =$rows['id'];
}
}
}
if (!empty($project))
{
$sql=mysql_query("select psp.psp_name
from (select *
from psp
where psp_project
LIKE '%$psp%') t3 , psp
where t3.psp_project=psp.id
") or die(mysql_error());
$count=mysql_num_rows($search);
while($rows=mysql_fetch_array($search)){
$arr['project'] = $rows['psp_name'];
}
}
if (!empty($city))
{
$arr['city'] = " merchant.branch_name LIKE '%$city%' ";
}
if (!empty($technician))
{
$arr['tech'] = " pos.technician_id = '$technician' ";
}
if (!empty($from_date))
{
$miladi=date("Y/m/d ", strtotime($from_date));
$arr['fd'] = " transaction.update_date > '$miladi' ";
}
if (!empty($until_date))
{
$miladi=date("Y/m/d ", strtotime($until_date));
$arr['ud'] = " transaction.update_date < '$miladi' ";
}
if (!empty($from_amount))
{
$arr['fa'] = " transaction.amount_trans > '$from_amount' ";
}
if (!empty($until_amount))
{
$arr['ua'] = " transaction.amount_trans < '$until_amount' ";
}
if (!empty($until_number))
{
$arr['un'] = " transaction.total_trans = '$until_number' ";
}
if (!empty($from_number))
{
$arr['fn'] = " transaction.total_trans = '$from_number' ";
}



$where = 'WHERE' . implode('AND', $arr);
$query = 'SELECT pos.* , sum(transaction.amount_trans) as `amount_trans` , sum(transaction.total_trans) as `total_trans`,sum(transaction.buy_amount) as `buy_amount` ,sum(transaction.buy_trans) AS `buy_trans`
FROM pos
INNER JOIN merchant
on merchant.m_id=pos.merchant_id
INNER JOIN transaction
on transaction.serial_code=pos.serial_code
INNER JOIN psp
on psp.id=pos.psp_id
' . $where ;

$result = mysql_query($query) or die (mysql_error());
$anymatches=mysql_num_rows($query);
if ($anymatches == 0)
{
echo "Sorry, but we can not find an entry to match your query<br><br>";
}


}



خطایی که دارنو در تصویر می بینید . لطفا هر کس می تونه راهنمایی کنه . ممنون
127581

rezakho
پنج شنبه 25 دی 1393, 22:22 عصر
اشکال از کوئری هست که داره اجرا میشه، قبل از اجرای کوئری، خط 97، کوئری رو چاپ کنید و به صورت دستی ببرید توی phpmyadmin ببینید کجاش مشکل داره

baran.f.a
جمعه 26 دی 1393, 11:02 صبح
اشکال از کوئری هست که داره اجرا میشه، قبل از اجرای کوئری، خط 97، کوئری رو چاپ کنید و به صورت دستی ببرید توی phpmyadmin ببینید کجاش مشکل داره

سلام ممنون از پاسختون این کارو کردم از خط زیر خطا گرفت:


$where = 'WHERE' . implode('AND', $arr);


من کد را به حالت زیر تغییر دادم :



$query = "SELECT pos.* , sum(transaction.amount_trans) as `amount_trans` , sum(transaction.total_trans) as `total_trans`,
sum(transaction.buy_amount) as `buy_amount` ,sum(transaction.buy_trans) AS `buy_trans`
FROM pos
INNER JOIN merchant
on merchant.m_id=pos.merchant_id
INNER JOIN transaction
on transaction.serial_code=pos.serial_code
INNER JOIN psp
on psp.id=pos.psp_id
where ('".implode("'AND'",$arr)."')
group by pos.serial_code ";


ولی دوباره خطای زیر را می دهد تو نت زیاد گشتم ولی روش هایی که گفته بود جواب نداد .

127595

می خواستم بدونم کسی هست که منبعی برای طراحی جستجوی پیشرفته را بشناسه ؟ لطفا اگر می شناسین معرفی کنید .

rezakho
جمعه 26 دی 1393, 14:18 عصر
توی پست بالا، خط 10 رو ببینید، where اشتباهه!
بهترین کار اینه که کوئریتون رو اول دستی ببرید توی phpmyadmin بنویسید، اجرا کنید و اگر نتیجه گرفتید بعد ببرید توی Php پیاده اش کنید

baran.f.a
جمعه 26 دی 1393, 21:18 عصر
توی پست بالا، خط 10 رو ببینید، where اشتباهه!
بهترین کار اینه که کوئریتون رو اول دستی ببرید توی phpmyadmin بنویسید، اجرا کنید و اگر نتیجه گرفتید بعد ببرید توی Php پیاده اش کنید

من متوجه شدم که کدام قسمت از کوئری خطا داره ببینید من کد ساده تری از مانند این کوئری را در قسمت دیگه اجرا کردم و اونجا جواب داد مشکل این کد این هست که من می خوام از بین چند جدول داده های خودم را انتخاب کنم مشکل در این کد هاست .


if (!empty($psp))
{
$sql=mysql_query("select *
from psp
where psp_name
LIKE '%$psp%' ") or die(mysql_error());
$count=mysql_num_rows($sql);
while($rows=mysql_fetch_array($sql)){
$psp_project=$rows['psp_project'];
$search=mysql_query("select *
from psp
where psp_project='$psp_project' ") or die(mysql_error());
$count=mysql_num_rows($search);
while($rows=mysql_fetch_array($search)){
$psp = $rows['id'];

}
}
$arr['psp'] = " psp.psp";
}
if (!empty($project))
{
$sql=mysql_query("select psp.psp_name
from (select *
from psp
where psp_project
LIKE '%$psp%') t3 , psp
where t3.psp_project=psp.id
") or die(mysql_error());
$count=mysql_num_rows($sql);
while($rows=mysql_fetch_array($sql)){
$arr['project'] = $rows['psp_name'];
}
}


نمی دونم چطور باید نتیجه ی این subquery را در آرایه بریزم ؟؟؟ مشکل هم دقیقا اینجاست .
کدی که جواب داده را براتون می زارم .



if(isset($_POST['search'])){
require_once 'connect.php';
connecttodb();
mysql_query('SET NAMES utf8');

$name = mysql_real_escape_string($_POST['merch_name']);
$family = mysql_real_escape_string ($_POST['merch_family']);
$merch_id = mysql_real_escape_string ($_POST['merch_id']);
$code = mysql_real_escape_string($_POST['code']);
$business = mysql_real_escape_string($_POST['business_name']);
$guild = mysql_real_escape_string($_POST['guild']);
$additional = mysql_real_escape_string($_POST['additional']);
$city = mysql_real_escape_string($_POST['city']);
$bank = mysql_real_escape_string($_POST['bank']);
$owner = mysql_real_escape_string($_POST['owner']);
$account = mysql_real_escape_string($_POST['account']);

$arr = array();
if (!empty($name))
{
$arr['name'] = " manager_name LIKE '%$name%' ";
}
if (!empty($family))
{
$arr['family'] = " manager_family LIKE '%$family%' ";
}
if (!empty($merch_id))
{
$arr['merch_id'] = " m_id = '$merch_id' ";
}
if (!empty($code))
{
$arr['code'] = " natinality_code = '$code' ";
}
if (!empty($business))
{
$arr['business'] = " business_name LIKE '%$business%' ";
}
if (!empty($guild))
{
$arr['guild'] = " guild LIKE '$guild' ";
}
if (!empty($additional))
{
$arr['additional'] = " additional_class LIKE '$additional' ";
}
if (!empty($city))
{
$arr['city'] = " city LIKE '$city' ";
}




if (!empty($owner))
{
$arr['owner'] = " account_owner LIKE '$owner' ";
}
if (!empty($account))
{
$arr['account'] = " account_number = '$account'";
}



$where = 'WHERE' . implode('AND', $arr);




$query = "SELECT * FROM merchant ";
$query .= " WHERE " . implode(" AND ", $arr);


$result = mysql_query($query) or die (mysql_error());


مشکل اینه که چطور باید در آرایه یک کوئری بنویسم.

baran.f.a
شنبه 27 دی 1393, 11:20 صبح
کسی نمی دونه چطور باید این جستجو را انجام داد .:ناراحت::افسرده: