برگزیده های پرشین تولز

آموزش پي اچ پي قسمت يازدهم - ديتابيس هاي فايلي

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere

كار با ديتابيس ها (فايل)

اگه شما به ديتابيس هاس اس كيو ال مثل ماي اس كيو ال و اوراكل دسترسي نداريد ميتونيد از ديتابيس هاي DBM استفاده كنيد حتي اگه شما اگه نداشته باشينش پي اچ پي اون رو براي شما شبيه سازي ميكنه و به شما اجازه ميده داده هاتون رو توش ذخيره كنيد و بازيابي كنيد شون .
در ضمن شما نياز به استفاده از دستورات اس كي ال نداريد چون بسيار راحت و انعطاف پذير هستن .
در اين بخش ياد ميگيريم چطور :
يك ديتابيس DBM رو باز كنيم
چگونه داده را وارد كنيم
چگونه داده را فراخواني كنيم
چگونه تغيير ايجاد كنيم يا داده هارا پاك كنيم
چگونه داده هاي پيچيده اي را وارد ديتا بيس كنيم
باز كردن ديتا بيس :
با استفاده از دستور dbmopen() شما ميتونيد ديتا بيس را باز كنيد و اين تا بع دو آرگومان ميگيره
يكي مسير ديتابيسمون و ديگري نوع دسترسي به ديتا بيس كه نوع دسترسي ها به اين شكل هست

توضيح نوع دسترسي
در حالت فقط خواندي r
براي خواندن و نوشتن w
ساختن ديتابيس و اگر وجود دارد براي خواندن و نوشتن c
ساخت يك ديتابيس جديد n

با استفاده از دستور زير اگر ديتابيسي با اين نام وجود نداشته باشد باز ميشود :
PHP:
$db = dbmopen( "./products", "c" ) or die( "Couldn't open DBM" );
نكته : دقت كنيد كه ما از دستور die براي زماني استفاده كرديم كه قادر به ايجاد ديتابيس نباشيم .
وقتي كارمون با ديتا بيس تموم شد با استفاده از دستور زير ديتابيس رو ميبنديم .
PHP:
dbmclose($db);
اگه شما ديتابيس رو نبنديد قسمت هاي ديگري از برناممون كه به ديتابيس نياز دارند مجبور هستن تا صبر كنند و اين اصلا خوب نيست .

اضافه كردن اطلاعات به ديتابيس :
به مثال زير توجه كنيد :
PHP:
<?php
$db=dbmopen("./users","c") or die("Could not open DBM");
dbminsert($db,"PersianTools.com","30000");
dbminsert($db,"IranVig.com","6000");
dbminsert($db,"CodeVig.com","100");
dbmclose($db);
?>
و اينگونه اطلاعات رو اضافه ميكنيم و حالا براي تغيير اطلاعات به اين شكل عمل ميكنيم :
PHP:
<?php
$db=dbmopen("./users","c") or die("Could not open DBM");
dbmreplace($db,"PersianTools.com","464420");
dbmreplace ($db,"IranVig.com","62351");
dbmreplace ($db,"CodeVig.com","6463");
dbmclose($db);
?>
حالا كه ما تونستيم اطلاعاتمون رو وارد ديتابيس كنيم احتياج داريم تا اونهارو بتونيم بخونيم پس به اين صورت عمل ميكنيم :
PHP:
$users=dbmfetch($db,"PersianTools.com");
خيلي ساده بزاريد اين اطلاعات رو در قالب يك جدول فراخواني كنيم :
PHP:
<table border=1 cellpadding ="5">
<tr>
<td align="center"> <b>product</b></td>
<td align="center"> <b>price</b> </td>
</tr>
<?php
$db = dbmopen( "./users", "c" ) or die( "Couldn't open DBM" );
$key = dbmfirstkey( $db );
while ( $key != "" )
{
$value = dbmfetch( $db, $key );
print "<tr><td align = \"left\"> $key </td>";
print "<td align = \"right\"> \$$value </td></tr>";
$key = dbmnextkey( $db, $key );
}
dbmclose( $db);
?>
</table>
و به اين صورت تمام اطلاعات رو با استفاده از يك حلقه فراخواني ميكنيم
حالا شايد سوال پيش بياد كه چجوري بفهميم دادمون قبلا تو ديتا بيس وارد شده يا نه ؟؟
PHP:
if ( dbmexists( $db, "PersianTools.com" ) )
print dbmfetch( $db, " PersianTools.com " );
براي پاك كردن يك مقدار از دستور
PHP:
dbmdelete($db,"PersianTools.com");
استفاده ميكنيم .

اضافه كردن يك مقدار پيچيده به ديتابيس :

PHP:
$array = array( 1, 2, 3, 4 );
$db = dbmopen( "./ test", "c" ) or die("Couldn't open test DBM");
dbminsert( $db, "arraytest", $array );
print gettype( dbmfetch( $db, "arraytest" ) );
خوب باشه يه مثال كامل :
PHP:
<?php
$products = array("PersianTools.com" => array( users=>"2200",stats=>"1500", color=>"blue" ),
 "Iranvig.com" => array( users=>"2213",stats=>"1234",color=>"blue" )
);
$db = dbmopen( "./test", "c" ) or die("Couldn't open products DBM");
while ( list ( $key, $value ) = each ( $products ) )
dbmreplace( $db, $key, serialize( $value ) );
dbmclose( $db );
?>
</table>
بزاريد يك مثال كلي بزنيم تا بيشتر آشنا بشيم ما در اين مثال اطلاعات ديتابيسمون رو داخل يه جدول ميكشيم و كنار هر داده يه گزينه ميزاريم تا با انتخاب اون بتونه پاك كنه داده رو و همينطور يك تكست براي ويرايش ميزاريم و اين بخش رو تموم ميكنيم .
PHP:
<?php
 $dbh = dbmopen( "./users", "c" ) or die("Couldn't open test DBM");

 if ( isset ( $delete ) )
 {
 while ( list ( $key, $val ) = each ( $delete ) )
 {
 unset( $prices[$val]);
 dbmdelete( $dbh, $val );
 }
 }

 if ( isset ( $prices ) )
 {
 while ( list ( $key, $val ) = each ( $stats ) )
 dbmreplace( $dbh, $key, $val );
 }

if ( ! empty( $name_add ) && ! empty( $stats_add ) )
dbminsert( $dbh, "$name_add", "$stats_add" );
 ?>

 <html>
 <body>
 <form action="<? print $PHP_SELF; ?>" action="POST">
 <table border="1">
 <tr>
 <td>delete</td>
 <td>Users</td>
 <td>stats</td>
 </tr>
 <?php
 $key = dbmfirstkey( $dbh );
 while ( $key != "" )
 {
 $price = dbmfetch( $dbh, $key );
 print "<tr><td><input type='checkbox' name=\"delete[]\" ";
 print "value=\"$key\">$/td>";
 print "<td>$key</td>";
 print "<td> <input type=\"text\" name=\"prices[$key]\" ";
 print "value=\"$stat\"> </td></tr>";
 $key = dbmnextkey( $dbh, $key );
 }

 dbmclose( $dbh );
 ?>

 <tr>
 <td>&nbsp;</td>
<td><input type="text" name="name_add"></td>
 <td><input type="text" name="stats_add"></td>
 </tr>

 <tr>
 <td colspan=3 align="right">
 <input type="submit" value="amend">
 </td>
 </tr>
</table>
</form>

فكر ميكنم اين سوال براتون پيش بياد كه چه موقع بايد از اين نوع ذخيره داده استفاده كنيم :
خوب بايد بگم زماني كه داده هاي كمي برا ذخيره كردن داريد ميتونيد از اين روش استفاده كنيد كه خيلي روش ساده اي هست و بدرد بخور .
اميدوارم لذت برده باشيد .
_______

مهدی صفری
 

Romain_Gary

Registered User
تاریخ عضویت
23 فوریه 2005
نوشته‌ها
1,801
لایک‌ها
6
سن
38
دمت گرم .
این پی اج پی خداییش آخرشه
از آموزشت ممنون
در ضمن یک سوال :
اگه داده ها زیاد باشن نمیشه از این استفاده کرد؟(تا چه حدی میشه استفاده کرد ؟)
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere
خوب برا ساخت سي ام اس ديتابيس هايي مثل اوراكل و پست گريس اس كيو ال و ماي اس كيو ال و غيره پيشنها ميشه
برا كارهاي كوچيك ميتوني از اين استفاده كني كه هم ساده هست هم بدرد بخور:D
 

mynobar

Registered User
تاریخ عضویت
27 سپتامبر 2005
نوشته‌ها
2,556
لایک‌ها
2
سن
42
ایول همشهری
20.gif
 

ParsPc

کاربر تازه وارد
تاریخ عضویت
4 مارس 2006
نوشته‌ها
9
لایک‌ها
0
سلام!
آقا مهدی ممنون از آموزشهای واقعا خوبت.
منتظر بقیش هم هستیما!:blush:
 

medriss

کاربر تازه وارد
تاریخ عضویت
3 جولای 2006
نوشته‌ها
50
لایک‌ها
0
محل سکونت
Tehran, Iran
salam agha
man ye sample mikhastam
sampli ke ye form HTML bashe bad data haro masala email va name va ... ro daryaft kone bad to ye safhe namayesh bede badesham to yedone database save beshe
age daerin mamnoon misham mail konid baram :
[email protected]
ba tashakor az shoma va maghalateton
 

alionline

کاربر تازه وارد
تاریخ عضویت
22 نوامبر 2005
نوشته‌ها
114
لایک‌ها
0
آقا مهدي 3 يا 4 ماه گذشته كي ادامش رو ميزاري
 

arnh

کاربر تازه وارد
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
8
لایک‌ها
0
PHP:
$db = dbmopen( "./products", "c" ) or die( "Couldn't open DBM" );

Fatal error: Call to undefined function: dbmopen() in c:\inetpub\wwwroot\ret.php on line 2

مشكلش چيه ؟
 

sinads

کاربر تازه وارد
تاریخ عضویت
9 آپریل 2009
نوشته‌ها
4
لایک‌ها
0
salam . man ye sayt daram va tosh yeghesmat be esme sefaresh daram
ke toosh ye forme sefareshe ke mishe print gereftesh
hala man mikham in forme sefaresho vaghti dokmeye printesh ro mizanam ham print begire va ham ono ersal kone be emailam .
age momkene komakam konid

nemone
 
بالا