آگهی
article

نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL

php-random

نمایش متن و تصاویر اتفاقی یکی از روش هایی است که در سیستم های مدیریت محتوای سایت، وبلاگ و ابزارهای وب مورد استفاده قرار می گیرد، به طور مثال می توانیم یک تصویر را به طور اتفاقی از بین چندین فایل انتخاب کرده و با هر بار رفرش شدن صفحه آن را به نمایش در آوریم یا تیتر چند مطلب را از دیتابیس به طور رندوم انتخاب کرده و تحت عنوان مطالب اتفاقی به بازدیدکنندگان نمایش دهیم، انجام این موارد در وب به طور معمول یا با کدنویسی جاوا اسکریپت در سمت کاربر و یا با برنامه نویسی PHP و MySQL در سمت سرور و به کمک توابع از پیش تعریف شده و ویژگی های آنها ممکن می شود که در این مطلب در خصوص نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL خواهیم گفت و بحث در مورد جاوا اسکریپت را به بخش آموزش کاربردی آن موکول می کنیم.

نحوه نمایش متن و تصاویر اتفاقی در PHP (روش ساده)


یکی از توابع پرکاربرد و به اصطلاح دم دستی که می توانیم در PHP از آن برای چاپ مطالب اتفاقی استفاده کنیم، تابع rand است که ترکیب آن را با switch و case در نمونه کد زیر ملاحظه می کنید، از این نمونه کد می توانیم برای نمایش محتوای تصادفی و رندم استفاده کنیم که خروجی آن می تواند متن یا کدهای HTML شامل تگ img برای نمایش تصاویر باشد، این روش شاید ساده ترین راه حل ممکن برای ایجاد و گرفتن خروجی تصادفی باشد.
<?php
//ایجاد اتفاقی یک شماره از 1 تا 6
$number = rand(1, 6);

//با توجه به شماره ایجاد شده، یک مورد به صورت اتفاقی نمایش داده می شود
switch ($number){
    case 1:
    echo "متن یا تصویر شماره 1";
    break;
    case 2:
    echo "متن یا تصویر شماره 2";
    break;
    case 3:
    echo "متن یا تصویر شماره 3";
    break;
    case 4:
    echo "متن یا تصویر شماره 4";
    break;
    case 5:
    echo "متن یا تصویر شماره 5";
    break;
    case 6:
    echo "متن یا تصویر شماره 6";
    break;
    default:
    echo "متن یا تصویر شماره 1";
}
?>
توضیح:
- تابع rand با توجه به آرگیومنت های تنظیم شده با هر بار فراخوانی فایل PHP و اجرای کدها، عددی بین 1 تا 6 را به صورت اتفاقی ایجاد کرده و به متغیر number نسبت می دهد.
- در قسمت switch با توجه به مقدار متغیر number یکی از case ها انتخاب شده و خروجی آن اجرا می شود و نهایتا کد با break خاتمه می یابد.
نکته: خروجی دستورات PHP می تواند شامل تگ های HTML و از جمله تگ img باشد، مثال:
case 1:
echo '<img src="images/photo.png" alt="photo" width="200" height="200">';
break;
یا
switch ($number){
case 1:
$photo = 'images/photo.png';
break;
}
echo '<img src="' . $photo . '" alt="photo" width="200" height="200">';
هر دو روش بالا خروجی یکسان خواهند داشت و تفاوت در نحوه مقداردهی متغیر و استفاده از دستور echo است که با توجه به ساختار برنامه می توانیم یک شیوه را ترجیح دهیم.

نحوه نمایش متن و تصاویر اتفاقی در PHP (روش پیشرفته)


در برنامه نویسی وب ممکن است نیاز باشد که در یک بار فراخوانی صفحه چند آیتم اتفاقی به صورت هم زمان از بین داده های موجود به خروجی ارسال شوند، قاعدتا در چنین شرایطی صرف استفاده از تابع rand حلال مشکل نیست و باید در پی راه حل و کدنویسی پیچیده تر و پیشرفته تری باشیم، شیوه ای که در این آموزش به آن می پردازیم ترکیب تابع rand با قابلیت های دیگر PHP از جمله آرایه و حلقه است که در نمونه کد زیر ملاحظه می کنید.
<?php
//متن یا تصویر در آرایه
$array_text = array(
0 => "متن یا تصویر شماره 1",
1 => "متن یا تصویر شماره 2",
2 => "متن یا تصویر شماره 3",
3 => "متن یا تصویر شماره 4",
4 => "متن یا تصویر شماره 5",
5 => "متن یا تصویر شماره 6",
);

$array_loop = array();
$item = 3;
$result = null;

//با توجه به تعداد آیتم تعیین شده، چند مورد به صورت اتفاقی و بدون تکرار از آرایه انتخاب شده و به خروجی ارسال می شوند
for($i = 0; $i < $item; $i++){
    //ایجاد اتفاقی یک شماره از 1 تا 6 بدون تکرار
    do {
        $number = rand(1, 6);
    } while(in_array($number, $array_loop));

    $result .= $array_text[$number - 1] . '<br>';
    
    $array_loop[] = $number;
}

echo $result;
?>
پیش نمایش
توضیح:
- متن ها یا تصاویر مورد نظر را در آرایه array_text به صورت کلیدهای شماره ای از 0 درج می کنیم، تعداد کلیدهای آرایه باید با آرگیومنت دوم تابع rand برابر باشد (در اینجا مقدار 6).
- آرایه array_loop برای نگهداری مواردی است که در حلقه for به صورت تصادفی انتخاب شده اند و نباید مجددا انتخاب شوند (جهت عدم نمایش آیتم های تکراری).
- متغیر item تعداد آیتم هایی که باید در خروجی به صورت اتفاقی چاپ شوند را تنظیم می کند، قاعدتا این مقدار نباید از حداکثر تعداد کلیدهای آرایه array_text بیشتر باشد.
- حلقه do و while به کمک تابع in_array صرفا اعدادی را به صورت اتفاقی به متغیر number نسبت می دهد که قبلا در آرایه array_loop موجود نباشند (جهت عدم نمایش آیتم های تکراری).

پرس و جوی نمایش متن و تصاویر اتفاقی در MySQL


علاوه بر روش ها و نمونه کدهایی که بررسی کردیم، می توانیم از قابلیت های سیستم مدیریت پایگاه داده MySQL نیز در برنامه نویسی PHP استفاده کنیم، به این صورت نتایج پرس و جو قبل از اینکه از دیتابیس به PHP ارسال شوند از ابتدا به صورت تصادفی انتخاب می شوند که این کار با توابع MySQL امکانپذیر است، برای این منظور از تابع RAND در پرس و جو استفاده کرده و با افزودن پارامتر LIMIT به دستورمان، نتایج را به تعداد مشخصی محدود می کنیم، پرس و جوی زیر نمونه ای از کاربرد تابع RAND است.
SELECT * FROM tbl_name WHERE col_name > 1 ORDER BY RAND() LIMIT 5
توضیح:
- تابع RAND با توجه به مقدار LIMIT (که در پرس و جوی بالا 5 است)، همان تعداد از ردیف ها را به صورت تصادفی از دیتابیس انتخاب می کند.
- ORDER BY RAND نحوه انتخاب و چینش ردیف ها از دیتابیس را تعریف می کند که به جای RAND می توانیم از ASC و DESC (Ascending و Descending یا چینش صعودی و نزولی) استفاده کنیم.
- از این روش می توانیم برای نمایش مطالب اتفاقی در سایت ها یا وبلاگ هایی که روی سرور شخصی قرار داشته و از دیتابیس MySQL استفاده می کنند، به راحتی بهره ببریم.
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
» ارسال ایمیل با PHP و کلاس phpmailer
» ارسال پارامتر به URL و دریافت مقادیر با PHP
» ساخت منوی هوشمند با PHP و CSS
» تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
commentنظرات (۳۵ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: maryam
۱۸:۰۰ ۱۳۹۸/۰۷/۲۰
بخاطر کمکتون ممنون درست شد برنامه با راهنمایی شما
نویسنده: میثم
۱۶:۴۸ ۱۳۹۹/۰۱/۲۱
سلام استاد عزیز.
من بر اساس ۵.۴ php و mysql کار کردم.
حالا چند تا از جداول سایتم رکوردهای زیادی دارن.
فرضا
جدول ۱ با ۱۰.۰۰۰ رکورد و ۱۲ ستون اطلاعات
جدول ۲ با ۶.۰۰۰ رکورد و ۱۵ ستون اطلاعات
جدول ۳ با ۸.۰۰۰ رکورد و ۲۰ ستون اطلاعات
جدول ۴ با ۴.۰۰۰ رکورد و ۶ ستون اطلاعات
جدول ۵ با ۱۲.۰۰۰ رکورد و ۸ ستون اطلاعات.
حالا توی یکی از صفحات سایتم من به هر ۵ جدول نیاز دارم و تقریبا به تمام ستون ها در جدول ها نیاز هست. حالا با این اوصاف از دستور زیر برای فراخوانی فلان رکورد در جدول ها استفاده می کنم.
$X = mysql_fetch_array(mysql_query("Select * From `tableA` Where `id` = '$user[id]'"));
آیا راه بهتری برای اینکه سرعت عملکرد و فراخوانی اطلاعات بیشتر بشه سراغ دارین؟ بازم میگم که من توی فراخوانی به تمام ستون های هر جدول نیاز دارم.
پاسخ: 
دقیقا نمی دانیم که ساختار جداول به چه نحوی به هم مرتبط هستند، به فرض آیا Foreign Key برای جداول تعریف شده یا خیر، اما در مجموع چند راه حل برای افزایش سرعت اجرای پرس و جوها در دیتابیس وجود دارد:
- بهتر است هر ستونی از جداول که در پرس و جوها در قسمت WHERE کاربرد دارند ایندکس گذاری شوند، مثال:
ALTER TABLE tbl_name ADD INDEX `index_name` (`column_name`)
ایندکس گذاری (Indexing) یک نوع مرتب سازی نتایج به فرض بر اساس حروف الفبا، اعداد و... است که می تواند پس از ساخت جدول با دستور بالا انجام شود، با این کار پیدا کردن نتیجه از جداول دارای ردیف های زیاد با سرعت خیلی بالاتری انجام می شود.
- استفاده از پرس و جوی ترکیبی به فرض دستور JOIN می تواند در افزایش راندمان کار موثر باشد (البته اثر این ترکیب شاید در حد خیلی مختصر باشد اما در مجموع برای دیتابیس های خیلی حجیم بهینه تر است).
- استفاده از دستور LIMIT و محدود کردن تعداد نتایج انتخابی مد نظر هم همواره باید مد نظر باشد.
نویسنده: مرتضی ق
۱۸:۲۵ ۱۳۹۹/۰۳/۰۲
سلام خسته نباشید. یک سایت اصلی و مادر دارم مثلا www.m.com حالا سه سایت دیگر زیر مجموعه مثلا m1 و m2 و m3 من میخواهم کسی که وارد سایت اصلی و مادر میشه بطور خودکار و کاملا تصادفی فقط به یکی از سایتهای زیرمجموعه مثلا m2 وارد بشه و نفر به m1 وارد بشه. لطفا اگر راه حل و یا کد داره ایمیل کنید.
باتشکر
پاسخ: 
می توانید در ریشه سایت اصلی یک فایل با نام index.php داشته باشید و نمونه کدهای زیر را در آن درج کنید:
<?php
$num = rand (1, 3);
switch($num){
case 1:
$site = 'http://example1.com';
break;
case 2:
$site = 'http://example2.com';
break;
case 3:
$site = 'http://example3.com';
break;
}
header('Location: ' . $site);
exit;
?>
البته در این حالت همه چیز تصادفی است و ممکن است دو کاربر پشت سر هم وارد یک سایت شوند، برای اینکه کاربر بعدی به سایتی غیر تکراری با کاربر قبلی برود باید آخرین شماره در دیتابیس ثبت و شماره تصادفی فعلی با آن تطبیق داده شود، اگر شماره تصادفی با مقادیر آخرین شماره در دیتابیس برابر بود یک بار دیگر شماره تصادفی اجرا تا اینکه شماره اتفاقی غیر تکراری باشد (نیاز به کدنویسی زمانبر دارد).
نویسنده: sina2000
۱۵:۰۳ ۱۳۹۹/۰۴/۱۳
با سلام و خسته نباشید
طبق کد زیر
$query = mysql_query('SELECT blogs FROM table WHERE id > 0 ORDER BY RAND() LIMIT 5')
or die(mysql_error());
while($row = mysql_fetch_array($query)){
echo $row['text'];
}
از دیتابیس mysql استفاده شده اما من از لایبرری PDO استفاده میکنم که موقع
($row = mysqli_fetch_array($Pdc))
استفاده میگه متغیر Pdc برای PDO است لطفا نمونه کد برای لایبرری PDO قرار دهید
پاسخ: 
یا فرض اینکه Pdc لینک اتصال به دیتابیس باشد می توانید از الگوی نمونه کد زیر برای اکستنشن PDO استفاده کنید:
$query = $Pdc->prepare("SELECT text FROM blogs WHERE id > 0 ORDER BY RAND() LIMIT 5");
$query->execute();
$query = $query->get_result();
while($row = $query->fetch_assoc()){
echo $row['text'];
}
نویسنده: Amir Rahimi
۱۹:۱۱ ۱۳۹۹/۰۵/۱۸
سلام و خسته نباشید
من یک سوالی داشتم که مربوط به این بحث نیست
سوال من اینه که یه کد یا . . . میخوام که بتونم متن یا عدد روی عکس رو بتونم با php استخراج کنم
ممنون میشم کمکم کنید و پاسخ دهید 🙏
پاسخ: 
برای این منظور باید از OCR (مخفف Optical Character Recognition) استفاده کنید که اسکریپت هایی برای آن به زبان PHP نوشته شده:
https://sourceforge.net/projects/phpocr/

https://github.com/thiagoalessio/tesseract-ocr-for-php
قاعدتا برای استفاده بهینه و سفارشی سازی این اسکریپت ها باید با PHP آشنا باشید.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ کوتاه و مختصر داده خواهد شد!
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.





5 × 4
 refresh
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form عاطفه مرادی
در:
سلام. من تازه یادگیری html رو شروع کردم و برای وبسایتمون برروی کنترل پنل html می نویسم. از طراح وبسایت خواستم که دسترسی جاوا را...
۱۳۹۹/۰۵/۱۹

form Amir Rahimi
در:
سلام و خسته نباشید من یک سوالی داشتم که مربوط به این بحث نیست سوال من اینه که یه کد یا . ....
۱۳۹۹/۰۵/۱۸

form محمد
در:
سلام اگر بخواهیم هدر سایت در گوشی های موبایل مخفی بشه از چه کدی باید استفاده کرد. کد زیر کلا مخفی میکنه در صورتیکه من...
۱۳۹۹/۰۵/۱۸

form shayan
در:
با سلام وقت به خیر من میخوام تو یه زبانه ای که در واقع متن قرار دادم لینک اسکرول بالا در حده پیکسل...
۱۳۹۹/۰۵/۱۷

form mahtab
در:
ببخشید اگه انتی ویروس رو غیرفعال کنیم برای باز کردن وب که باز نمیشه دوباره میتونیم آنتی ویروس رو فعال کنیم ؟؟ ...
۱۳۹۹/۰۵/۱۵

form امیرمحمد خلیلی
در:
ببخشید چجوری میتونم یه عکس از کاربر بگیرم و نمایشش بدم؟
۱۳۹۹/۰۵/۱۵

form elias
در:
خسته نباشید کاری که گفته بودید انجام دادم ولی رفرش می کنم همه لینک ها بر می گرده مثل اول می شه
۱۳۹۹/۰۵/۱۴

form سفی
در:
سلام و خسته نباشید من فایل آموزش html مقدماتی رو دیدم اما وقتی روی index.html کلیک راست کردم این گزینه ++edit..c رو ندیدم چه برنامه...
۱۳۹۹/۰۵/۱۰

form dnmax
در:
ببخشید ما اگه بخواهیم در وبلاگ مان به بقیه کدهای جاوا بدهیم وقتی کد رو پست میکنیم کد نشان داده نمیشود مثلا کد پخش آهنگ...
۱۳۹۹/۰۵/۰۹

form علیرضا
در:
سلام خیلی ممنون بابت مطالب مفیدتون عاالی بودن ان شالله همیشه موفق باشین.
۱۳۹۹/۰۵/۰۹

form محمد معین محب
در:
سلام میشه برای من یک اچ تی ام ال با بسازید . ممنون میشم
۱۳۹۹/۰۵/۰۸

form مهدی
در:
سلام و خسته نباشید یه مشکلی دارم که فکر کنم فقط وبگو میتونه کمک کنه سرور دانلود دارم و از اسکریپت دانلود vip...
۱۳۹۹/۰۵/۰۸

form neda
در:
با سلام من سایتی زدم از نظر ریسپانسیو هم اکی هست. فقط ارتفاعش از مانیتورهای مختلف به یک اندازه نیست. برای div اول ارتفاع...
۱۳۹۹/۰۵/۰۷

form الهام
در:
سلام یه سوال داشتم که هرچی سرچ کردم جوابش پیدا نشد چجوری ادامه مطلب رو با کلیک روی کلمه مثلا بیشتر... ببینیم؟ ...
۱۳۹۹/۰۵/۰۶

form فاطمه
در:
سلام و خسته نباشید من اومدم برای وبم کد نظرات جدید درج کنم و اتفاقی یه بخش بزرگی از کدها رو حذف کردم و...
۱۳۹۹/۰۵/۰۵
form دینا
در:
چطور نظرات خصوصی که واسه وبلاگم مینویسن پاسخ بدم
۱۳۹۹/۰۵/۰۳
form میثم
در:
سلام من برای دریافت چند تا اطلاعات از جداول سایتم مجبور شدم دستور زیر رو اجرا کنم. هر کدام از جداول حدود ۱.۰۰۰.۰۰۰...
۱۳۹۹/۰۵/۰۱
form علی
در:
با سلام و تشکر فراوان اگر یک div خودش درون div دیگری باشد مثل مثال زیر مقدارش رو چطور به دست بیاریم؟ در...
۱۳۹۹/۰۵/۰۱
form mahtab
در:
خیلی میبخشین بفرمایین
۱۳۹۹/۰۴/۳۱
form علی
در:
با سلام و درود فراوان با چه فرمانی میشه content یک متاتگ رو به دست آورد. مثلا یه لینکی رو بدیم و content مورد...
۱۳۹۹/۰۴/۳۰
form فاطمه
در:
سلام چرا وبلاگ ها برام بالا نمیاد فقط بخش مدیریت میاد وقتی میزنی مشاهده وبلاگ نمیاد وبلاگ دوستانم نمیاد حتی وبلاگ های دیگه...
۱۳۹۹/۰۴/۲۸
form امیر
در:
سلام می خواستم بپرسم چگونه می شه در وبلاگ خود هنگامی که بادید کننده وارد وبلاگ می شه آهنگ خودکار پخش بشه . ممنون...
۱۳۹۹/۰۴/۲۶
form mahtab
در:
سلام ببخشید من که اینو نوشتم شما هم جواب دادین : ببخشین چرا وبلاگ من تو لبتاپ دوستم باز نمیشه ؟؟؟ واسه...
۱۳۹۹/۰۴/۲۶
form مهدی
در:
سلام حالتون خوبه؟ ببخشید هی مزاحمتون میشم.. یک سوالی داشتم من عملیات ری رایت رو میخوام تو سی پنل انجام بدم صفحه لوگین رو باز...
۱۳۹۹/۰۴/۲۶
form مهدی
در:
خیلی خیلی ممنونم از وقتی که گذاشتید.. لطف کردید
۱۳۹۹/۰۴/۲۴
form mahtab
در:
ببخشین چرا وبلاگ من تو لبتاپ دوستم باز نمیشه ؟؟؟ واسه ی ویروس هم اسکن کرده اما نوشته چیزی نیس چیکار کنیم ؟؟؟؟ ...
۱۳۹۹/۰۴/۲۴
  در انتظار بررسی: ۰
 پاسخگویی به سوالات 1 تا 48 ساعت زمان می برد.