PDA

View Full Version : اشکال این کد رو می‌شه بگید!؟



Aftabgardan-cc
سه شنبه 04 مهر 1385, 14:36 عصر
سلام؛

من با EasyPHP بخش جستجو بین لینک‌های لینکستانم رو ساختم، روی لوکال درست کار می‌کرد اما وقتی آپلود کردم، می‌گه:


Could not query:You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near '' at line 1


من اینطور که فهمیدم، یکی از اشکالات این بود که در رژن‌های جدید MySQL مثلا در اطراف اسم تیبل باید علامت ` رو می‌ذاشتم که الان گذاشتم، ولی باز هم خطا می‌گیره!

در حال حاضر کدهایی که در بخش جستجو مربوط به دیتابیس به کار بردم ایناست:



$sqlstring = "SELECT * FROM `linkestan`";
if ($acc_title!="" or $acc_url!="" or $acc_comment!="")
$sqlstring.= " WHERE";
if ($acc_title!="")
$sqlstring.= " `title` LIKE `%$acc_title%` or";
if ($acc_url!="")
$sqlstring.= " `url` LIKE `%$acc_url%` or";
if ($acc_comment!="")
$sqlstring.=" `comment` LIKE `%$acc_comment%` or";

if ($sqlstring[strlen($sqlstring)-1] =='r'){
$sqlstring[strlen($sqlstring)-1]="";
$sqlstring[strlen($sqlstring)-2]="";
}

$result = mysql_query ($sqlstring, $db);
if (!$result){
die ('Could not query:'.mysql_error());
}


ممنون می‌شم مشکلش رو بگید...

Farshad Paydar
چهارشنبه 05 مهر 1385, 07:48 صبح
سلام. قبل از خط زیر :
$result = mysql_query ($sqlstring, $db);
این خط :
echo $sqlstring;
رو اضافه کن تا ببینیم query ایت چیه؟ از روی اون که راحتتر میشه رفع اشکال کرد.

Hamid_PaK
چهارشنبه 05 مهر 1385, 11:19 صبح
بهتر هست که کدهای مربوط به WHERE رو داخل یک پرانتز قرار دهید .


SELECT * FROM x WHERE ( me = j or ... )


یا حق ...

Aftabgardan-cc
چهارشنبه 05 مهر 1385, 15:19 عصر
سلام؛

ممنون از دوستان،
من راهی که گفتید رو امتحان کرم، فایده نداشت!

ببینید، کدهای PHP بخش جستجو اینها هستن:


<?php
if (isset ($_REQUEST["acc_title"])){
include ("config.php");
$sqlstring = "SELECT * FROM `linkestan`";
if ($acc_title!="" or $acc_url!="" or $acc_comment!="")
$sqlstring.= " WHERE (";
if ($acc_title!="")
$sqlstring.= " `title` LIKE `%$acc_title%` or";
if ($acc_url!="")
$sqlstring.= " `url` LIKE `%$acc_url%` or";
if ($acc_comment!="")
$sqlstring.=" `comment` LIKE `%$acc_comment%` or";

if ($sqlstring[strlen($sqlstring)-1] =='r'){
$sqlstring[strlen($sqlstring)-1]="";
$sqlstring[strlen($sqlstring)-2]="";
}
if ($acc_title!="" or $acc_url!="" or $acc_comment!="")
$sqlstring.=" )";
echo ("$sqlstring<br><br>");
$result = mysql_query ($sqlstring, $db);
if (!$result){
die ('Could not query:'.mysql_error());
}
if (!$rec=mysql_fetch_row($result)){
die ('<p align="center"><font face="Tahoma" style="font-size: 9pt" color="#FF0000">
<span lang="fa">هیچ لینکی با این مشخصات، یافت نشد!</span></font></p>');
}
echo ("<div align=\"center\"><table border=\"1\" style=\"border-collapse: collapse\" width=\"60%\" height=\"89\"

bordercolor=\"#FFFFFF\" bordercolorlight=\"#3366CC\" bordercolordark=\"#3366CC\" dir=\"rtl\"> <tr>");
echo ("<td align=\"right\" bgcolor=\"#F1F3F8\"><font face=\"Tahoma\" style=\"font-size: 6pt\"></font></td>");
echo ("<td align=\"right\" width=\"970%\"><font face=\"Tahoma\" style=\"font-size: 7pt\"><b>لینک‌ها</b></font></td>");
echo ("</tr><tr>");
do {

echo ("<td align=\"right\" bgcolor=\"#F1F3F8\"><img src=\"img/fe.gif\"></td>");
echo ("<td align=\"right\" ><font face=\"Tahoma\" style=\"font-size: 9pt\"> <a target=\"_blank\" title=\"".$rec[3]."\" href=\"

http://linkestan.aftabgardan-cc.com/showlink.php?linkid=".$rec[0]."\">".$rec[1]."</a></font></td>");

echo ("</tr><tr>");


} while ($rec=mysql_fetch_row($result));
echo (" </tr></table></div>");
}

?>


و آدرس این صفحه جستجو هم اینجا:
http://linkestan.aftabgardan-cc.com/searchlink.php

اگه ممکنه امتحان کنید و ببینید مشکل چی می‌تونه باشه! :(

hamed_m
چهارشنبه 05 مهر 1385, 18:32 عصر
SELECT * FROM `linkestan` WHERE ( `title` LIKE '%test%' or `comment` LIKE '%test%')

Aftabgardan-cc
پنج شنبه 06 مهر 1385, 01:12 صبح
تقریبا فهمیدم مشکل از کجاست!

ببینید، وقتی متغیر $sqlstring رو اینطور تعریف می‌کنم:


$sqlstring = "SELECT * FROM `linkestan` WHERE `title` LIKE '%$acc_title%'";


و باقی کدها، یعنی اینها رو:


if ($acc_title!="" or $acc_url!="" or $acc_comment!="")
$sqlstring.= " WHERE (";
if ($acc_title!="")
$sqlstring.= " `title` LIKE `%$acc_title%` or";
if ($acc_url!="")
$sqlstring.= " `url` LIKE `%$acc_url%` or";
if ($acc_comment!="")
$sqlstring.=" `comment` LIKE `%$acc_comment%` or";

if ($sqlstring[strlen($sqlstring)-1] =='r'){
$sqlstring[strlen($sqlstring)-1]="";
$sqlstring[strlen($sqlstring)-2]="";
}
if ($acc_title!="" or $acc_url!="" or $acc_comment!="")
$sqlstring.=" )";
echo ("$sqlstring<br><br>");

حذف می‌کنم، کاملا درسته!
یعنی اگه ما بخواهیم فقط یک فیلد داشته باشیم، مشکلی نبیت، می‌شه یه کاریش کرد!
اما من می‌خوام سه تا فیلد رو چک کنه، هر کدوم که پر بود، به آخر $salstring اضافه کنه!

من فکر می‌کنم ما اینجا رو مشکل داریم:


$sqlstring.=


به نظرتون اینجا مشکلی هست؟
راه دیگه‌ای هست که همه فیلدهای جستجو رو چک کنیم، ببینیم کدوم پر شده، بعد به آخر اون متغیر LIKE و اون عبارت داخل فیلد رو اضافه کنیم؟

ممنون و شرمنده از اینکه این بخش، اعصاب من و شما رو خرد کرد :(

Hamid_PaK
پنج شنبه 06 مهر 1385, 05:40 صبح
if ($acc_title!="")
$sqlstring.= " `title` LIKE `%$acc_title%` or";
باشه فرقی نمی کنه ولی باقی کدها رو در همون WHERE ابتدایی باید اضافه کنید !!!


$sqlstring = "SELECT * FROM `linkestan` WHERE (`title` LIKE '%$acc_title%'";
if ($acc_title!="")
$sqlstring.= " AND `title` LIKE `%$acc_title%`";
if ($acc_title!="")
$sqlstring.= " AND `title` LIKE `%$acc_title%`";
$sqlstring.= " )";


یا حق ...

Aftabgardan-cc
پنج شنبه 06 مهر 1385, 12:13 عصر
سلام؛
حمید جان،
متوجه منظورم نشدی، من می‌دونم چطوری این‌ها رو بچینم کنار هم، اما مشکل از جای دیگه‌ست که من فهمیدم!

ببینید، مشکل دقیقا از اینجاست:


if ($sqlstring[strlen($sqlstring)-1] =='r'){
$sqlstring[strlen($sqlstring)-1]="";
$sqlstring[strlen($sqlstring)-2]="";
}

این بخش نمی‌تونه or اضافه در آخر $sqlstring رو حذف کنه!

فرض کنید من در فیلد اول، کلمه "ضد" رو وارد کنم و فیلدهای بعدی خالی باشه، در این حالت $sqlstring اینجوری می‌شه:


$sqlstring = "SELECT * FROM `linkestan` WHERE (`title` LIKE '%$acc_title%' or";

من طبق آموزشی که دارم، با استفاده از اون کدهای بالا، می‌تونم or رو از آخر این رشته حذف کنم، اما انگار این قضیه در اینجا صورت نمی‌گیره، در حالی که در لوکال هیچ مشکلی نداره!

شما اون کدی که اول همین پست دادم رو چک کنید، ببینید درسته، اگه آخر sqlstring، کلمه or باشه، این می‌تونه حذف کنه یا باید کد دیگه‌ای رو جایگزین کنم؟!

Hamid_PaK
پنج شنبه 06 مهر 1385, 13:58 عصر
این نکته رو در پست قبلی نیز رعایت شده بود اما دقت نکردید .. باید or یا and رو در ابتدای رشته استفاده کنید ، مشکل حل خواهد شد.


$sqlstring = "SELECT * FROM `linkestan` WHERE (`title` LIKE '%$acc_title%' ";
$sqlstring .= "OR `title2` LIKE '%$acc_title2%' ";
$sqlstring .= "OR `title3` LIKE '%$acc_title3%' ";
$sqlstring .= ")";


یا حق ...

Aftabgardan-cc
پنج شنبه 06 مهر 1385, 23:16 عصر
واااای شرمنده حمید جان!
اصلا فکرم به این جا نرسیده بود!
باور کن از روی یکی از آموزش‌ها این کار رو انجام داده بدم، عقل اونا به اینجا نرسیده بود که اصلا نیازی به اون کدها برای حذف or و ... نیست!

واقعا ممنون، مشکل کاملا حل شد:
http://linkestan.aftabgardan-cc.com/searchlink.php