سلام
من یک فرم جستجو با php نوشتم که ارور میده و کار نمیکنه . دلیلش را هم نفهمیدم . میخواستم اگر میشه یک نفر توضیح بده که باید چطور یک فرم جستجو با php بنویسم .
من یک جدول در دیتابیس دارم که همه ی مقالات سایتم داخلش هست و یک ستون به اسم title داره که عنوان هر مقاله داخلش نوشته شده . میخواستم وقتی کاربر یک کلمه را جستجو میکنه یک کوئری ارسال بشه که در جدول دیتابیس هر ردیف که عنوان ردیف با کلمه جستجو شده برابر بود انتخاب بشه و مقدار های آن ردیف مثل عنوان و متن نمایش داده بشه .
سلام
سوال شما این هست که چطور یک فرم جستجو بنویسید، این نیست که مشکل فرم فعلیتون رو حل کنیم.
خب من نمیدونم چطوری داری به دیتابیس وصل میشی فقط من میتونم برات یک Query بنویسم که توی کد Php ازش استفاده کنی
select * from articles where title like '%user_input%'
$user_input=$_GET['seach'];
// inja data ro pass bede be DB
<?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
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] رو به صورت یک کلمه میخونه نه دستور.
سلام 🖐
امیدوارم حالت خوب و عالی باشی🙏
اشکال توی کد شما در بخش جلب دادههات از دیتابیس (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 برای انطباق با نامهای دیگه متغیرها.
یادت نره همچنین، بررسی کنی که آیا اطلاعات اتصال به دیتابیس و جدول موردنظر در کدت صحیح هست یا خیر.
امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹
سلام.
$sql = "SELECT * FROM musics where title='$_GET[search]'";
به نظرم این مشکل به این دلیله که زمانی که این کوئری اجرا میشه به این صورت در دیتابیس اجرا میشه و برای همین خطا میده.
SELECT * FROM musics WHERE title=test
این test باید به صورت استرینگ باشه و در اینحالت استرینگ نیست
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