مانی
4 سال پیش توسط مانی مطرح شد
11 پاسخ

فرم جستجو با php

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

@hesammousavi
@ali.bayat
@Rp76
@mhyeganeh


ثبت پرسش جدید
بامداد
@bamdad 4 سال پیش مطرح شد
0

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


saman
@saman1111 4 سال پیش مطرح شد
0

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش مطرح شد
0

سلام

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


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

SQL

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

PHP

$user_input=$_GET['seach'];
// inja data ro pass bede be DB

مانی
تخصص : طراح سایت و سئوکار
@manish 4 سال پیش مطرح شد
0

@Rp76

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


سینا خاقانی
تخصص : توسعه دهنده بک‌اند
@sina.it91 4 سال پیش مطرح شد
0

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

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


رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش مطرح شد
0

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


مانی
تخصص : طراح سایت و سئوکار
@manish 4 سال پیش مطرح شد
0

@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="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

رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 4 سال پیش مطرح شد
0

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

<?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 ساده چاپش کرد.


یه نفر
@یه بنده خدایی 1 سال پیش مطرح شد
0

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

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

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


مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 1 سال پیش مطرح شد
0

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

اشکال توی کد شما در بخش جلب داده‌هات از دیتابیس (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="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 1 سال پیش مطرح شد
0

سلام.

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

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

SELECT * FROM musics WHERE title=test

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


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

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