ایجاد لینک و صفحه در mysql با php

سلام من میخوام که یک اسکریپت بسازم که اطلاعاتی رو ذخیره و بعد به نمایش میزاره

اما من میخوام که این اطلاعات اول در دیتابیس ذخیره بشوند و بعد از دیتابیس فراخوانی بشن در یک لینک فراخوانی بشوند

مثال: اطلاعات فیلم luck در دیتابیس با یک فایل php ذخیره می شوند
و در ادامه میخوام که با آدرس زیر اطلاعات فراخوانی بشوند:

site/luck

میخوام بگین که چطور url هایی مثل مثال بالا بسازم.

1 پسندیده

سلام وقت بخیر
من بخش دریافت و ذخیره اطلاعات فاکتور میگیرم توضیحاتی در این مورد نمی دهم.
اما در خصوص نوع فراخوانی لینک که فرمودید:
شما باید روتر بنویسید اگر htaccess وردپرس را مشاهده کرده باشید تمامی کوئری ها سمت index.php ارسال می شوند و سپس این فایل وظیفه بررسی نو کوئری و نمایش را انجام میدهد.
شما هم باید به همین صورت تمامی کوئری ها را سمت روتر خود یا همان فایل index.php ارسال کنید تا طبق کوئری که ارسال می شود نتیجه نمایش داده شود.

من هیچ اطلاعاتی در مورد ساخت لینک توسط php یا sql ندارم

بگذارید که طریقه کار اسکريپتم رو توضیح دهم تا شما بتوانید بهتر متوجه شوید:
در صفحه اول یعنی index.php یک فرم جستجو وجود داره:
Screenshot_۲۰۲۲۰۹۰۶-۱۶۵۸۳۵_Chrome

بعد از جستجو ، اطلاعات نمایش داده می شوند.
در کنار اطلاعات یک آیکون یا دکمه خواهد بود که درخواست ذخیره اطلاعات اون جستجو رو به دیتابیس میده و اون ها ذخیره و در لیستی زیر اون فرم جستجو به نمایش در می آیند.

حالا من میخوام علاوه بر اینکه اطلاعات در صفحه اصلی به نمایش در می آیند ، در صفحه ای جدا و مثل post ودرپرس به نمایش قرار داده شوند که لینک اون صفحه هم به شکل زیر باشه:

site/post

حالا به من بگید که چیکار باید بکنم که این امکان پذیر بشود

اگر صفحه ای که قصد دارید در ان اطلاعات نمایش داده شود مثلا site.com/evil
شما باید برای این منظور باید کوئری های ایندکس را تغییر دهید اسکریپت شما احتمالا روتر داشته باشد
شما باید کدها را تغییر دهید که نیاز به دانش کد نویسی دارد و منطقی که خودتان برای نوشتن کدها در نظر میگیرید.

الان به فکر ساخت اسکریپتم با cms افتادم ، روتر و بقیه چیز هایی کا لازم دارم توشون هست

اگر میتونید چند اسکریپت کوچک cms که روتر هم داشته باشن بهم معرفی کنید که دانلود کنم

میتونم فایل های ایجاد پست و مدیریت رو طبق اسکریپت خودم بنویسم و اینجوری خیلی راحت تر و استاندارد تر اطلاعات رو توی دیتابیس ذخیره و نمایش میدم

مسیردهی بستگی به نوع پروژه دارد ولی یک مدل ساده را براتون مثال میزنم
یک فولدر در هاست خود ایجاد کنید برای مثال فولدر movie داخل فولدر یک فایل ایجاد کنید با اسم .htaccess و کد های زیر را در ان قرار دهید

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+) index.php?direct=$0 [L,QSA]

سپس داخل همین فولدر یک فایل دیگر به اسم index.php ایجاد کنید و کدهای زیر را در ان قرار دهید

<?php
$router = $_REQUEST['direct'];
echo $router;
?>

سپس مسیر را فراخوانی کنید برای مثال site.com/movie/evil
evil می تواند نام یا هر کلمه کلیدی باشد شما می توانید از همین کلمه کلیدی در فراخوانی از دیتابیس یا اشاره به کنترلر خاصی استفاده کنید.

1 پسندیده

این بخش درست اوکی فهمیدم، اسکریپت من این شکل کار میکنه :
site/imdb.php?id=tt12345

که با .htaccess میشه:
site/tt12345

حالا اینکه چطور این روتر رو به دیتابیس وصل کنم تا این عدد tt12345 رو فراخوانی کنه و یا مثلا اگر این آی دی وجود نداشت صفحه 404 رو لود کنه؟

کل مشکل من این هست

