SM-Mahdavi

آموزش کار با متد PDO

6 پست در این موضوع قرار دارد

سلام دوستان

خب همگی می دونید که برای کار با بانک های اطلاعاتی در PHP سه تا متد معرفی شده. متد اول MySQL هست. خب این روش به دلیل مشکلاتی که تو امنیت و بحث SQL Injection داشت کم کم کنار رفت. یعنی خود مایکروسافت اونو کنار گذاشت. ولی خب به جاش MySQLI رو ارائه داد. میشه گفت نسخه تکمیل شده همون MySQL هست. با این دو تا روش شما فقط می تونید با بانک MySQL کار کنید.

PDO وقتی ارائه شد کم کم همه رو به سمت خودش جذب کرد. حالا چرا؟

دلیل اول اینه که شما با این روش می تونید به 12 تا بانک مختلف مثل SQL Lite و SQL Server کار کنید، در صورتی که با روش MySQLI شما فقط با یک بانک می تونید کار کنید که اونم خود MySQL هست.

مزیت بعدی امنیت و شی گرایی هست که در روش PDO بسیار تقویت شده.

خودم هم تازه با این متد شروع به کار کردم. اگه مایل باشید می تونیم آموزش رو ادامه بدیم. (البته در حدی که خودم بلدم :) )

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

به اشتراک گذاری این پست


لینک به پست

بخش اول آموزش PDO - ایجاد کانشکن

سلام دوستان

امروز می خوایم بخش اول آموزش رو شروع کنیم.

همون طور که در بالا گفتم، PDO یک متد یا بهتر بگم یک روش برای اتصال و کار با بانک های اطلاعاتی با PHP هست. در مرحله اول باید کانکشن خودمون رو بنویسیم. مثل روش های قبلی ابتدا نام سرور، نام دیتابیس، کاربری و رمز رو میگیریم و داخل متغیر ذخیره می کنیم. به صورت زیر:


$servername="localhost";
$dbname="pdo";
$username="root";
$password="";

یه پارامتر دیگه هست به نام dsn که یه خورده فکر کنم جدیده!

این dsn امنیت کانکشن رو تامین می کنه و به صورت زیر باید نوشته بشه:


$dsn="mysql:host=$servername;dbname=$dbname";

نوع بانک، نام سرور و نام دیتابیس رو به این صورت میگیره.

حالا باید یه شی PDO بسازیم. PDO مخفف PHP Data Object هست. تو این روش مفهمو شی گرایی پیاده سازی شده. بعد از ساختن شی، باید با پارامتر هایی که قبلا پر کردیم کانشکن رو ایجاد کنیم. به صورت زیر:


$connect=new PDO($dsn,$username,$password);

بعد متغیر شی رو return می کنیم.


return $connect;

PDO برای خطایابی هم فکرهای خوبی کرده. شما می تونید تو تمام مراحل کار با PDO بحث خطایابی رو داشته باشید. حالا در این قسمت ما می خوایم کانشکن رو خطایابی کنیم. بیبنیم که درست وصل شدیم یا نه.

اول باید کدهامون رو داخل بلاک try catch بزاریم.


<?php
try{
$servername="localhost";
$dbname="pdo";
$username="root";
$password="";
$dsn="mysql:host=$servername;dbname=$dbname";
$connect=new PDO($dsn,$username,$password);
return $connect;
}
catch(PDOException $error)
{
echo "Error In Connect!";
exit();
}
?>

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


<?php include "connection.php"; ?>

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

به اشتراک گذاری این پست


لینک به پست

بخش دوم آموزش PDO - خواندن اطلاعات از دیتابیس

سلام دوستان

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

قبل از هر چیز اتصال به دیتابیس رو برقرار می کنیم.

روش کار تقریبا مثل متدهای قبلی هست اما یه سری تغییرات داره. در مرحله اول باید کوئری مورد نظرمون رو بنویسیم. من اینجا خروجی کوئری رو داخل متغیر sql ذخیره می کنم.


$sql="SELECT * FROM tbl_user";

با این دستور من گفتم که کلیه سطرهای جدول tbl_user رو برای من انتخاب کن و داخل sql بریز.

بعد باید کوئری اجرا بشه. با دستور زیر:


$result=$connect->query($sql);

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

نکته: connect همون متغیری هست که اتصال ما به دیتابیس رو برقرار کرده.

