تخفیف ویژه هفته کتاب و کتاب خوانی، فرصت یادگیری با 40٪ تخفیف (کد تخفیف: Ketab)
زمان باقی مانده
سبد (0)

تبلیغات

آموزشphp به زبان ساده

  •  AJAX (آجاکس)، هنر تبادل داده ها با سرور و بروز رسانی بخش هایی از یک صفحه وب، بدون بارگذاری مجدد کل صفحه است.


    AJAX (آجاکس) چیست؟

    Wiki

    AJAX مخفف کلمات Asynchronous JavaScript And XML است.

    به طور خلاصه، AJAX در مورد بارگذاری داده ها در پس زمینه و نمایش آن بر روی صفحه وب بدون بارگذاری مجدد کل صفحه است.

    مثال هایی از استفاده AJAX در برنامه ها:

    • Gmail
    • Google Maps
    • Youtube
    • Facebook

    AJAX چگونه کار می کند

    Wiki


    AJAX براساس استاندارهای اینترنت

    Wiki

    AJAX براساس استاندارهای اینترنت است و ترکیبی از موارد زیر را استفاده می کند:

    • شیء XMLHttpRequest - برای تبادل داده با سرور، بصورت غیرهمزمان (asynchronously) استفاده می شود.
    • JavaScript/DOM - برای نمایش اطلاعات و یا تعامل با داده ها
    • CSS- برای مشخص کردن نحوه نمایش داده ها
    • XML - اغلب بعنوان یک فرمت برای انتقال داده ها استفاده می شود.
    Note برنامه های کاربردی AJAX مرورگرند و مستقل از پلتفرم عمل می کنند...!

    امکان Google Suggest

    Wiki

    AJAX در سال 2005 توسط Google با امکان Google Suggest این سایت معروف شد.

    این امکان (Google Suggest) با استفاده از AJAX یک واسط کاربری بسیار پویا ایجاد کرده است. زمانی که در کادر جستجوی Google شروع به تایپ می کنید، یک کد JavaScriptحروف را به سرور ارسال می کند و سرور لیستی از پیشنهادات برای کلمه مورد جستجوی شما را برمی گرداند.


    شروع به استفاده از AJAX

    Wiki

    در بیاموز PHP، ما نحوه update کردن بخشی از صفحه وب، بدون بارگذاری کل صفحه را با استفاده از AJAX آموزش خواهیم داد.

    اسکریبت های سمت سرور، با PHP نوشته خواهد شد.


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • Cookie ها در php

    Wiki

     Cookie چیست؟ cookie یک فایل کوچک است که سرور آن را درون کامپیوتر کاربر قرار می دهد. هر بار که همان کامپیوتر یک صفحه را از طریق مرورگرش درخواست می کند، مقدار cookie همراه با درخواست به سرور ارسال می شود. با php، شما می توانید هم مقادیر cookie را بسازید و هم بازیابی کنید.

    توجه: یک cookie اغلب برای شناسایی یک کاربر استفاده می شود.


     چگونه یک cookie ایجاد کنیم؟

    Wiki

     تابع ()setcookie برای ایجاد cookie استفاده می شود.

    نکته: تابع ()setcookie باید قبل از تگ <html> قرار گیرد.

    نحوه استفاده:

    setcookie(name, value, expire, path, domain);

    مثال:

    در مثال زیر٫ یک cookie با نام "user" ایجاد می کنیم و مقدار "Ali Ahmadi" را به آن اختصاص می دهیم. ما همچنین مشخص می کنیم که cookie پس از یک ساعت از بین برود:

    <?php
    setcookie("user", "Ali Ahmadi", time()+3600);
    ?>

    <html>
    .....

    نکته: مقدار cookie به طور خودکار هنگام ارسال کد(URLencoding) می شود و موقع دریافت رمزگشایی می شود (برای پیشگیری از رمزگذاری٫ از ()setrawcookie استفاده کنید.

    مثال:

    شما می توانید زمان انقضای cookie را به روشی دیگر مشخص کنید، احتمالاً این راه ساده تر از مشخص کردن ثانیه هاست:

    <?php
    $expire=time()+60*60*24*30;
    setcookie("user", "Ali Ahmadi", $expire);
    ?>

    <html>
    .....

    در مثال بالا زمان انقضا با مقدار "1 ماه" پر شده است( 60sec * 60 min * 24 hours * 30 days)


    چگونه مقدار یک cookie را بازیابی کنیم؟

    Wiki

     متغیر COOKIE_$  در php برای بازیابی مقدار یک cookie مورد استفاده قرار می گیرد.

    مثال:

    در مثال زیر٫ مقدار cookie با نام "user" را بازیابی می کنیم و بر روی صفحه، نمایش می دهیم:

    <?php
    // Print a cookie
    echo $_COOKIE["user"];

    // A way to view all cookies
    print_r($_COOKIE);
    ?>

    در مثال زیر با استفاده از تابع ()isset چک می کنیم که cookie با نام "user" قبلاً set شده است یا نه؟

    <html>
    <body>

    <?php
    if (isset($_COOKIE["user"]))
      echo "Welcome " . $_COOKIE["user"] . "!<br />";
    else
      echo "Welcome guest!<br />";
    ?>

    </body>
    </html>


    چگونه یک cookie را حذف کنیم؟

    Wiki

     هنگامی که می خواهید یک cookie را حذف کنید باید اطمینان دهید که تاریخ انقضاء آن به پایان رسیده است.

    مثال حذف:

    <?php
    // set the expiration date to one hour ago
    setcookie("user", "", time()-3600);
    ?>


    اگر یک مرورگر cookieها را پشتیبانی نکند چه باید کرد؟

    Wiki

     اگر برنامه شما با مرورگرهایی سروکار دارد که cookieها را پشتیبانی نمی کنند، باید روشهای دیگری رابرای انتقال اطلاعات از یک صفحه به صفحه ی دیگر انتخاب کنید. یک روش انتقال اطلاعات از طریق فرم ها و متغیرهای از پیش تعریف شده است(فرم ها و متغیر های از پیش تعریف شده، قبل از این توضیح داده شده اند).

    در فرم زیر وقتی که کاربر دکمه ی "submit" را کلیک می کند، ورودی های کاربر را به "welcome.php" می فرستد:

    <html>
    <body>

    <form action="welcome.php" method="post">
       Name: <input type="text" name="name" />
       Age: <input type="text" name="age" />
       <input type="submit" />
    </form>

    </body>
    </html>

    بازیابی اطلاعات در صفحه "welcome.php" شبیه زیر خواهد بود:

    <html>
    <body>

    Welcome <?php echo $_POST["name"]; ?>.<br />
    You are <?php echo $_POST["age"]; ?> years old.

    </body>
    </html>

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.

    READ MORE
  • درج کردن یک فایل PHP در یک فایل PHP دیگر

    Wiki

    شما می توانید با استفاده از دو تابع include یا require محتویات یک فایل PHP را داخل یک فایل PHPدیگر درج کنید، البته قبل از اینکه فایل دوم اجرا شود.

    این دو تابع در همه موارد یکسان عمل می کنند، بجز در چگونگی برخورد با خطا:

    • include: پیغام خطا را تولید می کند، اما ادامه اسکریپت اجرا خواهد شد.
    • require: پیغام خطا را تولید می کند و اجرای اسکریپت متوقف خواهد شد.

    موارد استفاده دو تابع include و require می تواند شامل موارد زیر باشد:

    • توابع
    • Header
    • Footer
    • المانهایی که در چندین صفحه استفاده می شود مانند منوها، کامپوننت تاریخ و...

    شما می توانید یک فایل استاندارد Header یا Footer و یا منو ایجاد کنید و در همه صفحات پروژه تان از آنها استفاده کنید، و موقعی که نیاز به تغییر داشت، تنها با تغییر یک فایل، کل پروژه تان را تازه سازی کنید.

    دستور include_once و  require_once:
    دو تابع بالا دقیقاً مثل include و require عمل می کنند، با این تفاوت که اگر فایل مورد نظر قبلاً خوانده شده است، دیگر خوانده نمی شود.


    مثال 1:

    فرض کنید یک فایل Header با نام "header.php" دارید، برای اضافه کردن آن  به صفحه ای از پروژه از کد زیر استفاده کنید:

    <html>
    <body>

    <?php include("header.php"); ?>
    <h1>Welcome to my home page!</h1>
    <p>Some text.</p>

    </body>
    </html>

    دستورات include, include_once, require و require_once را می توان بدون پرانتز نیز بکار برد.


    مثال 2:

    فرض کنید یک فایل منو طبق زیر با نام "menu.php" داریم، که باید به تمام صفحات پروژه اضافه شود:

    <a href="/default.php">Home</a>
    <a href="/tutorials.php">Tutorials</a>
    <a href="/references.php">References</a>
    <a href="/examples.php">Examples</a>
    <a href="/about.php">About Us</a>
    <a href="/contact.php">Contact Us</a>

    در زیر فایل "menu.php" را به صفحه دلخواهمان اضافه کرده ایم:

    <html>
    <body>

    <div class="leftmenu">
    <?php include("menu.php"); ?>
    </div>

    <h1>Welcome to my home page.</h1>
    <p>Some text.</p>

    </body>
    </html>

    اگر بعد از اجرای فایل بالا در  IE ، روی صفحه راست کلیک کرده و View Source را کلیک کنید، کد html شبیه زیر خواهیم داشت:

    <html>
    <body>

    <div class"leftmenu">
    <a href="/default.php">Home</a>
    <a href="/tutorials.php">Tutorials</a>
    <a href="/references.php">References</a>
    <a href="/examples.php">Examples</a>
    <a href="/about.php">About Us</a>
    <a href="/contact.php">Contact Us</a>
    </div>

    <h1>Welcome to my home page!</h1>
    <p>Some text.</p>

    </body>
    </html>


    مثال 3: خطا در تابع include:

    Wiki

    در مثال زیر فایل wrongFile.php وجود ندارد و همان طور که مشاهده می کنید بعد از چاپ پیغام خطا ادامه اسکریپت اجرا می شود.

    <html>
    <body>

    <?php
    include("wrongFile.php");
    echo "Hello World!";
    ?>

    </body>
    </html>

    پیغام خطا:

    Warning: include(wrongFile.php) [function.include]:
    failed to open stream:
    No such file or directory in C:\home\website\test.php on line 5

    Warning: include() [function.include]:
    Failed opening 'wrongFile.php' for inclusion
    (include_path='.;C:\php5\pear')
    in C:\home\website\test.php on line 5

    Hello World!


    مثال 4:پیغام خطا در تابع require:

    Wiki

    <html>
    <body>

    <?php
    require("wrongFile.php");
    echo "Hello World!";
    ?>

    </body>
    </html>

    پیغام خطا:

    Warning: require(wrongFile.php) [function.require]:
    failed to open stream:
    No such file or directory in C:\home\website\test.php on line 5

    Fatal error: require() [function.require]:
    Failed opening required 'wrongFile.php'
    (include_path='.;C:\php5\pear')
    in C:\home\website\test.php on line 5

    بعد از ایجاد خطا، ادامه اجرای اسکریپتمتوقف می شود، و در حقیقت خطی که قرار است Hello World را چاپ کند، اجرا نمی شود.

     پیشنهاد می شود از تابع require بجای include استفاده شود، چون اسکریپت ها بعد از برخورد با خطا نباید ادامه پیدا کنند.

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.

    READ MORE
  • SimpleXML چیست؟

    Wiki

    SimpleXML یک روش جدید برای خواندن خصوصیات و متن یک عنصر در PHP5 فراهم می کند. (البته اگر طرح بندی سند XML را بدانید)

    SimpleXML در مقایسه با تجزیه کننده DOM یا Expat با کد کمتری به اطلاعات عناصر دسترسی پیدا می کند.

    SimpleXML یک سند XML را به یک شی تبدیل می کند:

    • عناصر: بوسیله شیء SimpleXMLElement به یک سری خصوصیات تنها تبدیل می شوند، زمانی که در یک سطح، بیش از یک عنصر وجود دارد، از آرایه ها استفاده می شود.
    • خصوصیات: خصوصیات عناصر در یک آرایه انجمنی(PHP Arrays) قابل دسترسی است، نام خصوصیت ایندکس آرایه است.
    • اطلاعات عنصر: متن اطلاعات عنصر به یک رشته تبدیل می شود، اگر یک عنصر بیش از یک متن داشت، آنها را به ترتیبی که پیدا کرده می چیند.

    برای موارد پایه ای شبیه زیر، استفاده از SimpleXML بسیار ساده و سریع است:

    • خواندن یک فایل XML
    • استخراج اطلاعات از یک رشته XMLی
    • ویرایش متن یا مشخصه های یک عنصر

    نکته: زمانی که با یک فایل XML پیشرفته شبیه namespaceها سروکار دارید بهتر است که از تجزه کننده های Expat یا DOM استفاده کنید.


    نصب SimpleXML

    Wiki

    توابع تجزیه کننده SimpleXML قسمتی از هسته PHP 5.0 هستند و نیازی به نصب وجود ندارد.


    چگونه از SimpleXML استفاه کنیم

    Wiki

    لطفاً به فایل XML زیر توجه کنید:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>

    می خواهیم نام و متن اطلاعات هر عنصر را در خروجی چاپ کنیم.

    راه حل؟

    1. فایل XML را لود کنید.
    2. نام اولین عنصر را بخوانید.
    3. یک حلقه روی هر نود(فرزند) ایجاد کنید و برای خواندن اطلاعات هر نود(فرزند) از تابع ()children استفاده کنید.
    4. برای هر نود(فرزند) نام عنصر و متن اطلاعات آنرا چاپ کنید.

    مثال:

    <?php
    $xml = simplexml_load_file("test.xml");

    echo $xml->getName() . "<br />";

    foreach($xml->children() as $child)
      {
      echo $child->getName() . ": " . $child . "<br />";
      }
    ?>

    خروجی کد بالا:

    note
    to: Tove
    from: Jani
    heading: Reminder
    body: Don't forget me this weekend!


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  •  آرایه ها در PHP

    Wiki

    آرایه ها انواع خاصی از متغیرها به حساب می آیند که می توانند چندین داده را در قالب یک نام ذخیره کنند.

    اگر لیستی از آیتمها (برای مثال یک لیست از نام ماشین ها) را داشته باشیم و بخواهیم آنها را در متغیر ها ذخیره کنیم، چیزی شبیه زیر خواهیم داشت:

    $cars1="Samand";
    $cars2="Volvo";
    $cars3="BMW";

    حالا:

    • اگر لیست شما بیشتر از 3 آیتم باشد مثلاً 300تا چه کار می کنید.
    • اگر در این لیست به دنبال یک ماشین خاص باشید چه کار می کنید.

    در اینجا بهترین راه حل استفاده از آرایه ها است.

    یک آرایه می تواند مقادیر متغیرها را تحت یک نام برای شما نگه دارد. و شما از طریق نام آرایه می توانید به مقادیر دسترسی داشته باشید.

    هر آیتم در آرایه ایندکس منحصر به فردی برای خود دارد که به راحتی از طریق ایندکس می توانید به مقادیر دسترسی پیدا کنید.

    در PHP سه نوع آرایه وجود دارد:

    • آرایه عددی (Indexed array): منظور از عددی ایندکس آرایه است، یعنی یک آرایه با ایندکس عددی
    • آرایه انجمنی (Associative array): یک آرایه که بجای ایندکس عددی از یک نام یا مقدار برای ایندکس گذاری استفاده کرده است.
    • آرایه چند بعدی (Multidimensional array): یک آرایه که مقادیر هر سلول آن آرایه ای دیگر است.

    آرایه عددی

    Wiki

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

    دو روش برای ایجاد چنین آرایه ای وجود دارد:

    1. در مثال زیر ایندکس به صورت اتوماتیک ساخته می شود(ایندکس از 0 شروع می شود):

      $cars=array("Samand","Volvo","BMW","Toyota");

    2. در مثال زیر به صورت دستی می توانید ایندکس را بسازید:

      $cars[0]="Samand";
      $cars[1]="Volvo";
      $cars[2]="BMW";
      $cars[3]="Toyota";

     در مثال زیر بعد از مقداردهی آرایه شما می توانید به مقادیر هر سلول به وسیله نام و ایندکس آرایه دسترسی پیدا کنید: 

    <?php
    $cars[0]="Saab";
    $cars[1]="Volvo";
    $cars[2]="BMW";
    $cars[3]="Toyota";
    echo $cars[0] . " and " . $cars[1] . " are Swedish cars.";
    ?>

    خروجی کد بالا:

    Saab and Volvo are Swedish cars.

    توجه: با استفاده از تابع ()count، می توانید تعداد سلول های یک آرایه را تعیین نمایید.


    آرایه های انجمنی

    Wiki

    در یک آرایه انجمنی ایندکس هر سلول از آرایه، با یک نام یونیک مشخص می شود.

    زمان ذخیره مقادیر سلولها باید یک نام مشخص و یونیک به آن سلول اختصاص دهید.

    مثال 1: در این مثال یک آرایه ای که سن افراد مختلف را نشان می دهد، تعریف شده است:

    $ages = array("Ali"=>32, "Reza"=>30, "Amir"=>34);

    مثال2: این مثال مانند قبلی است اما می تواند نشان دهد که چگونه می توانیم به روش های مختلف یک آرایه را تعریف کنیم:

    $ages['Ali'] = "32";
    $ages['Reza'] = "30";
    $ages['Amir'] = "34";

    در زیر نشان داده شده که چگونه از طریق نام و ایندکس آرایه، توانسته ایم به محتویات هر سلول آرایه دسترسی پیدا کنیم:

    <?php
    $ages['Ali'] = "32";
    $ages['Reza'] = "30";
    $ages['Amir'] = "34";

    echo "Ali is " . $ages['Ali'] . " years old.";
    ?>

    خروجی کد بالا:

    Ali is 32 years old.


    آرایه های چند بعدی

    Wiki

    هریک از عناصر آرایه در php می توانند از هر نوعی باشند پس می توانیم آرایه را نیز به عنوان عضو عناصر در نظر بگیریم. بنابراین به زبان ساده تر می توانیم یک آرایه داخل آرایه دیگر تعریف کنیم و داخل آن نیز یک آرایه دیگر و داخل آن نیز و به همین ترتیب. تعریف آرایه چندبعدی در زبان php به سادگی آرایه های معمولی است.

    مثال: در این مثال یک آرایه چند بعدی تعریف شده که ایندکس آن به صورت اتوماتیک ایجاد می شود:

    $families = array(array("Ali","Reza","Sara"),
                      array("Amir"),
                      array("Poya","Parniya")
                     );

    اگر مایل باشید می توانید آرایه بالا را به صورت زیر تعریف کنید: (ایندکسِ مقداری)

    $families = array("Ahmadi"=>array("a"=>"Ali","b"=>"Reza","c"=>"Sara"),
                      "Naderi"=>array("a"=>"Amir"),
                      "Mohamadi"=>array("a"=>"Poya","b"=>"Parniya")
                     );

     مثال: اجازه بدهید تا با یک مثال نشان دهیم که چگونه می توان به یک سلول از آرایه های چند بعدی دسترسی پیدا کرد:

    echo "Is " . $families['Ahmadi']['b'] . " a part of the Ahmadi family?";

    خروجی کد بالا:

    Is Reza a part of the Ahmadi family?


    مرتب کردن آرایه ها در PHP

    Wiki

    عناصر یک آرایه را می توان به صورت الفبایی یا عددی از کوچک به بزرگ (ascending) یا بزرگ به کوچک (descending) مرتب نمود.

    توابع مرتب سازی آرایه ها:

    • ()sort - مرتب کردن مقادیر آرایه از کوچک به بزرگ
    • ()rsort - مرتب کردن مقادیر آرایه از بزرگ به کوچک
    • ()asort - مرتب کردن آرایه های انجمنی از نزولی به صعودی (بر اساس مقدار)
    • ()ksort - مرتب کردن آرایه های انجمنی از نزولی به صعودی (بر اساس کلید)
    • ()arsort - مرتب کردن آرایه های انجمنی از صعودی به نزولی (بر اساس مقدار)
    • ()krsort - مرتب کردن آرایه های انجمنی از صعودی به نزولی (بر اساس کلید)

    در مثال زیر، آرایه انجمنی age$ بر اساس کلید، از کوچک به بزرگ مرتب شده است:

    مثال (آرایه ها در PHP)

    <?php
    $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    ksort($age);

    foreach($age as $x=>$x_value)
        {
        echo "Key=" . $x . ", Value=" . $x_value;
        echo "<br>";
        }
    ?>

    خروجی کد بالا:

    Key=Ben, Value=37
    Key=Joe, Value=43
    Key=Peter, Value=35

    در مثال زیر، آرایه انجمنی age$ بر اساس مقادیر سلول ها، از بزرگ به کوچک مرتب شده است:

    مثال (آرایه ها در PHP)

    <?php
    $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
    arsort($age);

    foreach($age as $x=>$x_value)
        {
        echo "Key=" . $x . ", Value=" . $x_value;
        echo "<br>";
        }
    ?>

    خروجی کد بالا:

    Key=Joe, Value=43
    Key=Ben, Value=37
    Key=Peter, Value=35

    برگرداندن تعداد عناصر یک آرایه

    Wiki

    با استفاده از تابع ()count، می توان تعداد عناصر یک آرایه را برگرداند.

    مثال (آرایه ها در PHP)

    برگرداندن تعداد عناصر یک آرایه:

    <?php
    $cars=array("Volvo","BMW","Toyota");
    echo count($cars);
    ?>

    3

    نحوه استفاده:

    count(array,mode);
    پارامتر توضیحات
    array الزامی است، نام آرایه را تعیین می کند.
    mode اختیاری است، در آرایه های چند بعدی، نحوه شمارش عناصر را تعیین می کند.
    • 0: مقدار پیشفرض، در آرایه های چند بعدی، تعداد کل عناصر را برنمی گرداند.
    • 1: در آرایه های چند بعدی، تعداد کل عناصر را برمی گرداند.

    نکته: پارامتر mode از php 4.2 به بعد اضافه شده است.

    یک مثال دیگر از تابع ()count

    مثال (آرایه ها در PHP)

    تعداد عناصر، در آرایه های چند بعدی:

    <?php
    $cars=array
      (
      "Volvo"=>array
      (
      "XC60",
      "XC90"
      ),
      "BMW"=>array
      (
      "X3",
      "X5"
      ),
      "Toyota"=>array
      (
      "Highlander"
      )
      );

    echo "Normal count: " . count($cars)."<br>";
    echo "Recursive count: " . count($cars,1);
    ?>

    Normal count: 3
    Recursive count: 8

    در بیاموزهای بعدی درباره ی حلقه ی foreach توضیح داده شده است.


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • آموزش پروژه محور PHP

    یکی از قابلیت های مهم این پروژه، رزرو هتل و همچنین ثبت نام کاربران است، علاوه بر این با ورود به قسمت مدیریت می توانید اطلاعات ثبت شده را مشاهده، ویرایش و یا حذف نمایید.

    READ MORE
  • به چه چیزی نیاز دارم؟

    Wiki

    برای شروع کار با PHP می توانید یکی از موارد زیر را استفاده نمایید:

    1. می توانید از یک وب هاست که PHP و MYSQL را پشتیبانی می کند، استفاده نمایید.
    2. یک web server مانند Apache، روی کامپیوترتان نصب کنید و سپس PHP و MYSQL را نصب نمایید.
    3. می توانید از پکیج هایی مانند Xampp یا Wamp استفاده نمایید.

    1- وب هاستی که PHP را پشتیبانی می کند

    Wiki

    اگر سرور شما PHP را پشتیبانی می کند به چیز دیگری نیاز ندارید.

    فقط باید یک فایل PHP ایجاد نمایید و آنرا در دایرکتوری وب قرار دهید. سرور بطور اتوماتیک آنرا ترجمه خواهد کرد.

    بخاطر اینکه PHP رایگان است و اغلب سرورها آنرا پشتیبانی می کنند نیاز به کامپایل یا نصب ابزار های اضافی ندارید.

    به هر حال اگر سرور شما PHP را پشتیبانی نمی کند، باید PHP را نصب نمایید.


    2- نصب جداگانه Web Server و PHP و MYSQL

    Wiki

    اگر کامپیوترتان، PHP را پشتیبانی نمی کند باید کارهای زیر را انجام دهید:

    • نصب وب سرور (Apache)
    • نصب PHP
    • نصب بک پایگاه داده، مانند MYSQL

     در لینک روبرو، آموزش چگونگی نصب PHP به خوبی توضیح داده شده است: http://php.net/manual/en/install.php

    دانلود Apache Server:

    برای دانلود رایگان Appache از لینک روبرو استفاده کنید: http://httpd.apache.org/download.cgi

    دانلود PHP:

    برای دانلود رایگان PHP از لینک روبرو استفاده کنید: http://www.php.net/downloads.php

    دانلود MySQL :

    برای دانلود رایگان MySQL از لینک روبرو استفاده کنید: http://www.mysql.com/downloads

     توجه: به جای نصب جداگانه PHP , MySQL, Apache می توانید از پکیج هایی مانند Xampp یا Wamp استفاده نمایید که کار شما را بسیار ساده تر می نمایند، البته در مطلب PHP & IIS چگونگی اجرای فایلهای PHP روی IIS توضیح داده شده است.


    3- استفاده از Xampp یا Wamp

    Wiki

    همانطور که قبلاً گفته شد برای شروع کار با php نیاز به نصب مفسر آن داریم که پکیج Xampp برای این منظور مناسب می باشد.

    مراحل نصب XAMPP:

    برای دانلود رایگان XAMPP از لینک روبرو استفاده کنید: http://www.apachefriends.org/en/xampp.html

    1- در اولین مرحله، خوش آمدگویی داریم، پس Next را مطابق شکل زیر کلیک کنید.

    2-  مسیر نصب را مطابق شکل زیر البته به صورت دلخواه مشخص کنید.

    3- در صورتی که میخواهید Apache و MySQL به عنوان سرویس های ویندوز نصب بشوند گزینه های Install Apache as Service و Install MySQL as Service را تیک بزنید، در غیر این صورت اگر تیک Install as Service را نزده باشید باید هر بار که ویندوز بالا می آید Apache و MySQL را فعال کنید، یعنی باید دکمه Start کنارشون را در کنترل پانل XAMPP کلیک کنید، در نهایت کلید Install را مطابق شکل زیر کلیک کنید.

    نکته1: در صورتیکه IIS روی سیستم شما نصب است و XAMPP را نصب کنید، در نهایت برای اجرای فایل های PHP به مشکل برخواهید خورد، بنابراین باید IIS را Stop کنید.

    نکته2:اگر SQL Server روی سیستم شما نصب است باید سرویس Reporting Services Configuration Manager آنرا Stop کنید تا XAMPP به درستی فایلهای PHP را اجرا کند.

    در شکل زیر کنترل پنل Xampp را می بینید که می توانید Apache و MySQL را Start یا Stop کنید.

     حالا مرورگرتان را باز کنید و در آدرس بار مرورگر localhost یا 127.0.0.1 را تایپ کنید و یا می توانید در شکل بالا دکمه Admin را کلیک کنید اگر همه چیز خوب پیش رفته باشه صفحه زیر را خواهید دید که می توانید زبان صفحات Xampp را انتخاب کنید پس روی English کلیک کنید!

    در نهایت صفحه ای مانند شکل زیر نمایش داده می شود.

    ایجاد و اجرای یک فایل PHP:

      1. یک فایل PHP ساده ایجاد کنید، به عنوان مثال در ادیتور NOTEPAD کد زیر را تایپ کنید و با نام hello و با پسوند php ذخیره کنید(hello.php):

        <?php
        echo "Hello";
        ?>

      2.  فایل ایجاد شده در بالا را در مسیر C:\xampp\htdocs کپی کنید. (مسیر نصب XAMPP خواهد بود)
      3. در آدرس بار مرورگر، آدرس localhost/hello.php را وارد کنید.
      4. اگر همه چیز درست پیش رفته باشد، خروجی زیر را خواهید داشت:

        Hello


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • بهترین راهکار برای اجرای PHP در IIS ویندوز

    Wiki

    تا قبل از آشنایی با امکانات IIS 7 به نظر می رسید که بهترین جا برای میزبانی یک وب سایت PHP فقط و فقط یک سرور Linux می تواند باشد، چون IIS 6 خیلی خوب PHP را اجرا نمی کند و خبری از URL rewriting هم در IIS 6 نیست، اما تغییر زاویه حرکت مایکروسافت در جهتِ گرفتن بیشتر سهم بازار باعث شده امکانات جالبی به IIS7 اضافه بشود و امروز می شود گفت ویندوز به خوبی لینوکس می تواند یک وب سایت PHP را میزبانی کند.

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

    • اولین و بهترین دلیل این است که، IIS7 خیلی خوب URL rewriting را پشتیبانی می کند، شما به راحتی می توانید از امکان Pretty URLs سایت وردپرسی خودتان در سرور های ویندوز که IIS7 دارن استفاده کنید.
    • دلیل دوم هم اینه که مایکروسافت وقت زیادی را صرف کرده تا عملکرد Fast CGI را تا حد ممکن در IIS 7 بهبود بدهد، و کاملاً مشکل Performance پایین PHP در ویندوز حل شده.
    • دلیل سوم Module اختصاصی مایکروسافت برای PHP هست که کار Output Caching صفحات PHP رو بسیار آسان می کند و در نتیجه باز هم Performance بهتر…

    و حالا یک نکته مهم: تمام Performance خوبی که تا اینجا ازش صحبت شد در گرو خوب Config کردن IIS 7 برای اجرای PHP هست.

    در گذشته 2 راه برای اجرای PHP در IIS وجود داشت، یعنی PHP را می شد در دو Mode مختلف روی IIS ویندوز اجرا کرد:

    1. CGI Application
    2. ISAPI Managed Handler

    اما هر کدام از این دو راه حل، خوبی ها و مشکلات فراوانی را به همراه داشت.

    • خوبی CGIاین است که PHP رو خوب اجرا می کند و کمتر Crash اتفاق می افتد، اما از طرفی خیلی مصرف CPU بالایی دارد چون CGI برای اجرای هر کار کوچکی یک Process جدید ایجاد می کند و سیستم باید برای اجرای یک پردازش کوچیک صفحه PHP بهای راه اندازی و بستن یک Process رو پرداخت کند.
      سرورهای شلوغ هرگز نمی تونن از CGI برای اجرای PHP استفاده کنند. چون هم Ram به زودی پر می شود و هم CPU از پردازش باز می ماند و نهایتاً کار به Crash کردن ویندوز می کشه.
    • اما ISAPIاین مشکل رو حل کرده، PHP در ISAPI Mode به روشی اجرا میشه که ASP و ASP.Net اجرا میشوند، به این صورت که همه صفحات توسط یک Process پرازش میشوند، اما چطوری؟ IIS توسط سرویس word wide web ویندوز همه پردازش ها را انجام می دهد. و برای اینکه بفهمد فایل های مثلا با پسوند php را چه جوری اجرا کند، از یک فایل dll کمک می گیرد. IIS برای اجرای php یا aspx یا asp از dll های مخصوص همون زبان، که بهش Managed Handler میگن، کمک می گیره و با سرویس world wide web ویندوز اجرا می شود.
      ISAPI مشکل Performance اجرای PHP رو حل کرده اما مشکلات دیگه ای با خودش همراه داره. از جمله اینکه PHP در حالت ISAPI گاهی Crash می کنه و یه جورایی سایت هایی که با این روش کار می کند اعصاب صاحباشون رو خورد می کنن.

    ورود Fast CGI و پایان مشکلات

    Wiki

    مشکلات PHP در CGI و ISAPI موجب به وجود آمدن Fast CGI شد. از اسمش هم معلومه که با چه هدفی ایجاد شده. هدف Fast CGI کنار هم آوردن سرعتISAPI و کاراییCGI هست. در واقع روش کار Fast CGI مثل روش کار CGI هست. اما با تفاوتی کوچک اما کلیدی که سرعت بالایی بهش میده.

    Fast CGI برای انجام هر پردازشی یک Process جدید ایجاد نمی کنه. بلکه یک Process بعد از ایجاد باز می مونه و تعدادی پردازش رو انجام میده و بعد بسته میشه. همین تغییر کوچک موجب پایین اومدن باور نکردنی مصرف منابع سیستم توسط PHP میشه.

    با این حال Config کردن Fast CGI کمی سخت تر از CGI و ISAPI هست. اما بعد از اون مثل بنز کار می کنه.

    خوب پس بهترین راه کار برای اجرای PHP در IIS مشخص شد:

    1. قبل از همه مطمئن شوید كه CGI روی IISتون نصب هست، این رو می‌تونید از اینجا چك كنید:

    Control Panel -> Programs and Features -> Turn Windows features on or off

    2. نسخه غیرنصبی PHP رو دانلود كنید و در مسیر دلخواه (مثلاً C:\PHP) كپی كنید.

    3. فایل php.ini-recommended رو به php.ini تغییر نام بدید و این تغییرات رو در اون ایجاد كنید:

    • كاراكتر سمیکالن ( ;) را از ابتدای خط fastcgi.impersonate = 1 بردارید. (اگر مقدارش یك نیست اون رو به یك تغییر بدید).
    • برای خط cgi.fix_pathinfo = 1 هم همون كار رو انجام بدید.
    • این بار خط cgi.force_redirect=0 (حتماً مقدارش صفر باشد).
    • مقدار خط open_basedir رو برابر با مسیر c:\inetpub\wwwroot قرار بدید.

    حالا این فایل رو Save كنید و برای تست صحت نصب در اعلان داس (Command Prompt) دستور C:\PHP>php –info رو اجرا كنید، اگه اطلاعاتی رو در مورد php نشون داد، یعنی كار تا اینجا خوب پیش رفته.

    4. نوبت به تنظیمات در IIS می‌رسه. ابتدا IIS Manager رو اجرا كنید. سرور اصلی رو از لیست Connections سمت چپ انتخاب كنید و از قسمت میانی گزینه Handler Mapping رو دوبار كلیك كنید. این هم عكس:

    از ستون سمت راست گزینه Add Module Mapping رو انتخاب كنید و اون رو مثل عكس زیر پر كنید و OK كه یه پنجره دیگه بعدش باز می‌شه اون رو هم Yes كنید:

    6. كار تمومه اما برای تست تو پوشه c:\inetpub\wwwroot یه فایل به نام phpinfo.php بسازید با این محتوا:

    <?php
    echo 'Hello';
    ؟>

    و آن را با این آدرس باز كنید: http://localhost/phpinfo.php


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.

    READ MORE
  • در PHP نسخه 5 به بالا، برای کار با پایگاه داده MySQL می توانید یکی از روش های زیر را استفاده نمایید:

    • افزونه MySQLi(کاراکتر i مخفف improved بمعنی بهبود یافته است)
    • PDOکه سرنام واژگان PHP Data Objects است

    در نسخه های قبلی PHP از افزونه MySQL استفاده می شده، اما استفاده از این افزونه، از 2012 دیگر توصیه نمی شود.


    باید از MySQLi استفاده کنم یا PDO ؟

    Wiki

    اگر بخواهیم خیلی خلاصه جواب دهیم، این انتخاب بستگی به نیاز شما دارد...!

    هر کدام از گزینه های MySQLi و PDO، مزییت های خودشان را دارند.

    گزینه PDO با 12 پایگاه داده مختلف کار می کند، اما MySQLi تنها با پایگاه داده MySQL کار خواهد کرد.

    بنابراین اگر بخواهید زمانی به یک پایگاه داده دیگر سوییچ کنید، گزینه PDO کار را آسان تر خواهد کرد و فقط کافی است که ارتباط یا connection به پایگاه داده را تغییر دهید و احتمالاً چند تغییر کوچک در کوئری ها را خواهید داشت.

    هر دو گزینه شیء گرا هستند، اما MySQLi رویه های API را نیز ارائه می دهد.

    هر دو گزینه، دستورات آماده برای مقابله با تزریقات SQL یا SQL injection را پشتیبانی می کنند، که البته این موضوع، برای حفظ امنیت برنامه های کاربردی وب بسیار حیاتی است.


    مثال های MySQL به هر دو روش MySQLi و PDO

    Wiki

    در این مطلب و آموزش های بعدی، سه روش مختلف برای کار کردن با پایگاه داده را نشان خواهیم داد:

    • MySQLi (شیء گرا یا Object-Oriented)
    • MySQLi (رویه ای یا Procedural)
    • PDO

    نصب MySQLi

    Wiki

    برای سیستم عامل Linux و Windows، افزونه MySQLi در اغلب موارد بصورت اتوماتیک بعد از نصب پکیج php5 mysql نصب خواهد شد.

    برای کسب اطلاعات بیشتر به لینک روبرو مراجع فرمایید: http://php.net/manual/en/mysqli.installation.php


    نصب PDO

    Wiki

    برای کسب اطلاعات بیشتر به لینک روبرو مراجع فرمایید: http://php.net/manual/en/pdo.installation.php


    ارتباط یا Connection به پایگاه داده MySQL

    Wiki

    قبل از اینکه به داده های پایگاه داده دسترسی داشته باشید، باید یک ارتباط یا Connection تعریف کنید:

    مثال   (MySQLi Object-Oriented)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    // Create connection
    $conn = new mysqli($servername, $username, $password);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    echo "Connected successfully";
    ?>
    Note توجه داشته باشید که در مثال شیء گرای بالا، connect_error$ تا PHP 5.2.9 و 5.3.0 PHP کار نمی کند، بنابراین اگر می خواهید که کدتان با نسخه های قدیمی PHP نیز سازگار باشد، بجای آن از کد زیر استفاده نمایید:
     // Check connection
    if (mysqli_connect_error()) {
        die("Database connection failed: " . mysqli_connect_error());
    }

    در مثال زیر با استفاده از تابع ()mysqli_connect یک connection به پایگاه داده تعریف شده است:

    مثال (MySQLi Procedural)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password);

    // Check connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "Connected successfully";
    ?>

    مثال(PDO)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully";
        }
    catch(PDOException $e)
        {
        echo "Connection failed: " . $e->getMessage();
        }
    ?>
    Note توجه داشته باشید که در مثال PDO بالا، با تنظیم گزینه dbname با مقدار "myDB" نام پایگاه داده را نیز مشخص کرده ایم. اگر PDO موفق به اتصال به پایگاه داده نشود یک استثنا یا exception پرتاب (thrown) می شود.

    نکته: یکی از بزرگترین مزیت های PDO وجود کلاس exception برای مدیریت خطاها است. همان طور که می دانید این خطاها ممکن است در کوئری های پایگاه داده رخ دهد و اگر یک استثنا یا exception از داخل بلاک { }try پرتاب (thrown) شود، اجرای اسکریبت متوقف شده و جریان کار به اولین بلاک { }catch منتقل می شود. در واقع استثنای که در قسمت try رخ داده در قسمت catch به دام می افتد.


    بستن یک ارتباط

    Wiki

    ارتباط یا Connection به صورت اتوماتیک وقتی که اسکریبت پایان یافت، بسته می شود، اما اگر مایل باشید می توانید این کار را قبل از پایان اسکریبت انجام دهید:

    مثال(MySQLi Object-Oriented)

    $conn->close();

    مثال(MySQLi Procedural)

    mysqli_close($conn);

    مثال(PDO)

    $conn = null;

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • ارث بری یک کلاس از کلاس دیگر

    Wiki

    یکی از مزیت های برنامه نویسی شی گرا، ارث بری یا Inheritance می باشد. ارث بری قابلیت توسعه کلاس را به برنامه نویس می دهد که توسط آن براحتی می توان کلاس نوشته شده را update کرد بدون آنکه بخواهیم در تعریف اصلی کلاس تغییری ایجاد نماییم.

    با استفاده از کلمه کلیدی extends در جلوی نام کلاس و در ادامه نام کلاس والد، مشخص می کنیم که کلاسمان از کلاس والد خود ارثبری داشته باشد.

    کلاس توسعه دهنده یک کلاس، تمام توابع و متغیرهای کلاس اول را شامل می شود.

    مثال:

    <?php 
    class a{
        function test()
        {
            echo "Test in class a"."<br />";
        }
        function show($var)
        {
            echo "in class a: the varible is $var"."<br />";
        }

    class b extends a {
        function test()
        {
            echo "Test in class b"."<br />"; ;
        }

    class c extends b {
        function test()
        {
            parent::test();
        }
    }
    class d extends c {
        function test()
        {
            a::test();
        }
    }  
    $a = new a();
    $b = new b();
    $c = new c();
    $d = new d();
    $a->test();
    $b->test();
    $b->show('Iran');
    $c->test();
    $d->test();

    ?>

    خروجی کد بالا:

    Test in class a 
    Test in class b 
    in class a: the varible is Iran 
    Test in class b
    Test in class a

    توضیح مثال بالا:

    1. در مثال بالا کلاس a را تعریف کردیم و  a را در b توسعه داده و b را در کلاس c و کلاس c را نیز در d توسعه دادیم.
    2. برای اجرای یک تابع یا یک متغیر در یک کلاس دیگر می توانیم از نام کلاس و :: استفاده نماییم.(نام تابع یا متغیر کلاس والد::نام والد کلاس فعلی)
    3. توجه به این نکته نیز ضروری است که با استفاده از کلمه parent میتوانیم کلاس توسعه داده شده یا به اصطلاح والد را فراخوانی کنیم.
    READ MORE
  • با استفاده از AJAX (آجاکس)، می توانید برنامه ها کاربری خود را تعاملی تر کنید.


    مثال AJAX (آجاکس) در PHP

    Wiki

    مثال زیر نشان خواهد داد شد که چگونه یک صفحه وب می تواند با یک وب سرور گفتگو کند (ارتباط داشته باشد). تا زمانی که کاربر در کادر ورودی، کلمه ای را تایپ می کند، این ارتباط وجود دارد:

    مثال (استفاده از ajax در PHP)

    لطفاً نامی را در کادر زیر تایپ نمایید:

    نام:

    پیشنهادها:

    توضیح مثال بالا:

    زمانی که کاربر در کادر ورودی بالا، کلمه ای را تایپ کند، تابع "()showHint" اجرا می شود. این تابع زمانی که رویداد "onkeyup" فیلد ورودی رخ دهد، فراخوانی می شود:

    <html>
    <head>
    <script>
    function showHint(str)
    {
    if (str.length==0)
      {
      document.getElementById("txtHint").innerHTML="";
      return;
      }
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","gethint.php?q="+str,true);
    xmlhttp.send();
    }
    </script>
    </head>
    <body>

    <p><b>لطفاً نامی را در کادر زیر تایپ نمایید:</b></p>
    <form>
    نام: <input type="text" onkeyup="showHint(this.value)">
    </form>
    <p>پیشنهادها: <span id="txtHint"></span></p>

    </body>
    </html>

    توضیح کد Javascript:

    اگر فیلد ورودی خالی باشد (str.length==0)، محتوای عنصر با شناسه "txtHint" خالی و از تابع خارج می شود.

    اگر فیلد ورودی خالی نباشد، تابع ()showHint کارهای زیر را انجام می دهد:

    • شیء XMLHttpRequest ایجاد می شود.
    • زمانی که پاسخ سرور آماده باشد، یک تابع ایجاد و اجرا می شود. (وظیفه این تابع این است که پاسخ دریافت شده از سرور را در عنصر با شناسه "txtHint" قرار دهد)
    • درخواست یک فایل به سرور ارسال می شود.
    • توجه داشته باشید که یک پارامتر (q) به URL اضافه شده است (با محتوای فیلد ورودی تنظیم می شود)

    فایل PHP مثال بالا:

    فایلی که توسط کد JavaScript بالا صدا زده می شود یک فایل PHP بنام "gethint.php" است.

    در فایل "gethint.php"، یک آرایه از نام ها چک می شود، و آنهایی که با پارامتر (q) متناظر است، چاپ می شود: (پاسخ ارسال می شود)

    <?php
    // Fill up array with names
    $a[]="Anna";
    $a[]="Brittany";
    $a[]="Cinderella";
    $a[]="Diana";
    $a[]="Eva";
    $a[]="Fiona";
    $a[]="Gunda";
    $a[]="Hege";
    $a[]="Inga";
    $a[]="Johanna";
    $a[]="Kitty";
    $a[]="Linda";
    $a[]="Nina";
    $a[]="Ophelia";
    $a[]="Petunia";
    $a[]="Amanda";
    $a[]="Raquel";
    $a[]="Cindy";
    $a[]="Doris";
    $a[]="Eve";
    $a[]="Evita";
    $a[]="Sunniva";
    $a[]="Tove";
    $a[]="Unni";
    $a[]="Violet";
    $a[]="Liza";
    $a[]="Elizabeth";
    $a[]="Ellen";
    $a[]="Wenche";
    $a[]="Vicky";

    // get the q parameter from URL
    $q=$_REQUEST["q"]; $hint="";

    // lookup all hints from array if $q is different from ""
    if ($q !== "")
      { $q=strtolower($q); $len=strlen($q);
        foreach($a as $name)
        { if (stristr($q, substr($name,0,$len)))
          { if ($hint==="")
            { $hint=$name; }
            else
            { $hint .= ", $name"; }
          }
        }
      }

    // Output "no suggestion" if no hint were found
    // or output the correct values
    echo $hint==="" ? "no suggestion" : $hint;
    ?>

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • در این آموزش، نحوه ی اعتبارسنجی فیلدهای "نام"، "ایمیل" و "وب سایت" نشان داده خواهد شد.


    اعتبارسنجی فیلد "نام" در PHP

    Wiki

    کد زیر، یک روش ساده برای چک کردن اینکه آیا فیلد "نام" معتبر است یا نه را نشان می دهد. (فیلد نام فقط شامل حروف و خط فاصله است)

    اگر فیلد "نام" معتبر نباشد، در متغیر nameErr$ یک متن مناسب، تنظیم می شود:

    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name))
      {
      $nameErr = "فیلد نام  فقط شامل حروف و خط فاصله است";
      }
    Note تابع ()preg_match
    با استفاده از تابع ()preg_match، می توانید یک الگوی خاص را در یک رشته جستجو کنید. اگر الگوی مورد نظر در رشته وجود داشت مقدار true و اگر وجود نداشت مقدار false را برمی گرداند.

    اعتبارسنجی فیلد "ایمیل" در PHP

    Wiki

    روش اول: استفاده از تابع ()preg_match

    کد زیر، یک روش ساده برای چک کردن اینکه آیا فیلد "ایمیل" معتبر است یا نه را نشان می دهد. (باید شامل فرمت صحیح ایمیل باشد، همراه با علامت @ و .)

    اگر فیلد "ایمیل" معتبر نباشد، در متغیر emailErr$ یک متن مناسب، تنظیم می شود:

    $email = test_input($_POST["email"]);
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
      {
      $emailErr = "فرمت فیلد ایمیل صحیح نیست";
      }

    روش دوم: استفاده از تابع ()filter_var

    یکی دیگر از روش های چک کردن اعتبار ایمیل، استفاده از تابع ()filter_var در PHP است. برای کسب اطلاعات بیشتر درباره تابع ()filter_var به لینک آموزش PHP-فیلتر ورودی ها مراجعه نمایید.

    $email = test_input($_POST["email"]);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $emailErr ="فرمت فیلد ایمیل صحیح نیست";
    }

    در این آموزش، از روش اول یعنی تابع ()preg_match استفاده شده است.


    اعتبارسنجی فیلد "وب سایت" در PHP

    Wiki

    کد زیر، یک روش ساده برای چک کردن اینکه آیا فیلد "وب سایت" معتبر است یا نه را نشان می دهد. (باید شامل فرمت صحیح URL باشد، همچنین عبارت منظم زیر اجازه می دهد که در URL علامت dash "-" نیز استفاده شود)

    اگر فیلد "وب سایت" معتبر نباشد، در متغیر websiteErr$ یک متن مناسب، تنظیم می شود:

    $website = test_input($_POST["website"]);
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
      {
      $websiteErr = "فرمت فیلد وب سایت صحیح نیست";
      }

    اعتبارسنجی فیلدهای "نام"، "ایمیل" و "وب سایت" در PHP

    Wiki

    تا اینجا، اسکریپت مان شبیه زیر شده است:

    مثال (اعتبارسنجی فیلد ایمیل در 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 = "Name is required";}
       else
         {
         $name = test_input($_POST["name"]);
         // check if name only contains letters and whitespace
         if (!preg_match("/^[a-zA-Z ]*$/",$name))
           {
           $nameErr = "Only letters and white space allowed";
           }
         }
      
       if (empty($_POST["email"]))
         {$emailErr = "Email is required";}
       else
         {
         $email = test_input($_POST["email"]);
         // check if e-mail address syntax is valid
         if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
           {
           $emailErr = "Invalid email format";
           }
         }
        
       if (empty($_POST["website"]))
         {$website = "";}
       else
         {
         $website = test_input($_POST["website"]);
         // check if URL address syntax is valid (this regular expression also allows dashes in the URL)
         if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
           {
           $websiteErr = "Invalid URL";
           }
         }

       if (empty($_POST["comment"]))
         {$comment = "";}
       else
         {$comment = test_input($_POST["comment"]);}

       if (empty($_POST["gender"]) || $_GET["gender"]=="undefined")
         {$genderErr = "Gender is required";}
       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 "جنسیت: $gender";
    ?>

    }
    </body>
    </html>

    خروجی کد بالا:

    مثال اعتبارسنجی فرم ها در PHP

    نام:*
    ایمیل:*
    وب سایت:
    توضیحات:
    جنسیت: زن مرد*
     

    در آموزش بعدی نحوه ی جلوگیری از خالی شدن فیلدهای فرم، زمانی که کاربر روی دکمه submit کلیک می کند را نشان خواهیم داد.


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • امنیت در کد ارسال ایمیل

    Wiki

    یک ضعف در اسکریپت e-mail فصل قبل وجود دارد. ابتدا، به کد آن نگاهی می اندازیم:

    <html>
    <body>

    <?php
    //اگر تکست باکس ایمیل پرشده باشد،ایمیل ارسال می شود
    if (isset($_REQUEST['email']))
      {
      //ارسال ایمیل
      $email = $_REQUEST['email'] ;
      $subject = $_REQUEST['subject'] ;
      $message = $_REQUEST['message'] ;
      mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید", "Subject: $subject",
      $message, "From: $email" );
      echo "Thank you for using our mail form";
      }
    else
    //اگر تکست باکس ایمیل پرنشده باشد، فرم ارسال، نمایش داده می شود
      {
      echo "<form method='post' action='mailform.php'>
      Email: <input name='email' type='text' /><br />
      Subject: <input name='subject' type='text' /><br />
      Message:<br />
      <textarea name='message' rows='15' cols='40'>
      </textarea><br />
      <input type='submit' />
      </form>";
      }
    ?>

    </body>
    </html>

    مشکل کد بالا این است که کاربران غیرمجاز می توانند از طریق فرم ورودی، درون header نامه، داده درج کنند.

    توضیح بیشتر: چه اتفاقی خواهد افتاد اگر کاربر متن زیر را در فیلد ورودی email در فرم اضافه کند؟

    این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید%0ACc:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
    %0ABcc:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید,
    این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید,این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
    %0ABTo:این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید

    تابع ()mail طبق معمول متن بالا را درون header نامه قرار می دهد و اکنون header فیلدهای اضافی cc و Bcc و to را دارد. وقتی که کاربر بر روی دکمه submit کلیک می کند ٫email به تمام آدرس های بالا ارسال خواهد شد!


    متوقف کردن تزریقات E-mail در php

    Wiki

    بهترین راه برای متوقف کردن تزریقات email، معتبر کردن ورودی است.

    کد زیر مانند کد فصل قبل است، اما حالا ما یک معتبرساز وروردی که فیلد email را در فرم چک می کند اضافه کرده ایم:

    <html>
    <body>
    <?php
    function spamcheck($field)
      {
      $field=filter_var($field, FILTER_SANITIZE_EMAIL);
      if(filter_var($field, FILTER_VALIDATE_EMAIL))
        {
        return TRUE;
        }
      else
        {
        return FALSE;
        }
      }
    //اگر تکست باکس ایمیل پرشده باشد،ایمیل ارسال می شود  
    if (isset($_REQUEST['email']))
      {
      //چک می کنیم که آدرس ایمیل معتبر است یا نه
      $mailcheck = spamcheck($_REQUEST['email']);
      if ($mailcheck==FALSE)
        {
        echo "Invalid input";
        }
      else
        //ارسال ایمیل  
        {
        $email = $_REQUEST['email'] ;
        $subject = $_REQUEST['subject'] ;
        $message = $_REQUEST['message'] ;
        mail("این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید", "Subject: $subject",
        $message, "From: $email" );
        echo "Thank you for using our mail form";
        }
      }
    else
      //اگر تکست باکس ایمیل پرنشده باشد، فرم ارسال، نمایش داده می شود  
      {
      echo "<form method='post' action='mailform.php'>
      Email: <input name='email' type='text' /><br />
      Subject: <input name='subject' type='text' /><br />
      Message:<br />
      <textarea name='message' rows='15' cols='40'>
      </textarea><br />
      <input type='submit' />
      </form>";
      }
    ?>

    </body>
    </html>

    در کد بالا ما از فیلترهای php زیر، برای معتبرسازی ورودی استفاده کرده ایم:

    • فیلتر FILTER_SANITIZE_EMAIL: تمام کاراکترهای غیرمجاز ایمیل را از رشته حذف می کند.
    • فیلتر FILTER_VALIDATE_EMAIL: آدرس ایمیل را معتبر می کند.

    برای اطلاعات بیشتر درمورد فیلتر های PHP می توانید به بخش PHP Filter مراجعه کنید.

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.

    READ MORE
  • پایگاه داده شامل یک یا جند جدول است.

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


    ایجاد پایگاه داده با استفاده از MySQLi و PDO

    Wiki

    دستور CREATE DATABASE برای ایجاد یک پایگاه داده در MySQL استفاده می شود.

    نحوه استفاده:

    CREATE DATABASE database_name

    در مثال زیر یک پایگاه داده به نام "myDB" ایجاد کرده ایم:

    مثال (MySQLi Object-oriented)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    // Create connection
    $conn = new mysqli($servername, $username, $password);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    // Create database
    $sql = "CREATE DATABASE myDB";
    if ($conn->query($sql) === TRUE) {
        echo "Database created successfully";
    } else {
        echo "Error creating database: " . $conn->error;
    }

    $conn->close();
    ?>
    Note توجه: زمانی که می خواهید یک پایگاه داده جدید ایجاد کنید، در شیء mysqli تنها سه آرگومان اول را باید مشخص نمایید. (servername و username و password)
    نکته:
    اگر برای اتصال به پایگاه داده باید از یک Port مشخص استفاده نمایید، برای تنظیم این آرگومان در شیء mysqli باید آرگومان چهارم یعنی database-name را با یک رشته خالی تنظیم نمایید و سپس آرگومان پنجم را برای تنظیم Port استفاده نمایید:
    mysqli("localhost", "username", "password", "", port)

    مثال (MySQLi Procedural)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password);
    // Check connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }

    // Create database
    $sql = "CREATE DATABASE myDB";
    if (mysqli_query($conn, $sql)) {
        echo "Database created successfully";
    } else {
        echo "Error creating database: " . mysqli_error($conn);
    }

    mysqli_close($conn);
    ?>

    در مثال زیر یک پایگاه داده به نام "myDBPDO" ایجاد کرده ایم:

    مثال(PDO)

    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "CREATE DATABASE myDBPDO";
        // use exec() because no results are returned
        $conn->exec($sql);
        echo "Database created successfully<br>";
        }
    catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }

    $conn = null;
    ?>

    نکته: یکی از بزرگترین مزیت های PDO وجود کلاس exceptionبرای مدیریت خطاها است. همان طور که می دانید این خطاها ممکن است در کوئری های پایگاه داده رخ دهد و اگر یک استثنا یا exceptionاز داخل بلاک { }try پرتاب (thrown) شود، اجرای اسکریبت متوقف شده و جریان کار به اولین بلاک { }catch منتقل می شود. در واقع استثنای که در قسمت try رخ داده در قسمت catch به دام می افتد. در بلاک catch، با استفاده از دستور echo، دستور SQL و متن خطای تولید شده را چاپ می کنیم.


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • جلسه اول بسته آموزشی طراحی یک فروشگاه اینترنتی-ایجاد سربرگ فروشگاه

    در قسمت اول از این بسته، به آموزش 'ایجاد سربرگ فروشگاه' و همچنین نحوه ی ساخت پروژه از صفر، می پردازیم.


    طرح اولیه ی وب سایت

    طرح اولیه ی وب سایتی که قرار است آن را در مجموعه ی آموزشی 'ایجاد یک فروشگاه اینترنتی' ایجاد کنیم به صورت زیر می باشد:

     


    قابلیت های وب سایت 

    قابلیت های این وب سایت شامل موارد زیر می باشد:

    1. قسمت منوی باز شونده
    2. قسمت سبد خرید
    3. قسمت ورود کاربران
    4. قسمت ثبت نام در سایت
    5. قسمت اسلاید شو  و...

     مباحث برنامه نویسی مطرح شده در پروژه ی 'ایجاد یک فروشگاه اینترنتی'

    در مجموعه ی آموزشی 'ایجاد یک فروشگاه اینترنتی' قصد داریم که از مباحث مختلف طراحی سایت از قبیل HTML و CSS و PHP و AJAX و JQUERY استفاده کنیم. در این مجموعه حتی مباحث آشنایی با فتوشاپ نیز در حد لازم برای طراحان وب، گنجانده شده است.


     مباحث برنامه نویسی مطرح شده درقسمت 'ایجاد سربرگ  فروشگاه'

     در قسمت 'ایجاد سربرگ فروشگاه' صرفاً به کدنویسی HTML این قالب می پردازیم  و در مراحل بعدی، بعد از اینکه کد نویسی های HTML و همچنین کدنویسی های جاوا اسکریپت و جی کوئری تمام شدند، سایت را به یک سایت پویا و داینامیک تبدیل خواهیم کرد. به عبارت دیگر، برای این سایت، یک پنل مدیریتی طراحی خواهیم کرد، که قابلیت اضافه و یا حذف کردن و یا کنترل مطالب را برای مدیریت این سایت فراهم می کند. 


     شروع طراحی قالب

     در ابتدای طراحی قالب، قصد داریم یک خط را به رنگ بنفش، در بالای سایت، همان طور که در تصویر زیر می بینید ایجاد کنیم:

     برای طراحی این سایت، ما از نرم فزار Dreamweaver استفاده می کنیم، پس بعد از نصب این نرم افزار آن را باز کنید. سپس از منوی 'site' گزینه ی 'new site' را انتخاب کنید:

     بدین وسیله می توانیم یک سایت جدید را ایجاد کنیم.

    در جعبه ی گفتگوی باز شده، مقدار sitename را برابر  با eshop قرار می دهیم و سپس در فیلد بعدی، مسیر سایت  را درون پوشه ی ریشه ی خود(root) مشخص می کنیم:

    پس از انجام مراحل بالا، بر روی گزینه ی 'save' کلیک کنید.

    سپس مراحل زیر را انجام دهید:

    1. از جعبه ی سمت راست، در زیر قسمت 'local files'، بر روی پوشه ی ایجاد شده راست-کلیک کنید.
    2.  گزینه ی 'new file' را انتخاب کنید.
    3. نام فایل ایجاد شده را 'index.php' قرار دهید. 

     

    همان طور که ذکر شد، فایل مورد نظر را با پسوند php ایجاد کردیم. به این دلیل که سایت مورد نظر قرار است به صورت یک سایت داینامیک باشد. به طوری که دارای یک پنل مدیریت باشد تا مدیر سایت بتواند مطالب سایت را کنترل کند. و همچنین بتوانیم اطلاعات را از Database بخوانیم و یا اطلاعات را در آن ذخیره کنیم. 

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


    در ادامه ی آموزش 'ایجاد سربرگ فروشگاه' خواهید دید...!

    با خرید بسته ی آموزشی "ایجاد سربرگ فروشگاه"  موارد زیر را خواهید دید:

    1. نحوه ی وسط قرار دادن عناصر div با استفاده از دستور margin
    2. نحوه ی ایجاد قسمت بالایی منو با استفاده از HTML و CSS
    3. نحوه ی اضافه کردن لوگو به بالای سایت و تراز کردن آن
    4. نحوه ی استفاده از دستور float در شناور کردن عناصر

    دسترسی به موارد آموزشی بالا در بسته خریداری شده

    • شماره جلسه: 1
    • نام فایل ویدئو: 01
    • فرمت فایل: mp4.

    نقطه ی شروع بحث بالا (ایجاد سربرگ فروشگاه) در ویدئو: 00:20 

    READ MORE
  • ایجاد یک ارتباط ODBC

    Wiki

    با ODBC یا Open Database Connectivity می توان از هر کامپیوتری که روی شبکه قرار دارد به هر پایگاه داده ای متصل شد البته تازمانی که ارتباط ODBC برقرار باشد.

    در اصل ODBC فراهم کننده یک رابط نرم افزاری (API) می باشد که بدین وسیله می توان از DBMS های مختلف استفاده کرد. هدف طراحان ODBC بوجود آوردن یک بستر مستقل از زبان های برنامه نویسی، سیستم عامل ها و DBMS ها بوده است.

    در زیر چگونگی ایجاد یک ارتباط ODBC به پایگاه داده Access توضیح داده شده است:

    1. در کنترل پانل ویندوز روی آیکون Administrative Tools کلیک کنید.
    2. آیکون Data Sources را باز کنید. (ODBC)
    3. تب System DSN را انتخاب کنید.
    4. روی دکمه Add در تب System DNS کلیک کنید.
    5. Microsoft Access Driver را انتخاب کنید و دکمه Finish را کلیک کنید.
    6. در صفحه باز شده محل پایگاه داده را انتخاب کنید.
    7. یک نام مناسب در قسمت Data Source Name وارد کنید.
    8. دکمه OK را کلیک کنید.

    توجه داشته باشید که تنظیمات بالا باید روی کامپیوتری انجام شود که وب سایتتان روی آن قرار دارد و در ادامه اگر Internet Information Server یا IIS روی کامپیوترتان نصب باشد، سایتتان به درستی کار خواهد کرد، اما اگر وب سایتتان روی یک server راه دور قرار دارد، برای تنظیم کردن موارد بالا باید دسترسی فیزیکی به آن سرور داشته باشید و یا می توانید از میزبان وبتان در این مورد سوال کنید.


    ارتباط به یک پایگاه داده

    Wiki

    تابع ()odbc_connect برای ارتباط به پایگاه داده ODBC استفاده می شود. این تابع چهار پارامتر دارد:

    • data source name
    • username
    • password
    • optional cursor type

    می توان از تابع ()odbc_exec برای اجرای یک کوئری روی پایگاه داده استفاده نمود.

    مثال: در مثال زیر یک ارتباط به پایگاه داده northwind ایجاد کرده ایم و سپس یک کوئری اجرا شده است:

    $conn=odbc_connect('northwind','','');
    $sql="SELECT * FROM customers";
    $rs=odbc_exec($conn,$sql);


    بازیابی رکودها

    Wiki

    تابع ()odbc_fetch_row برای بازیابی رکوردهای، کوئری های اجرا شده استفاده می شود، این تابع اگر ردیفی برای بازیابی باشد، مقدار true والا مقدار false را برمی گرداند. این تابع دو پارامتر دارد:

    • نتیجه اجرای یک کوئری
    • پارامتر اختیاری شماره ردیف

    odbc_fetch_row($rs)


    بازیابی یک فیلد

    Wiki

    تابع ()odbc_result برای خواندن یک فیلد از یک رکورد استفاده می شود، این تابع دو پارامتر می گیرد:

    • نتیجه کوئری اجرا شده
    • نام فیلد یا شماره فیلد

    کد زیر مقدار فیلد اول از رکورد اول را در متغیر compname$ قرار می دهد:

    $compname=odbc_result($rs,1);

    کد زیر مقدار فیلدی که نام آن CompanyName است را در متغیر compname$ قرار می دهد:

    $compname=odbc_result($rs,"CompanyName");


    بستن ارتباط

    Wiki

    تابع ()odbc_close برای بستن یک ارتباط ODBC استفاده می شود.

    odbc_close($conn);


    یک مثال ODBC:

    در مثال زیر ابتدا یک Connection ایجاد می کنیم و سپس با اجرای کوئری، نتایج آنرا در یک جدول HTMLی نشان می دهیم:

    <html>
    <body>

    <?php
    $conn=odbc_connect('northwind','','');
    if (!$conn)
      {exit("Connection Failed: " . $conn);}
    $sql="SELECT * FROM customers";
    $rs=odbc_exec($conn,$sql);
    if (!$rs)
      {exit("Error in SQL");}
    echo "<table><tr>";
    echo "<th>Companyname</th>";
    echo "<th>Contactname</th></tr>";
    while (odbc_fetch_row($rs))
      {
      $compname=odbc_result($rs,"CompanyName");
      $conname=odbc_result($rs,"ContactName");
      echo "<tr><td>$compname</td>";
      echo "<td>$conname</td></tr>";
      }
    odbc_close($conn);
    echo "</table>";
    ?>

    </body>
    </html>


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • بررسی استثناها در php

    Wiki

     همراه با php 5 یک روش جدید شیء گرا برای کار با خطاها ارائه شده است.

    استثنا یا Exception چیست؟

    اگر در حین اجرای عادی اسکریپت، یک خطای خاص رخ دهد، بررسی کننده استثنا، راه اندازی شده و ادامه اجرای اسکریپت را تغییر می دهد، این خطا را می توان با دستورات شرطی، مشخص کرد، این شرط در حقیقت همان استثنای ماست.

    برای استفاده از استثناها می توان مستقیماً از کلاس Exception استفاده کرد و آنرا به صورت زیر راه اندازی یا پرتاب (throw) کرد:

    <?php
    if($error)
      {
         throw new Exception("خطایی رخ داده است\n");
      }
    ?>

    به طور معمول وقتی یک استثنا راه اندازی می شود چه چیزهایی اتفاق می افتد؟

    1. وضعیت فعلی کد ذخیره می شود.
    2. ادامه اجرای کد به یک تابع از پیش تعریف شده (بررسی کننده استثنا) منتقل می شود.
    3. بسته به موقعیت، بررسی کننده استثنا ممکن است اجرای اسکریپت را از وضعیت ذخیره شده از سر بگیرد، یا اجرای اسکریپت را متوقف کند و  یا اجرای اسکریپت را از یک مکان متفاوت در کد ادامه دهد.

    روش های مختلف بررسی خطا:

    1. استفاده اصلی از استثناها
    2. تعریف کلاس استثایِ خودمان
    3. استثناهای چندگانه
    4. راه اندازی مجدد استثنا
    5. تعیین یک مهارکننده استثنای سطح بالا

     نکته: یک استثنا همیشه با یک شرط همراه است و نباید برای پرش به جای دیگر استفاده شود.


    1- استفاده اصلی از استثناها

    Wiki

    زمانی که یک استثنا راه اندازی می شود، اجرای کدهای بعد از آن متوقف شده و php سعی به پیدا کردن بلاک تطابقی استثنای مذکور که catch نامیده می شود، خواهد کرد. به زبان ساده تر بعد از بروز خطا و راه اندازی استثنا، ادامه اجرای اسکریپت در یک بلاک که catch نامیده می شود، گرفتار می شود.

    نکته:اگر php برای یک استثنا بلاک تطابقی آنرا نیابد، یک fatal error یا خطای مهلک، همراه با پیغام "Uncaught Exception" صادر خواهد شد.

    مثال: در این مثال تابع "checkNum" بررسی می کند، اگر پارامتر ورودی آن بزرگتر از "1" بود استثنا راه اندازی شود، البته توجه داشته باشید که استثنای تعریف شده بدون Catch است:

    <?php
    function checkNum($number)
      {
      if($number>1)
        {
        throw new Exception("Value must be 1 or below");
        }
      return true;
      }

    checkNum(2);
    ?>

    خروجی کد بالا:

    Fatal error: Uncaught exception 'Exception'
    with message 'Value must be 1 or below' in C:\webfolder\test.php:6
    Stack trace: #0 C:\webfolder\test.php(12):
    checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

    راه اندازی استثنا همراه با بلاک های try و catch

    در مثال بالا برای مدیریت بهتر خطا، ما به یک کد مناسب برای بررسی کردن استثنا نیاز داریم که می تواند شامل بخش های زیر باشد:

    1. بلاک try: تابعی که یک استثنا را استفاده می کند باید در بلاک "try" باشد. (اگر استثنا راه اندازی نشود، کد داخل این بلاک به طور معمول، ادامه خواهد یافت اما اگر شرط استثنا برقرار شود استثنا اجرا خواهد شد)
    2. راه انداز یا پرتاب استثنا(throw): یعنی چه طور یک استثنا را راه اندازی شود. هر "throw" باید حداقل یک "catch" داشته باشد.
    3. بلاک catch: اگر استثانی پرتاب شود، بلاک "catch" آنرا می گیرد و یک شیء شامل اطلاعات استثنا ایجاد می کند.

    مثال:

    <?php
    function checkNum($number)
      {
      if($number>1)
        {
        throw new Exception("Value must be 1 or below");
        }
      return true;
      }

    try
      {
      checkNum(2);
      //اگر استثنا راه اندازی بشود، خط بعدی اجرا نخواهد شد
      echo 'If you see this, the number is 1 or below';
      }

    catch(Exception $e)
      {
      echo 'Message: ' .$e->getMessage();
      }
    ?>

    خروجی کد بالا:

    Message: Value must be 1 or below

    توضیح مثال بالا:

    1. تابع ()checkNum بررسی می کند که آیا پارامتر ورودی آن بزرگتر از 1 است. اگر بزرگتر باشد یک استثنا پرتاب می شود.
    2. تابع ()checkNum در بلاک "try" فراخوانی می شود
    3. بلاک "catch" استثناهای پرتاب شده را می گیرد و یک شیء (e$) شامل اطلاعات استثنا ایجاد می کند.
    4. پیغام خطای استثنا، با فراخوانی تابع ()getMessage از شیء (e$) تولید می شود.

    2- ایجاد کلاس استثنایِ خودمان

    Wiki

    به سادگی می توانیم یک کلاس سفارشی، همراه با توابعی که بتوانند هنگام رخداد یک استثنا در php فراخوانی شوند، ایجاد کرد، لطفاً به مثال زیر توجه فرمایید:

    نکته:کلاس جدیدمان باید از کلاس Exception ارثبری داشته باشد.

    مثال:

    <?php
    class customException extends Exception
      {
      public function errorMessage()
        {
        $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
        .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
        return $errorMsg;
        }
      }

    $email = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید";

    try
      {  
      if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
        {
        throw new customException($email);
        }
      }

    catch (customException $e)
      {
      echo $e->errorMessage();
      }
    ?>

     توضیح مثال:

    1. کلاس customException از کلاس Exception ارثبری دارد، بنابراین، این کلاس همه ی متدها و خصوصیات را از کلاس قبلی به ارث می برد (getMessage,getFile,getLine)
    2. تابع ()errorMessage یک پیغام خطا برمی گرداند (درصورتی که آدرس ایمیل نامعتبر باشد).
    3. متغییر email$ با یک مقدار نامعتبر برای ایمیل تنظیم شده است.
    4. بلاک try اجرا می شود و چون که آدرس ایمیل نامعتبر است، یک استثنا راه اندازی می شود
    5. بلاک catch استثنا را می گیرد و یک پیغام خطا نمایش می دهد

    3- استثناهای چندگانه

    Wiki

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

    مثال:

    <?php
    class customException extends Exception
    {
    public function errorMessage()
       {
         $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
         .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
         return $errorMsg;
       }
    }

    $email = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید";

    try
      {
      // style="font-family: Courier New;">اگر ایمیل معتبر نباشد، استثنا راه اندازی می شود
      if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
        {
         throw new customException($email);
        }
      // style="font-family: Courier New;">اگر در آدرس ایمیل کلمه مشخص شده وجود داشت، استثنا راه اندازی می شود
      if(strpos($email, "example") !== FALSE)
        {
         throw new Exception("$email is an example e-mail");
        }
      }

    catch (customException $e)
      {
      echo $e->errorMessage();
      }

    catch(Exception $e)
      {
      echo $e->getMessage();
      }
    ?>

    خروجی کد بالا:

    این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید is an example e-mail

    توضیح مثال:

    1. متغییر email$ با یک آدرس ایمیل معتبر تنظیم می شود، اما شامل رشته ی "example" است.
    2. چون متغییر تعریف شده حاوی رشته ی "example" است? استثنا دوم در بلاک try راه اندازی می شود.
    3.  بلاک catch دوم استثنا را می گیرد و خطای مناسب را برمی گرداند.

    نکته: اگر استثنای بوجود آمده، بلاک catch خود را نیابد، شروع به جستجوی یک بلاک catch دیگر در "سطوح بالاتر" خواهد کرد.


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

    Wiki

    بعضی مواقع ممکن است مایل باشید که یک استثنا به صورتی متفاوت از آنچه که استاندارد است بررسی شود. این امر با راه اندازی یک استثنا برای بار دوم از داخل بلاک catch امکان پذیر است.

    یک اسکریپت خوب، باید خطاهای سیستمی را از کاربران معمولی پنهان کند، چون نمایش این خطاها برای برنامه نویس ها کاربرد دارد و برای کاربران معمولی جالب نیست، یک ایده خوب برای ساخت چنین پیغام هایی، دوباره راه اندازی استثناهاست.

    مثال:

    <?php
    class customException extends Exception
      {
      public function errorMessage()
        {
        $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
        return $errorMsg;
        }
      }

    $email = "این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید";

    try
      {
      try
        {   
        if(strpos($email, "example") !== FALSE)
          {      
          throw new Exception($email);
          }
        }
      catch(Exception $e)
        {
        //استثنا دوباره راه اندازی می شود
        throw new customException($email);
        }
      }

    catch (customException $e)
      {
      //display custom message
      echo $e->errorMessage();
      }
    ?>

    توضیح مثال:

    1. بلاک try بک بلاک try دیگر را در خود جای داده است و این امکان را فراهم می کند تا از بلاکِ try داخلی یک استثنا که قبلاً راه اندازی شده را دوباره راه اندازی کرد.
    2. اگر متغییر ایمیل شامل زیر رشته "example" باشد استثنا برای بار اول راه اندازی می شود.
    3. بلاکِ catch اولی(Exception) استثنا را مهار کرده و در ادامه استثنای customException را راه اندازی می کند.
    4. بلاکِ catch دومی(customException) بلافاصله بعد از مهار کردن استثنا، پیغام مناسب را چاپ می کند.

    تعیین یک بررسی کننده استثنای سطح بالا

    Wiki

     تابع ()set_exception_handler، نام یک تابع تعریف شده توسط کاربر را به عنوان پارامتر ورودی می گیرد و برای کار با همه ی استثناهایی که بلاک catch برای آنها مشخص نشده است، از تابع مذکور استفاده می کند.

    مثال:

    <?php
    function myException($exception)
    {
    echo "<b>Exception:</b> " , $exception->getMessage();
    }

    set_exception_handler('myException');

    throw new Exception('Uncaught Exception occurred');
    ?>

    خروجی کد بالا:

    Exception: Uncaught Exception occurred

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


    قوانین استثناها

    Wiki

    • با قرار دادن کدهایمان در بلاک try به مهار کردن استثناهای بالقوه کمک کرده ایم.
    • هر بلاک try یا throw باید حداقل یک بلاک catch متناظر داشته باشد
    • استثناها می توانند درون یک بلاک catch راه اندازی شوند.

    یک قانون ساده: چیزی را که راه اندازی(throw) می کنید باید مهار شود(catch). 

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.

    READ MORE
  • تابع Date در PHP

    Wiki

     این تابع، رشته ای از داده ها را به عنوان پارمتر می گیرد و نتایج آنها را به صورت زمان یا تاریخ نمایش می دهد.

    در حقیقت با استفاده از این تابع می توان تاریخ یا زمان را در شکل های مختلف نشان داد.

    نحوه استفاده:

    date(format,timestamp)

    پارامتر توضیحات
    format الزامی است، فرمت تاریخ یا زمان را مشخص می کند.
    timestamp اختیاری است، یک برچسب زمان که باید به فرمتی که در پارامتر اول مشخص کرده ایم تبدیل شود(به صورت پیشفرض تاریخ جاری در نظر گرفته می شود).

      بعضی از کاراکترهایی که می توان به عنوان پارامتر الزامی، در تابع date استفاده کرد:

    • a: صبح یا عصر، نماینده am و pm است.
    • A: صبح یا عصر، نماینده AM و PM است.
    • B: زمان اینترنت سوئچ (swatch) که یک زمان جهانی است.
    • C: تاریخ ISO 8601، تاریخ به صورت YYYY_MM_DD . این کد فرمت در نسخه php 5 ارائه شده است.
    • d: روز به صورت عدد دو رقمی از 01 تا 31
    • D: روز هفته به صورت 3 کاراکتر مانند :Mon و Sun
    • F: ماه در فرمت متنی . محدوده آن از January تا December است.
    • g: ساعت در فرمت 12 ساعت از 1 تا 12
    • G: ساعت در فرمت 24 ساعت از 0 تا 23
    • h: ساعت در فرمت 12 ساعت از 01 تا 12
    • H: ساعت در فرمت 24 ساعت از 00 تا 23
    • i: دقیقه به صورت عدد دو رقمی از 00 تا 59
    • I: این مقدار بولی ساعت را یک ساعت به جلو و عقب می برد (در آخر تابستان و اول فروردین)
    • j: روز را در یک ماه نشان می دهد. از 1 تا 31
    • l: روز را در هفته از Sonday تا Monday مشخص می کند.
    • L: این مقدار بولی سال کبیسه را مشخص می کند و اگر سال کبیسه باشد مقدار یک را بر می گرداند.
    • m: ماه را در فرمت دو رقمی از 01 تا 12 مشخص می کند.
    • M: ماه در فرمت 3 کاراکتر مانند: Jan و Dec
    • n: ماه در فرمت عددی بدون صفر از 1 تا 12
    • o: تفاوت زمان منطقه جغرافیایی موجود و GMT را در واحد ساعت بیان می کند.
    • r: زمان و تاریخ در فرمت RFC822
    • s: ثانیه در محدوده 00 تا 59
    • S: پسوند های ترتیبی اعداد در فرمت دو کاراکتر .مانند: 1st یا 23th
    • t: تعداد روز های ماه را از 28 تا 31 مشخص می کند.
    • T: تنظیمات منطقه زمانی سرور در فرمت 3 کاراکتر مانند EST
    • U: تعداد کل ثانیه ها از اول ژانویه 1970 تاکنون را بیان می کند.
    • w: روز هفته در یک رقم. 0 برای یکشنبه و 6 برای شنبه
    • W: شماره هفته از اول سال. مانند 21 برای نشان دادن هفته 21ام سال
    • y: سال در فرمت دورقمی، 05 برای 2005
    • Y: سال در فرمت چهار رقمی، مانند 2006
    • z: روز را مشخص می کند. محدوده آن 0 تا 365 است.
    • Z: افست منطقه زمانی را بر حسب ثانیه بیان می کند. محدوده آن بین 43200- و 43200 است.

    نکته: کاراکتر هایی که در لیست بالا نباشند، مستقیماً چاپ می شوند. مانند: / و , و … .

     مثال:

    <?php
    echo date("Y/m/d") . "<br />";
    echo date("Y.m.d") . "<br />";
    echo date("Y-m-d");
    ?>

    خروجی کد بالا:

    2009/05/11
    2009.05.11
    2009-05-11


    پارامتر timestamp در تابع date

    Wiki

    تابع ()mktime یک برچسب زمان یونیکسی برمی گرداند که می توان از آن، به عنوان پارامتر اختیاری تابع ()date استفاده کرد.

    برچسب زمان یونیکسی: منظور تعداد ثانیه هایی است که از زمان (January 1 1970 00:00:00 GMT) تا زمانی که در تابع mktime مشخص شده است.

    نحوه استفاده:

    mktime(hour,minute,second,month,day,year,is_dst)

    مثال: در مثال زیر با استفاده از تابع mktime و date تاریخ فردا را چاپ می کنیم:

    <?php
    $tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
    echo "Tomorrow is ".date("Y/m/d", $tomorrow);
    ?>

    خروجی کد بالا: (البته هنگام اجرای مثال)

    Tomorrow is 2013/05/12

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHPکلیک کنید.

    READ MORE
  • جلسه ی هفتم طراحی یک فروشگاه اینترنتی-تبدیل سبد خرید به حالت داینامیک(2)

    در قسمت ششم از این جلسه، به آموزش 'تبدیل سبد خرید به حالت داینامیک(2)' خواهیم پرداخت.


    آنچه که در قسمت قبل طراحی شد

    در قسمت قبل، موارد کلی زیر آموزش داده شدند:

    1.  تبدیل سبد خرید از حالت استاتیک به داینامیک

    مشاهده ی آنچه که در قسمت قبل طراحی شد:

     


    آنچه که در قسمت 'تبدیل سبد خرید به حالت داینامیک(2)' خواهید آموخت

    در قسمت 'تبدیل سبد خرید به حالت داینامیک(2)' موارد زیر آموزش داده خواهند شد:

    توضیح اجمالی:

    1.  ادامه ی تبدیل سبد خرید  از حالت استاتیک به داینامیک

    توضیح تفصیلی:

    1.  ایجاد یک تغییر کوچک در ست کردن زمان کوکی ها به خاطر از بین نرفتن آنها با بستن مرورگر
    2. نحوه ی ست کردن زمان کوکی یه 1 سال.
    3. نحوه ی نمایش دادن آنی محصول بعد از کلیک کردن بر روی اضافه به سبد خرید.
    4. طراحی قسمت تعداد محصول در سبد خرید. 
    5. نحوه ی تشخیص اینکه، آیا محصولی که کلیک شده است، در سبد خرید وجود دارد یا نه.

    و...


    تبدیل سبد خرید به حالت داینامیک(2)

     کاری که می خواهیم در این جلسه انجام دهیم به این صورت می باشد: زمانی که کاربر دکمه ی افزودن به سبد خرید را کلیک می کند در داخل سبد خرید شما، تا قبل از اینکه صفحه را رفرش کند، محصول خودش را نمی تواند مشاهده کند. یعنی این محصول، به صورت آنی و لحظه ای، وارد قسمت سبد خرید شما نمی شود. حتما لازم است که کاربر، صفحه ی خود را رفرش کند تا محصول جدیدی را در داخل سبد خرید خودش بتواند مشاهده کند:

     می خواهیم کاری کنیم که به صورت آنی و لحظه ای، به محض اینکه کاربر، سبد خرید شما را کلیک کرد، محصول انتخابی در داخل سبد خرید شما، به او نمایش داده شود. و نیازی به رفرش کردن صفحه نباشد:

     دوباره در اینجا، دو حالت مختلف داریم. همان طور که در عکس بالا مشاهده می کنید، تلوزیون مدل پارس، در سبد خرید ما وجود دارد، اگر که کاربر دوباره تلوزیون مدل پارس را انتخاب کند، کاری که باید داخل کدهایمان انجام دهیم، این است که عدد فیلد مربوط به تعداد را پیدا کنیم و 1 واحد به آن اضافه کنیم. اما حالت دوم حالتی است که محصولی در داخل سبد خرید وجود ندارد. یعنی اگر کاربر به طور فرضی، یک محصول را که در سبد خرید وجود ندارد را انتخاب کند، ما باید در قسمت سبد خرید، یک li جدید به بخش سبد خریدمان اضافه کنیم که عکس محصول و تعدادش را به کاربر نشان بدهیم. پس ما دو حالت مختلف داریم. حالا سوال اینجاست: زمانی که کاربر روی یکی از محصولات کلیک کرد، و خواست آن را به سبد خرید اضافه کند، چطور می توانیم تشخیص دهیم که آیا محصول داخل سبد خرید وجود دارد یا خیر؟


    دسترسی به موارد آموزشی بالا در بسته ی خریداری شده:

    • شماره جلسه: 7
    • نام فایل ویدئو: 28
    • فرمت فایل: mp4.

    نقطه ی شروع بحث بالا (تبدیل سبد خرید به حالت داینامیک2) در ویدئو: 05:20

    READ MORE
  • جلسه ی هفتم طراحی یک فروشگاه اینترنتی-تبدیل سبد خرید به حالت داینامیک(3)

    در قسمت هفتم از این جلسه، به آموزش 'تبدیل سبد خرید به حالت داینامیک(3)' خواهیم پرداخت.


    آنچه که در قسمت قبل طراحی شد

    در قسمت قبل، موارد کلی زیر آموزش داده شدند:

    1. تبدیل سبد خرید از حالت استاتیک به داینامیک

    مشاهده ی آنچه که در قسمت قبل طراحی شد:

     


    آنچه که در قسمت 'تبدیل سبد خرید به حالت داینامیک(3)' خواهید آموخت

    در قسمت 'تبدیل سبد خرید به حالت داینامیک(3)' موارد زیر آموزش داده خواهند شد:

    توضیح اجمالی:

    1. ادامه ی تبدیل سبد خرید از حالت استاتیک به داینامیک

    توضیح تفصیلی:

    1.  ایجاد یک فیلد جدید برای سبد خرید که مشخص کننده ی قیمت است.
    2. نحوه ی ایجاد یک li جدید به هنگام افزودن یک کالای جدید به سبد خرید.
    3. استخراج اطلاعات محصول از خود محصول نمایش داده شده.
    4. اختصاص یک id یا کلاس به محصولات

    و...


    تبدیل سبد خرید به حالت داینامیک(3)

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

     یعنی دقیقا همین چیزی که در تصویر زیر می بینید:

     

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

     فایل هایی که با آنها کار داریم عبارتند از فایل left.php و top.php پس آنها را باز می کنیم. در بحث سبد خرید، ما فقط با این دو فایل کار داشتیم چون فایل left.php فایلی بود که بخش پرفروش ترین کالاها را دربر داشت و فایل top.php هم که سبد خرید ما بود. حالا به داخل فایل top.php می رویم و در جایی که اطلاعات سبد خرید را(کالاهای موجود در سبد خرید کاربر را) از دیتابیس دریافت می کردیم، اکنون می خواهیم قیمت را هم از دیتابیس بگیریم و مشابه با تعداد محصولات در سبد خرید، آن را هم نمایش بدهیم. بنابراین فایل top.php را باز می کنیم و کدهای زیر را می آوریم:

     


    دسترسی به موارد آموزشی بالا در بسته ی خریداری شده:

    • شماره جلسه: 7
    • نام فایل ویدئو: 29
    • فرمت فایل: mp4.

    نقطه ی شروع بحث بالا (تبدیل سبد خرید به حالت داینامیک3) در ویدئو: 00:10

    READ MORE
  • جلسه ی هشتم طراحی یک فروشگاه اینترنتی-تبدیل سبد خرید به حالت داینامیک(4)

    در قسمت هشتم از این جلسه، به آموزش 'تبدیل سبد خرید به حالت داینامیک(4)' خواهیم پرداخت.


    آنچه که در قسمت قبل طراحی شد

    در قسمت قبل، موارد کلی زیر آموزش داده شدند:

    1. تبدیل سبد خرید از حالت استاتیک به داینامیک

    مشاهده ی آنچه که در قسمت قبل طراحی شد:

     


    آنچه که در قسمت 'تبدیل سبد خرید به حالت داینامیک(4)' خواهید آموخت

    در قسمت 'تبدیل سبد خرید به حالت داینامیک(4)' موارد زیر آموزش داده خواهند شد:

    توضیح اجمالی:

    1. ادامه ی تبدیل سبد خرید از حالت استاتیک به داینامیک

    توضیح تفصیلی:

    1. اضافه کردن یک بخش جدید به سبد خرید
    2. نشان دادن تعداد کل کالاهای سبد خرید به کاربر
    3. نحوه ی نمایش دادن جمع کل قیمت محصولات موجود در سبد خرید
    4. نحوه ی ایجاد دکمه ی تسویه حساب سبد خرید

    تبدیل سبد خرید به حالت داینامیک(4)

     کار دیگری که الان باید انجام دهیم این است که، این بخش پایین را ایجاد کنیم:

     یعنی درواقع بخشی را ایجاد کنیم که، هم جمع کل قیمت را نشان بدهد و هم دکمه ی تسویه حساب.

    این بخش را همان طوری که مشخص است، باید در داخل div سبدی که قبلا ساخته بودیم اضافه کنیم. فقط یک نکته ای وجود دارد که ما باید به آن توجه داشته باشم. قبلا در ابتدا ما یک div را ساختیم تحت عنوان sabad، اجازه بدهید که ابتدا به داخل نرم افزار دریم ویور برویم تا بهتر متوجه موضوع بشویم:

     همان طور که در تصویر بالا می بینید، ما قبلا یک div را تحت عنوان sabad ساخته بودیم. در داخل این دایو sabad، ابتدا آمدیم و علامت مثلث را قرار دادیم با استفاده از یک تگ img . و بعد یک قسمت دیگری را تحت عنوان sabad1 ایجاد کردیم که در داخل آن با استفاده از تگ ul تگ های li را echo کردیم  ومحصولاتمان را داخل sabad1 نشان دادیم:

     

    حالا سوال اینجاست که، ما باید قسمتی که مربوط به دکمه ی نمایش کل قیمت، و دکمه ی تسویه حساب است را در کدام یک از این بخش ها قرار دهیم؟ آیا باید آن را در داخل عنصر دیو sabad قرار دهیم یا داخل دیو با آی دی sabad1 ؟

    در واقع باید در کجا کدنویسی آن را انجام دهیم؟

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


    دسترسی به موارد آموزشی بالا در بسته ی خریداری شده:

    • شماره جلسه: 8
    • نام فایل ویدئو: 30
    • فرمت فایل: mp4.

    نقطه ی شروع بحث بالا (تبدیل سبد خرید به حالت داینامیک4) در ویدئو: 07:29

    READ MORE
  • تجرد یا Abstract:

    Wiki

    تجرد یا Abstract موقعی استفاده می شود که بخواهیم کلاس یا تابعی را بدون داشتن بدنه تعریف کنیم و بخواهیم بدنه آن را بعداً تعریف کنیم.

    به عنوان مثال اگر بخواهیم چندین کلاس مختلف برای کار با دیتابیس های مختلف در برنامه تعریف کنیم که در آن برخی کارها یکسان می باشد؛ میتوانیم یک کلاس abstract برای تعریف اولیه و توابع یکسان آنها تعریف کنیم و سپس به نسبت هر دیتابیس توابع مخصوص آن را فراخوانی کرد.

    مزیت های استفاده از abstarct:

    1. کم تر شدن کدهای نوشته شده
    2. افزایش سرعت برنامه
    3. روان تر و خواناتر بودن کدها

    مثال:

    <?php
    abstract class Base_DB{
        private $id; 
        abstract function update($data,$id); 
        abstract function insert($data);
        function save($data){
            if(is_null($this->id)){
                $this->insert($data);
            }else{
                $this->update($data,$this->id);
            }
        }
    }
    class MySQL_DB extends Base_DB{
        function update($data,$id)
        { 
            // کدهای مربوط به ویرایش 
        }
        function insert($data)
        {
            // کدهای مربوط به درج کردن 
        }
    }
    class Oracle_DB extends Base_DB{ 
        function update($data,$id)
        { 
            // کدهای مربوط به ویرایش 
        }
        function insert($data)
        {
            // کدهای مربوط به درج کردن 
        } 
    }
    ؟>

    با کمک کلاس های MySQL_DB و Oracle_DB که در بالا تعریف شد می توان با تابع save و یا هر تابع دیگری کارهای مربوطه را انجام داد؛ توجه داشته باشید که توابع update و insert که در کلاس Base_DB به صورت abstract تعریف شده اند باید در کلاسهایی که از آن سرچشمه می گیرند تعریف شده باشند.


    interface

    Wiki

    کلاسهایی که به صورت interface تعریف می شوند تقریباً همانند کلاس هایی هستند که به صورت abstract تعریف می شوند اما نحوه تعریف و استفاده آنها متفاوت می باشد.

    مثال:

    <?php
    interface class Base_DB {
        public function update($data,$id);
        public function insert($data);
    }

    class MySQL_DB implements Base_DB{ 
        function update($data,$id)
        { 
            // کدهای مربوط به ویرایش 
        }
        function insert($data)
        {
            // کدهای مربوط به درج کردن 
        }
    }
    class Oracle_DB implements Base_DB{ 
        function update($data,$id)
        { 
            // کدهای مربوط به ویرایش 
        }
        function insert($data)
        {
            // کدهای مربوط به درج کردن 
        }

    ؟>

    توجه داشته باشید که کلاسهایی که به صورت interface تعریف می شوند نباید شامل بدنه یک تابع باشند؛ در صورتی که کلاس های abstract می توانستند ادغامی از توابع معمولی و توابع abstract شوند.
    به این نکته نیز توجه داشته باشید که کلاسهای interface بجای extends با implements توسعه می یابند.


    تشخیص کلاس یک شئ

    Wiki

    در برنامه نویسی توجه به این نکته که آیا شئ مورد نظر از کلاس مد نظر ما ساخته شده است یا نه نکته ای است که کاربرد های زیادی دارد.

    برای این منظور می توان از دستور instanceof استفاده کرد؛

    instanceof همچنین برای کلاس هایی که از یک کلاس دیگر ارث بری کرده اند نیز استفاده می شود؛

    مثال:

    <?php 
    class Parent
    {
        // ...
    }

    class PLUS extends Parent
    {
        // ...
    }

    $test = new PLUS();
    if($test instanceof PLUS)
    {
        echo "test comes from PLUS....<br />";
    }
    if($test instanceof Parent)

        echo "test comes from Parent....<br />";

    ?>

    خروجی کد بالا:

    test comes from PLUS....
    test comes from Parent....

    همانطور که در مثال بالا دیده میشود test$ هم از نوع PLUS است و هم از نوع Parent!

    READ MORE
  • تجزیه کننده DOM چیست؟

    Wiki

    یک سری اشیاء استاندارد برای دسترسی و دستگاری فایل های HTML و XML فراهم می کند و در سه بخش زیر مجزا شده است:

    •  هسته DOM:  یک سری اشیاء استاندارد برای فایل های ساخت یافته تعریف می کند.
    • XML DOM: یک سری اشیاء استاندارد برای فایل های XML تعریف می کند.
    • HTML DOM: یک سری اشیاء استاندارد برای فایل های HTML تعریف می کند.

    تجزیه کننده XML

    Wiki

    برای خواندن، ویرایش کردن، ایجاد و خلاصه دستگاری یک فایل XML، به یک تجزیه کننده XML نیاز داریم.

    به صورت کلی دو نوع تجزیه کننده XML وجود دارد:

    1. تجزیه کننده درختی: این تجزیه کننده فایل XML را به یک ساختار درختی منتقل می کند و تمام فایل را تحلیل کرده و دسترسی به عناصر درخت را فراهم می کند.
    2. تجزیه کننده رویدادی: یک فایل XML را به صورت یک سری از رویدادها می بیند و زمانی که یک رویداد خاص اتفاق می افتد، یک تابع را برای بررسی آن صدا می زند.

    تجزیه کننده DOM از نوع درختی است.

    به فایل XML زیر توجه کنید:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <from>Amir</from>

    تجزیه کننده DOM فایل XML بالا را به صورت زیر می بیند(سه سطح):

    • سطح اول درخت: یک فایل XML را مشخص می کند.
    • سطح دوم درخت: ریشه عنصر را مشخص می کند که تگ <from> است.
    • سطح سوم درخت: متن عنصر که کلمه "Amir" است.

    نصب تجزیه کننده XML

    Wiki

    توابع تجزیه کننده DOM قسمتی از هسته PHP هستند و نیازی به نصب وجود ندارد.


    فایل XML زیر در مثال های آینده استفاده خواهد شد:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>


    لود و چاپ یک فایل XML

    Wiki

    مثال:در مثال زیرمی خواهیم یک تجزیه کننده XML تعریف کرده و فایل XML بالا را داخل آن لود کنیم و سپس در خروجی چاپ کنیم:

    <?php
    $xmlDoc = new DOMDocument();
    $xmlDoc->load("note.xml");
    print $xmlDoc->saveXML();
    ?>

    خروجی کد بالا:

    ToveJaniReminderDon't forget me this weekend!

    اگر در Browser ویندوزتان گزینه "View source" را انتخاب کنید، فایل HTML زیر را خواهید دید:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>

    مثال بالا یک شی از DOMDocument ایجاد می کند و فایل "note.xml" را داخل آن لود می کند. 

    سپس تابع ()saveXML فایل XML لود شده را داخل یک رشته قرار می دهد، حالا می توانیم آنرا در خروجی چاپ کنیم.


    حلقه زدن در یک فایل XML

    Wiki

    مثال: در مثال زیر می خواهیم یک تجزیه کننده XML تعریف کنیم و فایل XML قبلی را در آن لود کرده و بین عناصر آن یک حلقه بزینم:

    <?php
    $xmlDoc = new DOMDocument();
    $xmlDoc->load("note.xml");

    $x = $xmlDoc->documentElement;
    foreach ($x->childNodes AS $item)
      {
      print $item->nodeName . " = " . $item->nodeValue . "<br />";
      }
    ?>

    خروجی کد بالا:

    #text =
    to = Tove
    #text =
    from = Jani
    #text =
    heading = Reminder
    #text =
    body = Don't forget me this weekend!
    #text =

    در مثال بالا  می بینید که بین هر عنصر یک نود خالی وجود دارد.

    در زمان ایجاد یک فایل XML، در بین نودهای آن فضاهای خالی قرار می گیرد، تجزیه کننده XML با این فضاهای خالی مانند یک عنصر معمولی برخورد می کند و اگر مراقب آنها نباشید، برای شما مشکل ایجاد خواهند کرد.


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • XML چیست؟

    Wiki

    XML برای شرح و بیان اطلاعات طراحی شده است، در واقع ساختار اطلاعات را شرح می دهد.

    در XML هیچ تگ از پیش تعریف شده ای وجود ندارد، و باید خودمان تگ ها را تعریف کنیم.


    تجزیه کننده Expat چیست؟

    Wiki

    برای خواندن، ویرایش کردن، ایجاد و خلاصه دستگاری یک فایل XML، به یک تجزیه کننده XML نیاز داریم.

    به صورت کلی دو نوع تجزیه کننده XML وجود دارد:

    1. تجزیه کننده درختی: این تجزیه کننده فایل XML را به یک ساختار درختی منتقل می کند و تمام فایل را تحلیل کرده و دسترسی به عناصر درخت را فراهم می کند.(همان طور که قبلاً گفته شد تجزیه کننده DOM از نوع درختی است)
    2. تجزیه کننده رویدادی: یک فایل XML را به صورت یک سری از رویدادها می بیند و زمانی که یک رویداد خاص اتفاق می افتد، یک تابع را برای بررسی آن صدا می زند.

    تجزیه کننده Expat از نوع رویدادی است.

    نکته: تجزیه کننده رویدادی، به جای اینکه روی ساختار تمرکز کند روی محتوای یک فایل XML تمرکز می کند، به همین خاطر دسترسی به اطلاعات در این نوع تجزیه کننده سریع تر است.

    به فایل XML زیر توجه کنید:

    <from>Amir</from>

    یک تجزیه کننده رویدادی فایل XML بالا را به صورت سه رویداد زیر گزارش می دهد:

    1. شروع عنصر: from
    2. شروع بخص اطلاعات با مقدار: "Amir"
    3. بستن عنصر: form

    مثال XML بالا با یک فرمت درست نوشته شده است، اما به خاطر اینکه DTD ندارد، معتبر نیست.

    نکته: DTD یا Document Type Definition مشخص کننده قوانین به کار رفته در یک سند است، به این قوانین الگو می گویند، الگوها ابزارهای مهمی برای نگهداری پیوستگی اسناد محسوب می گردند. با مقایسه سند معینی با الگوی آن اعتبار آن سند تعیین می شود. اگر یک سند با تمام قوانین موجود در الگوی آن مطابقت داشته باشد به آن یک سند معتبر می گویند. معتبر بودن یک سند نشانه مطلوب بودن داده های آن است.

    تجزیه کننده Expat یک تجزیه کننده بدون اعتبار است، و برای آن فرقی نمی کند که سند شنا از DTD استفاده کرده یا نه!

    سند XML شما باید در یک فرمت درست نوشته شده باشد والا تجزیه کننده Expat خطایی نمایش خواهد داد.


    نصب تجزیه کننده Expat

    Wiki

    توابع تجزیه کننده Expat قسمتی از هسته PHP هستند و نیازی به نصب وجود ندارد.


    فایل XML زیر در مثال های آینده استفاده خواهد شد:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
    </note>


    اعلان یک تجزیه کننده XML

    Wiki

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

    مثال:

    <?php
    //Initialize the XML parser
    $parser=xml_parser_create();

    //Function to use at the start of an element
    function start($parser,$element_name,$element_attrs)
      {
      switch($element_name)
        {
        case "NOTE": echo "-- Note --<br />"; break;
        case "TO": echo "To: "; break;
        case "FROM": echo "From: "; break;
        case "HEADING": echo "Heading: "; break;
        case "BODY": echo "Message: ";
        }
      }

    //Function to use at the end of an element
    function stop($parser,$element_name)
      {
      echo "<br />";
      }

    //Function to use when finding character data
    function char($parser,$data)
      {
      echo $data;
      }

    //Specify element handler
    xml_set_element_handler($parser,"start","stop");

    //Specify data handler
    xml_set_character_data_handler($parser,"char");

    //Open XML file
    $fp=fopen("test.xml","r");

    //Read data
    while ($data=fread($fp,4096))
      {
      xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d",
      xml_error_string(xml_get_error_code($parser)),
      xml_get_current_line_number($parser)));
      }

    //Free the XML parser
    xml_parser_free($parser);
    ?>

    خروجی کد بالا:

    -- Note --
    To: Tove
    From: Jani
    Heading: Reminder
    Message: Don't forget me this weekend!

    توضیح مثال بالا:

    1. تابع ()xml_parser_create یک تجزیه کننده XML را اعلان می کند.
    2. تابع start به عنوان رسیدگی کننده به رویدادهای مختلف ایجاد شده است.
    3. تابع ()xml_set_element_handler مشخص می کند، زمانی که تجزیه کننده با تگ باز و بسته مواجه شد، کدام تابع اجرا شود.
    4. تابع ()xml_set_character_data_handler مشخص می کند، زمانی که تجزیه کننده با اطلاعات مواجه شد، کدام تابع اجرا شود.
    5. تابع ()xml_parse فایل "test.xml" را تجزیه می کند.
    6. در صورتی که خطایی رخ دهد، تابع ()xml_error_string خطای گزارش شده را به شرحی مناسب تبدیل می کند.
    7. در آخر تابع ()xml_parser_free حافظه اختاص داده شده به تجزه کننده را آزاد می کند.

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • تعریف توابع در PHP

    Wiki

    قدرت واقعی PHPدر توابع آن است، در PHP بیش از 1000 تابع از قبل نوشته شده وجود دارد.

    در این فصل به شما نشان خواهیم داد که در PHP چگونه می توانید توابع خودتان را تعریف کنید.

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

    نحوه تعریف توابع:

    function functionName()
    {
    code to be executed;
    }

    توجه:برای نامگذاری توابع موارد زیر را در نظر داشته باشید:

    • اسامی توابع به نحوی انتخاب شوند که نام انتخاب شده معرفی کننده عملی باشد که تابع انجام می دهد
    • نام تابع می تواند با حروف و یا علامت "_" شروع شود(با عدد نمی تواند شروع شود).

    مثال: یک تابع ساده که با صدا زدن آن نام من چاپ می شود:

    <html>
    <body>

    <?php
    function writeName()
    {
    echo "pahlavan sadegh";
    }

    echo "My name is ";
    writeName();
    ?>

    </body>
    </html>

    خروجی کد بالا:

    My name is pahlavan sadegh


    ارسال پارامتر به توابع

    Wiki

    یک پارامتر چیزی شبیه یک متغیر است، پارامترها بعد از نام تابع داخل پرانتز تعریف می شوند.

    مثال1: در مثال زیر با ارسال نام شخص به تابع، بعد از صدا زدن تابع، نام های مختلف با فامیلی یکسان چاپ می شود.

    <html>
    <body>

    <?php
    function writeName($fname)
    {
    echo $fname . " Ahmadi.<br />";
    }

    echo "My name is ";
    writeName("Ali");
    echo "My sister's name is ";
    writeName("Sara");
    echo "My brother's name is ";
    writeName("Amir");
    ?>

    </body>
    </html>

    خروجی کد بالا:

    My name is Ali Ahmadi.
    My sister's name is Sara Ahmadi.
    My brother's name is Amir Ahmadi.

    مثال2: تابع زیر دو پارامتر دارد.

    <html>
    <body>

    <?php
    function addNumbers($a , $b)
    {
    $sum = $a + $b;
    echo $sum;
    }

    addNumbers(100,200);
    ؟>

    </body>
    </html>

     خروجی کد بالا:

    300

    نکته: به صورت پیش فرض پارامترهایی که به توابع ارسال می شوند، طوری هستند که در صورتی که در تابع تغییر کنند مقدار اصلی آنها تغییری نخواهد کرد و به همان صورت باقی خواهند ماند، اما اگر در تعریف تابع قبل از اسم متغیر از علامت "&" استفاده کنیم، این ویژگی تغییر می کند یعنی با تغییر یک متغیر در درون تابع، اصل متغیر هم تغییر خواهد نمود، به مثال زیر توجه کنید.

    مثال:

    <html>
    <body>

    <?php
    function changeit(&$string)
    {
    echo "String is: " . $string . '<br />';
    $string="Learning PHP";
    echo "String Changed to: " . $string . '<br />';
    }

    $str="PLUS";
    changeit($str);
    echo $str;

    ?>

    </body>
    </html>

    خروجی کد بالا:

    String is: PLUS
    String Changed to: Learning PHP
    Learning PHP


     بازگرداندن یک مقدار توسط توابع

    Wiki

    شما می توانید از دستور return برای بازگرداندن یک مقدار استفاده کنید، یعنی کافی است نتیجه را جلوی دستور return قرار دهید.

    مثال:

    <html>
    <body>

    <?php
    function add($x,$y)
    {
    $total=$x+$y;
    return $total;
    }

    echo "1 + 16 = " . add(1,16);
    ?>

    </body>
    </html>

    خروجی کد بالا:

    1 + 16 = 17


    توابع از پیش تعریف شده:

    Wiki

    در php بیش از 5300 تابع از پیش تعریف شده وجود دارد که البته برای اجرای آنها ممکن است در ورژن های مختلف برخی توابع وجود نداشته باشند و یا برای اجرای بعضی توابع احتیاج باشد تا extension خاصی نصب باشد.
    توابع از پیش تعریف شده همانند توابعی که کاربر تعریف می کند اجرا می شوند.


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • در PHPدو روش اصلی برای چاپ وجود دارد: echo و print

    تقریباً در هر مثالی از این بیاموز از echo (و print) استفاده شده است. بنابراین در این مطلب سعی شده است تا در این باره مقداری بیشتر توضیح داده شود.


    دستور echo و print در PHP

    Wiki

    تفاوت های echo و print:

    • echo: یک یا بیشتر از یک آرگومان را می گیرد و مقداری را برنمی گرداند. برای اتصال دو رشته هم می توان از "." و هم از "," استفاده کرد.
    • print: تنها یک آرگومان را می گیرد و همیشه مقدار 1 را برمی گرداند. برای اتصال دو رشته فقط می توان از "." استفاده کرد.

    شباهت های echo و print:

    • هر دو تابع نیستند.
    • جزئی از ساختار زبانی هستند و می توان از آنها با یا بدون پرانتز استفاده نمود.

    نکته: echo سرعت بیشتری نسبت به print دارد.


    دستور echo در PHP

    Wiki

    نمایش رشته ها

    در مثال زیر، نحوه نمایش رشته های مختلف با استفاده از دستور echo نشان داده شده است: (همچنین توجه داشته باشید که رشته چاپ شده می تواند شامل تگ های HTML باشد)

    مثال (تفاوت دستور echo و print)

    <?php
    echo "<h2>PHP is fun!</h2>";
    echo "Hello world!<br>";
    echo "I'm about to learn PHP!<br>";
    echo "This", " string", " was", " made", " with multiple parameters.";
    ?>

    خروجی کد بالا:

    PHP is fun! Hello world!
    I'm about to learn PHP!
    This string was made with multiple parameters.

    نمایش متغیرها

    در مثال زیر، نحوه ی چاپ رشته ها و متغیر ها با دستور echo نشان داده شده است:

    مثال (تفاوت دستور echo و print)

    <?php
    $txt1="Learn PHP";
    $txt2="Beyamooz.com";
    $cars=array("Volvo","BMW","Toyota");

    echo $txt1;
    echo "<br>";
    echo "Study PHP at $txt2";
    echo "My car is a {$cars[0]}";
    ?>

    خروجی کد بالا:

    Learn PHP
    Study PHP at Beyamooz.com
    My car is a Volvo

    توجه: اگر متغییری درون علامت " قرار بگیرد مقدار متغییر به جای آن قرار می گیرد. اما اگر درون علامت ' قرار بگیرد مقدار متغییر جایگزین نمی شود.


    دستور print در PHP

    Wiki

    نمایش رشته ها

    در مثال زیر، نحوه نمایش رشته های مختلف با استفاده از دستور print نشان داده شده است: (همچنین توجه داشته باشید که رشته چاپ شده می تواند شامل تگ های HTML باشد)

    مثال (تفاوت دستور echo و print)

    <?php
    print "<h2>PHP is fun!</h2>";
    print "Hello world!<br>";
    print "I'm about to learn PHP!";
    ?>

    خروجی کد بالا:

    PHP is fun! Hello world!
    I'm about to learn PHP!

    نمایش متغیرها

    در مثال زیر، نحوه ی چاپ رشته ها و متغیر ها با دستور print نشان داده شده است:

    مثال (تفاوت دستور echo و print)

    <?php
    $txt1="Learn PHP";
    $txt2="Beyamooz.com";
    $cars=array("Volvo","BMW","Toyota");

    print $txt1;
    print "<br>";
    print "Study PHP at $txt2";
    print "My car is a {$cars[0]}";
    ?>

    خروجی کد بالا:

    Learn PHP
    Study PHP at Beyamooz.com
    My car is a Volvo

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • مقدمه ی توابع کار با فایل ها در PHP یا (Filesystem)

    توابع مربوط به فایل ها در PHPبه شما امکان می دهند تا filesystem را دستکاری کرده و تغییر دهید. 


    نحوه نصب کردن

    توابع filesystem جزئی از هسته ی php هستند. و نیازی نیست تا برای استفاده از این توابع آنها را نصب کنید. 


    توابع filesystem در php5

    تابع توضیحات
    basename

     تابع ()basename، نام فایل مورد نظر را از یک مسیر، برمی گرداند. 

    chgrp

     تابع ()chgrp درواقع usergroup را از فایل مشخص شده تغییر می دهد.

    chmod

     تابع ()chmod دسترسی های یک فایل مشخص را تغییر می دهد. 

    chown

     تابع ()chown مالکیت یک فایل مشخص را تغییر می دهد.

    clearstatcache

     تابع ()clearstatcatche درواقع وضعیت کش شدن فایل را مشخص می کند. 

    copy

     تابع ()copy یک فایل را کپی می کند. 

    delete

     به جای آن به تابع unlink یا unset مراجعه کنید. 

    dirname

     تابع ()dirname، نام دایرکتوری را از یک مسیر برمی گرداند. 

    disk_free_space

     تابع ()disk_free_space از یک دایرکتوری مشخص، مقدار فضای خالی را به بایت برمی گرداند. 

    disk_total_space

     تابع ()disk_total_space فضای کلی یک دایرکتوری مشخص را با بایت برمی گرداند. 

    diskfreespace

     یک نام مستعار تابع disk_free_space است. 

    fclose

     تابع ()fclose یک فایل باز شده را می بندد. 

    feof

     تابع ()feof بررسی می کند که آیا به EOF رسیده ایم یا نه.

    fflush

     تابع ()fflush تمام خروجی بافر شده را دریک فایل باز شده(open) می نویسد. 

    fgetc

     تابع ()fgetc یک کاراکتر تکی از یک فایل باز شده را برمی گرداند.

    fgetcsv

     تابع ()fgetcsv یک خط از داده های یک فایل باز شده ی csv را تجزیه می کند. 

    fgets

     تابع ()fgets یک خط از یک فایل باز شده را برمی گرداند. 

    fgetss

     تابع ()fgetss از یک فایل باز شده، یک خط را برمی گرداند به طوری که تگ های HTML و PHP آن خذف شده اند. 

    file

     تابع ()file یک فایل را درون یک آرایه، می خواند. 

    file_exists

     تابع ()file_exists بررسی می کند که آیا یک فایل یا یک دایرکتوری، موجود است یا نه. 

    file_get_contents

     تابع ()file_get_contents یک فایل را در یک رشته می خواند. 

    file_put_contents

     تابع ()file_put_contents یک رشته را درون یک فایل می نویسد. 

    fileatime

     تابع ()fileatime زمان آخرین دسترسی به یک فایل مشخص را برمی گرداند. 

    filectime

     تابع ()filectime آخرین زمانی که یک فایل مشخص مورد تغییر واقع شده است را برمی گرداند. 

    filegroup

     تابع ()filegroup از یک فایل مورد نظر، group ID را برمی گرداند.

    fileinode

     تابع ()fileinode مقدار inode از یک فایل مورد نظر را برمی گرداند. 

    filemtime

     تابع ()filemtime آخرین زمانی که محتوای فایل مورد نظر تغییر کرده است را برمی گرداند.

    fileowner

     تابع ()fileowner درواقع user ID(مالک) را  از یک فایل مشخص برمی گرداند. 

    fileperms

     تابع ()fileperms مجوزهای(permissions) یک فایل یا دایرکتوری را برمی گرداند.

    filesize

     تابع ()filesize سایز یک فایل مشخص را برمی گرداند. 

    filetype

     تابع ()filetype نوع فایل را از یک فایل یا دایرکتوری مشخص برمی گرداند. 

    flock

     تابع ()flock یک فایل را قفل کرده و یا آزاد می کند.

    fnmatch

     تابع ()fnmatch نام یک فایل یا رشته را با استفاده از یک الگوی(pattern) مشخص، مورد تطابق قرار می دهد. 

    fopen

     یک فایل یا url را باز می کند. 

    fpassthru

     تابع ()fpassthru تمام داده ها را از مکان کنونی، در یک فایل باز شده می خواند تا هنگامی که به پایان فایل(EOF) برسد و سپس نتیجه را در خروجی می نویسد. 

    fputcsv

     تابع ()fputcsv، یک خط داده را به فرمت CSV در می آورد و آن را در یک فایل باز، می نویسد. 

    fputs

     این تابع یک نام مستعار از تابع fwrite است. 

    fread

     تابع ()fread عمل خواندن را از یک فایل باز شده انجام می دهد.

    fscanf

    Parses input from an open file according to a specified format

    fseek

     تابع ()fseek در یک فایل باز شده پویش می کند. 

    fstat

     تابع ()fstat اطلاعاتی را درباره ی یک فایل باز شده برمی گرداند. 

    ftell

     تابع ()ftell  مکان کنونی(current position) را در یک فایل باز شده، برمی گرداند.

    ftruncate

     تابع ()ftruncate یک فایل باز شده را به یک طول مشخص کوتاه می کند.

    fwrite

     تابع ()fwrite در درون یک فایل باز شده، عمل نوشتن را انجام می دهد. 

    glob

     تابع ()glob یک آرایه از نام فایل ها یا دایرکتوری هایی که با یک الگوی مشخص تطابق دارند را برمی گرداند. 

    is_dir

     تابع ()is_dir بررسی می کند که آیا فایل مشخص شده یک دایرکتوری است یا نه. 

    is_executable

     تابع ()is_executable بررسی می کند که آیا فایل مشخص شده قابل اجرا(executable) است یا نه. 

    is_file

     تابع ()is_file بررسی می کند که آیا یک فایل مشخص، یک فایل حقیقی است یا نه. 

    is_link

     تابع ()is_link بررسی می کند که آیا فایل مشخص شده یک لینک است یا نه. 

    is_readable

     تابع ()is_readable بررسی می کند که آیا فایل مشخص شده قابل خواندن است یا نه. 

    is_uploaded_file

     تابع ()is_uploaded_file بررسی می کند که آیا فایل مورد نظر، به وسیله ی HTTP POST آپلود شده است یا نه. 

    is_writable

     تابع ()is_writeable بررسی می کند که آیا فایل مورد نظر قابل خواندن است ی نه. 

    is_writeable

     یک مستعار از تابع is_writable است.

    lchgrp

    Changes group ownership of symlink

    lchown

    Changes user ownership of symlink

    link

    Creates a hard link

    linkinfo

     تابع ()linkinfo اطلاعاتی را درباره ی یک hard link برمی گرداند. 

    lstat

     تابع ()lstat اطلاعاتی را درباره ی یک فایل یا یک لینک سمبلیک برمی گرداند. 

    mkdir

     تابع ()mkdir یک دایرکتوری را ایجاد می کند. 

    move_uploaded_file

     تابع ()move_uploaded_file یک فایل آپلود شده را به یک مکان جدید حرکت می دهد. 

    parse_ini_file

     تابع ()parse_ini_file یک فایل پیکربندی(ini) را تجزیه کرده و تنظیمات درون آن را به صورت یک آرایه برمی گرداند. 

    parse_ini_string

     یک رشته ی پیکربندی را تجزیه می کند. 

    pathinfo

     تابع ()pathinfo  یک آرایه را برمی گرداند که دربردارنده ی اطلاعاتی درباره ی یک مسیر(path)است. 

    pclose

     تابع ()pclose یک pipe را که به وسیله ی popen باز شده است را می بندد. 

    popen

     تابع ()popen یک pipe را که در برنامه ای که در پارامتر command مشخص شده است را باز می کند. 

    readfile

     تابع ()readfile یک فایل را می خواند و آن را در خروجی می نویسد. 

    readlink

     تابع ()readlink در واقع target مورد نظر از یک لینک سمبلیک را برمی گرداند. 

    realpath

     تابع ()realpath نام مسیر(phathname) مطلق را برمی گرداند. 

    realpath_cache_get

    Returns realpath cache entries

    realpath_cache_size

    Returns realpath cache size

    rename

     تابع ()rename یک فایل یا دایرکتوری را تغییر نام می دهد. 

    rewind

     تابع ()rewind مکان اشاره گر فایل را به ابتدای فایل برمی گرداند. 

    rmdir

     تابع ()rmdir یک دایرکتوری خالی را حذف می کند. 

    set_file_buffer

     تابع ()set_file_buffer اندازه ی بافر یک فایل باز شده را ست می کند. 

    stat

     تابع ()stat اطلاعاتی را درباره ی یک فایل برمی گرداند. 

    symlink

     تابع ()symlink از target موجود به وسیله ی link مشخص شده، یک لینک سمبلیک را ایجاد می کند. 

    tempnam

     تابع ()tempnam یک فایل موقت را با یک نام یکتا در یک دایرکتوری مشخص ایجاد می کند. 

    tmpfile

     تابع ()tmpfile یک فایل موقت را با یک نام یکتا در حالت read-write یا +w، ایجاد می کند. 

    touch

     تابع ()touch زمان دسترسی(access) و زمان اصلاح(modification) فایل مورد نظر را ست می کند. 

    umask

     تابع ()umask دسترسی ها را برای فایل ها تغییر می دهد. 

    unlink

    تابع ()unlink یک فایل را حذف می کند.

    READ MORE
  • مقدمه ی توابع فیلتر

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


    نحوه نصب کردن

    از PHP 5.2.0 به بعد، توابع فیلتر به طور پیش فرض فعال هستند. و نیازی به نصب این توابع نمی باشد. 


    توابع فیلتر در PHP5

    تابع توضیحات
    filter_has_var

    تابع ()filter_has_var بررسی می کند که آیا یک نوع input مشخص موجود است یا نه. 

    filter_id

    تابع ()filter_id در واقع ID فیلتر یک نام فیلتر را برمی گرداند. 

    filter_input

    تابع ()filter_input  یک متغیر خارجی(بعنوان مثال یک فرم ورودی) را گرفته و به طور اختیاری آن را فیلتر می کند. 

    filter_input_array

    تابع ()filter_input_array متغیرهای خارجی(مثل input فرم) را گرفته و به طور اختیاری آنها را فیلتر می کند. 

    filter_list

    تابع ()filter_list لیستی از تمام فیلترهای پشتیبانی شده را برمی گرداند. 

    filter_var_array

    تابع ()filter_var_array چند متغیر را گرفته و به طور اختیاری آنها را فیلتر می کند.

    filter_var

    تابع ()filter_var به وسیله ی یک فیلتر مشخص شده، یک متغیر را فیلتر می کند. 

    ثابت های از پیش تعریف شده ی فیلتر در php

    ثابت ID توضیحات
    FILTER_VALIDATE_BOOLEAN 258

    فیلتر FILTER_VALIDATE_BOOLEAN یک مقدار را بعنوان یک مقدار بولی، فیلتر می کند.

    FILTER_VALIDATE_EMAIL 274

    فیلتر FILTER_VALIDATE_EMAIL یک آدرس ایمیل را اعتبار سنجی می کند.

    FILTER_VALIDATE_FLOAT 259

    فیلتر FILTER_VALIDATE_FLOAT متغیرها را بعنوان یک عدد float(عدد با ممیز شناور) فیلتر می کند. 

    FILTER_VALIDATE_INT 257

    از تابع FILTER_VALIDATE_INT برای اعتبار سنجی مقدار یک عدد صحیح(integer) استفاده می شود. 

    FILTER_VALIDATE_IP 275

    فیلتر FILTER_VALIDATE_IP یک آدرس IP را اعتبار سنجی می کند. 

    FILTER_VALIDATE_REGEXP 272

    فیلتر FILTER_VALIDATE_REGEXP یک عبارت منظم را فیلتر می کند. 

    FILTER_VALIDATE_URL 273 

    فیلتر FILTER_VALIDATE_URL درواقع یک URL را اعتبار سنجی می کند. 

    FILTER_SANITIZE_EMAIL 517

    فیلتر FILTER_SANITIZE_EMAIL تمام کاراکترهای غیر مجاز را از یک آدرس ایمیل حذف می کند. 

    FILTER_SANITIZE_ENCODED 514

    فیلتر FILTER_SANITIZE_ENCODED کاراکترهای خاص را رمزگذاری کرده و یا حذف می نماید. 

    FILTER_SANITIZE_MAGIC_QUOTES 521

    فیلتر FILTER_SANITIZE_MAGIC_QUOTES تابع addslashes را بر روی یک رشته اجرا می کند. 

    FILTER_SANITIZE_NUMBER_FLOAT 520

    فیلتر FILTER_SANITIZE_NUMBER_FLOAT تمام کاراکترهای غیرمجاز را از یک عدد float حذف می کند. 

    FILTER_SANITIZE_NUMBER_INT 519

    فیلتر FILTER_SANITIZE_NUMBER_INT تمام کاراکترهای غیرمجاز را از یک عدد حذف می کند. 

    FILTER_SANITIZE_SPECIAL_CHARS 515

    فیلتر FILTER_SANITIZE_SPECIAL_CHARS کاراکترهای خاص را حذف می کند. 

    FILTER_SANITIZE_FULL_SPECIAL_CHARS    
    FILTER_SANITIZE_STRING 513

    فیلتر FILTER_SANITIZE_STRING تگ ها را حذف می کند و همچنین کاراکترهای خاص را از یک رشته حذف کرده یا رمزگذاری می کند. 

    FILTER_SANITIZE_STRIPPED 513

    فیلتر FILTER_SANITIZE_STRIPPED کاراکترهای ناخواسته را حذف کرده و یا رمزگذاری می کند. 

    FILTER_SANITIZE_URL 518

    فیلتر FILTER_SANITIZE_URL تمام کاراکترهای غیرمجاز را از یک رشته حذف می کند. 

    FILTER_UNSAFE_RAW 516

    فیلتر FILTER_UNSAFE_RAW کاری خاصی انجام نمی دهد و یا کاراکترهای خاص را رمز گذاری کرده یا خذف می کند. 

    FILTER_CALLBACK 1024

    فیلتر FILTER_CALLBACK یک تابع تعریف شده توسط کاربر را فراخوانی کرده تا مقدار مورد نظر را فیلتر نماید. 

    READ MORE
  • جملات شرطی

    Wiki

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

    انواع جملات شرطی در PHP:

    1. ... if:هنگامی که شرط درست باشد، دستور مقابل if اجرا می شود.
    2. if... else: اگر شرط درست باشد دستور مقابل if وگرنه دستور مقابل else اجرا می شود.
    3. if... elseif... else: برای اجرای یک دستور از بین چند دستور کاربرد دارد.
    4. PHP Switch: برای انتخاب و اجرای یک دستور از بین چند دستور استفاده می شود.

     دستور if

    Wiki

    نحوه استفاده:

    if (Condition)
    {
    Statement 1
    Statement 2
    ...
    }

    دستور(Statement) مورد نظر تنها موقعی اجرا می شود که شرط(Condition) برقرار باشد، یعنی مقدار آن برابر true باشد.

    مثال: در کد PHP زیر اگر امروز جمعه باشد، جمله "Have a nice weekend" چاپ می شود.

    <html>
    <body>

    <?php
    $d=date("D");
    if ($d=="Fri") echo "Have a nice weekend!";
    ?>

    </body>
    </html>


    دستور if...else

    Wiki

     این دستور که در واقع می تواند کامل کننده if باشد، تعیین می کند که اگر شرط درست نبود چه دستوری اجرا شود.

    نحوه استفاده:

    if (condition)
      code to be executed if condition is true;
    else
      code to be executed if condition is false;

    مثال: در مثال زیر اگر امروز جمعه باشد جمله "Have a nice weekend" چاپ می شود وگرنه جمله "Have a nice day" چاپ خواهد شد.

    <html>
    <body>

    <?php
    $d=date("D");
    if ($d=="Fri")
      echo "Have a nice weekend!";
    else
      echo "Have a nice day!";
    ?>

    </body>
    </html>


    دستور if...elseif....else

    Wiki

    همان طور که در بالا گفته شد این نوع if برای اجرای یک دستور از بین چند دستور کاربرد دارد.

    نحوه استفاده:

    if (condition)
      code to be executed if condition is true;
    elseif (condition)
      code to be executed if condition is true;
    else
      code to be executed if condition is false;

     مثال:در مثال زیر اگر امروز جمعه باشد جمله "Have a nice weekend" چاپ می شود و اگر یکشنبه بود جمله "Have a nice Sunday" چاپ می شود وگرنه جمله "Have a nice day" چاپ خواهد شد.

    <html>
    <body>

    <?php
    $d=date("D");
    if ($d=="Fri")
      echo "Have a nice weekend!";
    elseif ($d=="Sun")
      echo "Have a nice Sunday!";
    else
      echo "Have a nice day!";
    ?>

    </body>
    </html>


      توجه: نوع دیگر اجرای دستورات کنترلی(مثال):

    if ($i == 1):
        echo "i is 1";
        $i+=2;
    elseif ($i == 2):
        echo "i is 2";
        $i+=3;
    else:
        echo "is not 1 or 2";
        $i-=1;
    endif;


    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
  • حذف اطلاعات یک جدول با استفاده از MySQLi و PDO

    Wiki

    دستور DELETE FROM برای حذف رکورد از یک جدول استفاده می شود.

    نحوه استفاده:

    DELETE FROM table_name
    WHERE some_column = some_value

    نکته: قسمت 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
    3 Julie Dooley این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید 2014-10-26 10:48:23

    در مثال زیر، رکوردی که id آن برابر با 3 است در جدول "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 = "DELETE FROM MyGuests WHERE id=3";

    if ($conn->query($sql) === TRUE) {
        echo "Record deleted successfully";
    } else {
        echo "Error deleting 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 = "DELETE FROM MyGuests WHERE id=3";

    if (mysqli_query($conn, $sql)) {
        echo "Record deleted successfully";
    } else {
        echo "Error deleting 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 = "DELETE FROM MyGuests WHERE id=3";

        // بدلیل اینکه کوئری نتیجه ای را برنمی گرداند از تابع زیر استفاده می کنیم
        $conn->exec($sql);
        echo "Record deleted 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 Moe این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید 2014-10-23 10:22:30

    برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

    READ MORE
تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه پرداخت آنلاین - بانک اقتصاد نوین پرداخت آنلاین - بانک سامان
 
دوره های آموزشی راه اندازی کسب و کارهای اینترنتی
تبلیغات اینترنتی