نوع اتصال دیتابیس شما را نمی دونم ولی یک مثال هم در این مورد براتون میزنم
کد اتصال دیتابیس
$conn = mysqli_connect( "localhost", "dbuser", "dbpass", "dbname");
مثالی که میزنم با کدهایی هست که قبلا براتون ارسال کردم

$result = mysqli_query( $conn, "SELECT * FROM listmovie where id='$router'" );
while( $row = mysqli_fetch_array($result) ){
    echo $row['id'] . ": " . $row['title'];
    echo "<br>";
}

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

$conn = mysqli_connect( "localhost", "dbuser", "dbpass", "dbname");
$result = mysqli_query( $conn, "SELECT * FROM listmovie where id='$router'" );
if(!empty($result))
{
while( $row = mysqli_fetch_array($result) )
{
    echo $row['id'] . ": " . $row['title'];
    echo "<br>";
}
}
else
{
echo "404";
}
1 پسندیده

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

حالا که در دیتابیس چک میشه و اگر id وجود داشت id و تابع title رو نمایش داده میشه و اگر هم نبود مینویسه 404

درست گفتم؟

بله اگر کوئری ارسال شده در پاسخی که از دیتابیس دریافت میکند خالی نباشد یعنی کوئری برای نمایش داشته باشد
نمایش میدهد در غیر اینصورت متن 404 نمایش میدهد.
که البته این مورد را چک کنید اگر مشکلی وجود داشت مطرح کنید تا بررسی این مورد با یک روش دیگر براتون ارسال کنم.

خیلی ممنون ، یک سوال دیگری دارم که البته کوتاه تر هست و الان به شکل یک سوال جدید مطرح میکنم تا بقیه هم استفاده کنن

حالا یک سوال دیگر دارم من همه اسکریپت رو کامل کردم حالا آخرین بخش مونده

صفحه بندی یا pagination

چطوری میتونم اطلاعات رو صفحه بندی کنم ؟

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

در ضمن میخوام صفحات مثل ودرپرس باشه:

site/page/100

از اموزش این صفحه اقدام کنید https://www.phpflow.com/php/simple-tutorial-of-pagination-in-php/

آموزش خوبی هست فقط یک ایراد داره
چطور این صفحه بندی رو به روتر وصل کنم که بجای
index.php?page=2
بشه :
site/page/2

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

تازه توی خود دیتابیس این جور نیست و درست نشون میده

امکانش هست charset کدی رو که بالا بهم دادید روی utf8 تنظیم کنید و کد رو بروز کنید
خودم نتونستم

1 پسندیده

سلام اگر امکان داره جواب سوالاتم رو در کمی سریع تر بهم بگین

کمی در اینترنت جستجو می کردید در سریع ترین زمان می توانستید این مورد را رفع کنید شما باید utf8 در فراخوانی دیتابیس استفاده کنید
کدهای زیر را تست کنید

mysqli_query($db,“SET collation_connection = utf8_general_ci”);
mysqli_query($db,“SET NAMES utf8”);
mysqli_query($db,“default-character-set=utf8”);
mysqli_query($db,“character-set-server=utf8”);
mysqli_query($db,“collation-server=utf8_general_ci”);
mysqli_query($db, “set names ‘utf8’”);
mysqli_query($db, "set character set 'utf8

تا دلتون میخواد سرچ کردم ولی اصلا کار نمی کرد و خطا می داد
،
کد شما هم کار نمی کنه

الان سورس کد من اینه:

<?php 
$id = $_GET['id']; 
$conn = mysqli_connect( "localhost", "#", "#", "#");
$result = mysqli_query( $conn, "SELECT * FROM `imdb` WHERE imdb='$id'" );
if(!empty($result))
{
while( 
$row = mysqli_fetch_array($result) )
{
    echo $row['id'] . ": " . $row['name'];
    include "single.php";
}
}
else
{
echo "404";
}
?>

از کد زیر استفاده کنید

<?php 
$id = $_GET['id']; 
$conn = mysqli_connect( "localhost", "#", "#", "#");
mysqli_query($conn,"SET collation_connection = utf8_general_ci");
mysqli_query($conn,"SET NAMES utf8");
mysqli_query($conn,"default-character-set=utf8");
mysqli_query($conn,"character-set-server=utf8");
mysqli_query($conn,"collation-server=utf8_general_ci");
mysqli_query($conn,"set names 'utf8'");
mysqli_query($conn,"set character set 'utf8'");
$result = mysqli_query( $conn, "SELECT * FROM `imdb` WHERE imdb='$id'" );
if(!empty($result))
{
while( 
$row = mysqli_fetch_array($result) )
{
    echo $row['id'] . ": " . $row['name'];
    include "single.php";
}
}
else
{
echo "404";
}
?>
1 پسندیده

ممنونم کار کرد ، شما خیلی به من کمک کردید حتی توی تایپیک های قبلیم
واقعا تشکر میکنم