حالا نوبت اینه اطلاعات تک تک ستون های جدول رو بخونیم و نمایش بدیم. 2 راه برای این کار هست. یکی استفاده از حلقه while دیگری استفاده از for each. من از روش دوم استفاده می کنم. چون ساده تر هست.


foreach ($result as $rows)
{
echo $rows['id'] . "<br>";
echo $rows['name']."<br>";
}

حلقه for each ورودی آرایه داره. من با متغیر rows که با as استفاده کردم دارم رو آیتم های آرایه ای که داخل Result داشتم کار می کنم.

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


<?php
$sql="SELECT * FROM tbl_user";
$result=$connect->query($sql);
foreach ($result as $rows)
{
echo $rows['id'] . "<br>";
echo $rows['name']."<br>";
}
?>

به همین سادگی ما تونستیم یه سری اطلاعات موجود در جدولی از دیتابیس رو بخونیم و نمایش بدیم.

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

به اشتراک گذاری این پست


لینک به پست

بخش سوم آموزش PDO - ساخت فرم لاگین

سلام دوستان

امیدوارم حالتون خوب باشه. تو این قسمت می خوایم یه فرم لاگین امن با متد PDO ایجاد کنیم.

کانشکن رو داخل فایل connection.php داریم.(آموزش های قبلی). پس برای شروع اول فایل connection رو include می کنیم به صفحه. به صورت زیر:


<?php include"connection.php"; ?>

حالا باید فرم رو بسازیم. 2 تا کادر متن لازم داریم. یکی برای دریافت نام کاربری یه هم رمز. و یک دکمه برای ارسال اطلاعات. به صورت زیر فرم رو طراحی می کنیم:


<form name="login" method="post">
<label>نام کاربری:</label><input type="text" name="user">
<br>
<label>رمز ورود:</label><input type="text" name="pass">
<input type="submit" name="login">
</form>

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

می خوایم سطح کنترل برنامه رو یه کم ببریم بالا. اول باید چک کنیم ببینیم اصلا دکمه زده شده یا نه. (شرط اول داخل دستور زیر).

بعد باید چک کنیم که کادرهای متن خالی نباشند.(شرط دوم داخل دستور زیر). اگه خالی بود و دکمه زده شد باید یه پیغام نشون بدیم که چیزی وارد نشده!

در غیر این صورت (یعنی اون دو تا شرط برقرار باشه = دکمه زده شده و مقدار وارد شده) باید کوئری مورد نظر رو بنویسیم و دستورات رو اجرا کنیم.


<?php
if(isset($_POST['login']))
{
if(empty($_POST['user']) || empty($_POST['pass']))
{
echo "User or Pass is Empty!!";
}
else
{
$sql="SELECT COUNT(*) FROM login WHERE name=? and pass=?";
$result=$connect->prepare($sql);
$result->bindValue(1,$_POST['user']);
$result->bindValue(2,$_POST['pass']);
$result->execute();
$num=$result->fetchColumn();
if($num==1)
{
echo "yes";
}
else
{
echo "no";
}
}
}
?>

اگه با ساختار کوئری های sql آشنا باشید می دونید دستور Select خروجی جدول داره. ما اومدیم تعداد سطرهایی که مقدار name و pass مساوی مقادیری که کاربر وارد کرده رو میگیریم. اگه 1 باشه یعنی یه سطر مساوی پیدا کردیم، در نتیجه اجازه ورود میدیم.

حالا چرا جلوی name و pass ما ? گذاشتیم؟ این یک تکنیک جدید داخل PDO هست. ما با دستور BindValue اومدیم به هر ؟ به ترتیب مقدار دادیم. یه مرحله از امنیت عملا اینجا برای ما تامین شد. اما prepare داره چیکار میکنه؟ این دستور یه مرحله قبل از اجرای نهایی کوئری هست. قبل از اینکه ما به ؟ ها مقدار بدیم اومدیم کوئری رو preapare کردیم و داخل متغیر Result ریختیم. یه مرحله دیگه از امنیت هم ایجا مشخص شد برامون. در آخر هم با Execute اجرا کردیم.

تا اینجا ما اومدیم به بانک وصل شدیم، جستجو کردیم که آیا مقادیری که کاربر وارد کرده داخل جدول وجود داره یا نه. گفتیم اگه وجود داشته باشه خروجی تابع 1 و اگه نباشه 0 هست.

