توانایی خود را افزایش دهیم

فرهنگ و هنر
توانایی خود را افزایش دهیم

بسم الله الرحمن الرحیم

با سلام

• لطفا مطالب سایت را به صورت منظم پیگیری کنید
• ارائه پیشنهادات و نظرات شما باعث بهبود کیفیت ارائه مطالب خواهد شد

بعضی از مطالب آموزشی سایت توسط اینجانب نوشته نشده و صرفا جهت مطالعه دوستان از منابع دیگری جمع آوری شده است
چنانچه در مطالب موضوعی ملاحظه شد که از نظر علمی ، اعتقادی ، سیاسی ، مذهبی و ... دارای مشکل بود حتما در قسمت نظرات ذکر بفرمایید تا اصلاح گردد.
با تشکر
موفق باشید

طبقه بندی موضوعی
آخرین نظرات
  • ۲۱ خرداد ۹۶، ۲۲:۰۲ - مهدی
    سپاس

تا این درس همه داده هایی که به کدهای پی اچ پی فرستاده شد، داده هایی بودند که کاربر در فرم وارد می کرد. البته دو راه دیگر هم برای این مهم وجود دارد که با کمک آنها ما می توانیم داده هایمان را به کدهای پی اچ پی برسانیم. در این درس به این راه ها می پردازیم.

 

انواع راه های فرستادن مقدار به کد اجرایی
روش اول: راه ابتدایی استفاده از برچسب پنهان و یا Hidden Input است. در زمان ساخت فرم با برچسب  Input آشنا شدیم که توسط آن کادرهای یک فرم ساخته می شوند. شیوه اجرای این مهم به شرح زیر است:

<input type = " hidden "  name = " نام برچسب " value = "  مقدار " />

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

  • type: نوع برچسب را تعیین می کند که اینجا پنهان است.
  • name: نام برچسب برای رجوع و دسترسی به مقدار آن
  • value: مقداری که توسط این برچسب فرستاده می شود.

دلیل پنهان یا "hidden" بودن نوع " type"  این برچسب این است که دلیلی برای نمایش آن نیست و ما تنها می خواهیم با کمک این برچسب داده ای را انتقال دهیم. البته محل قرار گرفتن این برچسب هم داخل برچسب های فرم است.

نکته: در این نوع فرستادن داده ها، این عمل به طور پنهانی انجام شده و نام و مقدار از چشم پنهان است.

نکته: در این روش از هر دو متد یعنی POST و GET می توان استفاده کرد.

روش دوم: راه دوم فرستادن داده ها با اضافه کردن آنها به انتهای آدرس URL است که البته نام و مقدار در انتهای آدرس صفحه پدیدار می شوند. برای استفاده از این شیوه باید از متد GET در فرم استفاده شود.

در زمان تعریف خصوصیت های فرم به دو شیوه آن یعنی POST و GET اشاره کردیم. گفتیم که در POST داده ها در آدرس نمایان نمی شوند اما در GET داده ها براساس نام و مقدار در آدرس نمایان می شوند.

حال فرض کنید که می خواهید کاربری را پاک کنید، برای این کار می توان از داخل پایگاه عمل کرد، اما بهترین کار داشتن برگه ای برای انجام این همه است.

 

برگه پاک کردن کاربر delete.php
در داخل پوشه تارنمای خود، در کنار باقی فایل ها، فایل دیگری با نام  delete.php بسازید و کدهای زیر را در آن قرار دهید:

