راکت

فرم جستجو با php

11 پاسخ

سلام
من یک فرم جستجو با php نوشتم که ارور میده و کار نمیکنه . دلیلش را هم نفهمیدم . میخواستم اگر میشه یک نفر توضیح بده که باید چطور یک فرم جستجو با php بنویسم .
من یک جدول در دیتابیس دارم که همه ی مقالات سایتم داخلش هست و یک ستون به اسم title داره که عنوان هر مقاله داخلش نوشته شده . میخواستم وقتی کاربر یک کلمه را جستجو میکنه یک کوئری ارسال بشه که در جدول دیتابیس هر ردیف که عنوان ردیف با کلمه جستجو شده برابر بود انتخاب بشه و مقدار های آن ردیف مثل عنوان و متن نمایش داده بشه .

@hesammousavi
@ali.bayat
@Rp76
@mhyeganeh

ثبت پرسش جدید

پاسخ‌ها

11
بامداد
بامداد
@bamdad

اینجوری که نمیشه - کداتو بزار اینجا

saman
saman
@saman1111

سلام
خب کد هاتون رو بزارید تا راهنماییتون کنن

شاید پاسخ شما همین‌جا باشد

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

سلام

سوال شما این هست که چطور یک فرم جستجو بنویسید، این نیست که مشکل فرم فعلیتون رو حل کنیم.


خب من نمیدونم چطوری داری به دیتابیس وصل میشی فقط من میتونم برات یک Query بنویسم که توی کد Php ازش استفاده کنی

SQL

select * from articles where title like '%user_input%'

PHP

$user_input=$_GET['seach'];
// inja data ro pass bede be DB
مانی
مانی
@manish

تخصص: طراح سایت و سئوکار

@Rp76

همین رو نوشتم اما دوباره ارور میده . ممکنه مشکل از زمپ باشه؟

سینا خاقانی
سینا خاقانی
@sina.it91

تخصص: توسعه دهنده بک‌اند

@manish
سلام
بهتره برای چنین جستجوهایی از fullTextSearch استفاده کنید

دو لینک زیر رو نگاه کنید متوجه میشید
لینک اول
لینک دوم

رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

پس مشکل رو بفرست با عکس

مانی
مانی
@manish

تخصص: طراح سایت و سئوکار

@Rp76

<?php

    include('include/header.php');

?>

<section class="container">

<div class="alert alert-success col-7">موزیک های پیدا شده در جستجوی <strong> :<?php echo "[" . $_GET['search'] . "]" ?> </strong></div>

<?php
  $connect = mysqli_connect('localhost','root','','*****');
  $sql = "SELECT * FROM musics where title=$_GET[search]";
  $query = mysqli_query($conn,$sql);
  while($row = mysqli_fetch_assoc($query)){
?>
<div class="card" style="width: 20%; margin: 30px 10px;">
        <img src="img/1.jpg" class="card-img-top" alt="...">
        <div class="card-body">
            <h5 class="card-title"><?php echo $row['title'] ?></h5>
          <p class="card-text"><?php echo $row['text'] ?></p>
          <a class="btn btn-warning" href="https://roocket.ir/single.php?id=<?php echo $row['id'] ?>">ادامه مطلب و دانلود</a>
        </div>
      </div>

      <?php } ?>

      <?php

      include('./include/sidebar.php');

    ?>

</section>

<?php

    include('./include/footer.php');

?>

این هم ارور

Fatal error: Uncaught TypeError: mysqli_fetch_assoc(): Argument #1 ($result) must be of type mysqli_result, bool given in E:\xampp\htdocs\site\*****\search.php:17 Stack trace: #0 E:\xampp\htdocs\site\*****\search.php(17): mysqli_fetch_assoc(false) #1 {main} thrown in E:\xampp\htdocs\site\*****\search.php on line 17
رضا پارسیان
رضا پارسیان
@Rp76

تخصص: توسعه دهنده Php , Laravel

سلام من به این متدی که کار میکنی برای اتصال به دیتابیس اشنا نیستم
کد من به این صورت هست :