در مرحله بعد با FetchColumn تعداد ستون ها رو می خونیم. بعد یه شرط گذاشتیم و تمام.. من اومدم یه پیغام نمایش دادم. شما می تونید به جای پیغام انتقال بدین به صفحه مدیریت.

کد کامل شده به صورت زیر دی میاد:


<fieldset>
<legend>ورود به سایت</legend>
<?php
if(isset($_POST['login']))
{
if(empty($_POST['user']) || empty($_POST['pass']))
{
echo "User or Pass is Empty!!";
}
else
{
$sql="SELECT COUNT(*) FROM login WHERE name=? and pass=?";
$result=$connect->prepare($sql);
$result->bindValue(1,$_POST['user']);
$result->bindValue(2,$_POST['pass']);
$result->execute();
$num=$result->fetchColumn();
if($num==1)
{
echo "yes";
}
else
{
echo "no";
}
}
}
?>
<form name="login" method="post">
<label>نام کاربری:</label><input type="text" name="user">
<br>
<label>رمز ورود:</label><input type="text" name="pass">
<input type="submit" name="login">
</form>
</fieldset>

سوالات و نظرات خودتون رو در این تاپیک بنوسید.

با سپاس

به اشتراک گذاری این پست


لینک به پست

بخش چهارم آموزش PDO - هش کردن رمز ورود

سلام دوستان

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

در مرحله اول باید با استفاده از md5 رمز مورد نظر رو هش کنیم. تابع مربوط رو به صورت زیر می نویسیم:


<?php
function hash_value($value)
{
return md5($value) . "ka23$%gdfg%&&Ha";
}
?>

تابع ساده ای هست. پارامتری رو که بهش ارسال می کنیم رو با دستور md5 هش می کنه و با رشته ای که ما دادیم ترکیب می کنه. نکته ای که هست اینکه که md5 یک طرفه عمل می کنه. یعنی کدی که هش میشه قابل برگشت نیست.

می تونیم قبل از ارسال رمز به بانک کد رو هش کنیم و سپس درج کنیم. به صورت زیر:


$pass = hash_value("admin");

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

تاپیک سوالات و نظرات آموزش PDO

به اشتراک گذاری این پست


لینک به پست

بخش پنجم آموزش PDO - درج اطلاعات در جدول

سلام دوستان.

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


id - name - family - phone

خب در مرحله اول اتصال فایل کانکشن با دستور زیر رو فراموش نکنید. داخل صفحه ای که دارید کد می نویسید باید فایل connection.php متصل شده باشه.


<?php include"connection.php"; ?>

در مرحله بعد باید کوئری درج رو بنویسیم. به صورت زیر:


