نمایش نتایج 1 تا 10 از 10

نام تاپیک: اشکال این کد رو می‌شه بگید!؟

  1. #1

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

    سلام؛

    من با 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());
    }


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

  2. #2
    سلام. قبل از خط زیر :
     $result = mysql_query ($sqlstring, $db);

    این خط :
    echo $sqlstring; 

    رو اضافه کن تا ببینیم query ایت چیه؟ از روی اون که راحتتر میشه رفع اشکال کرد.

  3. #3
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    بهتر هست که کدهای مربوط به WHERE رو داخل یک پرانتز قرار دهید .

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


    یا حق ...

  4. #4
    سلام؛

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

    ببینید، کدهای 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

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

  5. #5

    SELECT * FROM `linkestan` WHERE ( `title` LIKE '%test%' or `comment` LIKE '%test%')

  6. #6
    تقریبا فهمیدم مشکل از کجاست!

    ببینید، وقتی متغیر $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 و اون عبارت داخل فیلد رو اضافه کنیم؟

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

  7. #7
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    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.= " )";


    یا حق ...

  8. #8
    سلام؛
    حمید جان،
    متوجه منظورم نشدی، من می‌دونم چطوری این‌ها رو بچینم کنار هم، اما مشکل از جای دیگه‌ست که من فهمیدم!

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

    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 باشه، این می‌تونه حذف کنه یا باید کد دیگه‌ای رو جایگزین کنم؟!

  9. #9
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    این نکته رو در پست قبلی نیز رعایت شده بود اما دقت نکردید .. باید or یا and رو در ابتدای رشته استفاده کنید ، مشکل حل خواهد شد.

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


    یا حق ...

  10. #10
    واااای شرمنده حمید جان!
    اصلا فکرم به این جا نرسیده بود!
    باور کن از روی یکی از آموزش‌ها این کار رو انجام داده بدم، عقل اونا به اینجا نرسیده بود که اصلا نیازی به اون کدها برای حذف or و ... نیست!

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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •