i
در حال برنامه نویسی و آماده سازی نسخه جدید «وبگو» هستیم، در این نسخه قابلیت ها و ظاهر سایت به کلی متفاوت و کاملتر خواهد بود، این فرآیند زمانبر و از مدتی پیش شروع شده و همچنان ادامه دارد، روند پیشرفت پروژه در این قسمت به صورت درصدی مشخص است و به تناوب به روزرسانی می شود.
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشند که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
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 مطالب بیشتر:
» ارسال ایمیل با PHP و کلاس phpmailer
» ساخت منوی هوشمند با PHP و CSS
» نمایش قسمتی از متن و پاراگراف با PHP
» محاسبه و نمایش پیج رنک گوگل با PHP
» ارسال پارامتر به URL و دریافت مقادیر با PHP
commentنظرات (۲۵ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: مینایی
زمان: ۱۲:۲۰:۴۹ - تاریخ: ۱۳۹۱/۱۱/۲۵
با سلام و احترام و دعای خیر
و تشکر از شما بخاطر این همه مطالب زیبا و آموزنده .
در کد بالا برای نمایش تصاویر یا نوشته های تصادفی .
اگه ممکنه داخل کوتیشن چه دستوری بنویسیم که برامون از داخل یه پوشه عکس های تصادفی رو نمایش بده .
خیلی ممنونم از محبت و لطف شما .
پاسخ: 
سلام
ممنون از نظر لطف شما، برای نمایش تصاویر کافی است کد html آن را درج کنید (البته با رعایت شیوه نگارش صحیح php)، به طور مثال:
case 1:
echo "<img src=\"image/img.jpg\" alt=\"متن جایگزین تصویر\" height=\"24\" width=\"24\">";
break;
نویسنده: mohmaad
زمان: ۲۳:۳۱:۲۸ - تاریخ: ۱۳۹۲/۰۲/۱۸
با سلام میشه کاری کرد که هر روز یه جمله نمایش بده یه چیزی مثل سخن روز داخل سایت ها البته پلاگین باشه برای وردپرس
اگه شما بتونین کدش رو بدین شاید بتونم تبدیل کنم
با تشکر
پاسخ: 
سلام
می توانید از نمونه کد زیر استفاده کنید.
<?php
date_default_timezone_set('Asia/Tehran');
$day = date('D');
switch($day){
case 'Sat':
echo 'پیام روز شنبه';
break;
case 'Sun':
echo 'پیام روز یکشنبه';
break;
case 'Mon':
echo 'پیام روز دوشنبه';
break;
case 'Tue':
echo 'پیام روز سه شنبه';
break;
case 'Wed':
echo 'پیام روز چهارشنبه';
break;
case 'Thu':
echo 'پیام روز پنجشنبه';
break;
case 'Fri':
echo 'پیام روز جمعه';
break;
default:
echo 'پیام روز';
}
?>
نویسنده: mohmaad
زمان: ۱۳:۲۶:۳۲ - تاریخ: ۱۳۹۲/۰۲/۱۹
بابت جواب دادنتون مرسی
منظور من اینه که مثلا ما 100 جمله بهش بدین بگیم مثلا امروز که از ساعت 12 شب تا 12شب روز بعد میشه یک روز بیا این جمله را نشون بده و فرداش دوباره بیا جمله بعدی و همینطور تا آخر اینجوری
پاسخ: 
این کار نیازمند محاسبات پیچیده تر و استفاده از دیتابیس است، متاسفانه فرصت ما در حدی نیست که بتوانیم آن را بنویسیم.
نویسنده: mohammad
زمان: ۱۶:۴۲:۱۱ - تاریخ: ۱۳۹۲/۰۴/۰۵
سلام واقعا مرسی سوال من اینه اگر بخوام از یک جدول
مشخص در دیتایس فیلدهاش رو نمایش بدم چطوری میشه؟
مثلا من یه جدول دارم اسم مشتری های سایتم داخل اونه می خوام به صورت تصادفی نام مشتری ها رو نمایش بدم بازم ممنون!
پاسخ: 
سلام
این مورد در آموزش (در قسمت نحوه نمایش متن و تصاویر اتفاقی در MySQL) گفته شده، کافی است از تابع RAND برای ORDER BY استفاده کنید، البته قاعدتا نوشتن یک پرس و جوی کامل و انتخاب ردیف ها از دیتابیس نیازمند آشنایی قبلی با PHP و MySQL، حداقل در حد مقدماتی است، مثال:
<?php
$query = mysql_query('SELECT user FROM table WHERE id > 0 ORDER BY RAND() LIMIT 5')
or die(mysql_error());
while($row = mysql_fetch_array($query)){
echo $row['user'];
}
?>
نویسنده: محمد
زمان: ۱۶:۴۷:۳۱ - تاریخ: ۱۳۹۲/۰۸/۰۸
سلام
ممنون از سایت خوبتون و این مطلب مفید
میخواستم ببینم چطوری میشه بجای متن یا عکس کد جاوا اسکریپت قرار داد؟
یعنی مثلا توی هر قسمت کد یک سیستم کسب درآمد پاپ آپ رو قرار داد تا در هر بار لود یکیش اجرا بشه
ممنون
پاسخ: 
سلام
PHP صرفا خروجی HTML ایجاد می کند، این خروجی می تواند هر چیز دلخواهی باشد، لذا همان طور که در حالت عادی کدها را در صفحه قرار می دهید، می توانید قسمت echo را طوری مقداردهی کنید که خروجی مورد نظر (کد جاوا اسکریپت) را چاپ کند (نیاز به آشنایی اولیه با PHP است).
نویسنده: مرتضی
زمان: ۱۳:۰۳:۳۷ - تاریخ: ۱۳۹۲/۰۹/۲۵
با سلام و عرض ادب
من یه تصویر زمینه دارم که توسط css تو صفحه نمایش داده میشه. روی این تصویر هم مطالب قرار میگیره.
حالا می خواستم این تصویر زمینه طبق این آموزش , تصادفی از داخل یه فولدر انتخاب بشه. اما چون با css نیست و از تگ img استفاده میشه دیگه نمی تونم روش مطالبم رو نمایش بدم. چه راهی برای این کار پیشنهاد میدید بزرگوار ؟

با تشکر فراوان
پاسخ: 
سلام
می توانید به جای img، خروجی را به صورت یک بلاک div با کلاس های CSS رندوم تعریف کنید، برای هر کلاس نیز یک تصویر پس زمینه متفاوت داشته باشید، به این صورت با خروجی هر کلاس، تصویر زمینه نیز متفاوت خواهد بود.
نویسنده: فروغ
زمان: ۰۰:۲۶:۲۲ - تاریخ: ۱۳۹۲/۱۱/۰۹
سلام - ممنون از سایت خوبتون. یه سوال داشتم که مربوط به موضوع این صفحه نیست چون هم موضوع سوالم در سایتتون پیدا نکردم .
من دارم یه سایت با زبان php می نویسم در رابطه با عکس و عکاسی وقتی موضوعات عکاسی رو از پایگاه داده واکشی می کنم برای چاپ در سایتم نمی خوام همه در یک ستون چاپ بشه بلکه می خوام مثلا در 3 سطر و 4 ستون چاپ بشه.کد زیر مربوط به چاپ یک ستونی هست آیا راهی وجود داره براش که در چند ستون چاپ بشه؟؟؟ امیدوارم راهی وجود داشته باشه.
<?php
$link = mysql_connect("localhost","root","");
if(! $link)
die("Error connect mysql");
mysql_select_db("picup",$link) or die(mysql_error());

$query = mysql_query('Select * from gallerygroup order by idgroup') or die(mysql_error());
echo '<table width="100%" border=0 align="center" >';
while($row = mysql_fetch_array($query))
{
echo'<tr>';
$idgr=$row['idgroup'];
echo" <td align='center'> <a href=\"indexgallery2.php?idgroup=$idgr\">$npic</td>";
echo' </tr>';
}
echo' </table>';
mysql_free_result($query);
mysql_close($link);

?>
پاسخ: 
سلام
PHP یک زبان داینامیک برای برنامه نویسی وب است و اینگونه موارد جزء کاربردهای اولیه آن محسوب می شود، منتها باید کد متناسب با عملیات مورد نظرتان را تعریف کنید، به نظر حالت زیر برای هدف شما مناسب است (تست نشده):
$loop = 0;
while($row = mysql_fetch_array($query)){
if($loop == 0){
echo'<tr>';
}
$idgr=$row['idgroup'];
echo" <td align='center'> <a href=\"indexgallery2.php?idgroup=$idgr\">$npic</td>";
if($loop == 4){
echo' </tr>';
$loop = -1;
}
$loop++;
}
نویسنده: asghar
زمان: ۱۲:۳۶:۰۷ - تاریخ: ۱۳۹۲/۱۱/۱۴
سلام من یه جدول مقاله دارم که می خوام از بین 50 مقاله پر بازدید به صورت تصادفی 10 مقاله را انتخاب کنم که کد اصلی به صورت زیر است حالا نمی دونم چه تغییری باید بدم تا درست بشه .
SELECT * FROM `tbl_essay` ORDER BY `e_hint` desc  LIMIT 10
پاسخ: 
سلام
برای انتخاب تصادفی از دیتابیس از ORDER BY RAND استفاده کنید (نمونه در آموزش توضیح داده شده).
نویسنده: Matori73
زمان: ۲۲:۰۳:۳۶ - تاریخ: ۱۳۹۳/۰۸/۰۳
درود و سپاس بابت این مقاله مفید !
در این مقاله با هربار رفرش کردن، متن یا تصویر هم عوض میشه!
سوال : امکانش هست که به جای رفرش کردن، مدت زمانی رو مشخص کنیم که با اتمام زمان، متن بعدی نمایش داده بشه ؟
یعنی مثلا هر 10 ثانیه به صورت رندوم یک case رو نشون بده و لازم نباشه که رفرش کنیم !
تشکر
پاسخ: 
سلام
این کد به PHP نوشته شده و امکان تنظیم زمان برای آن نیست، برای هدف مد نظر شما یا باید Ajax و PHP را با هم ترکیب کنید (تابع Ajax در فواصل زمانی خاص به فایل PHP ارجاع دهد و نتیجه را در مرورگر چاپ کند)، یا اینکه با JavaScript کدی مشابه بنویسید و تابع را در فواصل زمانی مشخص فراخوانی کنید (به فرض با setInterval).
نویسنده: امير
زمان: ۱۱:۰۱:۰۴ - تاریخ: ۱۳۹۳/۱۲/۱۲
با سلام و تشكر از وبسايت خوبتان: اگر برايتان امكان پذير است در مورد ايجاد زمانبندی با استفاده از php هم مطلبي بنويسيد ، حذف اتوماتيك مطالب پس از مدت زمان مشخص شده از ديتابيس با استفاده از mysql امكان پذير است خواستم ببينم با php هم اين كار امكان پذير است؟
پاسخ: 
سلام
ایجاد زمانبدی خودکار (بدون نیاز به برنامه هایی مانند Cron Jobs) در PHP ممکن نیست، چون کدهای PHP برای اجرا نیاز به فراخوانی دارند، اما می توان با توجه به تاریخ فراخوانی و تاریخ مد نظر محاسباتی در هنگام اجرای کدهای PHP انجام داد.
نویسنده: سجاد
زمان: ۱۵:۵۱:۰۸ - تاریخ: ۱۳۹۳/۱۲/۲۹
سلام من میخوام واسه سایتم چیزی بزارم که متن رو به صورت تصادفی نمایش بده و اون متن هم داخل تیبل blogs
هست و بخش text البته طبق این آموزش جلو رفتم اما به نتیجه ای نرسیدم احتمالا من جایی اشتباه کردم ممنون میشم اگر راهنماییم کنید یا کدو واسم بزارید اگرم ممکن بود واسم ایمیل بشه بهتر
پاسخ: 
سلام
نمونه کدها در آموزش درج شده، در صورتی که با مشکلی مواجه هستید لطفا نمونه کدهای خود را به همراه توضیحات لازم درج کنید تا بررسی گردند.
نویسنده: sajjad
زمان: ۱۸:۲۷:۲۹ - تاریخ: ۱۳۹۳/۱۲/۲۹
<?php
$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'];
}
?>
من از این استفاده کردم
اما چیزی نمایش نداد
پاسخ: 
پرس و جوی شما باید مطابق با اطلاعات صحیح دیتابیس، جدول و ستون های جدول باشد، در نمونه کد به نظر blogs نام جدول است که بعد از SELECT آمده و اشتباه است، blogs باید به جای table درج شود، جهت آشنایی با نحوه نگارش صحیح پرس و جوهای MySQL، لطفا به آموزش های مقدماتی مراجعه کنید.
نویسنده: سجاد
زمان: ۱۶:۴۳:۵۸ - تاریخ: ۱۳۹۴/۰۱/۰۲
ممنون حل شد
فقط یه چیز اگر بخوام 5 تای آخری رو نشون بده باید چیکار کنم؟
پاسخ: 
به جای تابع RAND از ORDER BY در کنار ASC یا DESC استفاده کنید، مثال:
mysql_query('SELECT * FROM table WHERE id > 1 ORDER BY id DESC LIMIT 5');
نویسنده: irnazesh
زمان: ۰۹:۴۸:۴۵ - تاریخ: ۱۳۹۴/۰۱/۲۸
ممنون، آموزش بسیار مفیدی بود و همچنین کامل
خسته نباشید
نویسنده: رضا افشین مهر
زمان: ۱۶:۲۶:۵۰ - تاریخ: ۱۳۹۴/۰۲/۲۰
سلام و خسته نباشید خدمت شما همکار محترم.
من از تابع rand پی اچ پی واسه نمایش تصادفی مطالبم در سایت استفاده کرده بودم اما به تازگی متوجه شدم که با هر بار لود صفحه مطالب تکراری رو هم نمایش میده.
راه حل این مشکل از نظر جنابعالی چی می تونه باشه با تشکر از سایت خوبتون و زحمات فراوانی که واسه جامعه مهندسی می کشید.
پاسخ: 
سلام
منظورتان از نمایش مطالب تکراری مشخص نیست! آیا به فرض در یک پرس و جو دو ردیف تکراری برگردانده می شود یا در هر پرس و جو برخی نتایج مشترک هستند؟ در حالت اول اشکال وجود دارد اما حالت دوم طبیعی است، چون هر پرس و جو مستقل از هم است و ممکن است نتایج مشابه با پرس و جوی قبلی باشد، برای رفع این حالت راه حل کوتاهی وجود ندارد، باید شیوه شخصی طراحی کنید، به طور مثال برای هر کاربر در کوکی آیتم های دیده شده را ذخیره کرده و در هنگام اجرای پرس و جو از پارامتر WHERE id != 1 OR id != 2 و... استفاده نمائید.
paged صفحه 1 از 2
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




9 × 6
 refresh
آگهی
سفارش آگهی تبلیغاتی
Webgoo.ir

هزینه منصفانه، بازخورد مناسب