<?php 
$page_title = 'پاک کردن کاربر';
include ('includes/header.html');
echo '<h1> پاک کردن کاربر </h1>';
// بررسی شماره شناسه کاربری 
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // از view.php
$id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // از فرم
$id = $_POST['id'];
} else { // اگر مقدار درستی نبود باید برگه بسته شود.
echo '<p class="error"> این برگه به اشتباه باز شده </p>';
include ('includes/footer.html');  exit();  }
require_once ('db_connection.php');
// بررسی ارسال فرم
if (isset($_POST['submit'])) {
if ($_POST['sure'] == 'Yes') { // پاک کردن رکورد
$q = "DELETE FROM users WHERE ID = $id LIMIT 1";
$r = @mysqli_query ($dbc, $q);
if (mysqli_affected_rows($dbc) == 1) { // اگر درست کار کرد
echo '<p> کاربر پاک شد </p>';
} else { // اگر پرسوجو درست کار نکرد
echo '<p class="error"> بدلیل خطای سیستمی کاربر پاک نشد </p>'; // Public message.
echo '<p>' . mysqli_error($dbc) . '<br /> پرسوجو: ' . $q . '</p>'; // Debugging message.
} else { // پیغام پاک نشدن کاربر در صورت عدم تایید
echo '<p> کاربر پاک نشد </p>'; }  
} else { 
// گرفتن اطلاعات کاربر
$q = "SELECT CONCAT(last_name, ', ', first_name) FROM users WHERE ID=$id";
$r = @mysqli_query ($dbc, $q);
if (mysqli_num_rows($r) == 1) { 
$row = mysqli_fetch_array ($r, MYSQLI_NUM);
echo '<form action="delete.php" method="post">
<h3> :نام ' . $row[0] . '</h3>
آیا مطمئن هستید که می خواهید این کاربر را پاک کنید؟ <br />
<div id="delete">
<label> بله  </label> <input type="radio" name="sure" value="Yes" /> 
<label> خیر   </label> <input type="radio" name="sure" value="No" checked="checked" /> 
</div>
<div><input type="submit" name="submit" class="submit" value=" ارسال" /></div
<input type="hidden" name="submitted" value="TRUE" />
<input type="hidden" name="id" value="' . $id . '" />
 </form>';
} else { // شماره کاربر نادرست
echo '<p class="error"> این برگه اشتباهی باز شده است. </p>';
} } 
mysqli_close($dbc);
include ('includes/footer.html');
?>

برای دسترسی به این برگه دیگر دکمه ای در فهرست ناوبری گذاشته نمی شود، بلکه این برگه از داخل برگه کاربران و با اضافه شدن پیوند «پاک کردن» قابل دسترسی می شود.

 

تغییرات در برگه کاربران view.php
تنها کاری که باید در این برگه صورت بپذیرد اضافه کردن یک گزینه دیگر در جدول نمایش کاربران است. پس در زیر گزینه «تاریخ ثبت نام» که در سرتیتر جدول است، کد زیر را قرار دهید:

<div class="table-header"> پاک کردن </div>

بعد از اضافه کردن این کد مجموعا قسمت تیتر جدول به شکل زیر باید باشد:

قسمت بعدی در بخشی قرار می گیرد که مشخصات کاربران است. پس کد زیر را به آن قسمت اضافه کنید.

echo '<div class="table-record">' . '<a href="delete.php?id=' . $row['ID']. '">  پاک کردن </a>' . '</div>' ;

و نتیجه به شکل زیر می شود:

'<a href="delete.php?id=' . $row['ID']. ' ">  پاک کردن </a>

همانطور که می بینید یک پیوندی با استفاده از برچسب اچ تی ام ال در این ستون قرار می گیرد با نام «پاک کردن» که این پیوند به برگه delete.php راهنمایی می شود. بعد از نام برگه یک قسمتی با علامت "؟" اضافه می شود که "id=" را به دنبال دارد.

این دقیقا شیوه ای است که توسط آن مقداری با نام id به برگه delete.php فرستاده می شود. در ادامه این خط، مقدار است که در متغیر $row['ID'] وجود دارد. این نام و مقدار در ادامه آدرس این برگه اضافه می شوند. به طور مثال شبیه زیر:

 

تغییرات برگه شیوه style.css
کدهای زیر را دربرگه شیوه نامه خود اضافه کنید:

/*  برگه پاک کردن      */
#delete{ overflow: hidden; margin:5px auto 10px auto;}
#delete input, #delete label{ clear:none;width:20px; margin: auto 5px auto 5px;}

حال اگر دکمه «کاربران» را در فهرست کلیک کنید با چیزی همانند شکل زیر مواجه می شوید:

همان طور که از تصویر پیداست در داخل جدول اطلاعات کاربران، گزینه دیگری با نام «پاک کردن» اضافه شده است. از این به بعد با اضافه شدن هر نام کاربری به این جدول (در صورت ثبت نام کاربران) این پیوند برای پاک کردن هر کاربر به جدول اضافه می شود.

نکته مهم این است که این پیوند در برگه کاربران اضافه شده است و به طور مستقیم پیوندی برای آن قرار نمی دهیم زیرا ما نیاز داریم که در صورت انتخاب این گزینه، شماره شناسه کاربری که در پایگاه داده ها با نام ID  ثبت شده را به کد پی اچ پی در در برگه delete.php بفرستیم.

حال اگر بر روی پیوند «پاک کردن» کلیک کنید به  آن برگه راهنمایی می شوید:

شرح نکات مهم کدهای برگه delete.php

// بررسی شماره شناسه کاربری
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) { // از view.php
     $id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) { // از فرم
     $id = $_POST['id'];
} else { // اگر مقدار درستی نبود باید برگه بسته شود
     echo '<p class="error"> این برگه به اشتباه باز شده </p>';
     include ('includes/footer.html'); 
     exit();
}