<?php
function Con()
{
    $host = "localhost";
    $dbname = "Happy_Ant";
    $user = "root";
    $pass = "";
    try {
        $connection = new PDO('mysql:host=' . $host . ';dbname=' . $dbname, $user, $pass);
    } catch (PDOException $e) {
        $connection = $e->getMessage();
    }
    return $connection;
}

برای اتصال به دیتابیس از کد بالا استفاده میکنم و برای گرفتن اطلاعات از کد پایین:

$sql="select * from user where name like '%ر%'";
$ex = Con()->prepare($sql);
$ex->execute();
$result=$ex->fetchAll(2);

که نتیجه کد بالا یک آرایه هست که میتونی با یک حلقه ساده روش کار کنی

foreach($result as $item){
    //inja roye $item har kari dos dari bokon 
}

$result خودش یک ارایه هست و نمیشه با یک echo ساده چاپش کرد.

یه نفر
یه نفر
@یه بنده خدایی

سلام
فکر میکنم کد رو باید اینجور نوشت:

 $sql = "SELECT * FROM musics where title=".$_GET[search];

در صورت قبل $_GET[search] رو به صورت یک کلمه میخونه نه دستور.

مهدی نظری
مهدی نظری
@mahdi.nazari

تخصص: توسعه دهنده Front End

سلام 🖐
امیدوارم حالت خوب و عالی باشی🙏

اشکال توی کد شما در بخش جلب داده‌هات از دیتابیس (database retrieval) و همچنین ترکیب کوئری SQL هستش . به نظر می‌رسه که داری متغیرهای مختلفی را با هم اشتباه می‌گیری که باعث به وجود آمدن ارور شده و قیمه ها رفته تو ماستا

در زیر یک نسخه اصلاح‌شده رو برات میزارم

<?php
include('include/header.php');
?>

<section class="container">

<div class="alert alert-success col-7">موزیک های پیدا شده در جستجوی <strong>:<?php echo "[" . $_GET['search'] . "]" ?></strong></div>

<?php
$connect = mysqli_connect('localhost', 'root', '', '*****');
$searchQuery = mysqli_real_escape_string($connect, $_GET['search']); // جلوگیری از SQL Injection
$sql = "SELECT * FROM musics WHERE title LIKE '%$searchQuery%'";
$query = mysqli_query($connect, $sql);

if (!$query) {
    echo "خطا در اجرای کوئری: " . mysqli_error($connect);
} else {
    while ($row = mysqli_fetch_assoc($query)) {
        ?>
        <div class="card" style="width: 20%; margin: 30px 10px;">
            <img src="img/1.jpg" class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title"><?php echo $row['title'] ?></h5>
                <p class="card-text"><?php echo $row['text'] ?></p>
                <a class="btn btn-warning" href="https://roocket.ir/single.php?id=<?php echo $row['id'] ?>">ادامه مطلب و دانلود</a>
            </div>
        </div>
        <?php
    }
}

include('./include/sidebar.php');
?>

</section>

<?php
include('./include/footer.php');
?>

تغییراتی که ایجاد شده :
استفاده از LIKE در کوئری SQL برای مقایسه عنوان با کلمه جستجو شده.
استفاده از mysqli_real_escape_string برای جلوگیری از تزریق SQL (SQL Injection).
اضافه کردن یک شرط بررسی خطا در اجرای کوئری و نمایش پیام خطا در صورت وجود.
اصلاح نام متغیر $conn به $connect برای انطباق با نام‌های دیگه متغیرها.
یادت نره همچنین، بررسی کنی که آیا اطلاعات اتصال به دیتابیس و جدول موردنظر در کدت صحیح هست یا خیر.

امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹

مهدی حسین آبادی
مهدی حسین آبادی
@Mr_Omid

سلام.

$sql = "SELECT * FROM musics where title='$_GET[search]'";

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

SELECT * FROM musics WHERE title=test

این test باید به صورت استرینگ باشه و در اینحالت استرینگ نیست

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام