دسته بندی
آرایه (Array) در برنامه نویسی PHP
در مباحث گذشته از بخش آموزش مقدماتی PHP با نحوه کار حلقه foreach آشنا شدیم و گفتیم که این نوع حلقه ها برای مدیریت آرایه (Array) کاربرد دارد به طور مثال مقادیری که از فرم های وب با قابلیت انتخاب چندگانه (multiple) ارسال می شوند را می توانیم در حلقه foreach مورد به مورد بررسی و به پارامترهای آن دسترسی داشته باشیم که این ساز و کار به کمک آرایه محقق می شود، به هر صورت این بار و در ادامه آموزش های مقدماتی می خواهیم دانشمان را در برنامه نویسی PHP کمی بیشتر توسعه داده و مبحث آرایه ها را با هم بررسی کنیم، فراگیری کامل و درست این مبحث می تواند درک ما را از نحوه کار کدهای PHP و ساختار ببرنامه های وب بسیار ارتقاء داده و در خیلی از پروژه ها راهگشا باشد.
آرایه (Array) چیست؟
آرایه (Array) در برنامه نویسی به ساختار داده ای به شکل متغیر یا آبجکت گفته می شود که خود شامل عناصر (Elements) زیرمجموعه به شکل لیست است که می توانیم با شماره عددی خودکار (Index) یا کلید (Key) اختصاصی به مقدار (Value) آنها دسترسی داشته باشیم، بنابراین در مورد آرایه ها با چند اصطلاح زیر روبرو خواهیم شد:
- Array: آرایه ای که تعریف می کنیم.
- Element: به هر عضو در آرایه عنصر یا Element گفته می شود.
- Index: به موقعیت عددی خودکار عنصر در فهرست عناصر آرایه ایندکس گفته می شود و با آن به مقادیر عنصر مورد نظر دسترسی پیدا می کنیم.
-Key: کلید اختصاصی که به صورت غیرخودکار تعیین می شود و با آن به مقادیر عنصر مورد نظر دسترسی پیدا می کنیم.
Value: مقداری که هر عنصر آرایه در خود نگهداری می کند.
بر این اساس اگر آرایه ما در PHP به شکل نمونه زیر باشد:
<?php
$array = array('HTML', 'CSS', 'JS', 'PHP');
?>
در این ساختار عبارت array اول متغیر آرایه، array دوم دستور تعریف آرایه و عبارت های رشته ای HTML، CSS، JS و PHP که با کاراکتر کاما (,) از هم جدا شده اند هرکدام عناصر آرایه هستند، ایندکس ها در این شیوه به صورت خودکار و از 0 شمارش می شوند (آرایه در زبان PHP به صورت Zero-based است) که در نمونه کد قابل روئیت نیست اما در هنگام دسترسی به مقادیر عناصر به کار می آید، به طور مثال اگر بخواهیم مقادیر Index 3 آرایه بالا را استخراج و در خروجی چاپ کنیم می توانیم با کد زیر این کار را انجام دهیم:<?php
$array = array('HTML', 'CSS', 'JS', 'PHP');
echo $array[3];
?>
که نتیجه عبارت PHP
خواهد بود، دقت کنیم ایندکس و کلید دو مفهوم مشابه هستند با این تفاوت که ایندکس (Index) در حالتی استفاده می شود که شماره گذاری موقعیت عناصر به صورت خودکار و عددی (از 0) توسط مفسر انجام شده باشد اما کلید (Key) زمانی است که کلیدواژه دسترسی به عنصر را به صورت عددی یا با در نظر گرفتن برچسب متنی خودمان تعیین می کنیم، به طور مثال در نمونه کد زیر استفاده از ایندکس 3 خطا خواهد داشت:<?php
$array = array(0 => 'HTML', 1 => 'CSS', 2 => 'JS', 5 => 'PHP');
echo $array[3];
?>
کد بالا خطایNotice: Undefined offset: 3
را چاپ می کند چون ایندکس 3 در آرایه وجود ندارد و برای چاپ عبارت PHP باید از کلید 5 استفاده کنیم:echo $array[5];
در واقع می توان گفت زمانی که به صورت دستی شماره ایندکس عناصر آرایه را تغییر می دهیم اصطلاح کلید (Key) جانشین فهرست (Index) می شود، به طور خلاصه فهرست (Index) شماره گذاری خودکار و کلید (Key) می تواند مقدار عددی یا متنی باشد که هر دو اصطلاح برای دسترسی به مقدار (Value) عناصر آرایه کاربرد دارند.شیوه های مختلف تعریف آرایه در PHP
آرایه در PHP مشابه دیگر زبان مرتبط با وب یعنی جاوا اسکریپت به دو شیوه زیر قابل تعریف است:
- تعریف آرایه با عبارت دستوری array، به طور مثال:
<?php
$array = array(100, 200, 300);
?>
- تعریف آرایه با کاراکتر قلاب []، به طور مثال:<?php
$array = [100, 200, 300];
?>
نتیجه هر دو روش بالا از نظر فنی یکسان است و صرفا در نحوه تعریف و Syntax تفاوت وجود دارد، در ادامه هر دو روش بالا را به تفصیل بررسی می کنیم.تعریف آرایه در PHP با عبارت دستوری array
اولین روش تعریف آرایه در PHP استفاده از عبارت دستوری array است، در این حالت کلیدها و مقادیر (Key/Value) را می توانیم با علامت پیکان (<=) به صورت جفتی در نظر بگیریم یا اینکه صرفا مقادیر آرایه را با کاراکتر کاما (,) از هم متمایز کرده و ایندکس گذاری خودکار را به مفسر PHP واگذار کنیم، به طور مثال:
<?php
$array_1 = array('A' => 100, 'B' => 200, 'C' => 300);
echo $array_1['B'] . '<br>';
$array_2 = array(100, 200, 300);
echo $array_2[2];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:200
300
در آرایه اول برچسب مقادیر به صورت سفارشی و با کاراکترهای متنی (A,B,C) انجام شده است که در این حالت از اصطلاح کلید (Key) استفاده می کنیم، به فرض مقادیر کلید A در آرایه array_1 برابر با 100 است، اما در آرایه دوم شماره گذاری به صورت خودکار و از 0 انجام می شود (اشاره شد که آرایه ها در PHP از 0 شماره گذاری می شوند و به اصطلاح Zero-based هستند)، در این حالت از اصطلاح ایندکس (Index) استفاده می کنیم به فرض مقادیر ایندکس 1 آرایه array_2 برابر با 200 است.نکته: زبان برنامه نویسی PHP برخلاف جاوا اسکریپت (JavaScript) به صورت ذاتی از آرایه های با کلید متنی (Associative Array) پشتیبانی می کند و نیازی به تعریف آبجکت ثابت (Literal Object) جداگانه نیست.
تعریف آرایه در PHP با کاراکتر قلاب []
شیوه دوم تعریف آرایه که به حالت مختصرنویسی نیز معروف است استفاده از کاراکتر قلاب [] (یا Square Bracket) است که در این حالت هم می توانیم با یا بدون استفاده از کلیدهای سفارشی آرایه مورد نظر را تعریف کنیم، به طور مثال:
<?php
$array_1 = ['A' => 100, 'B' => 200, 'C' => 300];
echo $array_1['B'] . '<br>';
$array_2 = [100, 200, 300];
echo $array_2[2];
?>
خروجی نمونه کد بالا نیز به صورت زیر خواهد بود:200
300
اینکه در کدنویسی از چه شکلی از تعریف آرایه استفاده کنیم بستگی به موقعیت و گاهی سلیقه برنامه نویس دارد، روش array قدیمی تر است و از زمان پیدایش PHP معرفی شده است اما روش قلاب جدیدتر است و از نسخه 5.4 به مفسر PHP اضافه شده است، در هر صورت ممکن است در موارد محدودی کدنویسی برخی برنامه ها صرفا از یک روش خاص پشتیبانی کنند.تعریف آرایه های دو یا چندبعدی (Multidimensional) در PHP
استفاده از آرایه ها در کدنویسی برنامه های وب به حالت ساده و تک بعدی محدود نمی شود، گاهی مواقع مقدار هر کلید می تواند خود یک آرایه (آرایه آرایه یا Array of Array) باشد و این شیوه ممکن است تا چند سطح عمق پیدا کند که در این حالت از اصطلاح آرایه چند بعدی (Multidimensional) استفاده می کنیم، اصول تعریف و دسترسی به عناصر آرایه در این شیوه ها نیز مشابه با حالت تک بعدی است که در ادامه با چند مثال بررسی می کنیم.
- مثالی از آرایه دوبعدی در PHP:
<?php
$array_1 = ['A' => array(10, 20, 30), 'B' => array(40, 50, 60), 'C' => array(70, 80, 90)];
echo $array_1['B'][1];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:50
- مثالی از آرایه چندبعدی در PHP:<?php
$array_1 = [array([10, 20, 30], [40, 50, 60]), 56, 78];
echo $array_1[0][0][0];
echo '<br>';
echo $array_1[1];
?>
خروجی نمونه کد بالا به صورت نمونه زیر خواهد بود:<?php
$array_1 = [array([10, 20, 30], [40, 50, 60]), 56, 78];
echo $array_1[0][0][0];
echo '<br>';
echo $array_1[1];
?>
در این نمونه کد برای تعریف آرایه و عناصر زیرمجموعه آن از روش های مختلف (عبارت دستوری array و کاراکتر قلاب []) استفاده کرده ایم.نکته: گفتیم که PHP به صورت ذاتی از آرایه هایی که کلید متنی یا سفارشی داشته باشند (Associative Array) پشتیبانی می کند.
افزودن یا حذف عنصر آرایه در PHP
در مثال های بالا با نحوه دسترسی به عناصر آرایه به روش ایندکس (Index) و کلید (Key) آشنا شدیم، اما اگر بخواهیم یک عنصر را در مرحله دیگری از برنامه به آرایه اضافه یا برعکس اگر بخواهیم عنصری را از آرایه حذف کنیم چاره چیست؟
در اغلب زبان های برنامه نویسی برای اینگونه موارد توابع اختصاصی جداگانه ای تعریف می شود و ما هم در ادامه این سری از آموزش ها توابع کار با آرایه در PHP را بررسی خواهیم کرد منتها حذف و اضافه ساده نیازی به استفاده از تابع اختصاصی ندارد و به صورت زیر انجام می شود.
برای افزودن یک عنصر به آرایه بعد از مرحله تعریف کافی است از روش نمونه زیر پیروی کنیم:
<?php
$array_1 = ['A', 'B', 'C'];
$array_1[] = 'D';
echo $array_1[3];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:D
اگر با دستور print_r از آرایه array_1 خروجی بگیریم خواهیم داشت:Array ( [0] => A [1] => B [2] => C [3] => D )
همان طور که مشخص است از شیوه شماره گذاری خودکار (Index) در این حالت استفاده شده است، یک مثال از شیوه اختصاص کلید (Key) سفارشی:<?php
$array_1 = [22 => 'A', 13 => 'B', 57 => 'C'];
$array_1['14'] = 'D';
echo $array_1['14'];
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:D
اگر با دستور print_r از آرایه array_1 خروجی بگیریم خواهیم داشت:Array ( [22] => A [13] => B [57] => C [14] => D )
در حالت کلیدهای سفارشی رعایت ترتیب کلیدها اهمیتی ندارد.برای حذف یک عنصر از آرایه نیز تابع عمومی unset به روش زیر قابل استفاده است:
<?php
$array_1 = [22 => 'A', 13 => 'B', 57 => 'C'];
unset($array_1[22]);
print_r($array_1);
?>
نتیجه اجرای نمونه کد بالا به صورت زیر خواهد بود:Array ( [13] => B [57] => C )
برای حذف عنصر مورد نظر از آرایه کافی است در تابع unset آرایه را به همراه کلید متناظر به عنوان آرگیومنت تنظیم کنیم، همین روش برای حالت ایندکس خودکار نیز کاربرد خواهد داشت، مثال:<?php
$array_1 = ['A', 'B', 'C'];
unset($array_1[0]);
print_r($array_1);
?>
نتیجه اجرای نمونه کد بالا به صورت زیر خواهد بود:Array ( [1] => B [2] => C )
نکته مهم اینکه با حذف عنصر از آرایه با تابع unset چینش کلیدها تغییری نمی کند.استفاده از آرایه ها در حلقه foreach
در مفسر PHP حلقه foreach به صورت ذاتی و پیش فرض برای دسترسی به عناصر آرایه ها در دور تکرار تعریف شده است که در آموزش های مرتبط با انواع حلقه (Loop) به اختصار در این خصوص صحبت کردیم، با حلقه foreach می توانیم به فرض اطلاعات ارسال شده از فرم های HTML که فیلدهایی با قابلیت چندگانه (Multiple) دارند را تجزیه کرده و آیتم به آیتم عناصر آرایه ارسالی را مورد پردازش قرار دهیم، به طور مثال اگر فرم HTML زیر را داشته باشیم:
<form action="#" method="post">
<label for="country">انتخاب کشور:</label>
<select name="country[]" id="country" multiple="multiple">
<option value="Iran">Iran</option>
<option value="Germany">Germany</option>
<option value="Japan">Japan</option>
</select>
<input type="submit" value="ارسال">
</form>
در این فرم فیلد انتخاب شونده با نام فرضی country قابلیت چندگانه (Multiple) دارد و کاربر می تواند با نگه داشتن کلید Ctrl از بین option های موجود یک یا چند مورد را انتخاب و ارسال کند، با دقت در کدنویسی فرم HTML مشخص است که کاراکتر قلاب [] و عبارت multiple به فیلد country اضافه شده اند، در این حالت اطلاعات فیلد مورد نظر به صورت آرایه به سرور ارسال می شود اما در سمت سرور این آرایه را به چه نحوی مدیریت و به عناصر آن دسترسی پیدا کنیم؟پاسخ حلقه foreach است به طور مثال:
<?php
@$country = $_POST['country'];
foreach($country as $key => $value){
echo $value . '<br>';
}
?>
به این صورت اگر کاربر تمام موارد را انتخاب کند خروجی به شکل زیر خواهد بود:Iran
Germany
Japan
با حلقه for هم می توانیم به عناصر آرایه در دور تکرار دسترسی داشته باشیم اما حلقه for به طور ذاتی برای کار با آرایه ها تعریف نشده و باید هنگام گرفتن خروجی ایندکس/کلید مورد نظر را تعیین کنیم، به طور مثال:<?php
@$country = $_POST['country'];
$count = count($country);
for($i = 0; $i < $count; $i++){
echo $country[$i] . '<br>';
}
?>
کد بالا خروجی مشابه حلقه foreach خواهد داشت.توجه کنیم در حالت for ایندکس/کلید آرایه به صورت داینامیک و در هر دور حلقه متغیر است، در واقع ایندکس/کلید همان مقادیر متغیر i است که در هر دور حلقه یک واحد افزایش می یابد و حلقه نیز تا جایی که مقادیر i از تعداد عناصر آرایه که با تابع count محاسبه شده کوچکتر باشد ادامه می یابد.
در آموزش های بعدی با توابع کار با آرایه (Array Functions) که با تنوع و تعداد زیاد در مفسر PHP وجود دارند آشنا خواهیم شد.
دسته بندی: آموزش مقدماتی » PHP
برچسب ها: PHP
مطالب بیشتر:
توابع کار با آرایه در PHP - بخش سوم
حلقه for، foreach و while در PHP
توابع کار با آرایه در PHP - بخش اول
دستور switch و case در PHP
آموزش برنامه نویسی وب با PHP
توابع کار با آرایه در PHP - بخش سوم
حلقه for، foreach و while در PHP
توابع کار با آرایه در PHP - بخش اول
دستور switch و case در PHP
آموزش برنامه نویسی وب با PHP
دیدگاه
۵۲ دیدگاه برای این مطلب ارسال شده است.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
سید رضا حسینی
۲۰:۲۳ ۱۴۰۰/۱۱/۰۲
سلام و درود. بنده در یک افزونه بنام پیامک ووکامرس (رایگان) قصد تغییر متن یکی از مقادیر آرایه رو دارم. و میخوام اگه ممکن هست بفرمایید چطور میتونم ویرایش کنم:
میخواهم واژه "مستردشده " رو به واژه "ارسال به دفترپستی" تغییر بدم:
میخواهم واژه "مستردشده " رو به واژه "ارسال به دفترپستی" تغییر بدم:
https://s4.uupload.ir/files/img_20220122_202058_copy_1600x1200_q2n0.jpg
تصویر کد مربوط به همین بخش در افزونه:https://s4.uupload.ir/files/picsart_01-21-08.46.46_gp6.jpg
اگه بهم بگید چطور میتونم وارد بخش مقادیر این آرایه بشم ممنون میشم.با توجه به توضیحات بهتر نیست متن مورد نظر فارسی را در افزونه پیدا و با عبارت مد نظرتان جایگزین کنید؟ با برنامه هایی مانند PhpStorm جستجو و پیدا کردن یک عبارت در پروژه های بزرگ هم به راحتی ممکن است، دلیل خاصی برای عدم تغییر مستقیم متن وجود دارد؟ در هر صورت تصاویری که ارسال کرده اید برای درک مشکل و نوشتن کدی که این کار را انجام دهد کفایت نمی کند، حداقل باید دسترسی به سورس کد افزونه و آزمایش و خطا فراهم باشد.
سید رضا حسینی
۰۸:۲۰ ۱۴۰۰/۱۱/۰۳
بله درست میفرمایید. من دنبال همون قطعه متنی هستم که شما گفتید. مگه اون مقادیر در داخل همین آرایه نیستند؟
چون در خود افزونه جایی به نام وضعیت های دریافت پیامک وجود دارد. من هم پیداش کردم (تو عکس اولم هست) اما متاسفانه مقادیر ثبت شده برای اون آرایه رو نشون نمیده. ( 9 متغیر براش ثبت شده. تو عکس دوم هست) من فقط میخوام اون نام متغیر ها رو تغییر بدم. بنظرتون چطور باید اینکارو کنم؟ و اینکه اصلا چطور میتونم پیداشون کنم؟ آیا در همین بخشی که در عکس اول هستند وجود داره؟ یا در فایل دیگه ای باید دنبالشون بگردم؟
چون در خود افزونه جایی به نام وضعیت های دریافت پیامک وجود دارد. من هم پیداش کردم (تو عکس اولم هست) اما متاسفانه مقادیر ثبت شده برای اون آرایه رو نشون نمیده. ( 9 متغیر براش ثبت شده. تو عکس دوم هست) من فقط میخوام اون نام متغیر ها رو تغییر بدم. بنظرتون چطور باید اینکارو کنم؟ و اینکه اصلا چطور میتونم پیداشون کنم؟ آیا در همین بخشی که در عکس اول هستند وجود داره؟ یا در فایل دیگه ای باید دنبالشون بگردم؟
قاعدتا عبارت فارسی مورد نظر در بخشی از افزونه یا برنامه ووکامرس و یا در دیتابیس وجود دارد که در خروجی نمایش داده می شود، البته ممکن است مقدار ترجمه Encode هم شده باشد که این حالت خیلی متداول نیست، به نظر ما قبل از نصب افزونه آن را با برنامه PhpStorm به صورت پروژه اجرا کنید و از قسمت Edit گزینه Find در نهایت Find in Path را انتخاب و به دنبال عبارت فارسی مد نظر در کل افزونه جستجو کنید، اگر موفق نشدید می توانید افزونه را به صورت ZIP شده به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا بررسی کنیم.
mahdi
۲۰:۳۳ ۱۴۰۰/۱۱/۲۰
درود استاد گرامی خوب هستین؟ اول بگم اینکه پیام نمیدم یا جویای احوالتون نمیشم از رو بیمعرفتی نیستا فقط گذاشتم این قالب وردپرس تموم بشه که نشونتون بدم ، کم کم داره تموم میشه فقط دارم هی بهش امکانات اضافه میکنم ، این پرسشم هم برای ساخت گالری تصاویر و .. هستش برای المنتور که نمیدونم چرا ازش استفاده میکنن ، برا یه متن ساده ۱۰ تا تگ اضافه میکنه استاد یک آرایه تودرتوی بزرگ به شکل زیر دارم ، اینجا فقط یکی از خانههاش رو اوردم و باقیشون هم مانند همین هستند
$mm = [
0 =>[],
1 =>[],
2 => [
0 => ['raj' => 6, 'sotun' => 1],
1 => ['raj' => 6, 'sotun' => 1],
2 => ['raj' => 6, 'sotun' => 2],
3 => ['raj' => 6, 'sotun' => 13],
4 => ['raj' => 6, 'sotun' => 19],
],
];
میخوام در هر خانه آرایه بالا با نگاه به مقدار همتای ستونها به آرایه زیر برسم ولی مغزم دیگه پاچیده ، یک کمکی در راه خدا کنید :)$newmm = [
0 =>[],
1 =>[],
2 => [
0 => [
['raj' => 6, 'sotun' => 1],
['raj' => 6, 'sotun' => 1],
],
0 => [
['raj' => 6, 'sotun' => 2]
],
0 => [
['raj' => 6, 'sotun' => 13],
],
0 => [
['raj' => 6, 'sotun' => 19],
],
],
];
با سپاس استاد گرامیخدا قوت، در مورد آرایه و تبدیل به حالتی که انتظار دارید کمی دست و پنجه نرم کردیم که نهایتا نتیجه اولیه به صورت زیر شد:
<?php
$mm = [
0 => [],
1 => [],
2 => [
0 => ['raj' => 6, 'sotun' => 1],
1 => ['raj' => 6, 'sotun' => 1],
2 => ['raj' => 6, 'sotun' => 2],
3 => ['raj' => 6, 'sotun' => 13],
4 => ['raj' => 6, 'sotun' => 19],
],
];
$newmm = [];
$top_index = 0;
$sub_index = 0;
foreach($mm as $key => $value) {
if(count($value) > 0) {
for($i = 0; $i < count($value); $i++) {
if($i > 0) {
if($value[$i]['sotun'] === $value[$i - 1]['sotun']) {
$newmm[$top_index][$sub_index - 1] = array($newmm[$top_index][$sub_index - 1], array('raj' => $value[$i]['raj'], 'sotun' => $value[$i]['sotun']));
} else {
$newmm[$top_index][$sub_index] = array('raj' => $value[$i]['raj'], 'sotun' => $value[$i]['sotun']);
}
} else {
$newmm[$top_index][$sub_index] = array('raj' => $value[$i]['raj'], 'sotun' => $value[$i]['sotun']);
}
$sub_index++;
}
} else {
$newmm[$top_index] = $value;
}
$top_index++;
}
print_r($newmm);
?>
متاسفانه به جهت محدودیت زمان این کد تکمیل نیست و باید خودتان باگ های آن را چکش کاری کنید، همچنین آرایه خروجی شما کلیدهای یکسان (0) دارد که برای آرایه ها چنین حالتی ممکن نیست.mahdi
۲۱:۳۵ ۱۴۰۰/۱۱/۲۱
درود استاد گرامی ، دمت گرم کدش تکمیل تکمیل بود فقط شماره آیتم های اصلی به ترتیب نبود که با اری مپ درست شد ، اون کلیدهای یکسان هم چون کپی پیست کردم به اشتباه همش ۰ شده بود
با سپاس استاد عزیز
با سپاس استاد عزیز
سپاس از نکات تکمیلی :)
m.b
۱۶:۳۷ ۱۴۰۰/۱۱/۲۳
سلام مجدد
یک سوال برام پیش اومده من یک فرم نوشتم که اسامی بیماران رو تو اون می نویسم و به دیتابیس ارسال میشه حالا سوالم اینجاست که با توجه به نمونه سورس که ارسال کردم میخوام اگر بیمار با نام و نام خانوادگی و تاریخ و زمان یکسان در فرم وارد شد پیغام بده قبلا این بیمار با این مشخصات وارد شده و اجازه ثبت بیمار با مشخصات یکسان و در تاریخ و زمان را نده و پیغام خطا بده ممنون میشم راهنمایی کنیین با توجه به نمونه سورس هام.
یک سوال برام پیش اومده من یک فرم نوشتم که اسامی بیماران رو تو اون می نویسم و به دیتابیس ارسال میشه حالا سوالم اینجاست که با توجه به نمونه سورس که ارسال کردم میخوام اگر بیمار با نام و نام خانوادگی و تاریخ و زمان یکسان در فرم وارد شد پیغام بده قبلا این بیمار با این مشخصات وارد شده و اجازه ثبت بیمار با مشخصات یکسان و در تاریخ و زمان را نده و پیغام خطا بده ممنون میشم راهنمایی کنیین با توجه به نمونه سورس هام.
<?php
if(isset($_POST['send'])){
$con=mysqli_connect("localhost","","","");
// Check connection
if (mysqli_connect_errno()){
echo "به دلیل مشکل زیر، اتصال برقرار نشد : <br />" . mysqli_connect_error();
}
$sql = "SELECT * FROM patients WHERE firstname = '$_POST[firstname]' AND lastname = '$_POST[lastname]' AND date = '$_POST[date]' AND time = '$_POST[time]'";
if($result = mysqli_query($con, $sql)) {
$row_count = mysqli_num_rows($result);
}
if($row_count > 0){
echo "<script> alert('این بیمار قبلا ثبت شده است!')</script>";
} else {
$sql="INSERT INTO patients (firstname, lastname, nationalcode, mobile, date, day, time, rezerv, description, paymentstatus, view, registrationtime, ip, typeofapplication )
VALUES ('$_POST[firstname]', '$_POST[lastname]', '$_POST[nationalcode]', '$_POST[mobile]', '$_POST[date]', '$_POST[day]', '$_POST[time]', '$_POST[rezerv]', '$_POST[description]', '$_POST[paymentstatus]', '$_POST[view]', now(), '$_SERVER[REMOTE_ADDR]', '$_POST[typeofapplication]')";
if (!mysqli_query($con, $sql)){
die('خطای زیر رخ داده است : <br />' . mysqli_error($con));
}
echo "<script> alert('اطلاعات با موفقیت ثبت شد')</script>";
}
mysqli_close($con);
}
?>
کدهای بالا با توجه به هدفتان ویرایش شدند، منتها همان طور که قبلا گفتیم رعایت نکات امنیتی و ایمن سازی پارامترهایی که از سمت فرم HTML ارسال می شوند با روش های موجود مثل تابع mysqli_real_escape_string جهت جلوگیری از نفوذ به دیتابیس ضروری است که در سورس های شما رعایت نشده است، همچنین به جهت عدم وجود دیتابیس و نمونه اطلاعات کد بالا تست نشده است.
m.b
۱۶:۴۵ ۱۴۰۰/۱۱/۲۳
سلام
جسارتا می خواستم بدونم من میام اطلاعات رو از دیتابیس فراخوانی می کنم و تو صفحه مورد نظرم نمایش می دم فقط تو قسمت ردیف ها ای دی مورد نظر نمایش داده میشه مثلا 134 و 145 و 157 و ... می خواستم بدونم در صورت امکان چکار باید کرد که ردیف ها از 1 و 2 و 3 و ... به ترتیب شروع بشه و تو جدول نمایش داده بشه اینم نونه سورس هام.
جسارتا می خواستم بدونم من میام اطلاعات رو از دیتابیس فراخوانی می کنم و تو صفحه مورد نظرم نمایش می دم فقط تو قسمت ردیف ها ای دی مورد نظر نمایش داده میشه مثلا 134 و 145 و 157 و ... می خواستم بدونم در صورت امکان چکار باید کرد که ردیف ها از 1 و 2 و 3 و ... به ترتیب شروع بشه و تو جدول نمایش داده بشه اینم نونه سورس هام.
<div class="col-10 col-s-12" style="margin-top:5px;">
<?php
$con=mysqli_connect("localhost","","","");
// Check connection
if (mysqli_connect_errno()){
echo "به دلیل مشکل زیر، اتصال برقرار نشد : <br />" . mysqli_connect_error();
}
$x=jdate(' Y-n-j','','','','en');
echo"$x";
$result = mysqli_query($con,"SELECT * FROM patients WHERE date='$x' ORDER BY `time` ASC");
echo "<table border='1' >
<tr>
<th >ردیف</th>
<th>نام</th>
<th>نام خانوادگی</th>
<th>کد ملی </th>
<th>شماره تماس </th>
<th>تاریخ</th>
<th>روز</th>
<th>زمان</th>
<th>وضعیت پرداخت</th>
<th>توضیحات</th>
<th>ویرایش</th>
<th>حذف</th>
</tr>";
$loop = 1;
while($row = mysqli_fetch_array($result)){
echo "<tr>";
//echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $loop . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['nationalcode'] . "</td>";
echo "<td>" . $row['mobile'] . "</td>";
echo "<td>" . $row['date'] . "</td>";
echo "<td>" . $row['day'] . "</td>";
echo "<td>" . $row['time'] . "</td>";
echo "<td>" . $row['paymentstatus'] . "</td>";
echo "<td>" . $row['description'] . "</td>";
echo "<td>" .'<a href="https://www.drmoslemsoltani.ir/dashbord/update.php"><img src="/img/edite.png" width="20px" height="20px" alt="update"/></img></a>';
echo "<td>" .'<a href="https://www.drmoslemsoltani.ir/dashbord/delete.php"><img src="/img/delete.png" width="20px" height="20px" alt="delete"/></img></a>';
echo "</tr>";
$loop++;
}
echo "</table>";
///// jdate(' j -n -Y','','','','en');
?>
</div>
</div>
کدهای بالا برای شمارش ردیف ها از 1 ویرایش و به روزرسانی شدند.
نکته: کد تست نشده است!
نکته: کد تست نشده است!
m.b
۲۳:۴۸ ۱۴۰۰/۱۱/۲۳
بازم مث همیشه کارتون عالیه.
خداقوت و خیلی سپاسگزارم بابت زحماتی که میکشین و بدون منت راهنمایی می کنین.
خداقوت و خیلی سپاسگزارم بابت زحماتی که میکشین و بدون منت راهنمایی می کنین.
آخرین دیدگاه ها
برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سیدعباسی
با سلام من میخوام از متن زیر لینکش رو دربیارم و در آخر مقدار 3088 رو بصورت خروجی نهایی داشته باشم با...۱۴۰۳/۰۷/۰۷
مجتبی
سلام وقت بخیر میخوام یک روز به تاریخ دریافتی اضافه شه ممنون میشم راهنمایی کنید۱۴۰۳/۰۶/۲۰
پرتو
سلام خوبید؟ خسته نباشیذ ببخشید مزاحم شدم می خواستم بگم من به شما ایمیل زدم ولی هنوز شما جواب ندادین می تونم بپرسم چرا سوال...۱۴۰۳/۰۶/۱۵
در انتظار بررسی: ۰
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.