$statement = $connect->prepare("INSERT INTO Register(id,name, family, phone)
VALUES(?, ?, ?, ?)");
$statement->execute(array("10","morteza", "mahdavi", "09130000000"));

موفق باشید.

تاپیک سوالات و نظرات آموزش PDO

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط mbonjakhi
      باسلام
      سوالی از خدمتتون داشتم.
      میشه من یه دامنه .ir خریداری کنم و کد های یک سایت خاص رو کلا کپی کنم و تو دامنه خودم بکار ببرم؟
      یعنی اینکه دیگه نیازی به طراحی سایت نداشته باشه و به راحتی سایتم ساخته بشه؟
      اگه امکانش هست واسم یه مقدار توضیح بدید باید چیکار  کنم.
      ممنون
    • توسط behnam_buss
      سلام
      بخش دسته بندی محصولات در ووکامرس من غیرفعال شده و دسته بندی هایی که قبلا انجام داده بودم رو نمی تونم ببینم و ویرایش کنم و یا حتی وقتی یه دسته بندی جدید هم می سازم نمایش داده نمیشه.
      هر محصول هم که اضافه می کنم و جایی که باید محصول رو تو دسته بندی خودش قرار بدم بازم دسته بندی رو تو قسمت ویرایش خود محصول نمی بینم و نمی تونم تو دسته ی خاص خودش قرار بدم.
      ضمنا همین مشکل برای بخش فهرست های سایتم هم بوجود اومده و فهرست ها رو نمی بینم و کلا بخش فهرست های وردپرسم غیرفعال شده و نمی تونم فهرست جدید بسازم.
      نکته ای که هست اینه که فهرست ها و دسته بندی های قبلی که ساخته بودم تو خود سایت که داره نمایش داده میشه درسته و تو بخش مدیریت وردپرس این مشکلات وجود داره!!!
    • توسط iHooMan
      درود و وقت بخیر 
       
      من  توی پروژه ای لازم دارم از فرم وب سایت مبدا وارد یه وب سایت دیگه بشم .
      که دو حالت داره یکی یوزر معمولی - یکی همکار 
      واسه یوزر معمولی فقط کپچا میخواد سایت مقصد  واسه همکار یوزر و پسورد و کپچا 
      من میخوام با یه فرم تو وب سایت خودمون اطلاعات بگیرم پاس بدم توی اون وبسایت نمیخوام اون اطلاعات تو وبسایت مقصد پر بشه ( لوگین توی وب سایت ما انجام بشه بعد به صفحه لوگین شده اونور پاس بده )
      از چی استفاده کنم ajax یا ... ? 
      روند کاریش تو وردپرس کسی میتونه توضیح بده ؟
      پینوشت : وب سایت مقصد از md5.js واسه اینکرپشن دیتا استفاده میکنه . 
       
      سپاس
       
    • توسط ilbeygi.m
      سلام دوستان خسته نباشید.
      امروز تو وب گردی هام به PDO برخورد کردم یه کم کنجکاو شدم دیدم خیلی ازش تعریف کردن و ...
      همچنین خیلی از جاها گفته بودن که بهتره به حای mysql از PDO  استفاده کنید به خاطر مزیتایی که داره.
       
      حالا خاستم ببینم به نظر شما من که تازه میخام یه پایگاه داده برای ارتباط دهی با php رو یاد بگیرم به نظرتون PDO رو برم سراغش یا همون Mysql?
       
      با سپاس
    • توسط mehrshadmousavi

      مفهوم HTML 5:
      در این نسخه قدرت مدیریت دربرنامه های وب بر روی اجرا با حداکثر دقت و نظم وجود دارد و این کار با کد ابزارهای <header>, <menu>,<nav> , <menuitem> و ... . ممکن است.
      web developer قادرند برخی از ویژگی های شاخص  HTML 5 که  شامل: آهنگ، ویدئو، ذخیره ی منطقه در حالت آفلاین و ... با اصول بهینه سازی سایت همراه کنند. همچنین HTML 5 این اجازه را به کاربران خود می دهد که از خاصیت و ویژگی نوعی از تگ ها را استفاده کنند مانند تگ link و script؛ و حتی امکان استفاده از تگ های <article> و <<section در بهترین حالت را ممکن ساخته است. تا کنون ترفند هایی زیادی ابداع نشده است که بتوان به وسیله ی آن ها به نتایج مطلوب و باب میل رسید از این جهت درهنگام استفاده باید هوشمندانه عمل کرد.
      مفهوم HTML 6:
      ورژن 6HTML نسخه ی اصلاح شده ی  HTML ها است که دارای NameSpaces با ساختار XML می باشد. از ویژگی های مهمNameSpaces این است که با استفاده از تگ های <logo/>< logo>  و <toolbar/>< toolbar> قادر خواهید بود امکانی فراهم کنید تا سایت قادر به شناسایی و تشخص لوگو در صفحات وب سایت باشد. همچنین  از دیگر امکانات HTML 6  این است که طراحان سایت و وب دولپرها می توانند تگ <container> را به جای <’div id =’container > بهره ببرند.

      در حالت کلی  HTML 6 دارای دو نوع تگ تکی  که اطلاعات و خصوصیات راحمل می کنند اما داده ها شامل متن نمی باشد، و تگ های زوج یا جفتی که با متن هم می توانند همراه باشند.
      برخی از تگ های تکی (رفتاری) که در HTML 6 قرار دارند را با هم بررسی می کنیم که می توانند دارای namesapec   های زیر باشند:
      <html:html>
      <html:head>
      <html:title>
      <html:meta>
      <html:link>
      <html:a>
      <html:media>
      <html:body>
      <html:button>
      چند ویژگی که HTML6 را متمایز می کند:
       قابلیت تغییر اندازه تصاویر مرورگر ها
      زبان های قابل اجرا
      مدیریت بهتر در کنترل اشیای ویدئویی
      پیش پردازنده ها ی جایگزین
      دسترسی ایمن به اطلاعات