برنامه نویسی php
فایل ها در PHP
باز کردن فایل در PHP
تابع ()fopen برای باز کردن فایل ها در php مورد استفاده قرار می گیرد.
پارامتر اول این تابع شامل نام فایلی است که می خواهیم باز شود و پارامتر دوم مشخص می کند که فایل در چه حالتی باز شود:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>فایل ممکن است در یکی از حالات زیر باز شود:
حالت توضیحات r فقط خواندنی. از ابتدای فایل آغاز می شود
r+ خواندنی/نوشتنی. از ابتدای فایل آغاز می شود
w فقط نوشتنی. فایل را باز و محتویات آن را پاک می کند، یا اگر فایلی وجود نداشت آن را ایجاد می کند
w+ خواندنی/نوشتنی. فایل را باز و محتویات آن را پاک می کند، یا اگر فایلی وجود نداشت آن را ایجاد می کند
a افزودن(الحاق). فایل را باز و در انتهای آن می نویسد، یا اگر فایلی وجود نداشت آن را ایجاد می کند
a+ خواندنی/افزودنی. محتویات فایل را با نوشتن در انتهای آن حفظ می کند
x فقط نوشتنی. یک فایل جدید ایجاد می کند.اگر فایل درحال حاضر وجود داشته باشد false و یک خطا برمیگرداند
x+ خواندنی/نوشتنی. یک فایل جدید ایجاد می کند. اگر فایل درحال حاضر وجود داشته باشد false و یک خطا برمیگرداند
نکته:اگر تابع ()fopen قادر به باز کردن فایل مشخص شده نباشد٫ مقدار "0" یا (false) را برمی گرداند.
مثال:
در مثال زیر اگر تابع ()fopenقادر به باز کردن فایل مشخص شده نباشد یک پیغام تولید می کند:
<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>بستن فایل در PHP
تابع ()fclose برای بستن یک فایل باز استفاده می شود:
<?php
$file = fopen("test.txt","r");
//some code to be executed
fclose($file);
?>چک کردن پایان فایل
تابع ()feof بررسی می کند که آیا به پایان فایل (eof) رسیده ایم یا نه.
تابع ()feof برای ایجاد حلقه در داده های با طول نامشخص مناسب است.
توجه:شما نمی توانید از فایل هایی که در حالت w و a و x باز شده اند، بخوانید!
if (feof($file)) echo "End of file";
خواندن خط به خط یک فایل
تابع ()fgets برای خواندن یک خط از یک فایل، مورد استفاده قرار می گیرد.
نکته: بعد از هر بار فراخوانی این تابع، اشاره گر فایل، به خط بعدی جابه جا می شود.
مثال:
مثال زیر یک فایل را تا پایان فایل، خط به خط می خواند:
<?php
$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>خواندن کاراکتر به کاراکتر یک فایل
تابع ()fgetc برای خواندن یک کاراکتر تنها از یک فایل، مورد استفاده قرار می گیرد.
نکته: بعد از فراخوانی این تابع، اشاره گر فایل به کاراکتر بعدی جابه جا می شود.
مثال:
مثال زیر یک فایل را تا پایان فایل، کاراکتر به کاراکتر می خواند:
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
فرم های html در PHP
فرم های HTML در PHP
مهمترین چیز موقع کار کردن با فرمهای HTML و PHP این است که هر عنصر در فرم HTML به طور اتوماتیک در فرم PHP قابل دسترس و ردیابی است.
در PHP با استفاده از متغیرهای POST_$ و GET_$ می توان به اطلاعات فرم های HTML دسترسی داشت.
مثال:
در مثال زیر یک فرم HTML با سه عنصر زیر تعریف شده است:
- فیلد input از نوع text که با نام "fname" در کد PHP قابل ردیابی است.
- فیلد input از نوع text که با نام "age" در کد PHP قابل ردیابی است.
- فیلد input از نوع submit که محتویات textها را به صفحه "welcome.php" می فرستد.
<html>
<body>
<form action="welcome.php" method="post">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>
</body>
</html>توجه: در مثال بالا از دو خصوصیت در تگ form استفاده شده ولی به صورت کلی خصوصیات تگ form به صورت زیر است:
- action: اگر submit اتفاق افتاد، اطلاعات فرم HTML به صفحه ای که در این خصوصیت مشخص شده ارسال می شود.(به صورت پیش فرض صفحه جاری در نظر گرفته می شود)
- method: با استفاده از این خصوصیت مشخص می کنیم که ارسال اطلاعات از فرم HTML به صفحه PHP به چه شکل باشد، اگر آنرا با مقدار "get" پر کنیم، اطلاعات فرم در آدرس صفحه قرار می گیرد و ارسال می شود، و برعکس اگر آنرا با مقدار "post" پر کنیم، اطلاعات به صورت یک آرایه ارسال می شود.(به صورت پیشفرض Get در نظر گرفته می شود)
- name: نام فرم است كه برای php نیازی به آن نداریم ولی اگه بخواهیم از جاوا اسكریپت استفاده كنیم نیاز می شود (مثل چك كردن صحت ایمیل قبل از ارسال)
- target: نوع باز شدن صفحه مقصد را مشخص می کند كه شامل صفحه جاری ، صفحه جدید ، صفحه پدر ، یك فریم خاص و... است.
- ...
فایل "welcome.php" می تواند چیزی شبیه زیر باشد:
<html>
<body>
Welcome <?php echo $_POST["fname"]; ?>!<br />
You are <?php echo $_POST["age"]; ?> years old.
</body>
</html>اگر در فرم HTML تعریف شده تکس باکس ها را به صورت "fname=Amir" و "age=28" مقدار دهی کنیم خروجی برنامه بعد از کلیک روی دکمه "submit" به صورت زیر خواهد بود:
Welcome Amir!
You are 28 years old.همانطور که قبلاً گفته شد متغیرها با علامت "$" شروع می شوند، در صفحه PHP بالا نیز از متغیری بنام "post_$" استفاده شده که در فصل بعد توضیح داده خواهد شد.
اعتبار سنجی فرم (Validation Form)
اعتبار سنجی فرم یا Validation Form یعنی چک کردن ورودی های کاربر، قبل از اینکه در دیتابیس ذخیره شود، مثلاً در بالا برای تکس باکس "age" باید حتماً کاراکترهای عددی وارد شود، در غیر این صورت برنامه باید پیغام خطا بدهد.
به دو صورت می توان اعتبار سنجی کرد:
- client scripts: اعتبار سنجی سمت سرویس گیرنده انجام می شود که در این صورت سرعت بیشتر خواهد بود.
- server validation: اعتبار سنجی سمت سرویس دهنده انجام می شود، در حقیقت این وظیفه را یک صفحه PHP که روی سرور قرار دارد انجام می دهد.
در فصل های آینده راجع به این موضوع به صورت کامل توضیح داده خواهد شد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
فیلتر کردن رکوردها در PHP
فیلتر کردن رکوردها
قسمت WHERE در انتهای دستورات SELECT، UPDATE و یا DELETE قرار می گیرد و رکوردها را فیلتر می کند(مثلاً در دستور DELETE مشخص می کند که عمل حذف روی کدام رکوردها اتفاق بیافتد).
نحوه استفاده:
SELECT column_name(s)
FROM table_name
WHERE column_name operator valueبرای کسب اطلاعات بیشتر در مورد SQL، به لینک روبرو مراجعه فرمایید: آموزش SQL-مقدمه
در مثال زیر، بشرطی ستون های id و firstname و lastname از جدول MyGuests انتخاب می شوند که مقدار ستون lastname آنها برابر "Doe" باشد:
مثال(MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ارتباط به پایگاه داده
$conn = new mysqli($servername, $username, $password, $dbname);
// مطمئن شدن از صحت ارتباط
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
//اجرای کوئری و قرار دادن نتیجه در متغیر
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// نمایش داده ها به ازای هر ردیف
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
//بستن ارتباط با پایگاه داده
$conn->close();
?>خروجی کد بالا:
id: 1 - Name: John Doeمثال(MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد ارتباط با پایگاه داده
$conn = mysqli_connect($servername, $username, $password, $dbname);
// اطمینان از صحت ارتباط
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// نمایش داده ها به ازای هر ردیف
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>خروجی کد بالا:
id: 1 - Name: John Doeبرای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
فیلتر ورودی ها در PHP
فیلتر ورودی ها در php
تقریباً همه ی برنامه های تحت وب از محیط بیرون دریافت اطلاعات دارند که معمولاً این ورودی ها می تواند از طریق کاربران یا برنامه های دیگر مثل وب سرویس ها باشد، برای اطمینان از صحت اطلاعات ورودی، فیلترهای PHP کمک فراوانی به ما خواهند کرد.
شما باید همیشه داده های ورودی را از فیلترها عبور دهید، در حقیقت فیلتر ورودی ها یکی از مهمترین مسائل امنیت برنامه هاست.
ورودی های برنامه کدامند؟
- داده های دریافت شده از یک فرم HTML
- Cookieها
- داده های دریافت شده از وب سرویس ها
- متغیرهایی که روی سرور ایجاد می شوند مثل sessionها
- اطلاعاتی که از پایگاه داده بازیابی می شود
توابع و فیلترها
برای فیلترکردن یک متغیر، یکی از توابع زیر را استفاده کنید:
- ()filter_var : یک متغیر خاص را با یک صافی مخصوص فیلتر می کند.
- ()filter_var_array : چندین متغیر را با یک صافی یکسان و یا متفاوت فیلتر می کند.
- ()filter_input : یک متغیر ورودی را می گیرد و آن را فیلتر می کند.
- ()filter_input_array : چندین متغیر ورودی را می گیرد و آن ها را با یک صافی یکسان و یا متفاوت فیلتر می کند.
مثال: در اینجا با استفاده از تابع ()filter_var، صحیح بودن متغیر int$ را بررسی می کنیم:(اعشاری نباشد)
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>خروجی کد بالا:
Integer is valid
در کد بالا از صافی "FILTER_VALIDATE_INT" برای فیلتر کردن متغیر استفاده می کند.
اگر ما مثال بالا را با متغیری که integer نیست مثل "123abc" امتحان کنیم، خروجی چنین خواهد بود: "integer is not valid"
برای مشاهده لیست کامل توابع و فیلترها به بخش توابع کار با فیلترها در PHP مراجعه کنید.
معتبرسازی و اصولی عمل کردن
به صورت کلی دو نوع فیلتر وجود دارد:
فیلترهای اعتبار سنجی:
- برای معتبر کردن ورودی های کاربر استفاده می شوند.
- برای قالب بندی قوانین محض استفاده می شود.(مثل معتبرسازی URL یا E-Mail)
- اگر داده ورودی، اعتبار نداشته باشد FALSE وگرنه مقدار متغیر را بر می گرداند.
فیلترهای اصولی:
- وجود یا عدم وجود کاراکترهایی خاص در یک رشته را بررسی می کند.
- برای قالب بندی داده ها نیست.
- همیشه یک رشته برمی گرداند.
گزینه ها و پرچم ها (optionها و flagها)
Optionها و flagها برای اضافه کردن شرط های خاص به فیلترها استفاده می شوند.
فیلترهای متفاوت، optionها و flagهای متفاوتی دارند.
مثال: در اینجا ما یک متغیر integer را با استفاده از ()filter_var و optionهای "min_range" و "max_range" معتبر می کنیم:
<?php
$var=300;
$int_options = array("options"=>array("min_range"=>0,"max_range"=>256));
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>خروجی کد بالا:
Integer Is not valid
در کد بالا optionها باید در یک آرایه ی انجمنی با نام "options" قرار داده شوند. اگر یک flag استفاده می شود نیاز نیست که در آرایه قرار گیرد.
برای مشاهده لیست کامل توابع و فیلترها به بخش توابع کار با فیلترها در PHP مراجعه کنید. بررسی کنید چه optionها و flagهایی برای هر فیلتر وجود دارد.
ورودی را معتبر کنید
اجازه دهید با یک مثال ورودی یک فرم را معتبر کنیم.
اولین کاری که باید انجام دهیم این است که مطمئن شویم که داده ای که ما به دنبال آن هستیم وجود دارد یا نه.
سپس داده ی ورودی را با استفاده از تابع ()filter_input فیلتر می کنیم.
مثال: در مثال زیر متغیر ورودی "email" به صفحه php فرستاده می شود:
<?php
if(!filter_has_var(INPUT_GET, "email"))
{
echo("Input type does not exist");
}
else
{
if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
{
echo "E-Mail is not valid";
}
else
{
echo "E-Mail is valid";
}
}
?>توضیح مثال:
در مثال بالا یک ورودی email داریم که با استفاده از متد "GET" به آن ارسال شده است:
- چک می کند که آیا متغیر ورودی "email" از نوع "GET" موجود هست
- اگر متغیر ورودی وجود داشته باشد٫ چک می کند که آیا یک آدرس ایمیل معتبر هست یا نه
ورودی را اصولی کنید
بیایید پاکسازی یک URL ارسال شده از فرم را امتحان کنیم.
ابتدا مطمئن می شویم که داده ای که ما به دنبال آن هستیم وجود دارد یا نه.
سپس داده ی ورودی را با استفاده از تابع ()filter_input اصولی می کنیم.
مثال: در مثال زیر٫ متغیر ورودی "URL" به صفحه php فرستاده می شود:
<?php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST,"url",FILTER_SANITIZE_URL);
}
?>توضیح مثال:
مثال بالا یک ورودی url دارد که با استفاده از متد "POST" به آن ارسال شده است:
- چک می کند که آیا متغیر ورودی "url" از نوع "POST" موجود هست.
- اگر متغیر ورودی وجود داشته باشد٫ آن را اصولی (کاراکترهای نامعتبر را کنار می گذارد) و در متغیر url$ ذخیره می کند.
اگر متغیر ورودی یک رشته مثل این باشد "http://www.Beååyamøøooz.com" متغیر url$ بعد از اصولی سازی به این شکل خواهد بود:
http://www.Beyamooz.com
فیلتر ورودی های چندگانه ی
یک فرم HTML همیشه از بیش از یک فیلد ورودی تشکیل شده است. برای جلوگیری ازچندین بار فراخوانی توابع filter_var یا filter_input ما می توانیم توابع filter_var_array یا filter_input_array را استفاده کنیم.
مثال: در این مثال ما تابع filter_input_array را برای فیلترکردن سه متغیر که با استفاده از متد GET ارسال شده اند استفاده می کنیم.(نام، سن و آدرس ایمیل)
<?php
$filters = array("name" => array("filter"=>FILTER_SANITIZE_STRING),
"age" => array("filter"=>FILTER_VALIDATE_INT,
"options"=>array("min_range"=>1,"max_range"=>120)),
"email"=> FILTER_VALIDATE_EMAIL);
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
{
echo("Age must be a number between 1 and 120.<br />");
}
elseif(!$result["email"])
{
echo("E-Mail is not valid.<br />");
}
else
{
echo("User input is valid");
}
?>توضیح مثال:
مثال بالا سه ورودی (name,age,email) دارد که با استفاده از متد "GET" به آن ارسال شده است:
- یک آرایه شامل نام متغیرهای ورودی و فیلترهای مصرفی برای متغیرهای ورودی مشخص شده است.
- تابع ()filter_input_array را همراه با متغیرهای ورودی GET و آرایه ای که تعیین کردیم فراخوانی می کنیم.
- متغیرهای "email" و "age" را برای ورودی های نامعتبر در متغیر result$ چک می کند.(اگر هرکدام از متغیرهای ورودی نامعتبر باشند، آن متغیر ورودی پس از تابع ()filter_input_array برابر با FALSE قرار خواهد گرفت)
توجه: پارامتر دوم تابع ()filter_input_array می تواند یک آرایه یا یک صافی خاص باشد. اگر پارامتر یک صافی یا فیلتر خاص باشد تمام مقادیر در آرایه ی ورودی بوسیله ی صافی مشخص شده فیلتر می شوند، اگر پارامتر یک آرایه است باید قواعد زیر را دنبال کند:
- باید یک آرایه ی انجمنی باشد.(PHP Arrays)
- کلید یا ایندکس آرایه باید با نام ورودی ها یکی باشد.
- مقدار آرایه باید یک صافی خاص یا یک آرایه دیگر شامل صافی و flagها و optionها باشد.
صافی های تعریف شده توسط خودمان
امکان فراخوانی یک تابع کاربرنویس و استفاده از آن به عنوان یک فیلتر وجود دارد. با این کار، تمامی فیلترهای ممکن را می توان پوشش داد.
بعد از تعریف تابع خودمان باید با استفاده از FILTER_CALLBACK که به عنوان پارامتر دوم توابع فیلتر است مشخص کنیم که نوع صافی مصرفی ، تابع تعریف شده توسط خودمان است.
مثال: در مثال زیر٫ همه ی کاراکترهای "_" به خط فاصله تبدیل می شود:
<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));
?>خروجی کد بالا:
Peter is a great guy!
توضیح مثال:
مثال بالا همه ی کاراکترهای "_" را به خط فاصله تبدیل می کند:
- یک تابع برای جایگزین کردن کاراکتر"_" به خط فاصه ایجاد می کند
- تابع ()filter_var را همراه با فیلتر FILTER_CALLBACK و یک آرایه شامل تابع مان فراخوانی می کند
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
فیلدهای الزامی در PHP
در این آموزش، نحوه ی ساخت فیلدهای الزامی (required) و نمایش پیغام خطای مناسب نشان داده خواهد شد.
فیلدهای الزامی در PHP
در آموزش قبلی، تمام فیلدهای ورودی اختیاری بودند. اما همانطور که در جدول اعتبار سنجی زیر مشخص شده است، فیلدهای "نام"، "ایمیل" و "جنسیت" الزامی اند. این فیلدها نمی توانند خالی باشند و باید حتماً با یک مقدار تنظیم شوند.
قوانین اعتبارسنجی:
فیلد قوانین اعتبارسنجی نام الزامی است. فقط باید شامل حروف الفبا و خط فاصله باشد. ایمیل الزامی است. باید شامل فرمت صحیح ایمیل باشد (همراه با علامت @ و .) وب سایت اختیاری است. اگر پر شد، باید شامل فرمت صحیح URL باشد. توضیحات اختیاری است. می تواند شامل چند خط متن باشد (textarea) جنسیت الزامی است. یکی از دو مورد باید انتخاب شود. در کد زیر، تعدادی متغیر جدید با نام های nameErr$ و emailErr$ و genderErr$ و websiteErr$ اضافه شده است. این متغیرهای خطا، متن خطای مورد نظر را برای فیلدهای الزامی در خود نگه می دارند. ما همچنین برای هر متغیر POST_$ یک دستور if... else اضافه کرده ایم. این دستور شرطی، چک می کند که اگر متغیر POST_$ خالی است (با استفاده از تابع ()empty) یک متن خطای مناسب در متغیرهای خطا ذخیره می کند، و اگر خالی نبود، مقدار برگشتی تابع ()test_input در متغیر متناظرش ذخیره می شود:
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["name"]))
{$nameErr = "Name is required";}
else
{$name = test_input($_POST["name"]);}
if (empty($_POST["email"]))
{$emailErr = "Email is required";}
else
{$email = test_input($_POST["email"]);}
if (empty($_POST["website"]))
{$website = "";}
else
{$website = test_input($_POST["website"]);}
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
if (empty($_POST["gender"]))
{$genderErr = "Gender is required";}
else
{$gender = test_input($_POST["gender"]);}
}
?>نمایش متن خطا در PHP
در فرم HTML، باید یک اسکریپت PHP اضافه نمایید. که متن خطای مورد نظر را نمایش می دهد:
مثال (فیلدهای الزامی در PHP)
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
span{min-width: 200px;float: right;}
</style>
</head>
<body>
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["name"]))
{$nameErr = "وارد کردن نام الزامی است";}
else
{$name = test_input($_POST["name"]);}
if (empty($_POST["email"]))
{$emailErr = "وارد کردن ایمیل الزامی است";}
else
{$email = test_input($_POST["email"]);}
if (empty($_POST["website"]))
{$website = "";}
else
{$website = test_input($_POST["website"]);}
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
if (empty($_POST["gender"]) || $_GET["gender"]=="undefined")
{$genderErr = "انتخاب جنسیت الزامی سات";}
else
{$gender = test_input($_POST["gender"]);}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>مثال اعتبارسنجی فرم ها در PHP</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div>
<span>نام:</span><input type="text" name="name">
<span class="error">*</span>
</div>
<div>
<span>ایمیل:</span><input type="text" name="email">
<span class="error">*</span>
</div>
<div>
<span>وب سایت:</span><input type="text" name="website">
<span class="error"></span>
</div>
<div>
<span>توضیحات:</span><textarea name="comment" rows="5" cols="40"></textarea>
<span class="error">*</span>
</div>
<div>
<span>جنسیت:</span>
<input type="radio" name="gender" value="female">زن
<input type="radio" name="gender" value="male">مرد
</div>
</div><input type="submit" name="submit" value="ارسال اطلاعات"></div>
</form>
<?php
if ($nameErr!="" || $emailErr!="" || $genderErr!="" || $websiteErr!="")
echo "<span style='color:red' >
$nameErr <br /> $emailErr <br /> $genderErr <br /> $websiteErr
</span>";
else
{
echo "<br /><h2>خروجی کدتان</h2>";
echo "نام :$name";
echo "<br />";
echo "ایمیل: $email";
echo "<br />";
echo "وب سایت: $website";
echo "<br />";
echo "توضیحات: $comment";
echo "<br />";
echo "جنسیت: $ender";
}
?>
</body>
</html>خروجی کد بالا:
مثال اعتبارسنجی فرم ها در PHP
در آموزش بعدی نحوه اعتبارسنجی فیلدهای "نام"، "ایمیل" و "وب سایت" توضیح داده خواهد شد. (آیا فیلد "نام"، فقط شامل حروف و فاصله خالی است - آیا فیلد "ایمیل"، شامل یک فرمت صحیح است - اگر فیلد "وب سایت" پر شد، آیا شامل یک فرمت صحیح است)
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
کار با فرم های PHP
با استفاده از متغیرهای GET _$ و POST_$، می توانید سمت سرور مقادیر فرم HTML را دریافت نمایید.
یک فرم ساده HTML
در مثال زیر، یک فرم ساده HTML با دو فیلد ورودی و یک دکمه submit نشان داده شده است:
مثال (کار با فرم های PHP)
<html>
<body>
<form action="welcome.php" method="post">
نام: <input type="text" name="name"><br>
ایمیل: <input type="text" name="email"><br>
<input type="submit" value="ارسال اطلاعات">
</form>
</body>
</html>خروجی کد بالا:
زمانی که کاربر، اطلاعات فرم بالا را پر می کند و روی دکمه "submit" کلیک می کند، اطلاعات فرم برای پردازش به یک فایل PHP بنام "welcome.php" ارسال می شود. اطلاعات فرم با متد POST ارسال می شود.
فایل welcome.php
برای نمایش اطلاعات ارسال شده به سرور، بصورت ساده می توانید همه متغیرها را چاپ نمایید:
<html>
<body>
نام :<?php echo $_POST["name"]; ?><br>
ایمیل: <?php echo $_POST["email"]; ?>
</body>
</html>خروجی کد بالا می تواند شبیه زیر باشد:
نام: beyamooz
ایمیل:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید توجه: مثال بالا را می توان از طریق متد get نیز انجام داد. که البته نحوه انجام کار در بیاموزهای قبلی ذکر شده است.
کد بالا، یک مثال کاملاً ساده است. اما توجه داشته باشید که یک چیز بسیار مهم در آن از قلم افتاده است و آن اعتبار سنجی یا Validate اطلاعات ارسالی است. از این طریق اسکریبتتان امن تر خواهد بود.
در مثال بالا، اعتبار سنجی انجام نشده است، توجه داشته باشید که در این مثال فقط نحوه ی ارسال و دریافت اطلاعات نشان داده شده است.
اما در بیاموز بعدی، نحوه ی پردازش اطلاعات فرم ارسال شده بصورتی که امنیت حفظ شود، نشان داده خواهد شد. اعتبار سنجی مناسب اطلاعات فرم، شما را از حمله هکرها حفظ خواهد کرد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
کلاس ها در PHP
کلاس ها در PHP
در این فصل به بررسی یکی از زیباترین، و در عین حال خطرناکترین مباحث برنامه نویسی می پردازیم، این مبحث از این جهت خطرناك هست که اگر شما اصول اولیه را یاد بگیرید و این نوع برنامه نویسی بر شما تاثیر بگذارد، از آن پس دیگر به همه چیز به چشم یک شیء نگاه خواهید کرد و تمام روشهای برنامه نویسی گذشته خود را در دنیای واقعی کنار خواهید گذاشت.
در اینجا قصد نداریم شروع کنیم به آوردن مثالهایی از Object در دنیای واقعی و فرض می کنیم که شما مثالهایی مثل رنگ ماشین و یا تلفن را بلد باشید! در حالت کلی یک شیء شامل یک سری متغیرها و توابع می باشد که درون یک قالب کلی به نام کلاس قرار دارند، به متغیرهای درون کلاسها Properties و به توابع موجود در آن Method می گویند.
دلیل استفاده از اشیاء در زبان های برنامه نویسی: در برنامه های حجیم، استفاده از کلاس ها موجب می شود تا کدهای تکراری نوشته نشوند لذا مقدار کدها کمتر می شود و در نتیجه فشار کمتری به سیستم اجرا کننده دستورات می آید و همچنین سرعت پردازش کد ها مقدار زیادی افزایش می یابد.
به عبارت دیگر ویژگی کلاسها در این است که می توان یک کلاس را بعداً با نام های مختلف و متغیرهای مختلف برای استفاده های مشابه استفاده نمود.
object یا شیء چیست؟
مجموعه ای از متغیرها و توابع است که از یک الگوی خاص به نام کلاس ساخته شده است. اما کلاس ها چه هستند؟ فرض کنید ما یک شرکت داریم که این شرکت از بخش های مختلفی تشکیل شده است حال ما در هر بخش احتیاج داریم که هر ماه یک گزارش مالی بگیریم !ما اینجا دو کار میتونیم بکنیم هم میتونیم برای هربخش چند نفر بزاریم و آنها گزارش مالی را تهیه کنند و هر ماه تحویل دهند در این صورت در هربخش شلوغی و همچنین کارمند بیشتری نیازمندیم! راه دیگر اینست که یک قسمت به عنوان اتاق گزارش مالی درست کنیم و هر بخش داده های خود را به این قسمت بدهد و گزارش مالی خود را دریافت کند در این روش هم بخش ها منظم تر خواهند بود و هم دیگر احتیاج به کارمند اضافی نداریم.
در اینجا آبجکتها نقش کارمند در بخش گزارش مالی را بر عهده دارند.
نحوه تعریف کلاس:
<?php
//تعریف کلاس
class class_name
{
//Properties
//Method
}
//ساختن یک شی از کلاس
$obj=new class_name();
?>توضیح:
- ساخته شدن یک کلاس توسط کلمه کلیدی class صورت می گیرد.
- شما در هر جای کلاس قادر به تعریف متغیرها یا Propertyهای کلاس هستید، اما بهتر است که آنها را در ابتدای کلاس تعریف کنید.
- بعد از تعریف متغیرها، توابع یا Methodها را تعریف می کنیم، توابع درون کلاس همانند توابع معمولی تعریف می شوند.
- تمام موارد بالا بین دو علامت "{}" قرار می گیرد.
- در برنامه نویسی شئ گرا یک شئ چندین بار با چندین اسم متفاوت و ویژگی های متفاوت (متغیرهای مختلف) می تواند مورد استفاده قرار گیرد، برای ساختن یک شئ از کلمه کلیدی new استفاده می کنیم.
توجه: با بزرگتر شدن سیستم ها، ضروری خواهد بود که از یک ساختار دایرکتوری درخت مانند، برای نگهداری تمامی کلاسهایی که در برنامه وبتان بکار برده اید، استفاده کنید. در ادامه شما می توانید با استفاده از تابع include_once یا require_once برای اضافه کردن کلاسهای تعریف شده به صفحات دلخواهتان استفاده کنید.
متدهای کلاس در PHP
تعریف Methodها
Methodها در واقع توابعی هستند که داخل کلاس وجود دارند و با علامت "<-" صدا زده می شوند، مهمتر اینکه متدها به اعضای متغیرهای یک کلاس دسترسی دارند.
مثال1: در مثال زیر یک تابع ساده برای چاپ یک عبارت تعریف شده است:
<?php
class My_class
{
private $name="Amir";
function SayHello()
{
print "Hello My Name is $this->name";
}
}
$obj=new My_Class();
$obj->SayHello();
?>خروجی کد بالا:
Hello My Name is Amir
توجه: درون خود تابع برای دسترسی به تمامی متغیر ها و توابع دیگر با <-this$ و سپس نام تابع یا متغیر می توانیم عمل کنیم.
مثال2: در مثال زیر ابتدا اسممان، امیر است و بعد از صدا زدن تابع ()SetName به رضا تغییر می یابد:
<?php
class My_class
{
private $name="Amir";
function SetName($Param)
{
$this->name=$Param;
}
function SayHello()
{
print "Hello My Name is $this->name";
}
}
$obj=new My_Class();
$obj->SetName("Reza");
$obj->SayHello();
?>خروجی کد بالا:
Hello My Name is Reza
در مثال بالا یک تابع به نام ()SetName تعریف کردیم که یک پارامتر دارد و می توانیم اسم را در همه جا تغییر بدهیم.
متغیر get_$ در PHP
متغیرهای عمومی از پیش تعریف شده (Superglobal) در PHP
Superglobalها در واقع متغیرهای از پیش تعریف شده ای هستند که صرفنظر از محدوده یا قلمرو، همیشه می توانید در هر تابع، کلاس یا فایلی به آنها دسترسی داشته باشید.
متغیرهای Superglobal در PHP:
- GET_$
- POST_$
- REQUEST_$
- GLOBALS$
- SERVER_$
- FILES_$
- ENV_$
- COOKIE_$
- SESSION_$
در این بیاموزهای و بیاموزهای بعدی، درباره هر کدام از متغیرهای بالا، توضیح داده خواهد شد.
متغیر GET_$
GET_$ یک متغیر یا آرایه از پیش تعریف شده است و مقادیر فرم HTMLی که خصوصیت method آن با مقدار "get" پر شده باشد، به صورت اتوماتیک در آن ذخیره می شوند.
توجه:
- توجه داشته باشید حروف متغیر GET_$، حروف بزرگ است.
- اطلاعات فرستاده شده از یک فرم HTMLی که خصوصیت method آن با مقدار "get" پر شده باشد توسط هر شخصی قابل مشاهده است (اطلاعات در نوار آدرس مرورگر نمایش داده می شود)، این موضوع در ارسال اطلاعات محدودیت ایجاد می کند.
مثال:
<form action="welcome.php" method="get">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>زمانی که کاربر روی دکمه "Submit" کلیک می کند، URL زیر به سرور فرستاده می شود و البته این آدرس توسط هر شخصی قابل مشاهده است:
http://www.beyamooz.com/welcome.php?fname=Amir&age=28
فایل "welcome.php" حالا می تواند با استفاده از متغیر GET_$ اطلاعات فرم HTMLرا جمع آوری کند.
نکته: نام (name) هر فیلد در فرم HTML یکتا است. این نام در حقیقت ایندکس آرایه GET_$ خواهد بود، و با آن می توانیم به مقادیر فیلدها دسترسی داشته باشیم.
Welcome <?php echo $_GET["fname"]; ?>.<br />
You are <?php echo $_GET["age"]; ?> years old!چه موقع از متد "get' استفاده کنیم؟
- زمانی که می خواهیم کلمه عبور یا اطلاعات حساس کاربر را ارسال کنیم، نباید ار متد get استفاده کرد.
- متد get برای ارسال متغیرهای با مقادیر بزرگ، مانند متن ها مناسب نیست.(نباید مقادیرمان بیشتر از 2000 کاراکتر باشد)
- به خاطر اینکه متغیرها و مقادیرشان در URL نمایش داده می شود، بنابراین می توان از آنها در صفحات دیگر پروژه استفاده کرد، در حقیقت از این طریق می توان متغیر ها را به صفحات دیگر پاس داد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
متغیر post_$ در PHP
متغیر POST_$
POST_$ یک متغیر یا آرایه از پیش تعریف شده است و مقادیر فرم HTMLی که خصوصیت method آن با مقدار "post" پر شده باشد، به صورت اتوماتیک در آن ذخیره می شود.
توجه:
- توجه داشته باشید حروف متغیر POST_$، حروف بزرگ است.
- اطلاعات ارسال شده توسط دیگران قابل مشاهده نیست، و محدودیتی در ارسال وجود ندارد.
- به صورت پیش فرض 8 مگابایت اطلاعات را می توانید از این طریق ارسال کنید(با تغییر مقدار post_max_size در فایل php.ini می توانید این مقدار را تغییر دهید)
مثال:
<form action="welcome.php" method="post">
Name: <input type="text" name="fname" />
Age: <input type="text" name="age" />
<input type="submit" />
</form>زمانی که کاربر روی دکمه "Submit" کلیک می کند URL به صورت زیر خواهد بود:
http://www.w3schools.com/welcome.php
فایل "welcome.php" حالا می تواند با استفاده از متغیر POST_$ اطلاعات فرم HTML را جمع آوری کند.
نکته: نام(name) هر فیلد در فرم HTML یونیک است این نام در حقیقت ایندکس آرایه POST_$ خواهد بود، و با آن می توانیم به مقادیر فیلدها دسترسی داشته باشیم
Welcome <?php echo $_POST["fname"]; ?>!<br />
You are <?php echo $_POST["age"]; ?> years old.متغیر REQUEST_$ در PHP
REQUEST_$ یک متغیر یا آرایه از پیش تعریف شده است و مقادیر فرم HTMLی که خصوصیت method آن با مقدار "post" یا "get"پر شده باشد، هنگام ارسال به صورت اتوماتیک در آن ذخیره می شود.
این متغیر در حقیقت می تواند شامل محتوای متغیر های زیر باشد:
- $_GET
- $_POST
- $_COOKIE
مثال:
Welcome <?php echo $_REQUEST["fname"]; ?>!<br />
You are <?php echo $_REQUEST["age"]; ?> years old.متغیر GLOBALS$ در PHP
متغیر GLOBALS$ یک متغیر superglobal است که برای دسترسی به متغیرهای عمومی (global) در هر جای اسکریپت ها (داخل توابع و یا متدها) استفاده می شود.
در PHP تمام متغیر های عمومی در آرایه GLOBALS$ ذخیره میشوند. ایندکس این آرایه در واقع نام متغیر خواهد بود.
در مثال زیرنحوه ی استفاده از آرایه GLOBALS$ نشان داده شده است:
مثال (متغییر post_$ در PHP)
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>100در مثال بالا، از آنجایی که z با استفاده از آرایه GLOBALS$ تعریف شده است، در خارج از تابع ()addition نیز قابل دسترس خواهد بود.
متغیر SERVER_$ در PHP
متغیر SERVER_$ یک متغیر superglobal است که اطلاعاتی را درباره ی headerها، مسیر و مکان اسکریپتها و... در خود نگه می دارد.
در مثال زیر، نحوه استفاده از بعضی عناصر آرایه SERVER_$ نشان داده شده است:
مثال (متغییر post_$ در PHP)
<?php
echo $_SERVER['PHP_SELF'];//نام فایل اسکریبتی که اخیراً اجرا شده است را برمی گرداند
echo "<br>";
echo $_SERVER['SERVER_NAME'];//نام سرور هاست را برمی گرداند
echo "<br>";
echo $_SERVER['HTTP_HOST'];//با توجه به درخواست جاری، هدر هاست را برمی گرداند
echo "<br>";
echo $_SERVER['HTTP_REFERER'];//آدرس کامل صفحه جاری را برمی گرداند
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];//اطلاعات مرورگر و سیستم عامل و... را برمی گرداند
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];//مسیر اسکریبت جاری را برمی گرداند
?>عناصر توضیحات $_SERVER['PHP_SELF'] نام فایل اسکریبتی که اخیراً اجرا شده است را برمی گرداند. $_SERVER['GATEWAY_INTERFACE'] Returns the version of the Common Gateway Interface (CGI) the server is using $_SERVER['SERVER_ADDR'] Returns the IP address of the host server
IP هاست را برمی گرداند.$_SERVER['SERVER_NAME'] Returns the name of the host server (such as www.w3schools.com)
نام سرور هاست را برمی گرداند. (مانند www.beyamooz.com)$_SERVER['SERVER_SOFTWARE'] Returns the server identification string (such as Apache/2.2.24) $_SERVER['SERVER_PROTOCOL'] Returns the name and revision of the information protocol (such as HTTP/1.1) $_SERVER['REQUEST_METHOD'] Returns the request method used to access the page (such as POST) $_SERVER['REQUEST_TIME'] Returns the timestamp of the start of the request (such as 1377687496) $_SERVER['QUERY_STRING'] Returns the query string if the page is accessed via a query string $_SERVER['HTTP_ACCEPT'] Returns the Accept header from the current request $_SERVER['HTTP_ACCEPT_CHARSET'] Returns the Accept_Charset header from the current request (such as utf-8,ISO-8859-1) $_SERVER['HTTP_HOST'] Returns the Host header from the current request
با توجه به درخواست جاری، Host header را برمی گرداند.$_SERVER['HTTP_REFERER'] Returns the complete URL of the current page (not reliable because not all user-agents support it)
آدرس کامل صفحه جاری را برمی گرداند$_SERVER['HTTPS'] Is the script queried through a secure HTTP protocol $_SERVER['REMOTE_ADDR'] Returns the IP address from where the user is viewing the current page $_SERVER['REMOTE_HOST'] Returns the Host name from where the user is viewing the current page $_SERVER['REMOTE_PORT'] Returns the port being used on the user's machine to communicate with the web server $_SERVER['SCRIPT_FILENAME'] Returns the absolute pathname of the currently executing script $_SERVER['SERVER_ADMIN'] Returns the value given to the SERVER_ADMIN directive in the web server configuration file (if your script runs on a virtual host, it will be the value defined for that virtual host) (such as این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید )$_SERVER['SERVER_PORT'] Returns the port on the server machine being used by the web server for communication (such as 80) $_SERVER['SERVER_SIGNATURE'] Returns the server version and virtual host name which are added to server-generated pages $_SERVER['PATH_TRANSLATED'] Returns the file system based path to the current script $_SERVER['SCRIPT_NAME'] مسیر اسکریبت جاری را برمی گرداند. $_SERVER['SCRIPT_URI'] URI صفحه جاری را برمی گرداند. در آینده با متغیرهای superglobal زیر نیز آشنا خواهید شد:
- متغیر SESSION_$ : آموزش PHP-متغیر session
- متغیر COOKIE_$: آموزش PHP-متغیر cookie
- متغیر FILES_$: آموزش PHP-فایل ها
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
متغیر ها در PHP
متغیر ها، ظرفی برای ذخیره اطلاعات هستند.
مثال (متغییر ها در PHP)
<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>خروجی کد بالا:
11آیا جبر را از زمان مدرسه به یاد دارید؟
x=5, y=6, z=x+y
آیا به یاد می آورید که یک حرف (مانند x) می تواند برای نگهداری یک مقدار (مثل 5) به کار رود و شما می توانید طبق اطلاعات بالا مقدار z را برابر 11 ارزیابی کنید.
این حروف، متغیر نامیده می شوند و آنها را می توان برای نگهداری مقادیر (x=5) و یا عبارات (z=x+y) استفاده کرد.
x=5
y=6
z=x+yبه متغیرها مانند ظرفی برای نگهدازی داده ها نگاه کنید. متغییر ها در PHP
- متغییرها برای ذخیره ی مقادیر مانند رشته های متنی، اعداد، یا آرایه ها استفاده می شوند.
- زمانی که یک متغییر را تعریف می کنید، می توانید آنرا در کدتان بارها و بارها استفاده کنید.
- در PHP متغییر ها برخلاف C نوع خاصی ندارند، و از متغییرها بدون تعریف قبلی می توان استفاده نمود.
- هر متغییر با علامت $ در ابتدای آن مشخص می شود.
روشی صحیح برای تعریف یک متغییر در PHP:
$var_name = value;
توجه: اغلب برنامه نویسان تازه کار در PHP فراموش می کنند که در ابتدای نام متغییر علامت $ را درج کنند، در این صورت برنامه کار نخواهد کرد.
مثال1:در زیر یک متغییر با محتویات رشته و یک متغییر دیگر با محتویات عدد تعریف شده است:
<?php
$txt="Hello World!";
$x=16;
?>قواعد نامگذاری متغییر ها در PHP
- نام یک متغییر باید با یک حرف یا یک "_" آغاز شود.
- نام یک متغییر می تواند شامل اعداد، حروف کوچک و بزرگ و "_" باشد. (0-9,A-Z,a-z)
- نام متغییر ها نباید شامل فضای خالی باشد.
- نام متغیرها به حروف بزرگ و کوچک حساس است. (y$ و Y$ دو متغیر متفاوت اند)
بیاد داشته باشید که متغیرها در PHP به حروف کوچک و بزرگ حساس هستند. ایجاد یا اعلان متغیرها در PHP
در PHP دستوری برای ایجاد متغیرها وجود ندارد.
یک متغیر زمانی که مقداری را به آن اختصاص می دهید ایجاد می شود.
مثال (متغییر ها در PHP)
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
echo $txt;
echo "<br>";
echo $x;
echo "<br>";
echo $y;
?>خروجی کد بالا:
Hello world!
5
10.5بعد از اجرای مثال بالا، متغیر txd مقدار "!Hello world"، متغیر x مقدار "5" و متغیر y مقدار "10.5" را در خود نگهداری می کنند.
توجه: زمانی که می خواهید یک مقدار رشته ای را به یک متغیر اختصاص دهید از علامت ' استفاده نمایید.
PHP یک زبان بی ربط و بی قاعده (Loosely Type Language)
در PHP یک متغییر نیازی به تعریف پیش از استفاده ندارد.
در مثال بالا، می بینید که مجبور نیستید به PHP بگویید که متغییر از چه نوع داده ای است، PHP به طور خودکار متغییر ها را به نوع داده ای مناسب شان تبدیل می کند که بستگی دارد چگونه مقدار دهی شده باشند.
در یک زبان برنامه نویسی قوی (مانند C یا Java) شما باید نوع و اسم متغییر را پیش از استفاده تعیین کنید. در PHP متغییر ها زمانی که شما از آنها استفاده می کنید به طور خود کار تعریف می شوند.
محدوده متغیرها در PHP
در PHP، متغیرها در هرجایی از کد می توانند اعلان شوند.
منظور از محدوده، بخشی از اسکریبت است که متغیر می تواند در آن محدوده استفاده شود.
سه محدوده مختلف برای متغیرها وجود دارد:
- local
- global
- static
متغیر های محلی (local) در PHP
متغیرهایی که داخل یک تابع اعلان شده اند، تنها داخل همان تابع، قابل دسترسی اند. (متغیرهای با قلمرو محلی)
متغیرهای محلی به محض اینکه عملیات تابع تکمیل شد، حذف می شوند.
شما می توانید در توابع مختلف، متغیرهای محلی با نام های یکسان داشته باشید. بخاطر اینکه متغیرهای محلی، تنها بوسیله تابعی که آنها را اعلان کرده است شناخته می شوند.
در بیاموزهای بعدی، درباره توابع بیشتر خواهید آموخت.
متغیر های عمومی (global) در PHP
متغیرهایی که خارج از توابع اعلان شده اند، عمومی می شوند، و در تمام اسکریبت بجز توابع، به آنها دسترسی خواهد بود.
زمانی که یک صفحه وب را ببندید، متغیرهای عمومی حذف خواهند شد.
در مثال زیر، می توانید محدوده متغیرهای محلی و عمومی را مشاهده نمایید:
مثال (متغییر ها در PHP)
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>خروجی کد بالا:
Test variables inside the function:
Variable x is:
Variable y is: 10
variables outside the function:
Variable x is: 5
Variable y is:در مثال بالا، دو متغیر x$ و y$ و یک تابع ()myTest وجود دارد. متغیر x$، بخاطر اینکه خارج از تابع اعلان شده، عمومی است و متغیر y$، بخاطر اینکه داخل تابع اعلان شده، محلی است.
زمانی که داخل تابع ()myTest، مقادیر متغیرها را چاپ می کنیم، مقدار متغیر y$ بخاطر اینکه محلی است چاپ می شود، اما مقدار متغیر x$، چونکه خارج از تابع اعلان شده است نمی تواند چاپ شود.
سپس، زمانی که مقادیر متغیرها را خارج از تابع ()myTest چاپ می کنیم، مقدار متغیر x$ چاپ می شود، اما مقدار متغیر y$، چونکه داخل تابع ()mytest اعلان شده است نمی تواند چاپ شود.
کلمه کلیدی global در PHP
با استفاده از کلمه کلیدی global، می توانید به متغیرهای عمومی در داخل یک تابع دسترسی داشته باشید.
برای انجام این کار، از کلمه کلیدی global، قبل از نام متغیر استفاده نمایید:
مثال (متغییر ها در PHP)
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // outputs 15
?>خروجی کد بالا:
15در PHP، با استفاده از آرایه GLOBALS$ نیز می توانید به متغیرهای عمومی دسترسی داشته باشید. در واقع تمام متغیرهای عمومی در این آرایه ذخیره می شوند و با استفاده از نام متغیر بعنوان ایندکس آرایه می توانید به متغیرها، دسترسی داشته باشید.
بازنویسی مثال بالا، با استفاده از آرایه GLOBALS$:
مثال (متغییر ها در PHP)
<?php
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y; // outputs 15
?>خروجی کد بالا:
15کلمه کلیدی static در PHP
بطور معمول زمانی که اجرای یک تابع به پایان می رسد، تمام متغیرهای آن نیز حذف خواهند شد. اما بعضی مواقع نیاز می شود که یک متغیر محلی برای استفاده های بعدی حذف نشود.
برای انجام این کار، از کلمه کلیدی static در ابتدای اعلان متغیر، استفاده نمایید:
مثال (متغییر ها در PHP)
<?php
function myTest()
{
static $x=0;
echo $x;
echo "<br />";
$x++;
}
myTest();
myTest();
myTest();
?>خروجی کد بالا:
0
1
2هر زمان که تابع صدا زده می شود، آخرین مقدار متغیر static، حفظ می شود.
توجه: در مثال بالا، متغیر x$ محلی است و فقط در داخل تابع به آن دسترسی وجود دارد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
متغیر ها و توابع static در PHP
متغیر ها و توابع Static
به متغیر ها و توابع static برخلاف متغیر ها و توابع معمولی می توانند بدون ایجاد شئ از کلاس، دسترسی داشت.
نحوه دسترسی:
نام متغیر یا تابعی که static تعریف شده :: نام کلاس
چهار محدوده نمایش وجود دارد:
- public : منبع مورد نظر در هر قسمتی قابل استفاده می باشد.
- protected : فقط در کلاسی که تعریف شده و کلاس هایی که آن را توسعه می دهند قابل استفاده می باشد.
- private : فقط در کلاسی که تعریف شده قابل استفاده می باشد.
- final : در هر جایی قابل استفاده می باشد، اما در کلاس های توسعه دهنده نمی تواند دوباره تعریف شود.(final به کلاس ها نیز میتواند تخصیص یابد، کلاس هایی که به صورت final تعریف شده اند، نمی توانند توسعه یابند.)
مثال: در مثال زیر متغیر name و تابع ()action به صورت static تعریف شده است:
<?php
class My_Class{
static $name="Beyamooz.com is for tutorial\n";
static function action()
{
echo "PHP is easy!!\n";
}
}
My_Class::action();
echo My_Class::$name;
$obj=new My_Class();
$obj->action();
//echo $obj->name;Undefined "Property"
name
echo $obj::$name;
?>خروجی کد بالا:
PHP is easy!!
Beyamooz.com is for tutorial
PHP is easy!!
Beyamooz.com is for tutorialتوجه: به متغیرهای Static یک کلاس، نمی توان از طریق شیء و عملگر فلش (<-) دسترسی داشت (با خطای
مواجه خواهید شد.)Undefined "Property"
name
ثوابت (const)
ثابت ها یا همان const ها در کلاس ها همانند متغیر ها هستند با این تفاوت که مقدار آنها قابل تغییر نمی باشد و با این مزیت که در هرجایی میتوانند مورد استفاده قرار گیرند!
مثال:
<?php
class My_Class{
const name="www.beyamooz.com<br />";
function test()
{
echo self::name;
}
}
echo My_Class::name;
$obj=new My_Class;
$obj->test();
؟>خروجی کد بالا:
www.beyamooz.com
www.beyamooz.comمتغیرهای جلسه در PHP
متغیرهای جلسه (session) در php
وقتی یک Application تحت ویندوز را باز می کنید و چند تغییر روی آن می دهید و سپس آنرا می بندید، کامپیوتر می داند شما چه کسی هستید، چه موقع درخواست را آغاز و چه موقع آن را به اتمام رسانده اید. اما در اینترنت یک مشکل وجود دارد، سرور وب نمی داند شما که هستید و چه می کنید چون آدرس HTTP، حالت State را پشتیبانی نمی کند.
یک جلسه یا session این مشکل را برای شما حل می کند، در حقیقت اطلاعات کاربر(مثل: نام کاربری و غیره) بر روی سرور برای استفاده های بعدی ذخیره می شود. اما اطلاعات جلسه موقتی اند و پس از اینکه کاربر، وب سایت را رها کند، اطلاعات حذف خواهند شد، اگر نیاز به ذخیره سازی دائمی دارید باید داده ها را در یک پایگاه داده ذخیره کنید.
جلسه ها با ایجاد یک شماره ID منحصر به فرد برای هر بیننده و ذخیره متغیرها براساس این شماره ها کار می کنند.
نکته: در یک پروژه تحت وب، بعد از ایجاد یک متغیر جلسه، مقدار آن برای همه ی صفحات پروژه قابل دستیابی است.
آغاز یک جلسه (session) در php
قبل از اینکه بتوانید اطلاعات کاربر، را در جلسه تان ذخیره کنید، ابتدا باید یک جلسه آغاز شود، تابع ()session_start برای این منظور استفاده می شود.
نکته:تابع ()session_start باید قبل از تگ <html> بیاید:
<?php session_start(); ?>
<html>
<body>
</body>
</html>تعریف یک متغیر جلسه (session) در PHP
روش صحیح برای ذخیره و بازیابی متغیرهای جلسه، استفاده از SESSION_$ است:
<?php
session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>خروجی کد بالا:
Pageviews=1
در مثال زیر یک "شمارنده بازدید صفحه" ایجاد کرده ایم، تابع ()isset بررسی می کند که آیا متغیر "views" در حال حاضر تنظیم شده است یا نه:
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>از بین بردن جلسه (session) در PHP
برای از بین بردن جلسه ها در PHP می توان از توابع زیر استفاده کرد:
- ()unset: یک جلسه مشخص را به عنوان پارامتر دریافت می کند و آنرا از بین می برد.
- ()session_destroy: کلیه جلسه های ایجاد شده را از بین می برد.
<?php
unset($_SESSION['views']);
?><?php
session_destroy();
?>برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.
متغیرهای رشته ای در PHP
متغیرهای رشته ای در PHP
متغیر های رشته ای برای ذخیره مجموعه ای از کاراکترها استفاده می شود.
در این فصل قصد داریم متداولترین توابعی که برای دستکاری رشته ها(String) در PHP استفاده می شود را نشان دهیم.
بعد از اینکه یک متغیر رشته ای(String Variable) ایجاد کردید می توانید آنرا دستکاری کنید، یک رشته می تواند مستقیماً در یک تابع استفاده شود یا می توانید آنرا در یک متغیر ذخیره کنید.
در کد PHP زیر کلمه "سلام" را به یک متغیر رشته ای(String Variable) بنام TXT$ انتساب داده و سپس آنرا چاپ می کنیم:
<? php
$TXT = "سلام";
echo $TXT;
?>خروجی کد بالا:
سلام
حالا اجازه دهید تا بعضی از توابع و عمل کننده هایی(Operators) که برای دستکاری رشته ها بکار می رود را نشان دهیم:
عمل کننده الحاق(نقطه)
در PHP تنها یک عمل کننده برای رشته ها وجود دارد، و برای الحاق دو رشته بکار می رود، در کد زیر دو رشته "سلام" و "روز خوبی داشته باشید" به هم الحاق شده اند:
<? php
echo "روز خوبی داشته باشید" . " " . "سلام";
?>خروجی کد بالا:
سلام روز خوبی داشته باشید
تابع ()strlen
این تابع برای بازگرداندن طول یک رشته استفاده می شود.
<?php
echo strlen("سلام!");
echo "<br />";
echo strlen("beyamooz.com");
?>خروجی کد بالا:
9
12توجه: در خط اول مثال بالا، چون در رشته "!سلام" از کاراکترهای فارسی استفاده شده است و به ازای هر کاراکتر فارسی 2 بیت فضا در نظر گرفته می شود، خروجی تابع ()strlen به ازای رشته مذکور 9 خواهد شد. یعنی 8 بیت برای رشته "سلام" و 1 بیت برای کاراکتر "!" در نظر گرفته خواهد شد.
تابع ()strpos
این تابع برای پیدا کردن مکان یک کاراکتر یا یک کلمه در یک رشته استفاده می شود.
<?php
echo strpos("beyamooz.com","m");
?>خروجی کد بالا:
4
توجه: همانطور که مشاهده می شود کاراکتر "m" در مکان 4 یافت شد. توجه داشته باشید که اولین مکان در رشته از 0 شروع می شود و نه 1.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
متغیرهای کلاس در PHP
متغییرها یا Properties
اشیاء یا Objectها به متغییرهای خاصی دسترسی دارند که به آنها Property می گویند این Propertyها می توانند در هرجای بدنه کلاس تعریف شوند اما برای اینکه اسکریبتمان مرتب باشد بهتر است که در بالای کلاس تعریف شوند.
مثال:در my_class یک property به نام name با مقدار اولیه "Amir" تعریف شده است:
<?php
class my_class
{
public $name="Amir";
}
$obj1=new my_class();
$obj1->name="Reza";
$obj2=new my_class();
print "$obj1->name"."<br />";
print "$obj2->name"."<br />";
?>خروجی کد بالا:
Reza
Amirتوضیح مثال بالا:
- در مثال بالا متغییر یا Property تعریف شده، در ابتدا با مقدار "Amir" تنظیم شده است، ولی در ادامه با ساختن شیء obj1 و دسترسی به این متغییر مقدار آنرا به "Reza" تغییر می دهیم.
- به این نکته توجه داشته باشید که بعد از اسم کلاس از دو پرانتز خالی استفاده نمودیم چون کلاس را ساده و بدون سازنده (Constructor) ساختیم.
(بعداً به سازنده (Constructor) و مخرب (Destructor) می پردازیم.) - علامت "<-" به شما اجازه می دهد تا به متغییر های یک کلاس دسترسی داشته باشید.
مرتب کردن داده ها در PHP
مرتب کردن داده ها
با استفاده از کلمه کلیدی ORDER BY می توانید داده ها را مرتب کنید.
به صورت پیشفرض داده ها به صورت صعودی مرتب می شوند. (ASC)
اگر مایلید که اطلاعات به صورت نزولی مرتب شوند باید از کلمه کلیدی DESC استفاده کنید.
نحوه استفاده:
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESCبرای کسب اطلاعات بیشتر در مورد SQL، به لینک روبرو مراجعه فرمایید: آموزش SQL-مقدمه
در مثال زیر ستون های id و firstname و lastname از جدول MyGuests انتخاب شده و بر اساس ستون lastname نمایش داده می شود (ASC):
مثال(MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ارتباط به پایگاه داده
$conn = new mysqli($servername, $username, $password, $dbname);
// مطمئن شدن از صحت ارتباط
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
//اجرای کوئری و قرار دادن نتیجه در متغیر
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// نمایش داده ها به ازای هر ردیف
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
//بستن ارتباط با پایگاه داده
$conn->close();
?>خروجی کد بالا:
id: 1 - Name: John Doe
id: 3 - Name: Julie Dooley
id: 2 - Name: Mary Moeدر مثال زیر داده ها بصورت DESC (بزرگ به گوچک) نمایش داده می شود:
مثال(MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد ارتباط با پایگاه داده
$conn = mysqli_connect($servername, $username, $password, $dbname);
// اطمینان از صحت ارتباط
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname DESC";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// نمایش داده ها به ازای هر ردیف
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>خروجی کد بالا:
id: 2 - Name: Mary Moe
id: 3 - Name: Julie Dooley
id: 1 - Name: John Doeمرتب سازی براساس دو ستون
هنگام مرتب سازی براساس بیشتر از یک ستون، ستون دوم تنها موقعی استفاده می شود که مقادیر در ستون اول مساوی باشند.
در واقع ستون دوم موقعی در مرتب سازی دخالت می کند که مقادیر ردیفها در ستون اول مساوی باشند و در بقیه موارد اثری ندارد.
نحوه استفاده:
SELECT column_name(s)
FROM table_name
ORDER BY column1, column2برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
نمایش تعداد کالاهای سبد خرید
جلسه ی هشتم طراحی یک فروشگاه اینترنتی-نمایش تعداد کالاهای سبد خرید
در قسمت دوم از این جلسه، به آموزش 'نمایش تعداد کالاهای سبد خرید' خواهیم پرداخت.
آنچه که در قسمت قبل طراحی شد
در قسمت قبل، موارد کلی زیر آموزش داده شدند:
- نحوه ی حذف کالاها از سبد خرید با استفاده از ajax
مشاهده ی آنچه که در قسمت قبل طراحی شد:
آنچه که در قسمت 'نمایش تعداد کالاهای سبد خرید' خواهید آموخت
در قسمت 'نمایش تعداد کالاهای سبد خرید' موارد زیر آموزش داده خواهند شد:
توضیح مختصر:
کاری که در این جلسه می خواهیم انجام دهیم این است که، تابعی را بنویسیم که تعداد کل کالاهای موجود در سبد خرید را در دایره ی قرمز رنگ به کاربر نمایش دهد.
نمایش تعداد کالاهای سبد خرید
به سراغ نرم افزار دریم ویور می رویم و دو فایل left.php و top.php را باز می کنیم. در اینجا، قبل از تابع deletesabad که در جلسه ی قبل آن را نوشتیم، تابع جدیدی را می نویسیم و نام آن را tedadkol قرار می دهیم. این تابع تعداد کل را برای ما محاسبه می کند. حالا یک متغیر به نام number تعریف می کنیم و مقدار آن را برابر با 0 می گذاریم:
حالا کاری که باید انجام دهیم تا بتوانیم تعداد کل محصولات موجود در سبد خرید را به دست بیاوریم، این است که به داخل سبد خرید خود برویم و تک تک قسمت هایی که مربوط به تعداد هست و درون liها قرار دارد را باید درون هرکدام از آنها بگردیم و فیلد تعداد را پیدا کنیم و عددش را دریافت کنیم و سپس آنها را با هم جمع کنیم تا تعداد کل به دست بیاید. همان طور که می دانید، قبلا ما این عددها را که مربوط به تعداد محصول هست را در داخل یک span قرار دادیم و آی دی آنها را tedad قرار دادیم:
دوباره به سراغ نرم افزار دریم ویور می رویم و کدهای جی کوئری مان را می نویسیم:
دسترسی به موارد آموزشی بالا در بسته ی خریداری شده:
- شماره جلسه: 8
- نام فایل ویدئو: 32
- فرمت فایل: mp4.
نقطه ی شروع بحث بالا (نمایش تعداد کالاهای سبد خرید) در ویدئو: 00:00
واکشی اطلاعات پایگاه داده با ajax
با استفاده از AJAX، می توانید با پایگاه داده ارتباط متقابل داشته باشید.
واکشی اطلاعات از پایگاه داده با استفاده از AJAX
در مثال زیر، نحوه واکشی اطلاعات از پایگاه داده، با استفاده از AJAX نشان داده شده است:
مثال (واکشی اطلاعات پایگاه داده با ajax)
اطلاعات شخص انتخاب شده، اینجا نمایش داده می شود...توضیح مثال - پایگاه داده MySQL
جدولی که در مثال بالا از آن استفاده شده است:
id FirstName LastName Age Hometown Job 1 Amir Pahlavansadegh 30 Isfahan Developer 2 Nader Karimi 35 Isfahan Developer 3 Farshid Aslani 25 Isfahan Developer 4 Sara Ahmadi 28 Isfahan Developer 5 reza Masomi 38 Isfahan Developer توضیح مثال - صفحه HTML
زمانی که کاربر، یکی از آیتم های لیست کشویی بالا را انتخاب می کند، تابع "()showUser" فراخوانی و اجرا می شود. این تابع توسط رویداد "onchange" راه اندازی می شود:
<html>
<head>
<script>
function showUser(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showUser(this.value)">
<option value="">انتخاب کنید</option>
<option value="1">Amir Pahlavansadegh</option>
<option value="2">Nader karimi</option>
<option value="3">farshad Aslani</option>
<option value="4">Sara Ahmadi</option>
<option value="5">Reza Masomi</option>
</select>
</form>
<br>
<div id="txtHint"><b>اطلاعات شخص انتخاب شده، اینجا نمایش داده می شود...</b></div>
</body>
</html>تابع ()showUser کارهای زیر را انجام می دهد:
- چک می کند که یک شخص انتخاب شده باشد. (اگر گزینه ای انتخاب نشده باشد، محتوی عنصر با شناسه "txtHint" خالی می شود)
- یک شیء XMLHttpRequest ایجاد می شود.
- زمانی که پاسخ سرور آماده باشد، یک تابع ایجاد و اجرا می شود. (وظیفه این تابع این است که پاسخ دریافت شده از سرور را در عنصر با شناسه "txtHint" قرار دهد)
- درخواست یک فایل به سرور ارسال می شود.
- توجه داشته باشید که یک پارامتر (q) به URL اضافه شده است (با محتوای گزینه انتخاب شده)
توضیح مثال - فایل PHP
فایلی که توسط کد JavaScriptبالا صدا زده می شود یک فایل PHP بنام "getuser.php" است.
در فایل "getuser.php"، یک query در پایگاه داده MySQL اجرا می شود و نتیجه در یک جدول HTMLبرگردانده می شود.
<?php
$q = intval($_GET['q']);
$con = mysqli_connect('localhost','peter','abc123','my_db');
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM user WHERE id = '".$q."'";
$result = mysqli_query($con,$sql);
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Job</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "<td>" . $row['Age'] . "</td>";
echo "<td>" . $row['Hometown'] . "</td>";
echo "<td>" . $row['Job'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>توضیح: زمانی که درخواست از JavaScript به فایل PHP ارسال می شود، کارهای زیر اتفاق می افتد:
- یک ارتباط به پایگاه داده MySQL ایجاد می شود.
- شخص مورد نظر پیدا می شود.
- یک جدول HTML ایجاد و با داده های مناسب پر می شود و در نهایت داده ها برگشت می شود و در عنصر با شناسه "txtHint" قرار می گیرد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
واکشی اطلاعات فایل xml با ajax
با استفاده از AJAX، می توانید با یک فایل XML، ارتباط متقابل داشته باشید.
واکشی اطلاعات از یک فایل XML با استفاده از AJAX
در مثال زیر، نحوه واکشی اطلاعات از یک فایل XML، با استفاده از AJAX نشان داده شده است:
مثال (واکشی اطلاعات فایل xml با ajax)
اطلاعات گزینه انتخاب شده، اینجا نمایش داده می شودتوضیح مثال - صفحه HTML
زمانی که کاربر، یکی از آیتم های لیست کشویی بالا را انتخب می کند، تابع "()showCD" فراخوانی و اجرا می شود. این تابع توسط رویداد "onchange" راه اندازی می شود:
<html>
<head>
<script>
function showCD(str)
{
if (str=="")
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getcd.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
Select a CD:
<select name="cds" onchange="showCD(this.value)">
<option value="">Select a CD:</option>
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bonnie Tyler">Bonnie Tyler</option>
<option value="Dolly Parton">Dolly Parton</option>
</select>
</form>
<div id="txtHint"><b>اطلاعات گزینه انتخاب شده، اینجا نمایش داده می شود</b></div>
</body>
</html>تابع ()showCD کارهای زیر را انجام می دهد:
- چک می کند که یک گزینه انتخاب شده باشد. (اگر گزینه ای انتخاب نشده باشد، محتوی عنصر با شناسه "txtHint" خالی می شود)
- یک شیء XMLHttpRequest ایجاد می شود.
- زمانی که پاسخ سرور، آماده شده باشد یک تابع ایجاد و اجرا می شود. (وظیفه این تابع این است که پاسخ دریافت شده از سرور را در عنصر با شناسه "txtHint" قرار دهد)
- درخواست یک فایل به سرور ارسال می شود.
- توجه داشته باشید که یک پارامتر (q) به URL اضافه شده است (با محتوای گزینه انتخاب شده)
توضیح مثال - فایل PHP
فایلی که توسط کد JavaScript بالا صدا زده می شود یک فایل PHP بنام "getcd.php" است.
در فایل "getcd.php"، یک سند XML بنام "cd_catalog.xml" بارگذاری می شود. در این فایل یک جستجو انجام شده و نتیجه بصورت HTML برگردانده می شود.
<?php
$q=$_GET["q"];
$xmlDoc = new DOMDocument();
$xmlDoc->load("cd_catalog.xml");
$x=$xmlDoc->getElementsByTagName('ARTIST');
for ($i=0; $i<=($x->length-1); $i++)
{
//Process only element nodes
if ($x->item($i)->nodeType==1)
{
if ($x->item($i)->childNodes->item(0)->nodeValue == $q)
{
$y=($x->item($i)->parentNode);
}
}
}
$cd=($y->childNodes);
for ($i=0;$i<$cd->length;$i++)
{
//Process only element nodes
if ($cd->item($i)->nodeType==1)
{
echo("<b>" . $cd->item($i)->nodeName . ":</b> ");
echo($cd->item($i)->childNodes->item(0)->nodeValue);
echo("<br>");
}
}
?>توضیح: زمانی که درخواست از JavaScript به فایل PHP ارسال می شود، کارهای زیر اتفاق می افتد:
- یک شیء XML DOM ایجاد می شود.
- تمام عناصر <artist> که با نام ارسال شده از JavaScript تطابق داشته باشند، پیدا می شود.
- یک خروجی مناسب چاپ می شود و در نهاییت در عنصر با شناسه "txtHint" قرار می گیرد.
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
ویرایش اطلاعات یک جدول در PHP
ویرایش اطلاعات یک جدول با استفاده از MySQLi و PDO
دستور UPDATE برای ویرایش اطلاعات یک جدول استفاده می شود.
نحوه استفاده:
UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_valueنکته:اگر در دستور UPDATE، قسمت WHERE را در نظر نگیرید، کلیه ستونهایی که مشخص کرده اید، ویرایش می شوند، در حقیقت قسمت WHERE مشخص می کند که چه ردیف هایی باید ویرایش شوند.
برای کسب اطلاعات بیشتر در مورد SQL، به لینک روبرو مراجعه فرمایید: آموزش SQL-مقدمه
به جدول "MyGuests" که در فصل های قبلی از آن استفاده شده است توجه کنید:
id firstname lastname email reg_date 1 John Doe این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید 2014-10-22 14:26:15 2 Mary Moe این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید 2014-10-23 10:22:30 در مثال زیر، رکوردی که id آن برابر با 2 است در جدول "MyGuests" ویرایش خواهد شد:
مثال (MySQLi Object-oriented)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد ارتباط
$conn = new mysqli($servername, $username, $password, $dbname);
// اطمینان از صحت ارتباط
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
$conn->close();
?>مثال(MySQLi Procedural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد ارتباط
$conn = mysqli_connect($servername, $username, $password, $dbname);
// اطمینان از صحت ارتباط
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
if (mysqli_query($conn, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>مثال(PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// تنظیم حالت برخورد با خطاها
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// تنظیم کوئری ویرایش
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
// دستورات آماده
$stmt = $conn->prepare($sql);
// اجرای کوئری
$stmt->execute();
// چاپ پیغام موفقیت آمیز بودن عملیات ویرایش
echo $stmt->rowCount() . " records UPDATED successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>نتیجه کار بعد از ویرایش رکورد:
id firstname lastname email reg_date 1 John Doe این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید 2014-10-22 14:26:15 2 Mary Doe این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید 2014-10-23 10:22:30 برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.