آژانس هواپیماییexchanging

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

شروع موضوع توسط Mehdi ‏21 فوریه 2006 در انجمن آموزش PHP به زبان فارسی

  1. Mehdi

    Mehdi مدیر بازنشسته

    تاریخ عضویت:
    ‏1 آگوست 2004
    نوشته ها:
    5,569
    تشکر شده:
    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( 123);
    $db dbmopen"./ test""c" ) or die("Couldn't open test DBM");
    dbminsert$db"arraytest"$array );
    print 
    gettypedbmfetch$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$keyserialize$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>

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

    مهدی صفری
     
  2. Romain_Gary

    Romain_Gary Registered User

    تاریخ عضویت:
    ‏23 فوریه 2005
    نوشته ها:
    1,711
    تشکر شده:
    5
    دمت گرم .
    این پی اج پی خداییش آخرشه
    از آموزشت ممنون
    در ضمن یک سوال :
    اگه داده ها زیاد باشن نمیشه از این استفاده کرد؟(تا چه حدی میشه استفاده کرد ؟)
     
  3. Mehdi

    Mehdi مدیر بازنشسته

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

    Romain_Gary Registered User

    تاریخ عضویت:
    ‏23 فوریه 2005
    نوشته ها:
    1,711
    تشکر شده:
    5
    خیلی خیلی ممنونم :)
     
  5. iransbs

    iransbs کاربر تازه وارد

    تاریخ عضویت:
    ‏3 می 2005
    نوشته ها:
    471
    تشکر شده:
    0
    محل سکونت:
    ایران، مازندارن، ساری
  6. mynobar

    mynobar Registered User

    تاریخ عضویت:
    ‏27 سپتامبر 2005
    نوشته ها:
    2,556
    تشکر شده:
    2
    ایول همشهری [​IMG]
     
  7. appbannerkhuniresbanner
  8. ParsPc

    ParsPc کاربر تازه وارد

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

    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
     
  10. alionline

    alionline کاربر تازه وارد

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

    mohammad_p30 Registered User

    تاریخ عضویت:
    ‏18 مارس 2006
    نوشته ها:
    551
    تشکر شده:
    5
    محل سکونت:
    system32
    خيلي ممنون
    منتظر mysql هستيم :rolleyes:
     
  12. arnh

    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

    مشكلش چيه ؟
     
  13. sinads

    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
     
  14. avajang.com .leftavajang.com.right
  15. ahmadelahi

    ahmadelahi Registered User

    تاریخ عضویت:
    ‏22 فوریه 2013
    نوشته ها:
    402
    تشکر شده:
    84
    محل سکونت:
    اسفراین