قسمت ابتدایی شرط بررسی می کند که اگر متد استفاده شده در فرم شیوه GET است، آیا مقدار به شکل عدد صحیح، با نام id ارسال شده یا نه، در صورت درستی شرط آن عدد یا مقدار داخل متغیر ذخیره می شود.

در بخش esleif احتمال دیگری بررسی می شود، با این فرض که فرم فرستنده مقدار از متد POST استفاده می کند، در این صورت باز نام و مقداری را از فرم دریافت می کند و در داخل متغیر قرار می دهد، البته با یک تفاوت که این بار این نام و مقدار توسط برچسب کادر پنهان فرستاده می شود.

بخش آخر else در صورتی عمل می کند که هیچ مقداری به این برگه ارسال نشده باشد.

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

همانطور که می بینید در این شرایط شماره کاربر فرستاده نمی شود و پیغام اشتباه باز شدن برگه ظاهر می گردد. مسئله اصلی این است که برگه delete.php به تنهایی و به طور مستقیم کارکرد ندارد و تنها زمانی کار می کند که شماره شناسه یک کاربر به این برگه ارسال گردد.

تنها محل دسترسی به این برگه از داخل برگه «کاربران» است که در بخش قبلی دیدید که یک پیوند با نام «پاک کردن» به گزینه های برگه «کاربران» اضافه شد.

if (isset($_POST['submitted'])) {
     if ($_POST['sure'] == 'Yes') { // پاک کردن رکورد
           // پرسوجو
           $q = "DELETE FROM users WHERE ID = $id LIMIT 1";
           $r = @mysqli_query ($dbc, $q);
           if (mysqli_affected_rows($dbc) == 1) { // اگر درست کار کرد
                      // پیغام موفقیت در پاک کردن
                      echo '<p> کاربر پاک شد </p>';
           } else { // اگر پرسوجو درست کار نکرد

                      echo '<p class="error"> به دلیل خطای سیستمی کاربر پاک نشد </p>'; // Public message.
                      echo '<p>' . mysqli_error($dbc) . '<br /> پرسوجو: ' . $q . '</p>'; // Debugging message.
           }
     } else { // پیغام پاک نشدن کاربر در صورت عدم تایید
              echo '<p> کاربر پاک نشد </p>';
}

این یک شرطی تو در توی دیگر است که دو شرط را بررسی می کند. ابتدا، اگر دکمه «ارسال» انتخاب شده باشد و دوم، اگر گزینه «بله» برای پاک کردن زده شود. در این قسمت کاربر مورد نظر پاک می شود. قسمت else شرط داخل زمانی کار می کند که شما گزینه «خیر» را انتخاب کنید. 

دستور جدیدی از SQL اینجا به کار برده شده است تا به توان رکوردی را در پایگاه پاک کرد. به شیوه بکار گیری دستور پاک کردن توجه کنید:

DELETE FROM users WHERE ID = $id LIMIT 1"

تعریف دستور این است که در جدول users رکوردی با شماره "ID" قرار گرفته که در داخل متغیر $id است را پاک کن. در آخر این دستور مورد دیگری با نام limit 1 قرار دارد که به دستور اضافه شده و می گوید فقط یک رکورد پاک شود. باقی کدهای این قسمت برای شما قبلا معرفی شده اند.

} else { 
     // گرفتن اطلاعات کاربر
     $q = "SELECT CONCAT(last_name, ', ', first_name) FROM users WHERE ID=$id";
     $r = @mysqli_query ($dbc, $q);

if (mysqli_num_rows($r) == 1) { 
     $row = mysqli_fetch_array ($r, MYSQLI_NUM);
     // فرم

این  else متعلق به شرط ابتدایی است، یعنی تا زمانی که دکمه «ارسال» را فشار نداده باشید. اگر به تصویر توجه کنید؛

می بینید که نام و نام خانوادگی کاربر مورد نظر در بالای این قسمت آورده شده است. این کار را در این بخش کدها می توانید ببینید که چطور با یک پرسوجو این اطلاعات از پایگاه خوانده شده است.

اگر گزینه «خیر» را انتخاب کنید با پیغام زیر مواجه می شوید:

در درس بعدی برگه ای دیگر برای ویرایش کاربران اضافه خواهیم کرد.

موافقین ۰ مخالفین ۰ ۹۳/۰۴/۲۴

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی