PHP 2

Document Sample
PHP 2 Powered By Docstoc
					    ‫ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ واﻟﺼﻼة واﻟﺴﻼم ﻋﻠﻰ اﺷﺮف اﻻﻧﺒﯿﺎء واﻟﻤﺮﺳﻠﯿﻦ ، ﺳﯿﺘﻢ اﻟﺘﻄﺮق ﻓﻲ ھﺬا‬
                                                             ‫اﻟﺪرس ﺑﻤﺸﯿﺌﺔ اﷲ اﻟﻰ ﻣﺎ ﻳﻠﻲ :‬

                                                                                          ‫- ﻋﺒـﺎراة اﻟـ ‪. if‬‬
                                                                                       ‫- ﻋﺒـﺎراة اﻟـ ‪. else‬‬
                                                                                     ‫- ﻋﺒـﺎراة اﻟـ ‪. elseif‬‬
                                                                                   ‫- ﻋﺒـﺎراة اﻟـ ‪. switch‬‬
                                                                                 ‫- ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪. while‬‬
                                                                                    ‫- ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪. for‬‬
                                                                              ‫- ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪. do while‬‬

                                                                                     ‫- ﻋﺒـﺎراة اﻟـ ‪: if‬‬
‫اﺳﺘﺨﺪام اﻟـ ‪ if‬ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺴﻜﺮﺑﺎت ﺷﻲ أﺳﺎﺳﻲ ، وﻛﻤﺎ ﻓﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻷﺧﺮى ﻓﺈن اﻟـ ‪ PHP‬ﺗﺘﺒﻊ ﻧﻔﺲ‬
          ‫ﺎ‬
 ‫اﻻﺳﻠﻮب ﻓﻲ ﻛﺘﺎﺑﺔ اﻟـ ‪ ، if‬ﻓﯿﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺷﺮط ﻣﻌﯿﻦ ﻣﻘﺘﺮن ﺑﺎﻟـ ‪ if‬وﺑﺎﻟﺘﺎﻟﻲ اذا ﻛﺎن اﻟﺸﺮط ﺻﺤﯿﺤً ) ‪( true‬‬
‫ﻓﺴﯿﺘﻢ ﺗﻨﻔﯿﺬ اﻻﺳﻄﺮ اﻟﻤﺤﺪدة ، وﺑﺘﻔﺼﯿﻞ أﻛﺜﺮ ﻳﺠﺐ وﺿﻊ اﻟﺸﺮط ﺑﯿﻦ ﻗﻮﺳﯿﻦ ) ( ، ووﺿﻊ اﻻﺳﻄﺮ اﻟﻤﻄﻠﻮب‬
‫ﺗﻨﻔﯿﺬھﺎ ﺑﯿﻦ اﻟﻌﻼﻣـﺎت } { ، ﻣﻊ ﻣﻼﺣﻈﺔ أﻧﻪ ﻳﻤﻜﻦ اﻟﺘﺨﻠﻲ ﻋﻦ اﻟﻌﻼﻣﺎت } { ﻓﻲ ﺣﺎل وﺟﻮد ﺳﻄﺮ واﺣﺪ ﻓﻘﻂ‬
                                                                                                      ‫.‬

 ‫ﻓﻠﻨﻔﺘﺮض وﺟﻮد ﻧﻤﻮذج ﺑﺮﻳﺪي ) ‪ ، ( Mail Fourm‬ﻳﺤﺘﻮي ﻋﻠﻰ اﻹﺳﻢ واﻟﺒﺮﻳﺪ واﻟﺮﺳﺎﻟﺔ ، وﻧﺮﻏﺐ ﻓﻲ ﻣﻌﺮﻓﺔ ﻣﺎ‬
‫اذا ﻛﺎن اﻟﻤﺮﺳﻞ ﻗﺪ ﻣﻸ ﺟﻤﯿﻊ اﻟﺤﻘﻮل وﺑﺎﻟﺘﺎﻟﻲ إرﺳـﺎل اﻟﺮﺳـﺎﻟﺔ ، او اﻧﻪ ﻟﻢ ﺑﻔﻌﻞ ذﻟﻚ وﺑﺎﻟﺘﺎﻟﻲ ﻋﺮض رﺳـﺎﻟﺔ‬
                                                                                                 ‫ﻼ‬
          ‫) ﻓﻀ ً ﻗﻢ ﺑﺘﻌﺒﺌﺔ اﻟﺒﯿـﺎﻧﺎت ﻛﺎﻣﻠﺔ ( ، ﻟﻌﻤﻞ ذﻟﻚ ﻧﺤﺘﺎج ﻣﻌﺮﻓﺔ أﺳﻤـﺎء اﻟﻤﺘﻐﯿﺮات ﻓﻲ اﻟﻨﻤﻮذج ، وﻟﺬﻟﻚ‬
                                                                       ‫ﻓﻠﻨﻔﺘﺮض أن اﻟﻤﺘﻐﯿﺮات ﻛﺎﻟﺘﺎﻟﻲ :‬
       ‫ﻳ‬
‫) اﻹﺳﻢ ‪ ) ، ( $name‬اﻟﺒﺮﻳﺪ ‪ ) ، ( $email‬اﻟﺮﺳـﺎﻟﺔ ‪ ، ( $later‬وﻟﻌﻤﻞ اﻟﺸﺮط اﻷول ) اذا ﻛﺎن اﻹﺳﻢ ﻟﻢ ُﺪﺧﻞ‬
                                                                          ‫ﻓﻠﻦ ﻳﺘﻢ ارﺳـﺎل اﻟﺮﺳـﺎﻟﺔ ( :‬
‫?<‬
  ‫) "" == ‪if ( $name‬‬
                               ‫ﻼ‬
  ‫" ‪ echo‬ﻓﻀ ً ﻗﻢ ﺑﺘﻌﺒﺌﺔ اﻟﺒﯿـﺎﻧﺎت ﻛﺎﻣﻠﺔ ;"‬
  ‫>?‬
         ‫واﻟﻤﻌﻨﻰ أﻧﻪ إذا ﻛﺎن اﻟﻤﺘﻐﯿﺮ ‪ $name‬ﻻ ﻳﺤﺘﻮي ﻋﻠﻰ أي ﻗﯿﻤﺔ ) أي ﻓﺮاغ ( ﻓﺴﯿﺘﻢ ﺗﻨﻔﯿﺬ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ‬
       ‫وﻃﺒـﺎﻋﺔ اﻟﺠﻤﻠﺔ ، ﻣﻊ ﻣﻼﺣﻈﺔ أن اﻟﻤﻄﻠﻮب ﺗﻨﻔﯿﺬه ھﻢ ﺳﻄﺮ واﺣﺪ ﻓﻘﻂ وﻟﺬﻟﻚ ﻟﻢ ﻧﺴﺘﺨﺪم } { ، ﺑﻞ ﻓﻲ‬
                                                    ‫ﺣﺎﻟﺔ وﺟﻮد أﻛﺜﺮ ﻣﻦ ﺳﻄﺮ ﻳﺠﺐ اﺳﺘﺨﺪاﻣﮫﺎ ﻛﺎﻟﺘﺎﻟﻲ :‬
‫?<‬
‫{ ) "" == ‪if ( $name‬‬
                                    ‫ﻼ‬
‫" ‪echo‬ﻓﻀ ً ﻗﻢ ﺑﺘﻌﺒﺌﺔ اﻟﺒﯿـﺎﻧﺎت ﻛﺎﻣﻠﺔ ;" >‪<br‬‬
  ‫" ‪echo‬ﻟﻢ ﺗﻘﻢ ﺑﺈدﺧـﺎل اﻹﺳﻢ ;"‬
‫}‬
‫>?‬

                                                                                 ‫- ﻋﺒـﺎراة اﻟـ ‪: else‬‬
      ‫ھﺬه اﻟﻌﺒـﺎرة ﺗﺘﯿﺢ اﻣﻜﺎﻧﯿﺔ وﺟﻮد اﺟﺮاء ﺛﺎﻧﻲ ﻟﻌﺪم ﺗﺤﻘﻖ اﻟﺸﺮط ، ﻓﻔﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ ﻛﺎن اﻻﺟﺮاء ﻃﺒﺎﻋﺔ‬
  ‫اﻟﺠﻤﻠﺔ اذا ﺗﺤﻘﻖ اﻟﺸﺮط ، وﻟﻜﻦ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻠﻦ ﻳﻜﻮن ھﻨﺎك اﺟﺮاء ﻟﺘﻨﻔﯿﺬه ، ﺑﻞ ان اﻻﺟﺮاء‬
         ‫ﺳﯿﺘﻢ ﺗﻨﻔﯿﺬه اذا ﺗﺤﻘﻖ اﻟﺸﺮط وﻣﻦ ﺛﻢ ﺳﯿﺘﻢ اﻛﻤﺎل ﺑﻘﯿﺔ اﻻﺳﻄﺮ ، وﻓﻲ ﺣﺎﻟﺔ ﻣﺜﻞ ھﺬه اﻟﺤﺎﻟﺔ ﻳﺘﻢ‬
                     ‫اﺳﺘﺨﺪام اﻟـ ‪ else‬ﻟﻮﺿﻊ اﺟﺮاء آﺧﺮ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ اﻟﺸﺮط ، وﺑﺎﻟﻤﺜﺎل ﻳﺘﻀﺢ اﻟﻤﻘﺎل :‬
‫?<‬
‫{ ) "" == ‪if ( $name‬‬
                             ‫ﻼ‬
‫" ‪echo‬ﻓﻀ ً ﻗﻢ ﺑﺘﻌﺒﺌﺔ اﻟﺒﯿـﺎﻧﺎت ﻛﺎﻣﻠﺔ ;"‬
‫}‬
‫‪else‬‬
‫{‬
‫" ‪echo‬ﺗﻢ ارﺳـﺎل اﻟﺮﺳـﺎﻟﺔ ، ﺷﻜﺮا ﻟﻚ ;"‬
‫}‬
‫>?‬
                                                            ‫ﻼ‬
‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ )ﻓﻀ ً ﻗﻢ ﺑﺘﻌﺒﺌﺔ اﻟﺒﯿـﺎﻧﺎت ﻛﺎﻣﻠﺔ ( اذا ﺗﺤﻘﻖ اﻟﺸﺮط أن اﻟﻤﺘﻐﯿﺮ ‪$name‬‬
   ‫ﻻ ﻳﺤﺘﻮي ﻋﻠﻰ أي ﻗﯿﻤﺔ ، وﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ )ﺗﻢ ارﺳـﺎل اﻟﺮﺳـﺎﻟﺔ ، ﺷﻜﺮا ﻟﻚ ( ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺤﻘﻖ‬
   ‫اﻟﺸﺮط ، أي ﻓﻲ ﺣﺎﻟﺔ وﺟﻮد ﻗﯿﻤﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ‪ ، $name‬ﻣﻊ ﻣﻼﺣﻈﺔ أن ھﺬا اﻟﻤﺜﺎل ﻳﺤﺘﻮي ﻋﻠﻰ ﺷﺮﻃﯿﻦ‬
              ‫ﺎ‬
‫وﻟﯿﺲ ﺷﺮط واﺣﺪ ، ﻓﺎﻟﻈﺎھﺮ ھﻮ ﺷﺮط واﺣﺪ ) "" == ‪ ( $name‬وﻟﻜﻦ اﻟﻌﺒـﺎرة ‪ else‬ﺗﻌﺘﺒﺮ ﺷﺮﻃً ﺑﺤﺪ ذاﺗﮫﺎ وﻟﻮ‬
                                                                           ‫ﺎ‬
‫ﻟﻢ ﻳﻜﻦ ھﺬا اﻟﺸﺮط ﻣﻜﺘﻮﺑً ، وﻛﻤﺎ ھﻮ واﺿﺢ ﻓﻤﻌﻨﻰ ھﺬا اﻟﺸﺮط ھﻮ ) إذا ﻛﺎن ﻏﯿﺮ ذﻟﻚ ( ﻓﻘﻢ ﺑﻄﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ‬
                                                                                                ‫.‬

                                                             ‫ﺎ‬
   ‫ﻳﻤﻜﻦ أن ﻳﻜﻮن اﻟﺸﺮح ﻏﯿﺮ واﺿﺢ ﺗﻤﺎﻣً ، وﻟﻜﻦ أھﻤﯿﺔ ﻓﮫﻢ اﻟﻄﺮﻳﻘﺔ ﺳﺘﺘﻀﺢ ﻓﻲ اﻷﺳﻄﺮ اﻟﻘﻠﯿﻠﺔ اﻟﻘﺎدﻣﺔ .‬

                                                                                      ‫- ﻋﺒـﺎراة اﻟـ ‪: elseif‬‬
  ‫ﻓﻲ اﻟﻌﺒﺎرة اﻟﺴﺎﺑﻘﺔ ذﻛﺮﻧﺎ أﻧﻪ ﻳﻮﺟﺪ ﺷﺮﻃﯿﻦ واﺟﺮاﺋﯿﻦ ، أﺣﺪ ھﺬﻳﻦ اﻟﺸﺮﻃﯿﻦ ﻏﯿﺮ ﻣﻜﺘﻮب ﺑﻞ ھﻮ ﻣﻔﮫﻮم ﻣﻦ‬
   ‫ادراج اﻟﻌﺒـﺎرة ‪ ، else‬وﻓﻲ ﺣﺎﻻت ﻛﺜﯿﺮة ﻻ ﻳﻜﻔﯿﻨﺎ ﻣﺠﺮد ﺷﺮﻃﯿﻦ واﺟﺮاﺋﯿﻦ ﻻﺗﻤﺎم ﺑﻌﺾ اﻟﺴﻜﺮﺑﺎت اﻟﻤﻌﻘﺪة ،‬
    ‫ﻓﻠﺬﻟﻚ ﻳﻤﻜﻦ ﻧﺴﺘﺨﺪم اﻟﻌﺒـﺎرة ‪ elseif‬ﻣﻊ اﻟـ ‪ if‬ﻟﻌﻤﻞ ﻣﺜﻞ ھﺬه اﻟﺴﻜﺮﺑﺎت ، ﻓﻠﻮ اﻓﺘﺮﺿﻨﺎ أن ﻟﺪﻳﻨﺎ ﻋﺪاد ﻟﺰوار‬
    ‫اﻟﻤﻮﻗﻊ وﻧﺮﻳﺪ اﻇﺎھﺮ اﻟﻌﺪاد ﺑﺤﯿﺚ ﻳﺘﻢ ﻗﺮاءﺗﻪ ﺑﺸﻜﻞ ﺟﯿﺪ ، اي ﺑﻤﻌﻨﻲ اﺧﺮ اذا ﻛﺎن ﻋﺪد اﻟﺰوار ) 1 ( ﻓﺴﯿﺘﻢ‬
‫ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ ) ﻋﺪد اﻟﺰوار : زاﺋﺮ واﺣﺪ ﻓﻘﻂ ( واذا ﻛﺎن ) 2 ( ﻓﺴﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ ) ﻋﺪد اﻟﺰوار : زاﺋﺮﻳﻦ ( ...‬
 ‫وﻗﺲ ﻋﻠﻰ ذﻟﻚ ، ﻓﻌﻨﺪﻣﺎ ﻳﻜﻮن ﻋﺪد اﻟﺰوار ) 1 ( ﻓﺴﯿﺘﻢ ﻋﺮض اﻟﺠﻤﻠﺔ اﻷوﻟﻰ ﻓﻘﻂ وﻋﻨﺪﻣﺎ ﻳﻜﻮن ﻋﺪد اﻟﺰوار )‬
                                              ‫2 ( ﻓﺴﯿﺘﻢ ﻋﺮض اﻟﺠﻤﻠﺔ اﻟﺜﺎﻧﯿﺔ ﻓﻘﻂ ، وھﻜﺬا ﻟﺒﻘﯿﺔ اﻟﺸﺮوط .‬

                    ‫ﺎ‬
                  ‫ﺑﺎﻓﺘﺮاض أن اﻟﻤﺘﻐﯿﺮ ) ‪ ( $counter‬ھﻮ ﻋﺪاد اﻟﺰوار ، ﻓﺎﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻳﺒﯿﻦ ﻣﺎ ﺗﻢ ﺷﺮﺣﻪ ﺳﺎﺑﻘً :‬
‫?<‬
‫{ ) 1 == ‪if ( $counter‬‬
 ‫" ‪echo‬ﻋﺪد اﻟﺰوار : زاﺋﺮ واﺣﺪ ﻓﻘﻂ ;"‬
‫}‬
‫{ ) 2 == ‪elseif ( $counter‬‬
 ‫" ‪echo‬ﻋﺪد اﻟﺰوار : زاﺋﺮﻳﻦ ;"‬
‫}‬
‫{ ) 01 =< ‪elseif ( $counter >= 3 && $counter‬‬
‫" ‪echo‬ﻋﺪد اﻟﺰوار ‪ : $counter‬زوار ;"‬
‫}‬
‫{ ‪else‬‬
‫" ‪echo‬ﻋﺪد اﻟﺰوار ‪ : $counter‬زاﺋﺮ ;"‬
‫}‬
‫>?‬
                                                        ‫ﻛﻤﺎ ھﻮ واﺿﺢ ﻓﻲ اﻟﻤﺜـﺎل اﻟﺴﺎﺑﻖ ﺳﯿﺘﻢ ﻣﺎ ﻳﻠﻲ :‬

                                                                                  ‫اﻟﺸﺮط : اﻟﻌﺪاد ﻳﺴﺎوي 1‬
                                                           ‫اﻹﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : زاﺋﺮ واﺣﺪ ﻓﻘﻂ (‬
                                                                                  ‫اﻟﺸﺮط : اﻟﻌﺪاد ﻳﺴﺎوي 2‬
                                                                    ‫اﻹﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : زاﺋﺮﻳﻦ (‬
                                                    ‫اﻟﺸﺮط : اﻟﻌﺪاد أﻛﺒﺮ أو ﻳﺴﺎوي 3 و اﺻﻐﺮ أو ﻳﺴـﺎوي 01‬
                                                           ‫اﻹﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : ) اﻟﻌﺪاد ( زوار (‬
                                                                  ‫اﻟﺸﺮط : اﻟﻌﺪاد ﻻ ﻳﺤﻘﻖ أي ﻣﻦ اﻟﺸﺮوط‬
                                                           ‫اﻹﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : ) اﻟﻌﺪاد ( زاﺋﺮ (‬

  ‫ﻣﻼﺣﻈﺔ ﺑﺴﯿﻄﺔ ﻓﻘﻂ ، وھﻲ ﻋﻠﻰ اﻟﻌﻼﻣﺔ && اﻟﺘﻲ ﺗﻌﻨﻲ ) و ( ، وھﻲ ﻣﻦ ﻋﻼﻣﺎت اﻟﺠﻤﻊ ﺑﯿﻦ ﺟﻤﻠﺘﯿﻦ ،‬
                                               ‫ﻓﯿﺠﺐ أن ﺗﻜﻮن اﻟﺠﻤﻠﺘﯿﻦ ﺻﺤﯿﺤﺘﯿﻦ ﻟﺘﺤﻘﻖ اﻟﺸﺮط .‬

                                                                             ‫- ﻋﺒـﺎراة اﻟـ ‪: switch‬‬
                                                                              ‫ا‬
 ‫ھﺬه اﻟﻌﺒـﺎرة ﻗﺮﻳﺒﺔ ﺟﺪً ﻣﻦ اﻟﻌﺒـﺎرة ‪ ، if‬وﻟﻜﻦ ﻳﻤﻜﻦ اﺳﺘﺨﺪام اﻛﺜﺮ ﻣﻦ ﺷﺮﻃﺮﻳﻦ ﺑﺎﺳﻠﻮب أﺧﺮ ، ﻏﯿﺮ اﻧﻪ ﻳﺠﺐ‬
     ‫اﺳﻨﺎد ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻟﻠـ ‪ case‬وھﻲ ھﻨﺎ ﺑﻤﺜﺎﺑﺔ اﻟﺸﺮط ، ﻟﻜﻲ ﻳﺘﻢ ﺗﻨﻔﯿﺬ اﻻﺟﺮاء اﻟﻤﺤﺪد ﻟﺬﻟﻚ اﻟﺸﺮط أو اﻟـ‬
  ‫‪ ، case‬وﻓﻲ اﻟﻨﮫﺎﻳﺔ اﻷﻣﺮ ﻳﻌﻮد اﻟﻰ اﻟﻤﺼﻤﻢ واﻳﮫﻤﺎ ﻳﻔﻀﻞ ، وﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻣﺜﺎل ﺑﺎﻟـ‬
  ‫‪ switch‬ﺑﻨﻔﺲ اﻟﻄﺮﻳﻘﺔ ، واﻟﻤﺸﻜﻠﺔ اﻟﻮﺣﯿﺪة ھﻲ ﻛﻤﺎ ﻗﻠﻨﺎ أﻧﻪ ﻳﺠﺐ اﺳﻨﺎد ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ﻟﻜﻞ ‪ case‬وﺑﺎﻟﺘﺎﻟﻲ‬
 ‫ﻓﺈن اﻟﺸﺮط اﻟﺜﺎﻟﺚ ﻣﻦ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻳﺠﺐ ﺗﻔﺮﻳﻘﻪ ﻟﻜﻞ ﻗﯿﻤﺔ ﻣﻦ ) 3 اﻟﻰ 01 ( ، وھﺬه اﻟﻌﻤﯿﻠﺔ ﻣﺠﮫﺪة ﻻﻧﻪ‬
                                                             ‫ﻳﺠﺐ ﻛﺘﺎﺑﺔ ﺳﻄﺮ ﻟﻜﻞ ﻗﯿﻤﺔ ﻛﻤﺎ ﻳﻠﻲ :‬

                                                                                                  ‫اﻟﻘﯿﻤﺔ : 3‬
                                                                                                 ‫اﻟـ 3 : ‪case‬‬
                                                            ‫اﻻﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : ) اﻟﻌﺪاد ( زوار (‬
                                                                                                  ‫اﻟﻘﯿﻤﺔ : 4‬
                                                                                                 ‫اﻟـ 4 : ‪case‬‬
                                                            ‫اﻻﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : ) اﻟﻌﺪاد ( زوار (‬
                                                                                                  ‫اﻟﻘﯿﻤﺔ : 5‬
                                                                                                 ‫اﻟـ 5 : ‪case‬‬
                                                            ‫اﻻﺟﺮاء : ﻃﺒـﺎﻋﺔ ) ﻋﺪد اﻟﺰوار : ) اﻟﻌﺪاد ( زوار (‬
                                                                                              ‫......... اﻟﺦ ...‬

   ‫وﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﺳﺎﺗﻐﺎﺿﻰ ﻋﻦ اﻟﺸﺮط اﻟﺜﺎﻟﺚ ﺑﻜﺎﻣﻠﻪ ، واذﻛﺮ ﺑﻘﯿﺔ اﻟﺸﺮوط واﻟﺤﺎﻻت ﻟﻤﺠﺮد ﻓﮫﻢ ﻃﺮﻳﻘﺔ‬
                                                                                        ‫ﻋﻤﻞ ھﺬه اﻟﻌﺒـﺎرة :‬
‫?<‬
‫)‪switch ($counter‬‬
‫{‬
‫;"1" ‪case‬‬
 ‫" ‪echo‬ﻋﺪد اﻟﺰوار : زاﺋﺮ واﺣﺪ ﻓﻘﻂ ;"‬
‫;‪break‬‬
‫;"2" ‪case‬‬
 ‫" ‪echo‬ﻋﺪد اﻟﺰوار : زاﺋﺮﻳﻦ ;"‬
‫;‪break‬‬
‫;‪default‬‬
‫" ‪echo‬ﻋﺪد اﻟﺰوار ‪ : $counter‬زاﺋﺮ ;"‬
‫;‪break‬‬
‫}‬
‫>?‬
                                                    ‫اﺳﺘﺨﺪﻣﻨﺎ ﻓﻲ ھﺬه اﻟﻤﺜﺎل ﺑﻌﺾ اﻟﺠﻤﻞ وﺗﻌﻨﻲ ﻣﺎ ﻳﻠﻲ :‬
                           ‫‪ Switch‬وﺗﻜﺘﺐ ﻓﻲ اﻟﺒﺪاﻳﺔ ﻣﻊ ادراج اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺳﯿﺘﻢ ﻋﻤﻞ اﻟﺸﺮوط ﻋﻠﯿﻪ .‬
                                                          ‫‪ Case‬أي ﻓﻲ ﺣﺎﻟﺔ ) .... ( وﻳﻜﺘﺐ ﺑﺠﺎﻧﺒﮫﺎ اﻟﺸﺮط .‬
                                   ‫‪ Break‬وﺗﻌﻨﻲ اﻳﻘﺎف اﻟﻌﻤﻠﯿﺔ واﻟﺨﺮوج ﻣﻦ اﻟﺸﺮط ﺑﻌﺪ ﺗﻨﻔﯿﺬ أﺣﺪ اﻹﺟﺮاءات .‬
                      ‫‪ Defaukt‬وھﻲ ﺗﻘﺎﺑﻞ اﻟﻌﺒـﺎرة ‪ else‬أي ﺑﻤﻌﻨﻰ أﻧﮫﺎ ﻷي ﺣﺎﻟﺔ ﻟﻢ ﻳﺘﻢ ذﻛﺮھﺎ ﻓﻲ اﻟﺸﺮوط .‬

                                                                              ‫- ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪: while‬‬
   ‫وھﻲ اﺑﺴﻂ ﺣﻠﻘﺎت اﻟﺘﻜﺮار ﻋﻠﻰ اﻷﻃﻼق ، ﺑﺤﯿﺚ ﺗﺎﺧﺬ ﺷﺮط واﺣﺪ ﻓﻘﻂ وﺗﺒﻨﻲ ﻋﻠﻰ ﺗﻨﻔﯿﺬ ﻣﺎ ﺑﯿﻦ ﻋﻼﻣﺎت‬
     ‫ﺎ‬
   ‫اﻟﺸﺮوط } { ، واﻟﻔﺮق اﻟﻮﺣﯿﺪ ﺑﯿﻨﮫﺎ وﺑﯿﻦ اﻟـ ‪ if‬ھﻮ اﻧﮫﺎ ﺳﺘﻘﻮم ﺑﺘﻨﻔﯿﺬ اﻻﺟﺮاءات ﻃﺎﻟﻤﺎ ﻛﺎن اﻟﺸﺮط ﺻﺤﯿﺤً ،‬
 ‫وھﺬا ﻳﻌﻨﻲ اﺣﺘﻤﺎل ﺗﻨﻔﯿﺬ اﻹﺟﺮاء أﻛﺜﺮ ﻣﻦ ﻣﺮة ، وھﺬ اﻟﺪاﻟﺔ ﻣﻔﯿﺪة ﻓﻲ ادراج اﻟﺤﻘﻮل ﻣﻦ اﻟﺠﺪوال وﻏﯿﺮھﺎ ﻣﻦ‬
         ‫اﻻﺳﺘﺨﺪاﻣﺎت ، ﺑﺤﯿﺚ ﻟﻮ اﻓﺘﺮﺿﻨﺎ وﺟﻮد ﺟﺪول ﻣﻌﯿﻦ ﻓﻲ ﻗﺎﻋﺪ ﺑﯿﺎﻧﺎت وﻧﺮﻳﺪ ادراﺟﻪ ﻓﻲ ﺻﻔﺤﺔ ‪، PHP‬‬
     ‫ﻓﺴﯿﻜﻮن ﻣﻦ اھﻢ ﺧﯿﺎرات اﻻﺳﺘﺨﺪام ھﺬه اﻟﺪاﻟﺔ ، وﺑﺎذن اﷲ ﺳﯿﺘﻢ اﻟﺘﻄﺮق ﻟﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺪروس‬
               ‫اﻟﻘﺎدﻣﺔ ، وﻓﻲ اﻟﻮﻗﺖ اﻟﺤﺎﻟﻲ ﺳﺎذﻛﺮ ﻣﺜﺎل ﺑﺴﯿﻂ ﻋﻠﻰ ھﺬه اﻟﺪاﻟﺔ ﻟﻔﮫﻢ ﻃﺮﻳﻘﺔ اﺳﺘﺨﺪاﻣﮫﺎ :‬
‫?<‬
‫;01 = ‪$total‬‬
‫) 05 =< ‪while ( $total‬‬
‫{‬
‫" ‪echo‬اﻟﻌﺪد أﻗﻞ ﻣﻦ 05 ;">‪<br‬‬
‫;01=+ ‪$total‬‬
‫}‬
‫>?‬
  ‫ﻛﯿﺮ ﺑﺴﯿﻂ ﻳﻤﻜﻦ ﻣﻌﺮﻓﺔ أن اﻟﺠﻤﻠﺔ ) اﻟﻌﺪد أﻗﻞ ﻣﻦ 05 ( ﺳﯿﺘﻢ ﻃﺒﺎﻋﺘﮫﺎ 5 ﻣﺮات ، ﻻن ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪while‬‬
     ‫ﻗﺎﻣﺖ ﺑﺘﻨﻔﯿﺬ اﻻﺟﺮاء ﻃﺎﻟﻤﺎ أن اﻟﺸﺮط ﺻﺤﯿﺢ ، وﻓﻲ اﻟﻤﺮة اﻷوﻟﻰ ﻛﺎن اﻟﻤﺘﻐﯿﺮ ) ‪ ( $total‬ﻳﺴﺎوي ) 01 (‬
                                                                ‫ﻼ‬
 ‫واﻟﺸﺮط ﺻﺤﯿﺢ ﻻن اﻟـ ) ‪ ( $total‬ﻓﻌ ً اﺻﻐﺮ أو ﻳﺴﺎوي اﻟـ ) 05 ( ، ﻓﺘﻢ ﺗﻨﻔﯿﺬ ﻣﺎ ﺑﯿﻦ ﻋﻼﻣﺎت اﻟﺸﺮط ، وﻣﻦ‬
  ‫ذﻟﻚ زﻳﺎدة ﻣﺘﻐﯿﺮ اﻟﻤﺠﻤﻮع ) ‪ ( $total‬ﺑﻘﯿﻤﺔ ) 01 ( وﻣﻦ ﺛﻢ اﻟﺮﺟﻮع واﻟﻤﻘﺎرﻧﺔ ﻣﻦ ﺟﺪﻳﺪ ، وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ‬
                                                           ‫ﺎ‬
  ‫ﺻﺎر اﻟﻤﺘﻐﯿﺮ ) ‪ ( $total‬ﻳﺴﺎوي ) 02 ( وأﻳﻀـً اﻟﺸﺮط ﺻﺤﯿﺢ وﺑﺎﻟﺘﺎﻟﻲ اﻟﺪﺧﻮل ﻣﺮة أﺧﺮى وﺗﻨﻔﯿﺬ اﻷﺟﺮاء ....‬
 ‫وھﻜﺬا ﺣﺘﻰ ﻳﺘﻢ اﻟﻮﺻﻮل اﻟﻰ أن ﻗﯿﻤﺔ اﻟـ ) ‪ ( $total‬ﻳﺴﺎوي ) 05 ( وﺑﺎﻟﺘﺎﻟﻲ اﻟﺸﺮط ﺻﺤﯿﺢ ، وﻣﻦ ﺛﻢ ﺗﺼﺒﺢ‬
     ‫ﻗﯿﻤﺔ اﻟـ ) ‪ ( $total‬ﺗﺴﺎوي ) 06 ( وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻳﺘﻢ اﻳﻘﺎف ﺗﻨﻔﯿﺬ اﻻﺟﺮاءات ﻷن اﻟﺸﺮط ﻏﯿﺮ ﺻﺤﯿﺢ .‬

                                                                                 ‫- ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪: for‬‬
       ‫ﻳﻮﺟﺪ ﻃﺮﻳﻘﺔ أﺳﮫﻞ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ، ﻓﺎﺳﺘﺨﺪام ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪ while‬ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ اﻻﺑﺘﺪاﺋﯿﺔ‬
  ‫ﻟﻠﻤﺘﻐﯿﺮ ) ‪ ( $total‬ﻓﻲ ﺳﻄﺮ ، واﻟﺸﺮط ﻓﻲ ﺳﻄﺮ واﻟﺰﻳـﺎدة ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﺳﻄﺮ أﺧﺮ ، وﺑﺎﻟﺘﺎﻟﻲ زﻳﺎرة ﻓﻲ‬
   ‫ﻋﺪد اﻷﺳﻄﺮ ﻋﻦ ﻣﺎ ﻳﻤﻜﻦ اﺳﺘﺨﺪاﻣﻪ ﻣﻊ ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪ ، for‬ﻓﺎﻟﻤﺜـﺎل اﻟﺘﺎﻟﻲ ﻳﺒﯿﻦ ﻃﺮﻳﻘﺔ أﺧﺮى ﻻﺳﺘﺨﺪام‬
                                                                         ‫ﻣﺜـﺎل اﻟـ ‪ while‬ﺑﻄﺮﻳﻘﺔ أﺳﮫﻞ :‬
‫?<‬
‫) 01=+ ‪for ( $total = 10; $total <=50; $total‬‬
‫{‬
‫" ‪echo‬اﻟﻌﺪد أﻗﻞ ﻣﻦ 05 ;">‪<br‬‬
‫}‬
‫>?‬
                                                     ‫وﻟﻠﺘﻮﺿﯿﺢ ﻓﺎن ﺗﺮﻛﯿﺐ اﻟـ ‪ for‬ھﻮ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :‬
‫) ;اﻟﻘﯿﻤﺔ اﻷﻓﺘﺮاﺿﯿﺔ; اﻟﺸـﺮط; ﻣﻘﺪار اﻟﺰﻳـﺎدة ( ‪for‬‬
‫{‬
‫اﻹﺟﺮاء اﻟﻤﻄﻠﻮب ﺗﻨﻔﯿﺬه‬
‫}‬

                                                                      ‫- ﺣﻠﻘﺔ اﻟﺘﻜﺮار ‪: do while‬‬
     ‫وھﻲ ﻧﺴﺨﺔ أﺧﺮى ﻣﻦ اﻟـ ‪ while‬واﻟﻔﺮق اﻟﻮﺣﯿﺪ ﺑﯿﻨﮫﻤﺎ أن اﻟﺘﺄﻛﺪ ﻣﻦ اﻟﺸﺮط وﺻﺤﺘﻪ ﻣﻦ ﻋﺪﻣﮫﺎ ﻳﺘﻢ ﺑﻌﺪ‬
                                           ‫ﺗﻨﻔﯿﺬ اﻻﺟﺮاء وﻟﯿﺲ ﻗﺒﻠﻪ ﻛﻤﺎ ﻓﻲ اﻟـ ‪ while‬وﻛﻤﺜﺎل ﻋﻠﯿﮫﺎ :‬
‫?<‬
‫;01 = ‪$total‬‬
‫‪do‬‬
‫{‬
‫;">‪<br‬اﻟﻌﺪد أﻗﻞ ﻣﻦ 05" ‪echo‬‬
‫;01=+ ‪$total‬‬
‫}‬
‫;) 05 =< ‪while ( $total‬‬
‫>?‬
                                                            ‫وﻓﻲ ﻧﮫﺎﻳﺔ اﻟﺪرس اﺗﻤﻨﻰ اﻟﻔﺎﺋﺪة ﻟﻠﺠﻤﯿﻊ‬
     ‫ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ واﻟﺼﻼة واﻟﺴﻼم ﻋﻠﻰ اﺷﺮف اﻻﻧﺒﯿﺎء واﻟﻤﺮﺳﻠﯿﻦ اﻣﺎ ﺑﻌﺪ ، ﻓﻔﻲ ھﺬا اﻟﺪرس‬
          ‫ﺎ‬
  ‫ﺑﻤﺸﯿﺌﺔ اﷲ ﺗﻌﺎﻟﻰ ﺳﻨﺘﻄﺮق اﻟﻰ ﻣﻔﺎھﯿﻢ ﻋﺎﻣﺔ ﻋﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻋﻤﻮﻣﺎ وﻋﻦ اﻟـ ‪ Mysql‬ﺧﺼﻮﺻً ، ﻟﺘﻜﻮن‬
                                                    ‫ﺑﺪاﻳﺔ ﻓﮫﻢ ﻟﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﮫﺎﻣﺔ ﻷي ﻟﻐﺔ ﺑﺮﻣﺠﺔ .‬

‫ﻓﻲ اﻟﺒﺪاﻳﺔ ﺳﻨﺘﻌﺮف ﻋﻠﻰ ﻣﺼﻄﻠﺢ اﻟـ ‪ ، RDBMS‬وﻧﻌﻨﻲ ﺑﺬﻟﻚ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻌﻼﺋﻘﯿﺔ ، واﻟﺘﻲ ﻣﻦ ﺧﺼﺎﺋﺼﮫﺎ‬
   ‫ﺳﮫﻮﻟﺔ اﻟﻮﺻﻮل اﻟﻰ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﯿﮫﺎ ، وﺳﺮﻋﺔ اﺗﻤﺎم ﻋﻤﻠﯿﺎت اﻻﺳﺘﻌﻼم اﻟﻤﺨﺘﻠﻔﺔ ، وﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ‬
                                                 ‫ﺎ‬
      ‫اﻟﻤﻤﯿﺰات اﻷﺧﺮى ﻓﺎن ھﺬه اﻟﻨﻮع ﻳﻌﺘﺒﺮ اﻷﻛﺜﺮ اﺳﺘﺨﺪاﻣ ً ﻓﻲ ﺟﻤﯿﻊ اﻟﺘﻄﺒﯿﻘﺎت ﺳﻮاء اﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﯿﻲ‬
                   ‫اﻻﻧﺘﺮﻧﺖ أو ذات اﻟﻄﺎﺑﻊ اﻟﺒﺮﻣﺠﻲ اﻟﺨﺎص ، وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻓﺈن اﻟـ ‪ Mysql‬ﻣﻦ ھﺬا اﻟﻨﻮع .‬

 ‫وﻣﻦ اﻟﻤﮫﻢ ﻣﻌﺮﻓﺔ ﺑﻌﺾ اﻻﺳﺎﺳﯿﺎت ﻓﻲ اﻟـ ‪ ، RDBMS‬واﻟﺘﻲ ﻣﻦ ﺷﺄﻧﮫﺎ ﺗﺴﮫﯿﻞ ﻋﻤﻠﯿﺔ ﻓﮫﻤﻚ اﻟﺘﺎم ﻟﻄﺮﻳﻘﺔ‬
                                                                      ‫ﻋﻤﻠﮫﺎ واﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ..‬

                                                                         ‫1- اﻟﺠﺪاول ‪: Tables‬‬
               ‫ﺗﻌﺘﺒﺮ أﻛﺒﺮ ﺟﺰء ﻓﻲ ﻗﺎﻋﺪ اﻟﺒﯿﺎﻧﺎت ، وھﻲ ﻋﺒﺎرة ﻋﻦ أﻋﻤﺪة وﺻﻔﻮف ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻢ ﻣﻌﯿﻨﺔ .‬
                                                                        ‫2- اﻷﻋﻤﺪة ‪: Columns‬‬
  ‫ﻟﻜﻞ ﻋﻤﻮد ﻓﻲ اﻟﺠﺪول أﺳﻢ ﺧﺎص ﻳﺨﺘﻠﻒ ﻋﻦ أﺳﻤﺎء اﻷﻋﻤﺪة اﻷﺧﺮى ﻓﻲ ﻧﻔﺲ اﻟﺠﺪول ، وﻳﺠﺐ ان ﻳﻜﻮن‬
 ‫ﻟﻜﻞ ﻋﻤﻮد ﻧﻮع ﺧﺎص ﺑﻪ ﻳﺼﻒ ﻧﻮع اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﺘﺨﺰن ﻓﯿﻪ ، وﻛﻢ ﻳﻈﮫﺮ ﻓﻲ اﻟﺼﻮرة ، ﻓﺎن ﻋﻤﻮد اﻟﺮﻗﻢ ﻣﻦ‬
                                     ‫اﻟﻨﻮع اﻟﺮﻗﻤﻲ ‪ ، Integer‬اﻣﺎ اﻟﺤﻘﻠﯿﻦ اﻵﺧﺮﻳﻦ ﻓﮫﻲ ﻧﺼﻮص ‪. Text‬‬


                                                                        ‫3- اﻟﺼﻔﻮف ‪: Rows‬‬
‫ﻛﻞ ﺻﻒ ﻣﻦ ﺻﻔﻮف اﻟﺠﺪول ﻳﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻢ ﻣﺨﺘﻠﻔﺔ وﻳﻤﺜﻞ ﻣﻌﻠﻮﻣﺎت ﻣﺘﻜﺎﻣﻠﺔ ﻋﻦ ﻗﻄﺎع ﻣﻌﯿﻦ ، وﻓﻲ ﻣﺜﺎﻟﻨﺎ‬
                                                        ‫ﻳﻤﺜﻞ ﻣﻌﻠﻮﻣﺎت ﻣﺘﻜﺎﻣﻠﺔ ﻋﻦ ﺳﺨﺺ ﻣﻌﯿﻦ .‬

                                                                              ‫4- اﻟﻘﯿﻢ ‪: Values‬‬
                                                    ‫وھﻲ ﻣﺎ ﺗﺤﺘﻮي ﻋﻠﯿﻪ ﺗﻘﺎﻃﻌﺎت اﻟﺼﻔﻮف ﺑﺎﻻﻋﻤﺪة .‬

                                                                             ‫5- اﻟﻤﻔﺎﺗﯿﺢ ‪: Keys‬‬
  ‫وﺗﻌﺘﺒﺮ ﻣﻦ اﺳﺎﻟﯿﺐ ﺗﺴﮫﯿﻞ اﻟﻮﺻﻮل اﻟﻰ اﻟﻤﻌﻮﻣﺎت ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ، وﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ ﻧﺮى أن اﻟﻌﻤﻮد‬
                                                        ‫ﺎ‬
     ‫‪ Id‬ﻳﺤﺘﻮي ﻋﻠﻰ ارﻗﺎم ﻣﺘﺴﻠﺴﻠﺔ ﻻ ﺗﺘﻜﺮر ﻧﮫﺎﺋﯿً ﺑﻞ أﻧﮫﺎ ﺗﺘﻜﻮن ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ ﻋﻨﺪ ادراج أي ﺻﻒ ﺟﺪﻳﺪ‬
    ‫ﻟﻠﺠﺪول ، وﺑﺎﻟﺘﺎﻟﻲ ﻓﺈﻧﮫﺎ ﺗﻌﺘﺒﺮ اﻟﻤﻔﺘﺎح اﻟﻤﻨﺎﺳﺐ ﻟﻜﻞ ﺻﻒ ﻣﻦ ﺻﻔﻮف اﻟﺠﺪول ﻟﻀﻤﺎن ﻋﺪم اﻻﻟﺘﺒﺎس ﻓﻲ‬
                                                                                 ‫اﺧﺘﯿﺎر اﻟﺼﻔﻮف .‬

   ‫ﻓﻠﻮ اﻓﺘﺮﺿﻨﺎ أن ﻟﺪﻳﻨﺎ ﺟﺪوﻟﯿﻦ ﻓﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ، ﻳﺤﺘﻮي اﻟﺠﺪول اﻷول ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺪروس ﻣﻔﺼﻠﺔ‬
                                             ‫ﻋﻠﻰ ﻋﺪة ﺣﻘﻮل ﻟﺘﻠﻚ اﻟﺪروس ، ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل :‬
                                 ‫اﻟﺮﻗﻢ ) ‪ ، ( id‬اﻟﺪرس ) ‪ ، ( lesson‬رﻗﻢ اﻟﻜﺎﺗﺐ ) ‪.. ( Key_author‬‬
                                           ‫وﻳﺤﺘﻮي اﻟﺠﺪول اﻟﺜﺎﻧﻲ ﻋﻠﻰ ﺑﯿﺎﻧﺎت اﻷﻋﻀـﺎء ﻛﻤﺎ ﻳﻠﻲ :‬
                                                      ‫اﻟﺮﻗﻢ ) ‪ ، ( Key_author‬اﻻﺳﻢ ) ‪.. ( name‬‬

  ‫واﻟﻤﻄﻠﻮب ھﻮ ﻃﺮﻳﻘﺔ ﻟﺮﺑﻂ اﻟﺠﺪوﻟﯿﻦ ، ﺑﺤﯿﺚ أن رﻗﻢ اﻟﻜﺎﺗﺐ ﻓﻲ ﺟﺪول اﻟﺪروس ) ‪ ( Key_author‬ﻳﺪل ﻋﻠﻰ‬
                                                     ‫اﺳﻢ اﻟﻜﺎﺗﺐ ﻓﻲ ﺟﺪول اﻻﻋﻀـﺎء ) ‪. ( name‬‬

      ‫ﺑﺎﻟﺘﺪﻗﯿﻖ ﻓﻲ اﻟﻤﺜﺎل ﻳﺘﻀﺢ أن اﻟﺤﻘﻠﯿﻦ ) أو اﻟﻌﻤﻮدﻳﻦ ( ‪ Key_author‬ﻓﻲ ﻛﻼ اﻟﺠﺪوﻟﯿﻦ ھﻮ ﻣﻔﺘﺎح اﻟﺮﺑﻂ‬
                                               ‫ا‬
  ‫ﺑﯿﻨﮫﻤﺎ ، وﻟﺬﻟﻚ ﻳﻤﻜﻦ اﻟﻮﺻﻮل اﻟﻰ اﺳﻢ اﻟﻜﺎﺗﺐ اﻋﺘﻤﺎدً ﻋﻠﻰ رﻗﻤﻪ ﻣﻦ ﺟﺪول اﻟﺪروس ، وﺑﺎﻟﺘﺎﻟﻲ اﻟﺮﺑﻂ ﺑﯿﻦ‬
                                                                                       ‫اﻟﺠﺪوﻟﯿﻦ .‬

                                                                                     ‫ﻼ‬
 ‫ﻟﻦ اﺗﺤﺪث ﻃﻮﻳ ً ﻋﻦ ﻣﻘﺪﻣﺎت ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ‪ ، Mysql‬وﻟﻜﻦ ﺑﮫﺬه اﻟﻤﻘﺪﻣﺔ اﻟﺒﺴﯿﻄﺔ ﻳﻤﻜﻦ ﻋﻠﻰ اﻻﻗﻞ ﺗﺼﻮر‬
                                        ‫ﺎ‬                ‫ﺎ‬
      ‫ﺑﻌﺾ اﻻﺳﺎﺳﯿﺎت ﺣﻮل ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻋﻤﻮﻣً واﻟـ ‪ Mysql‬ﺧﺼﻮﺻً ، وﻣﻦ وﺟﮫﺔ ﻧﻈﺮي ﻓﺎﻻھﻢ ھﻮ ﻛﯿﻔﯿﺔ‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﻤﺎ ﻳﺨﺪم اﺣﺘﺎﺟﺎﺗﻨﺎ ﻣﻊ اﻟـ ‪ ، PHP‬وﻟﺬﻟﻚ ﺳﺎﺗﻄﺮق ﻓﻲ ھﺬ اﻟﺪرس اﻟﻰ ﻧﻘﻄﺔ ھﺎﻣﺔ‬
                                                                                               ‫ا‬
   ‫ﺟﺪً وھﻲ ادارة ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ، وأﻋﻨﻲ ﺑﺬﻟﻚ ﻋﻤﻠﯿﺔ اﻧﺸﺎء ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت واﻟﺠﺪاول واﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺤﻘﻮل‬
                                    ‫ﺎ‬
  ‫واﻟﺒﯿﺎﻧﺎت وﻏﯿﺮھﺎ ، ﻟﺘﻜﻮن اﻻﺳـﺎس ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻻﺣﻘً ﻋﻦ ﻃﺮﻳﻖ اﻟـ ‪ ، PHP‬وﻟﻌﻤﻞ ذﻟﻚ ﻳﻮﺟﺪ‬
‫ﻋﺪة ﻃﺮق ﻣﻦ اھﻤﮫﺎ اﻟﻄﺮﻳﻘﺔ اﻟﺘﻘﻠﯿﺪﻳﺔ اﻟﻤﺒﺎﺷﺮة ﺑﺎﻻﻋﺘﻤﺎد ﻋﻠﻰ ﻧﻈﺎم اﻟﺪوس ﻓﻲ ذﻟﻚ وﺑﺪون اﺳﺘﺨﺪام أي‬
                                                                                ‫ﺑﺮاﻣﺞ أﺧﺮى ﻟﻼدارة .‬

                                                             ‫اﻻﺗﺼﺎل ﺑﺎﻟـ ‪ ، Mysql‬واﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ :‬
 ‫ﻛﻤﺎ ﻗﻠﻨﺎ أن اﻟﻄﺮﻳﻘﺔ اﻟﺘﻘﻠﯿﺪﻳﺔ ھﻲ اﻻﺗﺼﺎل ﺑﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ ﺳﯿﺮﻓﺮ اﻟـ ‪ Mysql‬وﺑﺪون اﺳﺘﺨﺪام أي‬
    ‫ﻣﻜﻮﻧﺎت أﺧﺮى ، وﻟﻌﻤﻞ ذﻟﻚ ﻧﺤﺘﺎج أن ﻧﻌﺮف ﻣﺴﺎر ﺳﯿﺮﻓﺮ اﻟـ ‪ Mysql‬ﻋﻠﻰ اﻟﺠﮫﺎز اﻟﻤﺴﺘﺨﺪم ﺑﻌﺪ ﻋﻤﻠﯿﺔ‬
‫اﻟﺘﺜﺒﯿﺖ ، ﻛﻤﺎ ﻗﻤﻨﺎ ﺑﺬﻟﻚ ﻓﻲ درس اﻟﻤﻘﺪﻣﺔ ، وﻋﺎدة ﻳﻜﻮن اﻟﻤﺴـﺎر ﻛﺎﻟﺘﺎﻟﻲ ) ‪ ، ( C:\mysql\bin‬وﺑﺬﻟﻚ ﻳﻤﻜﻦ‬
                                                       ‫ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ ‪ mysql.exe‬ﻣﻦ داﺧﻞ اﻟـ ‪. Dos‬‬

                                                                                            ‫ﺎ‬
                                                  ‫ﻋﻤﻮﻣً ﻃﺮﻳﻘﺔ اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ھﻲ ﻛﺎﻟﺘﺎﻟﻲ :‬
‫‪mysql –h HostName –u UserName –p‬‬
 ‫ﻣﻊ اﺳﺘﺒﺪال اﻟـ ‪ HostName‬ﺑﺎﺳﻢ اﻟﺴﯿﺮﻓﺮ ﻟﺪﻳﻚ ، ﺳﻮاء ﻛﺎن اﻟﺴﯿﺮﻓﺮ ﻋﻠﻰ ﻧﻔﺲ اﻟﺠﮫﺎز وﻓﻲ ھﺬه اﻟﺤﺎﻟﯿﺔ‬
  ‫ﺗﻜﺘﺐ ‪ ، localhost‬أو أن اﻟﺴﯿﺮﻓﺮ اﻟﺬي ﺗﻮد اﻻﺗﺼﺎل ﺑﻪ ﻟﯿﺲ ﻋﻠﻰ ﻧﻔﺲ اﻟﺠﮫﺎز وﺑﺬﻟﻚ ﺗﻜﺘﺐ اﻟﻤﺴﺎر اﻟﻜﺎﻣﻞ‬
 ‫ﻻﺳﻢ اﻟـﺴﯿﺮﻓﺮ ) ‪ ، ( HostName‬وﻣﻊ اﺳﺘﺒﺪال اﻟـ ‪ UserName‬ﺑﺎﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺨﺎص ﺑﺎﻟـ ‪ Mysql‬ﻟﺪﻳﻚ ،‬
‫ﺑﻌﺪ ذﻟﻚ ﺳﯿﺘﻢ ﻃﻠﺐ ﻛﻠﻤﺔ اﻟﻤﺮور اﻟﺨﺎﺻﺔ ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ اﻟﻀﻐﻂ ﻋﻠﻰ ‪ ، Enter‬ﻗﻢ ﺑﺎدﺧﺎﻟﮫﺎ وﺳﯿﺘﻢ ﻓﺘﺢ‬
‫اﻻﺗﺼﺎل ﺑﺎﻟـ ‪ ، Mysql‬ﻛﻤﺎ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ‪ mysql‬ﻓﻘﻂ ﻟﯿﺘﻢ ﻓﺘﺢ اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﻘﻂ اذا ﻛﻨﺖ ﺗﻌﻤﻞ ﻋﻠﻰ‬
                                                                      ‫ﻧﻔﺲ اﻟﺠﮫﺎز وﻟﯿﺲ ﺟﮫﺎز أﺧﺮ .‬

                                                          ‫ﺳﯿﻈﮫﺮ اﻟﻤﺆﺷﺮ اﻟﺨﺎص ﺑﺎواﻣﺮ اﻟـ ‪ Mysql‬ﻛﺎﻟﺘﺎﻟﻲ :‬
‫>‪mysql‬‬
                                 ‫وﺑﮫﺬا ﻧﻜﻮن وﺻﻠﻨﺎ اﻟﻰ اﻟﻤﻜﺎن اﻟﻤﻄﻠﻮب ﻟﻜﺘﺎﺑﺔ اواﻣﺮ اﻟـ ‪ Mysql‬واﻟﺘﺤﻜﻢ ﺑﮫﺎ .‬

        ‫اﻷﻣﺮ اﻷول اﻟﺬي ﺳﻨﻘﻮم ﺑﻜﺘﺎﺑﺘﻪ ﻳﻘﻮم ﺑﺎﺳﺘﻌﺮاض ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻋﻠﻰ اﻟﺴﯿﺮﻓﺮ واﻻﻣﺮ ھﻮ :‬
‫;‪show databases‬‬
    ‫ﺑﻌﺪ ﻛﺘﺎﺑﺔ ھﺬا اﻷﻣﺮ ) ﺑﻌﺪ ﻣﺆﺷﺮ اﻟـ ‪ ، ( <mysql‬ﺳﯿﺘﻢ اﺳﺘﻌﺮاض ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺴﯿﺮﻓﺮ اﻟﺬي ﻗﻤﻨﺎ‬
     ‫ﺑﺎﻻﺗﺼﺎل ﺑﻪ ، وﻓﻲ ﺣﺎﻟﺔ ﻋﺪم وﺟﻮد أي ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻗﻤﺖ ﺑﺎﻋﺪادھﺎ ﻣﻦ ﻗﺒﻞ ، ﻓﺎن ﻣﻦ اﻟﻄﺒﯿﻌﻲ أن ﺗﺠﺪ‬
   ‫ﻗﺎﻋﺪﺗﻲ ﺑﯿﺎﻧﺎت ﻣﻮﺟﻮدة ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ ﻋﻨﺪ ﺗﺜﺒﯿﺖ اﻟﺴﯿﺮﻓﺮ ‪ ، Mysql‬وﺗﻠﻚ اﻟﻘﺎﻋﺪﺗﺎن ھﻲ ‪. test – mysql‬‬

  ‫وﻟﻤﺤﺎوﻟﺔ ﻓﮫﻢ اﻟﻤﻮﺿﻮع ﺑﺸﻜﻞ أﻛﺒﺮ ، ﺳﻨﻘﻮم ﺑﺎﻟﺘﻄﺮق اﻟﻰ ﻣﺜـﺎل ﻳﺒﯿﻦ ﻛﯿﻔﯿﺔ اﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ، وﻛﯿﻔﯿﺔ‬
                                             ‫اﻟﺪﺧﻮل ﻟﮫﺎ واﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ واﻧﺸﺎء اﻟﺠﺪاول ، وﻣﻦ ﺛﻢ ﺣﺬﻓﮫﺎ ..‬

     ‫ﺑﻌﺪ اﺳﺘﻌﺮاض ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻷﻣﺮ اﻟﺴﺎﺑﻖ ، ﺳﻨﻘﻮم ﺑﺎﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺑﺎﺳﻢ ‪ ، PHP‬وﻟﻌﻤﻞ ذﻟﻚ ﻗﻢ‬
                                                                                  ‫ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ :‬
‫;‪create database PHP‬‬
   ‫ﻟﻮ ﻗﻤﻨﺎ ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺴﺎﺑﻖ ) ‪ ( show database‬ﺳﻨﺮى أن ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت أﺻﺒﺤﺖ 3 ﺑﺎﺿﺎﻓﺔ اﻟﻘﺎﻋﺪة ‪PHP‬‬
   ‫اﻟﻰ اﻟﻘﺎﻋﺪﺗﯿﻦ ‪ ، mysql – test‬وﻻﺳﺘﺨﺪام اي ﻣﻨﮫﺎ ﻧﻘﻮم ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ﻓﻲ ﻣﺜﺎﻟﻨﺎ ﻣﻊ اﻟﻘﺎﻋﺪة ‪: PHP‬‬
‫;‪use PHP‬‬
        ‫وھﺬه ﻳﻌﻨﻲ اﻟﺪﺧﻮل ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪ PHP‬واﺳﺘﺨﺪام اﻟﻤﺆﺷﺮ ) ‪ ( <mysql‬ﻟﻜﺘﺎﺑﺔ اﻷواﻣﺮ اﻟﻤﺘﻌﻠﻘﺔ‬
                                                                    ‫ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺑﻌﯿﻨﮫﺎ .‬

         ‫أول ھﺬه اﻻواﻣﺮ ھﻮ أﻣﺮ اﻧﺸﺎء ﺟﺪول ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ، وھﺬه اﻷﻣﺮ ﻳﺤﺘﺎج اﻟﻰ ﺗﻔﺼﯿﻞ دﻗﯿﻖ ﻟﺒﻌﺾ‬
                           ‫ﺎ‬
    ‫اﻟﺨﺼﺎﺋﺺ ﻣﺜﻞ اﺳﻤﺎء اﻟﺤﻘﻮل واﻧﻮاع اﻟﺒﯿﺎﻧﺎت ﻓﯿﮫﺎ ، وﺑﻌﺾ اﻻﺷﯿﺎء اﻷﺧﺮى ، ﻋﻤﻮﻣً ﻗﻢ ﺑﻜﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ‬
                                                                  ‫وﺳﺎﻗﻮم ﺑﺸﺮح ﻛﺎﻓﺔ اﻟﺘﻔﺎﺻﯿﻞ ﺑﻌﺪ اﻟﻤﺜﺎل :‬
‫( ‪create table users‬‬
‫,‪id Int not null auto_increment Primary Key‬‬
‫,‪name text not null‬‬
‫‪counter int‬‬
‫;)‬
                                                                                               ‫ﺷﺮح اﻟﻤﺜﺎل :‬
                               ‫- ﻗﻤﻨﺎ ﺑﻜﺘﺎﺑﺔ ) ‪ ( create table users‬وھﺬا ﻳﻌﻨﻲ اﻧﺸﺎء ﺟﺪول ﺑﺎﺳﻢ ‪. users‬‬
                                        ‫- اﻟﻘﻮس ( ﻳﻌﻨﻲ ﺑﺪاﻳﺔ ﺗﺴﻤﯿﺔ ﺣﻘﻮل اﻟﺠﺪول وﺧﺼﺎﺋﺺ ﺗﻠﻚ اﻟﺤﻘﻮل .‬
‫- اﻟﺴﻄﺮ اﻷول ﻣﻦ اﺳﻤﺎء اﻟﺤﻘﻮل ھﻮ ) ‪ ( id‬واﻟﺮﻣﺰ ) ‪ ( int‬ﻳﻌﻨﻲ وﺻﻒ ﻧﻮع اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﺘﺨﺰن ﻓﻲ اﻟـﺤﻘﻞ‬
     ‫) ‪ ، ( id‬وھﻲ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺗﻌﻨﻲ ﻧﻮع اﻟﺒﯿﺎﻧﺎت اﻟﺮﻗﻤﯿﺔ ، اﻣﺎ اﻟﺮﻣﺰ ) ‪ ( not null‬ﻓﯿﻌﻨﻲ ﻋﺪم اﻣﻜﺎﻧﯿﺔ أن‬
                                                                                      ‫ﺎ‬
     ‫ﻳﻜﻮن ھﺬا اﻟﺤﻘﻞ ﻓـﺎرﻏً ، ﺑﻞ ﻳﺠﺐ أن ﻳﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻤﺔ ، واﻟـ ) ‪ ( auto_increment‬ﻳﺠﻌﻞ اﻟﺤﻘﻞ ﻳﺤﺘﻮي‬
     ‫ﻋﻠﻰ ﻗﯿﻢ ﻣﺘﺴﻠﺴﻠﺔ ﻳﺴﺘﺤﯿﻞ ﺗﻜﺮارھﺎ ، وﺳﯿﺒﺪأ ﻣﻦ اﻟﺮﻗﻢ 1 وﻳﺒﺪأ ﺑﺎﻟﺰﻳﺎدة ﺑﻤﻘﺪار واﺣﺪ ﻓﻲ ﻛﻞ ﻣﺮة ﻳﺘﻢ‬
         ‫ادﺧﺎل ﺻﻒ ﺟﺪﻳﺪ اﻟﻰ ھﺬا اﻟﺠﺪول ، وﻓﻲ اﻟﻨﮫﺎﻳﺔ اﻟﺮﻣﺰ ) ‪ ( Primary Key‬ﻳﻌﻨﻲ أن اﻟﺤﻘﻞ ھﻮ اﻟﻤﻔﺘﺎح‬
                             ‫ا‬
       ‫اﻟﺮﺋﯿﺴﻲ ﻟﮫﺬا اﻟﺠﺪول أو ﺑﻤﻌﻨﻲ أﻧﻪ ﺳﯿﺘﻢ اﻟﺘﻔﺮﻳﻖ ﺑﯿﻦ ﺻﻔﻮف اﻟﺠﺪول اﻋﺘﻤﺎدً ﻋﻠﻰ ھﺬا اﻟﺤﻘﻞ وﻟﮫﺬا‬
                                                   ‫وﺿﻌﻨﺎ ) ‪ ( auto_increment‬ﻟﻀﻤﺎن ﻋﺪم اﺧﺘﻼط اﻟﺒﯿﺎﻧﺎت .‬
  ‫- اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻳﺤﺘﻮي ﻋﻠﻰ اﺳﻢ اﻟﺤﻘﻞ ) ‪ ( name‬وﻧﻮع اﻟﺒﯿﺎﻧﺎت ) ‪ ( text‬أي ﻧﺼﻲ ، وﻧﻔﺲ اﻟﺮﻣﺰ اﻟﺴﺎﺑﻖ‬
                                                                              ‫اﻟﺬي ذﻛﺮﻧﺎه وھﻮ ) ‪. ( not null‬‬
  ‫- اﻟﺴﻄﺮ اﻟﺜﺎﻟﺚ ﻳﺤﺘﻮي ﻋﻠﻰ اﺳﻢ اﻟﺤﻘﻞ ) ‪ ( counter‬وﻧﻮع اﻟﺒﯿﺎﻧﺎت ) ‪ ، ( int‬وﻻﺣﻆ أﻧﻨﺎ ﻟﻢ ﻧﺬﻛﺮ ) ‪not null‬‬
                                                                  ‫ﺎ‬
 ‫( وﺑﺎﻟﺘﺎﻟﻲ ﻳﻤﻜﻦ أن ﻳﻜﻮن ھﺬا اﻟﺤﻘﻞ ﻓﺎرﻏً ﻻ ﻳﺤﺘﻮي ﻋﻠﻰ أي ﻗﯿﻤﺔ ، وﻟﻦ ﻳﻜﻮن ھﻨﺎك أي ﺗﻌﺎرض أو ﻣﺸﻜﻠﺔ‬
                                                                                 ‫ﺑﻌﻜﺲ اﻟﺤﻘﻠﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ .‬
                                 ‫- ﻓﻲ اﻟﺴﻄﺮ ﻗﺒﻞ اﻷﺧﯿﺮ ، أي ﻗﺒﻞ ﻋﻼﻣﺔ اﻻﻏﻼق ) ، ﺳﯿﻜﻮن ﺑﺪون ﻓﺎﺻﻠﺔ .‬
                                       ‫- اﻟﺴﻄﺮ اﻷﺧﯿﺮ ﻳﺤﺘﻮي ﻋﻠﻰ اﻗﻔﺎل ﻋﻤﻠﯿﺔ اﻧﺸﺎء اﻟﺠﺪول ﺑﺎﻟﻌﻼﻣﺔ (; .‬
                                                                                           ‫ﺎ‬
  ‫ﻋﻤﻮﻣً ھﺬا اﻟﻤﺜﺎل ﻳﻌﻄﻲ ﻧﺒﺬة ﺑﺴﯿﻄﺔ ﻋﻦ ﻛﯿﻔﯿﺔ اﺟﺮاء ﻣﺜﻞ ھﺬه اﻻواﻣﺮ ، وﺳﻨﺘﻄﺮق اﻟﻰ ﺑﻘﯿﺔ اﻷواﻣﺮ ﻓﻲ‬
                                                                        ‫اﻷﺳﻄﺮ اﻟﻘﻠﯿﻠﺔ اﻟﻘﺎدﻣﺔ .‬

                                ‫ﻳﻤﻜﻨﻚ اﺳﺘﻌﺮاض اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﻓﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ اﻷﻣﺮ :‬
‫;‪show tables‬‬
 ‫وﻟﻮ ﻗﻤﺖ ﺑﺘﻄﺒﯿﻖ ذﻟﻚ ﻋﻠﻰ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻓﺴﺘﺮى أن اﻟﺠﺪول ‪ users‬ﻣﻮﺟﻮد ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪ PHP‬اﻟﺘﻲ‬
                                                                                 ‫ﻗﻤﻨﺎ ﺑﺎﻧﺸﺎءھﺎ .‬

 ‫ﻳﻤﻜﻦ ﻛﺬﻟﻚ اﺳﺘﻌﺮاض ﺧﺼﺎﺋﺺ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ‪ users‬اﻟﺬي ﻗﻤﻨﺎ ﺑﺎﻧﺸﺎءه ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ، ﻋﻦ ﻃﺮﻳﻖ‬
                                                                              ‫اﻷﻣﺮ اﻟﺘﺎﻟﻲ :‬
‫;‪describe users‬‬
                               ‫ﺳﺘﺮى أن ﺣﻘﻮل اﻟﺠﺪول وﺧﺼﺎﺋﺺ ﻛﻞ ﺟﺪول ﻇﮫﺮت ﻟﻚ ﺑﺸﻜﻞ واﺿﺢ .‬

                                                                    ‫- اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺑﯿﺎﻧﺎت اﻟﺠﺪاول :‬
  ‫ﺑﻘﻲ أن ﻧﺬﻛﺮ اﻟﻄﺮق اﻟﺘﻲ ﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﮫﺎ ادﺧﺎل اﻟﺒﯿﺎﻧﺎت اﻟﻰ اﻟﺠﺪول ‪ ، users‬ﺑﻞ وﻛﯿﻔﯿﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺗﻠﻚ‬
                      ‫ا‬                           ‫ﺎ‬
  ‫اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺘﻌﺪﻳﻞ واﻟﺤﺬف وﻏﯿﺮ ذﻟﻚ ، وﻛﻤﺎ ﻗﻠﻨﺎ ﺳﺎﺑﻘً أن ھﺬه اﻻﺳﺎﺳﯿﺎت ﻣﻔﯿﺪة ﺟﺪً ﻓﻲ اﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ اﻟـ‬
 ‫‪ ، PHP‬ﺑﻞ إن ﻓﮫﻢ ھﺬه اﻟﻄﺮق ھﻮ اﻟﻤﻔﺘﺎح اﻻﺳﺎﺳﻲ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ اﻟﺒﻲ اﺗﺶ ﺑﻲ ،‬

                                                                                                  ‫ﺎ‬
                       ‫ﻋﻤﻮﻣً أول ﺗﻠﻚ اﻷواﻣﺮ ھﻮ اﺿﺎﻓﺔ ﺻﻒ ﺟﺪﻳﺪ اﻟﻰ اﻟﺠﺪول ، وھﺬا ﻣﺎ ﻳﺒﯿﻨﻪ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ :‬
‫‪insert into users set‬‬
‫;”‪name = “Ahmad‬‬
‫3 = ‪counter‬‬
‫;‬
        ‫ﻣﻊ ﻣﻼﺣﻈﺔ أن ‪ users‬ھﻮ اﺳﻢ اﻟﺠﺪول ، ‪ name‬اﺳﻢ اﻟﺤﻘﻞ ) اﻟﻌﻤﻮد ( اﻷول ، ‪ counter‬اﺳﻢ اﻟﺤﻘﻞ )‬
       ‫اﻟﻌﻤﻮد ( اﻟﺜﺎﻧﻲ ، ﻛﻤﺎ ﺗﻼﺣﻆ أن اﻟﺤﻘﻞ ‪ id‬ﻟﻢ ﻧﺘﻄﺮق ﻟﻪ ، ﻻﻧﻨﺎ ﻓﻲ اﻋﺪادﻧﺎ ﻟﻠﺠﺪول ذﻛﺮﻧﺎ أن اﻟﺤﻘﻞ ( ‪id‬‬
  ‫‪ ( auto_increment‬أي ﺳﺘﻀﺎف اﻟﯿﻪ اﻟﻘﯿﻢ ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ وﺑﺸﻜﻞ ﻣﻨﻈﻢ ، ﻛﻤﺎ ﻗﻠﻨﺎ ﻓﻲ ﻛﻞ ﻣﺮة ﻳﺰﻳﺪ اﻟﻌﺪاد‬
   ‫ﺑﻘﯿﻤﺔ 1 ، و ﺑﻄﺒﻌﯿﺔ اﻟﺤﺎل ﻳﻤﻜﻨﻚ اﻟﻘﯿﺎس ﻋﻠﻰ ھﺬا اﻟﻤﺜﺎل ﺑﺎﺳﺘﺒﺪال ﻣﺎ ﻳﺠﺐ اﺳﺘﺒﺪاﻟﻪ ﻣﻦ اﺳﻢ اﻟﺠﺪول )‬
               ‫‪ ( users‬واﺳﻤﺎء اﻟﺤﻘﻮل ) ‪ ( name – counter‬وﻛﺬﻟﻚ اﻟﺒﯿﺎﻧﺎت ﺑﻤﺎ ﻳﻨﺎﺳﺐ اﻟﺬي ﺗﺮﻳﺪ اﻟﻘﯿﺎم ﺑﻪ .‬

‫ھﺬا ﺑﺎﻟﻨﺴﺒﺔ ﻻﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت ﺟﺪﻳﺪة اﻟﻰ ﺟﺪول ﻣﻌﯿﻦ ، اﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻻﺳﺘﻌﺮاض اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺠﺪول ﻓﻜﻤﺎ ﻳﻠﻲ‬
                                                                                               ‫:‬
‫;‪select * from users‬‬
 ‫وﻣﻌﻨﻲ ‪ ) select‬اﺧﺘﺮ ( ، وﻟﺬﻟﻚ ﺳﺘﺠﺪ أن ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻓﻲ اﻟﺠﺪول ‪ users‬ﻗﺪ ﺗﻢ ﺳﺮدھﺎ ، واذا ﻛﻨﺖ‬
                                                                       ‫ﺎ‬                   ‫ﺎ‬
 ‫ﻣﻠﺘﺰﻣً ﺑﺎﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺣﺮﻓﯿً ﻓﺴﺘﺠﺪ أن اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ اﺿﻔﻨﺎھﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻇﮫﺮت ﻋﻠﻰ ﺷﻜﻞ ﺻﻒ‬
                                                  ‫ا‬     ‫ﺎ‬
 ‫ﻣﻦ ﺻﻔﻮف اﻟﺠﺪول ، وﺑﺎﻟﺘﺎﻟﻲ ﻛﻠﻤﺎ اﺿﻔﺖ ﺻﻔً ﺟﺪﻳﺪً اﻟﻰ اﻟﺠﺪول وﻗﻤﺖ ﺑﺎﺳﺘﻌﺮاض اﻟﺒﯿﺎﻧﺎت ﺗﺠﺪ أن ﺑﯿﺎﻧﺎﺗﻚ‬
‫ﻗﺪ ﺗﻢ ﺗﺨﺰﻳﻨﮫﺎ ، وﻳﻨﻄﺒﻖ اﻟﻜﻼم اﻟﺴﺎﺑﻖ ﺣﻮل اﻻﺳﺘﺒﺪال ھﻨﺎ اﻳﻀﺎ ، ﻓﯿﻤﻜﻦ اﺳﺘﺒﺪال اﺳﻢ اﻟﺠﺪول ‪ users‬ﺑﺎي‬
   ‫اﺳﻢ ﻟﺠﺪول ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺴﺘﺨﺪﻣﺔ ، وﻟﻠﺘﺎﻛﺪ ﻣﻦ اﺳﻤﺎء اﻟﺠﺪاول ﻗﻢ ﺑﺎﺳﺘﺨﺪام اﻟﻄﺮﻳﻘﺔ اﻟﺴﺎﺑﻖ‬
                                                                    ‫ذﻛﺮھﺎ وھﻲ ) ‪. ( show tables‬‬

‫اﻟﻨﻘﻄﺔ اﻷﺧﯿﺮة اﻟﺘﻲ ﺳﺎﺗﻄﺮق ﻟﮫﺎ ھﻲ ﻣﺎ ﻳﺠﺐ ﻣﻌﺮﻓﺘﻪ ﺣﻮل اﻷﻣﺮ ‪ select‬وھﻮ ﻛﺜﺮت اﺳﺘﺨﺪاﻣﻪ ﻓﻲ اﻟﺘﻌﺎﻣﻞ‬
    ‫ﻋﻦ ﻃﺮﻳﻖ اﻟﺒﻲ اﺗﺶ ﺑﻲ ، وﺑﺎﻟﺘﺎﻟﻲ ﻳﺠﺐ ﻋﻠﯿﻚ ﻓﮫﻢ ﻃﺮﻳﻘﺔ ﻛﺘﺎﺑﺘﻪ ﺑﺸﻜﻞ ﻛﺎﻣﻞ ، ﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ ﺧﯿﺎرات‬
‫اﻻﺧﺘﯿﺎر إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ ، وھﻲ ﻣﺎ ﻳﺘﻢ ﻛﺘﺎﺑﺘﻪ ﺑﻌﺪ اﻟﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ ﻣﻦ ﺧﯿﺎرات ﺗﺤﺪد ﻃﺮﻳﻘﺔ اﺧﺘﯿﺎر اﻟﺒﯿﺎﻧﺎت ﻣﻦ‬
                                     ‫ﺷﺮوط وﺗﺮﺗﯿﺐ وﺣﺪود وھﺬا ﻣﺎ ﺳﺎذﻛﺮه ﻓﻲ اﻻﺳﻄﺮ اﻟﻘﻠﯿﻠﺔ اﻟﻘﺎدﻣﺔ .‬

                      ‫ﻓﻠﻔﺘﺮض أن اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﻳﺤﺘﻮي ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ ﺻﻒ ﻣﻦ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :‬

                                      ‫اﻣﺎ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﻮد ﺟﻠﺒﮫﺎ ﻓﮫﻲ ﻛﻤﺎ ﻳﻠﻲ ﻟﻜﻞ ﻧﻘﻄﺔ ﻋﻠﻰ ﺣﺪة :‬
                                                ‫1- ﺑﯿﺎﻧﺎت اﻻﻋﻀﺎء اﻟﺬﻳﻦ ﻟﯿﺲ ﻟﮫﻢ أي ﻣﻮﺿﻮع .‬
                    ‫2- ﺑﯿﺎﻧﺎت اﻻﻋﻀﺎء اﻟﺬﻳﻦ ﻟﮫﻢ ﻣﻮاﺿﯿﻊ أﻛﺜﺮ ﻣﻦ 5 ﻣﺮﺗﺒﯿﻦ ﻣﻦ اﻻﻛﺜﺮ اﻟﻰ اﻻﻗﻞ .‬
                                                                    ‫3- ﺑﯿﺎﻧﺎت اﻟﻌﻀﻮ ‪. Ahmed‬‬
                                               ‫4- ﺑﯿﺎﻧﺎت ﺟﻤﯿﻊ اﻻﻋﻀﺎء ﻣﺮﺗﺒﯿﻦ ﺣﺴﺐ اﻻﺳﻢ .‬
                                                               ‫ﺎ‬
                                                             ‫5- ﺑﯿﺎﻧﺎت اﻟﻌﻀﻮ اﻷﻛﺜﺮ ﻣﻮاﺿﯿﻌ ً .‬
                        ‫ﺳﻨﺄﺧﺬ ﻛﻞ ﺣﺎﻟﺔ ﻋﻠﻰ ﺣﺪة ، أﻣﺎ اﻟﺤﺎﻟﺔ اﻷوﻟﻰ ﻓﯿﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮫﺎ ﻛﻤﺎ ﻳﻠﻲ :‬
‫;0=‪select * from users where counter‬‬
     ‫اﻟﺰﻳـﺎدة اﻟﺘﻲ ﻗﻤﻨﺎ ﺑﻮﺿﻌﮫﺎ ھﻲ ) 0=‪ ( where counter‬أي ﺑﺤﯿﺚ أن اﻟﺤﻘﻞ ) ‪ ( counter‬ﻳﺴﺎوي ﺻﻔﺮ ،‬
     ‫وﺑﺎﻟﺘﺎﻟﻲ ﺳﯿﺘﻢ اھﻤﺎل أي ﺻﻒ ﻣﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻻ ﻳﺤﺘﻮي اﻟﺤﻘﻞ ) ‪ ( counter‬ﻓﯿﮫﺎ ﻋﻠﻰ اﻟﻘﯿﻤﺔ ﺻﻔﺮ ،‬
                                        ‫وﺳﯿﺘﻢ ﺟﻠﺐ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻳﺤﺘﻮي ھﺬا اﻟﺤﻘﻞ ﻓﯿﮫﺎ ﻋﻠﻰ ﺻﻔﺮ .‬

                                                                                         ‫اﻟﺤﺎﻟﺔ اﻟﺜﺎﻧﯿﺔ :‬
‫;‪select * from users where counter >= 5 order by counter‬‬
  ‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل اﺿﻔﻨﺎ اﻟﺸﺮط ) ‪ ( 5 =< where counter‬وھﻮ واﺿﺢ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ وﻟﻜﻦ ﺗﻢ ﺗﻐﯿﯿﺮ‬
   ‫اﻟﺸﺮط ﻻ اﻗﻞ وﻻ اﻛﺜﺮ ، اﻣﺎ اﻻﺿﺎﻓﺔ اﻷﺧﺮى ﻓﮫﻲ ﻃﺮﻳﻘﺔ اﻟﺘﺮﺗﯿﺐ وھﻲ ) ‪ ( order by counter‬وﺗﻌﻨﻲ ) ﻗﻢ‬
  ‫ﺑﺘﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺘﺎرة ﺑﺤﺴﺐ اﻟﺤﻘﻞ ‪ ، ( counter‬وھﻨﺎك ﻃﺮﻳﻘﺔ أﺧﺮى ﻟﻠﺘﺤﻜﻢ ﻓﻲ اﻟﺘﺮﺗﯿﺐ اﻣﺎ ﺗﺼﺎﻋﺪي‬
                                                 ‫ﺎ‬
‫أو ﺗﻨﺎزﻟﻲ وذﻟﻚ ﺑﺎﺿﺎﻓﺔ ﻛﻠﻤﺔ ‪ asc‬ﻟﯿﻜﻮن اﻟﺘﺮﺗﯿﺐ ﺗﻨﺎزﻟﯿً ﻛﻤﺎ ھﻮ اﻟﺤﺎل ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ، ﻓﺴﻮاء ذﻛﺮت ذﻟﻚ‬
                                                                            ‫ﺎ‬
 ‫أو ﺳﯿﺘﻢ اﻋﺘﺒﺎرھﺎ ﺗﻨﺎزﻟﯿ ً ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ ، اﻣﺎ اﻻھﻢ ﻓﮫﻮ ﻃﺮﻳﻘﺔ اﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي ﻣﻦ اﻻﻗﻞ اﻟﻰ اﻻﻛﺒﺮ وﻳﺘﻢ‬
                                ‫ذﻟﻚ ﻋﻦ ﻃﺮﻳﻖ ﻛﺘﺎﺑﺔ اﻟﻜﻠﻤﺔ ‪ desc‬ﺑﻌﺪ اﻟﺘﺮﺗﯿﺐ ﻣﺒﺎﺷﺮة ﻟﺘﺼﺒﺢ ﻛﻤﺎ ﻳﻠﻲ :‬
‫;‪select * from users where counter >= 5 order by counter desc‬‬

                                                                                         ‫اﻟﺤﺎﻟﺔ اﻟﺜﺎﻟﺜﺔ :‬
‫;”‪select * from users where name = “Ahmed‬‬
                      ‫ﻻﺣﻆ أن اﻟﻔﺮق اﻟﻮﺣﯿﺪ ھﻨﺎ ھﻮ اﺳﺘﺨﺪام ﻋﻼﻣﺎت اﻟﺘﻨﺼﯿﺺ ، ﻻن ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻧﺼﯿﺔ .‬


                                                                                        ‫اﻟﺤﺎﻟﺔ اﻟﺮاﺑﻌﺔ :‬
‫;‪select * from users order by name‬‬
   ‫وﻗﺪ أوردت ھﺬا اﻟﻤﺜﺎل ﻟﺒﯿﺎن أﻧﻪ ﻳﻤﻜﻦ اﺳﺘﺨﺪام أﺣﺪ اﻟﺨﯿﺎرات ﻟﺠﻠﺐ اﻟﺒﯿﺎﻧﺎت وﺗﺮك ﺑﺎﻗﻲ اﻟﺨﯿﺎرات ، ﻓﯿﻤﻜﻦ‬
   ‫ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﺳﺘﺨﺪام ﺧﯿﺎر اﻟﺘﺮﺗﯿﺐ ) ‪ ( order‬وﻋﺪم اﺳﺘﺨﺪام اﻟﺨﯿﺎرات اﻟﺒﺎﻗﯿﺔ ) ‪ ، ( where – limit‬اﻣﺎ‬
                                                                     ‫ﺎ‬
‫اﻟﺨﯿﺎر ‪ where‬ﻓﻘﺪ ﺗﻄﺮﻗﻨﺎ ﻟﻨﺎ ﺳﺎﺑﻘ ً وﺗﻌﺮﻓﻨﺎ ﻋﻠﻰ ﻓﺎﺋﺪﺗﻪ ، واﻟﺨﯿـﺎر اﻷﺧﺮ ‪ limit‬ھﻲ ﻣﺎ ﺳﯿﺘﻢ اﻟﺘﻄﺮق اﻟﯿﻪ ﻓﻲ‬
                                                                 ‫اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ اﻟﺨﺎص ﺑﺎﻟﺤﺎﻟﺔ اﻟﺨﺎﻣﺴﺔ :‬

                                                                                     ‫اﻟﺤﺎﻟﺔ اﻟﺨﺎﻣﺴﺔ :‬
‫;1 ‪select * from users order by counter limit‬‬
      ‫واﻟـ ‪ limit‬ﺗﻌﻨﻲ ﻋﺪد اﻟﺼﻔﻮف اﻟﻤﺨﺘﺎرة ، أي ﻟﻮ ﻗﻤﻨﺎ ﺑﻜﺘﺎﺑﺔ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺑﺪون اﻟـ ‪ limit‬ﺳﺘﺠﺪ أن ﺟﻤﯿﻊ‬
  ‫اﻟﺒﯿﺎﻧﺎت ﺳﯿﺘﻢ اﺧﺘﯿﺎرھﺎ ، وﻟﻜﻦ ﺑﺎﺳﺘﺨﺪام اﻟـ ‪ limit‬ﻧﻘﻮم ﺑﺘﺤﺪﻳﺪ ﻋﺪد اﻟﺼﻔﻮف اﻟﺘﻲ ﺳﯿﺘﻢ اﺧﺘﯿﺎرھﺎ اﺳﺘﻨﺎدً‬
  ‫ا‬
    ‫ﻋﻠﻰ ﻃﺮﻳﻘﺔ ﺗﺮﺗﯿﺒﻨﺎ ﻟﻠﺒﯿﺎﻧﺎت ، ﻓﻜﻤﺎ ﺗﻼﺣﻆ ﻗﻤﻨﺎ ﺑﺘﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت ﺑﺤﺴﺐ اﻟﺤﻘﻞ ‪ counter‬وﻟﻢ ﻧﺬﻛﺮ ) ‪( desc‬‬
       ‫وﻟﺬﻟﻚ ﻓﺎﻟﺒﯿﺎﻧﺎت ﻳﺘﻢ ﺗﺮﺗﯿﺒﮫﺎ ﻣﻦ اﻻﻛﺒﺮ اﻟﻰ اﻻﺻﻐﺮ ، وﺑﺎﻟﺘﺎﻟﻲ ﻓﺎﺧﺘﯿﺎرﻧﺎ ﻟﻠﺤﻘﻞ اﻷول ﻳﻘﻀﻲ ﺑﺎﺧﺘﯿﺎر ﺑﯿﺎﻧﺎت‬
                                                                         ‫اﻟﺸﺨﺺ اﻷﻛﺜﺮ ﻛﺘﺎﺑﺔ ﻟﻠﻤﻮاﺿﯿﻊ .‬

 ‫ﺑﻘﻲ أن ﻧﺬﻛﺮ ﻃﺮﻳﻘﻲ اﻟﺘﻌﺪﻳﻞ واﻟﺤﺬف ﻟﯿﻜﺘﻤﻞ اﻟﺪرس ، وﺳﻨﺒﺪأ ﺑﻄﺮﻳﻘﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ‬
    ‫اﻟﺠﺪول ‪ users‬ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪ ، PHP‬واﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﻄﺮﻳﻘﺔ اﻟﺘﻲ ﺳﯿﺘﻢ ﺷﺮﺣﮫﺎ ﺑﻌﺪ اﻟﻤﺜﺎل :‬
‫‪update users set‬‬
‫,”‪name = “Naser‬‬
‫03 = ‪counter‬‬
‫;”‪where name=”Ahmad‬‬
     ‫اﻟﺠﻤﻠﺔ ‪ update‬ﺗﻌﻨﻲ ﺗﺤﺪﺑﺚ أو ) ﻗﻢ ﺑﺘﺤﺪﻳﺚ ( ، واﻟـ ‪ users‬ھﻮ اﺳﻢ اﻟﺠﺪول اﻟﺬي ﻧﻌﻤﻞ ﻋﻠﯿﻪ ، وﻓﻲ‬
   ‫اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻗﻤﻨﺎ ﺑﺎﺳﻨﺎد اﻟﻘﯿﻤﺔ ‪ Naser‬اﻟﻰ اﻟﺤﻘﻞ ‪ ، name‬واﻟﺴﻄﺮ اﻟﺬي ﻳﻠﯿﻪ ﻗﻤﻨﺎ ﺑﺎﺳﻨﺎد اﻟﻘﯿﻤﺔ 03‬
   ‫اﻟﻰ اﻟﺤﻘﻞ ‪ ، counter‬وﻟﻜﻦ ﻟﻮ ﺗﻮﻗﻔﻨﺎ ھﻨﺎ ﺑﺪون ذﻛﺮ اﻟﺼﻒ اﻟﺬي ﺳﯿﺘﻢ اﻟﺘﻌﺪﻳﻞ ﻋﻠﯿﻪ ، ﺳﯿﺘﻢ ﺗﻌﺪﻳﻞ ﻛﺎﻓﺔ‬
     ‫اﻟﺼﻔﻮف ﻓﻲ اﻟﺠﺪول ﻣﮫﻤﺎ ﻛﺎن ﻋﺪدھﺎ ، وﻟﺬﻟﻚ ﻛﺘﺒﻨﺎ ﻓﻲ اﻟﻨﮫﺎﻳﺔ ‪ ، ”where name=”Ahmad‬ﺑﻤﻌﻨﻰ أن‬
      ‫اﻟﺘﻐﯿﺮات اﻟﺴﺎﺑﻘﺔ ﺳﺘﺤﺪث ﻓﻘﻂ ﻋﻠﻰ اﻟﺼﻒ ﻣﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻳﺤﺘﻮي ﻓﯿﮫﺎ اﻟﺤﻘﻞ ‪ name‬ﻋﻠﻰ اﻟﻘﯿﻤﺔ‬
                                                                                         ‫‪. Ahmad‬‬

‫رﺑﻤﺎ ﻳﻜﻮن اﻟﻤﺜﺎل ﻏﯿﺮ واﺿﺢ ﺑﺸﻜﻞ ﻛﺎﻓﻲ ، وﻟﻜﻦ ﻣﻊ اﻟﺘﻤﺮس واﻟﻤﺤﺎوﻟﺔ ﺳﺘﺠﺪ أن اﻟﻤﺴﺄﻟﺔ ﻣﻨﻄﻘﯿﺔ وواﺿﺤﺔ‬
                                                                                 ‫ﺎ‬
  ‫ﺑﺸﻜﻞ ﻛﺒﯿﺮ ، ﻋﻤﻮﻣً ﻟﻢ ﻳﺒﻘﻰ ﻟﺪﻳﻨﺎ اﻻ ﻃﺮﻳﻘﺔ اﻟﺤﺬف ، ﺳﻮاء ﻛﺎن ﻟﻜﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺠﺪول ، أو ﻟﺼﻒ ﻣﻌﯿﻦ‬
                        ‫ﻣﻦ اﻟﺒﯿﺎﻧﺎت وﺳﻨﺮى ذﻟﻚ ﻓﻲ اﻟﻤﺜﺎﻟﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ ، وھﻤﺎ ﻣﺎ ﺳﻨﺨﺘﻢ ﺑﻪ ھﺬا اﻟﺪرس :‬
‫;‪delete from users‬‬
               ‫ا‬
        ‫اﻷﻣﺮ اﻟﺴﺎﺑﻖ ﻛﻔﯿﻞ ﺑﺎﻟﻐﺎء ﺟﻤﯿﻊ اﻟﺼﻔﻮف ﻓﻲ اﻟﺠﺪول ‪ users‬ﻛﻤﺎ ھﻮ واﺿﺢ ، وﻟﺬﻟﻚ ﻛﻦ ﻣﺘﺄﻛﺪً ﻣﻦ أن‬
                                                    ‫اﻟﺘﺠﺎرب اﻟﺘﻲ ﺗﻘﻮم ﺑﮫﺎ ھﻲ ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻏﯿﺮ ھﺎﻣﺔ .‬
‫‪delete from users‬‬
‫; 1 = ‪where id‬‬
 ‫وھﺬا اﻟﺤﺬف ﺳﯿﺘﻢ ﻋﻠﻰ اﻟﺼﻒ اﻟﺬي ﻳﺘﺤﻘﻖ ﻋﻠﯿﻪ اﻟﺸﺮط ، وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻋﻠﻰ اﻟﺼﻒ ﻣﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ‬
                                                                ‫ﻳﺤﺘﻮي ﻓﯿﮫﺎ اﻟﺤﻘﻞ ‪ id‬ﻋﻠﻰ اﻟﻘﯿﻤﺔ 1 .‬
                                                                          ‫اﻟﺪوال ) ‪: ( Function‬‬
 ‫ﻳﻮﺟﺪ ﻓﻲ ‪ PHP‬اﻟﻌﺪﻳﺪ ﻣﻦ اﻟﺪوال اﻟﺘﻲ ﺗﻘﻮم ﺑﻮﻇﯿﻔﺔ ﻣﻌﯿﻨﺔ ) ﻣﺤﺪدة ( ﻛﺬﻟﻚ ﺗﻮﺟﺪ إﻣﻜﺎﻧﯿﺔ إﻧﺸﺎء دوال ﺗﺆدي‬
                                ‫وﻇﯿﻔﺔ ﺧﺎﺻﺔ وﺣﺪﻳﺜﻨﺎ ھﻨﺎ ﻋﻦ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺪوال ) ﻛﯿﻔﯿﺔ إﻧﺸﺎء دوال (‬
   ‫اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﺘﻨﻔﯿﺬ ﺷﺊ ﻣﻌﯿﻦ ﺣﯿﺚ ﺗﺄﺧﺬ ) ﻣﺘﻐﯿﺮات – ﻣﻌﻄﯿﺎت ( ﺛﻢ ﺗﻘﻮم ﺑﻤﻌﺎﻟﺠﺔ ھﺬه اﻟﻤﺘﻐﯿﺮات وﺗﺨﺮج‬
                                                                                        ‫ﻗﯿﻤﺔ أﺧﺮى .‬

                                                                         ‫- اﻟﺸﻜﻞ اﻟﻌﺎم – اﻟﺘﺮﻛﯿﺐ :‬
‫) اﻟﻤﻌﻄﯿﺎت – اﻟﻤﺘﻐﯿﺮات – اﻟﺒﺎراﻣﺘﺮ ( اﺳﻢ اﻟﺪاﻟﺔ ‪Function‬‬
‫{‬
 ‫ھﻨﺎ ﻳﺘﻢ ﻛﺘﺎﺑﺔ اﻟﻜﻮد‬
‫; ) اﻟﻤﻌﻄﯿﺎت – اﻟﻤﺘﻐﯿﺮات – اﻟﺒﺎراﻣﺘﺮ ( ‪Return‬‬
‫}‬

                                                                                ‫- ﺗﻌﺮﻳﻒ اﻟﺪاﻟﺔ :‬
   ‫ﻟﻜﻲ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻒ داﻟﺔ ﻧﻜﺘﺐ ﻛﻠﻤﺔ ‪ function‬ﺑﻌﺪھﺎ اﺳﻢ اﻟﺪاﻟﺔ وﺑﻌﺪ اﻻﺳﻢ ﻧﻜﺘﺐ اﻟﻤﻌﻄﯿﺎت – اﻟﻤﺘﻐﯿﺮات‬
                                                                                    ‫ﺑﯿﻦ ﻗﻮﺳﯿﻦ .‬

                                                                                               ‫ﻣﺜﺎل :‬
‫?<‬
‫)‪Function aa($s‬‬
‫>?‬
                                          ‫ﺣﯿﺚ ‪ aa‬ھﻮ اﺳﻢ اﻟﺪاﻟﺔ ، وﺑﺎﻟﺘﺄﻛﯿﺪ ﻳﻤﻜﻦ أن ﻳﻜﻮن أي اﺳﻢ .‬
                       ‫)‪ ($s‬ھﻮ ) اﻟﻤﺘﻐﺮ – اﻟﻤﻌﻄﻰ – اﻟﺒﺎراﻣﺘﺮ ( ، أي اﺳﻢ ﻣﻦ ھﺬه ﻛﻤﺎ ﺗﺤﺐ أن ﺗﺴﻤﯿﻪ .‬
                                              ‫ﻣﻊ ﻣﻼﺣﻈﺔ ﻋﺪم وﺿﻊ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮﻃﺔ ﺑﻌﺪ ھﺬا اﻟﺴﻄﺮ .‬

 ‫ﺑﻌﺪ ذﻟﻚ ﻧﻘﻮم ﺑﻜﺘﺎﺑﺔ ﻛﻮد اﻟﺪاﻟﺔ ) ﻋﻤﻞ اﻟﺪاﻟﺔ ( ﺑﯿﻦ اﻟﻌﻼﻣﺘﯿﻦ } { ، ﻛﻤﺎ ﻳﺠﺐ أن ﻧﻨﮫﻲ اﻟﺪاﻟﺔ ﺑﻜﻠﻤﺔ ‪return‬‬
     ‫ﻹﻋﻼم اﻟﺪاﻟﺔ ﺑﺄن وﻇﯿﻔﺘﮫﺎ ﻗﺪ اﻧﺘﮫﺖ ﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ ذﻛﺮ اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﻤﺬﻛﻮر ﻓﻲ ﺗﻌﺮﻳﻒ اﻟﺪاﻟﺔ ﺳﺎﺑﻘﺎ ..‬

                                                                                               ‫ﻣﺜﺎل :‬
‫?<‬
‫; )‪Return($s‬‬
‫>?‬

                                                                          ‫- اﺳﺘﺨﺪاﻣﺎت اﻟﺪاﻟﺔ :‬
      ‫ﻳﻤﻜﻦ وﺿﻊ اﻟﺪاﻟﺔ ﻓﻲ أي ﻣﻜﺎن ﻓﻲ ﺷﻔﺮة ‪ php‬ﻓﻲ أوﻟﮫﺎ أو آﺧﺮھﺎ ﺑﻤﻌﻨﻰ اﻧﻪ ﻳﻤﻜﻦ اﺳﺘﺪﻋﺎء داﻟﺔ ﺗﻢ‬
                                                               ‫ﺗﻌﺮﻳﻔﮫﺎ ﻓﻲ أﺧﺮ اﻟﺸﻔﺮة أو اﻟﻌﻜﺲ .‬

                                                              ‫- إﻇﮫﺎر ﻧﺘﯿﺠﺔ اﻟﺪاﻟﺔ ) ﻃﺒﺎﻋﺔ اﻟﺪاﻟﺔ ( :‬
                                  ‫ﻧﺴﺘﺨﺪم اﻷﻣﺮ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻄﺒﺎﻋﺔ ‪ echo‬أو ‪ print‬وﺑﻌﺪه ﻃﺒﻌﺎ اﺳﻢ اﻟﺪاﻟﺔ ..‬

                                                                                               ‫ﻣﺜﺎل :‬
‫?<‬
‫;)5(‪echo aa‬‬
‫;)5(‪print aa‬‬
‫>?‬
                                                                                             ‫ﻣﺜﺎل ﻛﺎﻣﻞ :‬
‫?<‬
 ‫//ﺗﻌﺮﻳﻒ اﻟﺪاﻟﺔ‬
‫)‪function aa($a‬‬
‫{‬
‫;‪$a=$a*$a*$a*$a‬‬
‫;)‪return($a‬‬
‫}‬
 ‫//ﻃﺒـﺎﻋﺔ ﻧﺎﺗﺞ اﻟﺪاﻟﺔ ﻋﻨﺪ ادﺧﺎل اﻟﺮﻗﻢ 5 ﻓﯿﮫﺎ‬
‫;)5(‪echo aa‬‬
‫>?‬
  ‫ھﺬه اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﺤﺴﺎب ﻋﺪد ﻣﺮﻓﻮع ﻷس أرﺑﻌﺔ ﺑﻤﻌﻨﻰ أن اﻟﻌﺪد ﻣﻀﺮوب ﻓﻲ ﻧﻔﺴﻪ أرﺑﻊ ﻣﺮات اﺳﻢ اﻟﺪاﻟﺔ‬
  ‫‪ aa‬وﻋﻨﺪ ﻃﺒﺎﻋﺔ ﻣﺨﺮﺟﺎت اﻟﺪاﻟﺔ ﻟﺮﻗﻢ ، ﻛﺘﺒﻨﺎ أﻣﺮ اﻟﻄﺒﺎﻋﺔ ﻗﺒﻞ اﺳﻢ اﻟﺪاﻟﺔ واﻟﺮﻗﻢ اﻟﻤﺮاد ﺣﺴﺎب اﻷس اﻟﺮاﺑﻊ‬
  ‫ﻟﻪ ﺑﯿﻦ ﻗﻮﺳﯿﻦ )5( وھﻜﺬا إذا وﺿﻌﻨﺎ أي رﻗﻢ آﺧﺮ ﺳﻮف ﺗﻘﻮم اﻟﺪاﻟﺔ ﺑﺤﺴﺎب اﻷس اﻟﺮاﺑﻊ ﻟﻠﺮﻗﻢ ﻣﺒﺎﺷﺮ وﻓﻲ‬
                                                                        ‫ﻣﺜﺎﻟﻨﺎ ھﺬا ﻳﺘﻢ ﻃﺒﻊ اﻟﺮﻗﻢ 526 .‬

  ‫ﻧﻘﻄﺔ أﺧﺮى ھﻲ أﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺘﻤﺮﻳﺮ ﻗﯿﻤﺔ ﺛﺎﺑﺘﺔ اﻟﻰ اﻟﺪاﻟﺔ ، وﻟﺬﻟﻚ ﻳﻤﻜﻨﻨﺎ أن ﻧﻤﺮر ﻟﻠﺪاﻟﺔ ﻣﺘﻐﯿﺮ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل‬
                                                                                                 ‫اﻟﺘﺎﻟﻲ :‬
‫?<‬
‫)‪function as($a‬‬
‫{‬
‫; 3*‪$a=$a*$a*$a‬‬
‫; )‪return($a‬‬
‫}‬
‫; 01=‪$z‬‬
‫; )‪echo as ($z‬‬
‫>?‬
 ‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺗﻘﻮم اﻟﺪاﻟﺔ ﺑﻀﺮب اﻟﻌﺪد ﻓﻲ ﻧﻔﺴﻪ ﺛﻼث ﻣﺮات ﺛﻢ ﻓﻲ اﻟﺮﻗﻢ 3 ، وﻧﻼﺣﻆ أﻧﻨﺎ ﻣﺮرﻧﺎ اﻟﻤﺘﻐﯿﺮ ‪$z‬‬
      ‫اﻟﻰ اﻟﺪاﻟﺔ ‪ as‬وﻛﺘﺒﻨﺎھﺎ ﺟﻤﯿﻌﮫﺎ ﻓﻲ ﺳﻄﺮ ﻃﺒﺎﻋﺔ ﻧﺘﯿﺠﺔ اﻟﺪاﻟﺔ ﺑﺎﻷﻣﺮ ‪ . echo‬وﻟﺬﻟﻚ ﺗﻘﻮم اﻟﺪاﻟﺔ ﻓﻲ ھﺬا‬
        ‫اﻟﻤﺜﺎل ﺑﻀﺮب اﻟﺮﻗﻢ 01 ﻓﻲ ﻧﻔﺴﻪ ﺛﻼث ﻣﺮات ﺛﻢ ﻓﻲ 3 ﻳﻜﻮن اﻟﻨﺎﺗﺞ 0003 وﻣﻦ ﺛﻢ ﻳﺘﻢ ﻃﺒﺎﻋﺔ اﻟﻨﺎﺗﺞ ،‬
                                             ‫وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻛﻠﻤﺎ ﻏﯿﺮﻧﺎ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ أﺧﺘﻠﻔﺖ ﻧﺘﯿﺠﺔ اﻟﺪاﻟﺔ .‬

                                                                            ‫اﻟﻌﻤﻠﯿﺎت اﻟﺮﻳﺎﺿﯿﺔ :‬     ‫-‬

 ‫ھﻲ ﻧﻔﺴﮫﺎ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ درﺳﺘﮫﺎ ﻓﻲ اﻟﻤﺮﺣﻠﺔ اﻻﺑﺘﺪاﺋﯿﺔ ﻣﻦ ) ﺟﻤﻊ + ، ﻃﺮح - ، ﺿﺮب * ، ﻗﺴﻤﺔ / (‬
                                  ‫واﻟﺰاﺋﺪ ﻋﻠﯿﮫﻢ اﻟﺘﻲ ﻟﻢ ﺗﺪرﺳﻪ ﺗﻘﺮﻳﺒﺎ ھﻮ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ) % ( ..‬

                                                         ‫ﻣﺜﺎل ﺷﺎﻣﻞ ﻋﻠﻰ ﻛﻞ اﻟﻌﻤﻠﯿﺎت ﻓﻲ اﻟـ ‪: PHP‬‬
‫?<‬
‫;6 = ‪$a‬‬
‫;2=‪$b‬‬
‫;‪$c= $a +$b‬‬
‫ﺳﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﻧﺎﺗﺞ اﻟﺠﻤﻊ 8 //‬

‫;‪$c= $a -$b‬‬
‫ﺳﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﻧﺎﺗﺞ اﻟﻄﺮح 4 //‬

‫;‪$c= $a * $b‬‬
‫ﺳﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﻧﺎﺗﺞ اﻟﻀﺮب 21 //‬
‫;‪$c= $a /$b‬‬
‫ﺳﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﻧﺎﺗﺞ اﻟﻘﺴﻤﺔ 3 //‬

‫;7 = ‪$a‬‬
‫;2=‪$b‬‬
‫;‪$c= $a % $b‬‬
‫ﺳﻮف ﻧﺤﺼﻞ ﻋﻠﻰ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ 1 //‬
‫>?‬

                                                                  ‫- ﻋﻤﻠﯿﺎت ‪: Assignment‬‬

                                                                                         ‫=‬
                                ‫اﺣﻔﻆ اﻟﻘﯿﻤﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ ، ﺑﻤﻌﻨﻰ ﺧﺰن اﻟﻘﯿﻤﺔ 3 ﻓﻲ اﻟﻤﺘﻐﯿﺮ ‪: $a‬‬
‫?<‬
‫;3 = ‪$a‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ 3 //‬
‫>?‬

                                                                                     ‫=+‬
                                                     ‫إﺿﺎﻓﺔ ﻗﯿﻤﺔ إﻟﻰ ﻗﯿﻤﺔ ﻓﻲ ﻧﻔﺲ اﻟﻤﺘﻐﯿﺮ :‬
‫?<‬
‫;3 = ‪$a‬‬
‫;3 =+ ‪$a‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ 6 //‬
‫>?‬
                                                                                         ‫=-‬
                                             ‫اﻃﺮح اﻟﻤﻘﺪار واﺣﺪ ﻣﻦ اﻟﻤﻘﺪار ﺛﻼﺛﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ $‪a‬‬
‫?<‬
‫;3 = ‪$a‬‬
‫;1 =- ‪$a‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ 2 //‬
‫>?‬
                                                                                        ‫=*‬
                                 ‫ﻳﻀﺮب اﻟﻘﯿﻤﺔ 3 ﺑﺎﻟﻘﯿﻤﺔ 2 وﻳﻜﻮن اﻟﻨﺎﺗﺞ ﻣﺨﺰن ﻓﻲ ﻧﻔﺲ اﻟﻤﺘﻐﯿﺮ :‬
‫?<‬
‫;3 = ‪$a‬‬
‫;2 =* ‪$a‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ اﻟﻨﺎﺗﺞ 6 //‬
‫>?‬
                                                                                    ‫=/‬
                                                              ‫ﻳﻘﺴﻢ ﻗﯿﻤﺔ ﻋﻠﻰ ﻗﯿﻤﻪ أﺧﺮى :‬
‫?<‬
‫;6 = ‪$a‬‬
‫;2 =/ ‪$a‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ ﻧﺎﺗﺞ اﻟﻘﺴﻤﺔ 3 //‬
‫>?‬
                                                                                                ‫=.‬
                                                                                 ‫دﻣﺞ ﺳﻠﺴﻠﺔ ﺣﺮﻓﯿﺔ :‬
‫?<‬
‫;" ‪$a = "This is‬‬
‫;".‪$a .= "a test‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ : //‬
‫.‪// This is a test‬‬
‫>?‬

                                                                      ‫- ﻋﻮاﻣﻞ اﻹﺿﺎﻓﺔ و اﻟﻄﺮح :‬
  ‫ﻟﻮ اﻓﺘﺮﺿﻨﺎ أﻧﻨﺎ ﻟﺪﻳﻨﺎ اﻟﻤﺘﻐﯿﺮ $3=‪ a‬و أردﻧﺎ إﺿﺎﻓﺔ واﺣﺪ إﻟﯿﻪ ﺑﺤﯿﺚ ﻳﺼﺒﺢ 4 أو ﻃﺮح واﺣﺪ ﻣﻨﻪ ﺑﺤﯿﺚ ﻳﺼﺒﺢ 2 ،‬
                                                                              ‫ﻟﺪﻳﻨﺎ اﻟﻌﻮاﻣﻞ اﻟﺘﺎﻟﯿﺔ :‬

                                                                ‫$‪ ++a‬ارﺟﻊ ﻗﯿﻤﺔ ‪ a‬ﺛﻢ اﺿﻒ واﺣﺪ إﻟﯿﮫﺎ‬
                                                                 ‫++$‪ a‬اﺿﻒ واﺣﺪ إﻟﯿﮫﺎ ﺛﻢ ارﺟﻊ اﻟﻘﯿﻤﺔ‬
                                                                  ‫$‪ --a‬ارﺟﻊ اﻟﻘﯿﻤﺔ ﺛﻢ اﻃﺮح واﺣﺪ ﻣﻨﮫﺎ‬
                                                                        ‫--$‪ a‬اﻃﺮح واﺣﺪ ﺛﻢ ارﺟﻊ اﻟﻘﯿﻤﺔ‬

                                                                                        ‫++‪value‬‬
                                                                   ‫ﻳﺘﻢ إﺿﺎﻓﺔ واﺣﺪ إﻟﻰ اﻟﺮﻗﻢ ﺧﻤﺴﺔ :‬
‫?<‬
‫;5 = ‪$a‬‬
‫;‪print ++$a‬‬
‫ﻳﻄﺒﻊ اﻟﻘﯿﻤﺔ 6 //‬
‫>?‬
                                                                                        ‫‪++value‬‬
                                             ‫ﻳﺮﺟﻊ اﻟﻘﯿﻤﺔ ﻧﻔﺴﮫﺎ وﻓﻲ اﺳﺘﺨﺪام ﺛﺎﻧﻲ ﺗﺰﻳﺪ اﻟﻘﯿﻤﺔ واﺣﺪ :‬
‫?<‬
‫;5 = ‪$a‬‬
‫;++‪print $a‬‬
‫ﻃﺒﺎﻋﺔ اﻟﺮﻗﻢ 6 //‬
‫;">‪print "<br‬‬
‫;‪print $a‬‬
‫ﻃﺒﺎﻋﺔ اﻟﺮﻗﻢ 5 //‬
‫>?‬
                                                                                             ‫--‪value‬‬
                                                                               ‫ﻳﻄﺮح ﻣﻦ اﻟﻘﯿﻤﺔ واﺣﺪ :‬
‫?<‬
‫;5 = ‪$a‬‬
‫;‪print --$a‬‬
‫ﻳﻄﺒﻊ اﻟﺮﻗﻢ 4 //‬
‫>?‬
                                                                                        ‫‪--value‬‬
                                              ‫ﻳﺮﺟﻊ اﻟﻘﯿﻤﺔ ﻧﻔﺴﮫﺎ وﻓﻲ اﺳﺘﺨﺪام ﺛﺎﻧﻲ ﻳﻄﺮح ﻣﻨﮫﺎ واﺣﺪ :‬
‫?<‬
‫;5 = ‪$a‬‬
‫;--‪print $a‬‬
‫ﻳﻄﺒﻊ اﻟﺮﻗﻢ 4 //‬
‫;">‪print "<br‬‬
‫;‪print $a‬‬
‫ﻳﻄﺒﻊ اﻟﺮﻗﻢ 5 //‬
‫>?‬

                                                    ‫- ﻋﻤﻠﯿﺎت اﻟﻤﻘﺎرﻧﺔ ‪: Comparasion Operators‬‬

                                                                       ‫$‪ a == $b‬اﻟﻤﺘﻐﯿﺮان ﻣﺘﺴﺎوﻳﺎن ..‬
                                                    ‫$‪ a ===$b‬اﻟﻤﺘﻐﯿﺮان ﻣﺘﺴﺎوﻳﺎن و ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ..‬
                                                              ‫$‪ b$=! a‬اﻟﻤﺘﻐﯿﺮ اﻻول ﻻ ﻳﺴﺎوي اﻟﺜﺎﻧﻲ ..‬
                                       ‫$‪ a !==$b‬اﻟﻤﺘﻐﯿﺮ اﻻول ﻻ ﻳﺴﺎوي اﻟﺜﺎﻧﻲ وﻟﯿﺲ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ..‬
                                                                                     ‫$‪ b$ < a‬أﻛﺒﺮ ﻣﻦ ..‬
                                                                                   ‫$‪ b$ > a‬أﺻﻐﺮ ﻣﻦ ..‬
                                                                          ‫$‪ b$=< a‬أﻛﺒﺮ ﻣﻦ او ﻳﺴﺎوي ..‬
                                                                         ‫$‪ b$=> a‬أﺻﻐﺮ ﻣﻦ او ﻳﺴﺎوي ..‬

                                                                                      ‫== )ﺗﺴﺎوي(‬
                           ‫ﺗﺴﺎوي اﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻷول ﺑﺎﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;"7" = ‪$y‬‬
 ‫" . ‪if ($x == $y) print $x‬ﺗﺴﺎوي ;‪" . $y‬‬
 ‫//ﻳﻄﺒﻊ 7 ﺗﺴﺎوي 7‬
‫>?‬
                                                                  ‫=== ) ﺗﺴﺎوي وﻣﻦ ﻧﻔﺲ اﻟﻨﻮع (‬
 ‫ﺗﺴﺎوي اﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻷول ﺑﺎﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ وﺗﻜﻮن اﻟﻘﯿﻢ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع )‬
                                                                                    ‫ﺣﺮﻓﯿﺔ – ﻋﺪدﻳﺔ ( :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;7 = ‪$y‬‬
‫;‪if ($x === $y) print $x . " is identical to " . $y‬‬
‫7 ‪ is identical to‬ﻳﻄﺒﻊ 7 //‬
‫>?‬
                                                                                    ‫!= ) ﻻ ﺗﺴﺎوي (‬
                                                    ‫إذا ﻛﺎﻧﺖ اﻟﻘﯿﻢ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮﻳﻦ ﻏﯿﺮ ﻣﺘﺴﺎوﻳﯿﻦ :‬
‫?<‬
‫;8 = ‪$x‬‬
‫;4 = ‪$y‬‬
‫;‪ " . $y‬ﺗﺴﺎوي ﻻ " . ‪if ($x != $y) print $x‬‬
‫ﻳﻄﺒﻊ 8 ﻻ ﺗﺴﺎوي 4 //‬
‫>?‬
                                                               ‫!== ) ﻻ ﺗﺴﺎوي وﻻ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع (‬
                            ‫إذا ﻛﺎﻧﺖ اﻟﻘﯿﻢ اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮﻳﻦ ﻏﯿﺮ ﻣﺘﺴﺎوﻳﯿﻦ وﻟﯿﺴﺖ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع :‬
‫?<‬
‫;8 = ‪$x‬‬
‫;9 = ‪$y‬‬
‫;‪ " . $y‬ﻣﻦ ﻧﻔﺲ ﻧﻮع ﻟﯿﺴﺖ‪if ($x !== $y) print $x . " i‬‬
‫ﻳﻄﺒﻊ 8 ﻟﯿﺴﺖ ﻣﻦ ﻧﻔﺲ ﻧﻮع 9 //‬
‫>?‬
                                                                                        ‫> ) أﻗﻞ ﻣﻦ (‬
                                                              ‫ﻣﻘﺎرﻧﺔ ﺑﯿﻦ ﻗﯿﻤﺘﯿﻦ واﺣﺪة أﻗﻞ ﻣﻦ اﻻﺧﺮى :‬
‫?<‬
‫;5 = ‪$x‬‬
‫;9 = ‪$y‬‬
‫;‪ " . $y‬ﻣﻦ أﻗﻞ " . ‪if ($x < $y) print $x‬‬
‫ﻳﻄﺒﻊ 5 أﻗﻞ ﻣﻦ 9 //‬
‫>?‬
                                                                                      ‫< ) أﻛﺒﺮ ﻣﻦ (‬
                                                              ‫ﻣﻘﺎرﻧﺔ ﺑﯿﻦ ﻗﯿﻤﺘﯿﻦ واﺣﺪة أﻛﺒﺮ ﻣﻦ اﻻﺧﺮى :‬
‫?<‬
‫; 9 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;‪ " . $y‬ﻣﻦ اﻛﺒﺮ " . ‪if ($x > $y) print $x‬‬
‫ﻳﻄﺒﻊ 9 أﻛﺒﺮ ﻣﻦ 5 //‬
‫>?‬
                                                                          ‫>= ) أﻗﻞ ﻣﻦ وﻳﺴﺎوي (‬
                                                ‫ﻣﻘﺎرﻧﺔ ﺑﯿﻦ ﻗﯿﻤﺘﯿﻦ واﺣﺪة أﻗﻞ ﻣﻦ اﻻﺧﺮى أو ﻣﺴﺎوﻳﺔ ﻟﮫﺎ :‬
‫?<‬
‫;5 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;‪if ($x <= $y) print $x‬‬
‫ﻳﻄﺒﻊ اﻟﻘﯿﻤﺔ 5 //‬
‫>?‬
                                                                          ‫<= ) أﻛﺒﺮ ﻣﻦ وﻳﺴﺎوي (‬
                                                ‫ﻣﻘﺎرﻧﺔ ﺑﯿﻦ ﻗﯿﻤﺘﯿﻦ واﺣﺪة أﻛﺒﺮ ﻣﻦ اﻻﺧﺮى و ﻣﺴﺎوﻳﺔ ﻟﮫﺎ :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;‪if ($x >= $y) print $x‬‬
‫ﻳﻄﺒﻊ اﻟﻘﯿﻤﺔ 7 //‬
‫>?‬

                                                    ‫اﻟﻌﻤﻠﯿﺎت اﻟﻤﻨﻄﻘﯿﺔ ‪: Logical Operations‬‬
   ‫ﻟﻜﻲ ﺗﻜﻮن ﻗﯿﻤﺔ اﻟﺸﺮط ﺻﺤﯿﺤﺔ ﻓﯿﺠﺐ أن ﺗﻨﻄﺒﻖ اﻟﻘﻮاﻋﺪ اﻟﺘﺎﻟﯿﺔ اﻟﺨﺎﺻﺔ ﺑﻜﻞ ﻋﺎﻣﻞ ﻣﻨﻄﻘﻲ ﻋﻠﻰ ﺣﺪة ،‬
                                                                               ‫واﻟﻌﻮاﻣﻞ ھﻲ :‬
                                                           ‫) ‪ ( and‬ﻳﺠﺐ ﺗﺤﻘﻖ اﻻﺛﻨﯿﻦ $‪a and $b‬‬
                                                    ‫) ‪ ( or‬ﻳﺠﺐ ﺗﺤﻘﻖ ﻛﻼھﻤﺎ او اﺣﺪھﻤﺎ $‪a or $b‬‬
                                             ‫) ‪ ( Xor‬ﻳﺠﺐ ﺗﺤﻘﻖ اﺣﺪھﻤﺎ و ﻟﯿﺲ ﻛﻼھﻤﺎ $‪a xor $b‬‬
                                                        ‫) ! ( ﻧﻔﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻧﻔﻲ ﻟﻘﯿﻤﺔ ‪a !$a‬‬

‫ﻣﻼﺣﻈﺔ : ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ اﻟـ ) ‪ ( and‬ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ) & ( واﻟـ ) ‪ ( or‬ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ) | ( واﻟـ ) ‪ ( Xor‬ﺑﺎﻟﺸﻜﻞ‬
                                                                                           ‫اﻟﺘﺎﻟﻲ ) ^ ( ..‬

                                                                                       ‫‪ ) And‬و (‬
      ‫إذا ﺗﺤﻘﻖ اﻟﺸﺮﻃﺎن ، ﺑﻤﻌﻨﻰ اﻟﻤﺘﻐﯿﺮ اﻷول ﻳﺴﺎوي 7 واﻟﻤﺘﻐﯿﺮ اﻟﺜﺎﻧﻲ ﻳﺴﺎوي 5 ﻧﻔﺬ أﻣﺮ اﻟﻄﺒﺎﻋﺔ واﻃﺒﻊ‬
                                                                                          ‫ﺻﺤﯿﺢ :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;"ﺻﺤﯿﺢ" ‪if (($x == 7) and ($y == 5)) print‬‬
‫ﻳﺘﻢ ﻃﺒﺎﻋﺔ ﺻﺤﯿﺢ //‬
‫>?‬
                                                                                         ‫‪ ) Or‬أو (‬
                                        ‫إذا ﻛﺎن أﺣﺪ اﻟﺸﺮﻃﯿﻦ ﺻﺤﯿﺢ أو اﻻﺛﻨﯿﻦ ﺻﺤﯿﺤﯿﻦ ﻧﻔﺬ أﻣﺮ اﻟﻄﺒﺎﻋﺔ :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;"‪if (($x == 7) or ($y == 8)) print "True‬‬
‫ﻳﻄﺒﻊ ‪// True‬‬
‫>?‬
                                                                                              ‫‪Xor‬‬
                                            ‫إذا ﺗﺤﻘﻖ أﺣﺪ اﻟﺸﺮﻃﯿﻦ وﻟﯿﺲ اﻻﺛﻨﯿﻦ ﻣﻌﺎ ﻳﻨﻔﺬ أﻣﺮ اﻟﻄﺒﺎﻋﺔ :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;"‪if (($x == 7) xor ($y == 8)) print "True‬‬
‫ﺗﺤﻘﻖ ﺷﺮط واﺣﺪ ﻓﻘﻂ ﻓﯿﺘﻢ ﻃﺒﺎﻋﺔ ﻛﻠﻤﺔ ‪// True‬‬
‫>?‬
                                                                                        ‫! ) اﻟﻨﻔﻲ (‬
                                                    ‫إذا ﻛﺎﻧﺖ ﺟﻤﻠﺔ اﻟﺸﺮط ﻏﯿﺮ ﺻﺤﯿﺤﺔ ﻧﻔﺬ أﻣﺮ اﻟﻄﺒﺎﻋﺔ :‬
‫?<‬
‫;5 = ‪$y‬‬
‫;"‪if (! ($y == 10)) print "True‬‬
‫ﻷن اﻟﻤﺘﻐﯿﺮ اﻟﻘﯿﻤﺔ اﻟﻤﺨﺰﻧﺔ ﻓﯿﻪ ﻏﯿﺮ ﺻﺤﯿﺤﺔ ‪ True‬ﻳﻄﺒﻊ‬
‫>?‬
                                                                                           ‫&&‬
                   ‫اﻟﻤﻌﺎﻣﻞ && ﻟﻪ ﻧﻔﺲ وﻇﯿﻔﺔ ) ‪ ( and‬ﻟﻜﻦ اﻻﺧﺘﻼف ﻓﻲ ﺗﺮﺗﯿﺐ ﺗﻨﻔﯿﺬ أوﻟﻮﻳﺎت اﻟﻌﻤﻠﯿﺎت :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;"‪if (($x == 7) && ($y == 5)) print "True‬‬
‫ﻳﻄﺒﻊ ‪// True‬‬
‫>?‬
                                                                                               ‫||‬
                       ‫اﻟﻤﻌﺎﻣﻞ || ﻟﻪ ﻧﻔﺲ وﻇﯿﻔﺔ ) ‪ ( or‬ﻟﻜﻦ اﻻﺧﺘﻼف ﻓﻲ ﺗﺮﺗﯿﺐ ﺗﻨﻔﯿﺬ أوﻟﻮﻳﺎت اﻟﻌﻤﻠﯿﺎت :‬
‫?<‬
‫;7 = ‪$x‬‬
‫;5 = ‪$y‬‬
‫;"‪if (($x == 7) || ($y == 5)) print "True‬‬
‫ﻳﻄﺒﻊ ‪// True‬‬
‫>?‬

‫ﻻھﻤﯿﺔ ﻣﻮﺿﻮع ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ، ﺳﻮف ﻧﻘﻮم ﻓﻲ ھﺬه اﻟﺪورة ﺑﺘﻐﻄﯿﺔ دوال ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وھﻲ اﺛﻨﺘﺎن وﺛﻼﺛﻮن‬
                                                                           ‫داﻟﺔ ﻓﺈﻟﻰ اﻟﺪرس اﻷول :‬

                                                                        ‫1- اﻟﺪاﻟﺔ ‪: mysql_connect‬‬
‫,‪integer mysql_connect(string host, string username‬‬
‫;)‪string password‬‬
        ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻻﺗﺼﺎل ﻣﻊ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﺗﻌﯿﺪ ﻟﻚ رﻗﻢ ﻳﻔﯿﺪك اذا ﻛﺎن ﻟﺪﻳﻚ أﻛﺜﺮ ﻣﻦ اﺗﺼﺎل ﺑﻘﻮاﻋﺪ‬
          ‫اﻟﺒﯿﺎﻧﺎت ، اﺣﺘﻔﻆ ﺑﻪ ﻻﺳﺘﺨﺪاﻣﻪ ﻓﻲ دوال أﺧﺮى ﺗﺎﻟﯿﺔ اذا ﻛﺎن ھﻨﺎك ﺣﺎﺟﺔ ﻟﺬﻟﻚ ﻛﻤﺎ ﻗﻠﻨﺎ ، اﻣﺎ اﻟﻮﺿﻊ‬
   ‫اﻟﻄﺒﯿﻌﻲ ﻓﻼ ﻳﺤﺘﺎج اﻻ اﻟﻰ اﻻﺗﺼﺎل ﺑﺎﻟﻄﺮﻳﻘﺔ اﻟﺴﺎﺑﻘﺔ ﻓﻘﻂ وﺑﺪون اﻻﺣﺘﻔﺎظ ﺑﺄي رﻗﻢ ، ﻓﻘﻂ ﻣﺮر ﻟﻠﺪاﻟﺔ اﺳﻢ‬
  ‫اﻟﺨﺎدم واﺳﻢ اﻟﻤﺴﺘﺨﺪم وﻛﻠﻤﺔ اﻟﻤﺮور ، وﻟﻜﻦ ﻳﺘﻮﺟﺐ ﻋﻠﯿﻚ ﺑﻌﺪ اﻻﻧﺘﮫﺎء أن ﺗﻐﻠﻖ اﻻﺗﺼﺎل ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ‬
                                                                                          ‫‪mysql_close‬‬
                                                                                                 ‫ﻣﺜﺎل :‬
‫?<‬
‫;)"‪$link = mysql_connect("db.azzozhsn.f2s.com","mag","Pass‬‬
‫>?‬
                                                                  : mysql_pconnect ‫2- اﻟﺪاﻟﺔ‬
integer mysql_pconnect(string host, string username,
strin password);
                 :‫ھﺬه اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﻤﺎ ﺗﻘﻮم ﺑﻪ اﻟﺪﻟﺔ اﻟﺴﺎﺑﻘﺔ إﻻ أﻧﻪ ﻻ ﻳﺘﻮﺟﺐ ﻋﻠﯿﻚ إﻏﻼق اﻻﺗﺼﺎل ، ﻣﺜﺎل‬
<?
$link = mysql_pconnect("db.azzozhsn.f2s.com","mag","Pass");
?>

                                                                    : mysql_select_db ‫3- اﻟﺪاﻟﺔ‬
boolean mysql_select_db(string database, integer link);
                                               :‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﺧﺘﯿﺎر ﻗﺎﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺤﺪد ﻟﮫﺎ. ﻣﺜﺎل‬
<?
mysql_select_db(string database, integer link);
?>

                                                                  : mysql_db_query ‫4- اﻟﺪاﻟﺔ‬
boolean mysql_db_query(string database, string query,
integer link);
               :‫ ﻣﺜﺎل‬database ‫ ﻋﻠﻰ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻔﺘﻮﺣﺔ ﺑﺎﻟﻤﻌﻄﻰ‬SQL ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﻨﻔﯿﺬ ﺳﻄﺮ‬
<?
$link = mysql_connect("db.azzozhsn.f2s.com","mag","Pass");
$Query = "DELETE FROM magazine";
$result = mysql_db_query("mag", $Query, $link);
?>

                                                                          : mysql_close ‫5- اﻟﺪاﻟﺔ‬
boolean mysql_close(integer link);
     mysql_connect ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻘﻄﻊ ) إﻏﻼق( ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ، ﻣﺮر ﻟﮫﺎ رﻗﻢ اﻻﺗﺼﺎل اﻟﻤﻌﺎد ﻣﻦ اﻟﺪاﻟﺔ‬
                                                                                               :‫ﻣﺜﺎل‬
<?
// ‫.. اﻟﺒﯿﺎﻧﺎت اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة‬
$link = mysql_connect("localhost","mag","Pass");
// ‫.. اﻏﻼق اﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬
mysql_close($link);
?>

                                                                        :mysql_query ‫6- اﻟﺪاﻟﺔ‬
integer = mysql_query(string query, integer link);
                                           ‫ﺎ‬
  ‫ ﻳﻘﺘﺼﺮ ﻋﻤﻠﮫﺎ ﻋﻠﻰ‬mysql_query ‫ ﺗﻘﺮﻳﺒً إﻻ أن اﻟﺪاﻟﺔ‬mysql_db_query ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻤﺎ ﺗﻘﻮم ﺑﻪ اﻟﺪاﻟﺔ‬
                                                   . mysql_select_db ‫ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺤﺪدة ﺑﺎﻟﺪاﻟﺔ‬
                                 .‫ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﻤﺮﻳﺮ رﻗﻢ اﻻﺗﺼﺎل ﻓﺴﺘﻌﻤﻞ اﻟﺪاﻟﺔ ﻋﻠﻰ اﻻﺗﺼﺎل اﻷﺧﯿﺮ‬
                                                                                              :‫ﻣﺜﺎل‬
<?
$link = mysql_connect("localhost","mag","Pass");
$query = "DELETE FROM magazine";
$result = mysql_query($query, $link);
?>

                                                                       : mysql_errno ‫7- اﻟﺪاﻟﺔ‬
integer mysql_errno(integer link);
                              .‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻋﺎدة رﻗﻢ آﺧﺮ ﺧﻄﺄ ﺣﺪث ﻓﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬
                                                                             ‫8- اﻟﺪاﻟﺔ ‪: mysql_error‬‬
‫;)‪string mysql_error(integer link‬‬
                                               ‫ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ رﺳﺎﻟﺔ اﻟﺨﻄﺄ اﻟﺤﺎﺻﻞ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت .‬

                                                                      ‫9 - اﻟﺪاﻟﺔ ‪: mysql_create_db‬‬
‫;)‪boolean mysql_create_db(string databasename, integer link‬‬
       ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﻳﺪة ﻣﺮر ﻟﮫﺎ اﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ورﻗﻢ اﻻﺗﺼﺎل اﻟﻌﺎﺋﺪ ﻣﻦ اﻟﺪاﻟﺔ‬
                                                    ‫‪ mysql_connect‬أوﻣﻦ اﻟﺪاﻟﺔ ‪.. mysql_pconnect‬‬
                                                                                                   ‫ﻣﺜﺎل:‬
‫?<‬
‫اﻹﺗﺼـﺎل ﺑﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت اﺳﻤﮫﺎ ‪ az‬اﻟﺒﺎﺳﻮرد ﺣﯿﺚ أن اﻟﻔﺮاغ ھﻮ //‬
‫;)"" ,"‪$link = mysql_pconnect("localhost", "az‬‬
‫اﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﻳﺪة //‬
‫))"‪if (! mysql_create_db($link, "mag‬‬
‫{‬
    ‫)"اﻟﺠﺪﻳﺪة ﻓﺸﻞ إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت"(‪print‬‬
    ‫;)(‪exit‬‬
‫}‬
‫>?‬

                                                        ‫01- اﻟﺪاﻟﺔ ‪: mysql_drop_db‬‬
‫;)‪boolean mysql_drop_db(string databasename, integer link‬‬
                    ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺤﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺤﺪدة ﺑﺎﻟﻤﻌﻄﻰ ‪.. databasename‬‬

                                                                        ‫11- اﻟﺪاﻟﺔ ‪: mysql_list_dbs‬‬
‫;)‪integer mysql_list_dbs(integer link‬‬
        ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻋﺎدة ﻣﻮﺷﺮ ﻟﻜﻞ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺨﺎدم ﻟﻐﺮض اﺳﺘﻌﻤﺎﻟﮫﺎ ﻣﻊ اﻟﺪاﻟﺔ‬
                                                                    ‫‪ mysql_fetch_row‬وأﻣﺜﺎﻟﮫﺎ .‬

                                                                     ‫21- اﻟﺪاﻟﺔ ‪: mysql_field _seek‬‬
‫;)‪boolean mysql_field_seek(integer result, integer field‬‬
                                                ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺘﺤﺪﻳﺪ اﻟﺤﻘﻞ اﻟﻤﺮر إﻟﯿﮫﺎ رﻗﻤﻪ . ﻣﺜﺎل :‬
‫?<‬
‫اﻹﺗﺼـﺎل ﺑﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت اﺳﻤﮫﺎ ‪ az‬اﻟﺒﺎﺳﻮرد ﺣﯿﺚ أن اﻟﻔﺮاغ ھﻮ //‬
‫;)"","‪$dbLink = mysql_pconnect("localhost","az‬‬
‫أﺧﺘﯿـﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪// Authors‬‬
‫;)‪mysql_select_db("Authers", $dbLink‬‬
‫اﺧﺘﯿﺎر ﺟﻤﯿﻊ اﻟﺤﻘﻮل ﻣﻦ اﻟﺠﺪول ‪// Adress‬‬
‫;"‪$Query = "SELECT * FROM adress‬‬
‫;)‪$result = mysql_query($Query, $dbLink‬‬
                      ‫ا‬
‫اﻻﻧﺘﻘﺎل اﻟﻰ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ اﻋﺘﻤﺎدً ﻋﻠﻰ ﻋﻤﻠﯿﺔ اﻻﺧﺘﯿﺎر //‬
‫;)1 ,‪mysql_field_seek($reslut‬‬
‫>?‬

                                                                   ‫31- اﻟﺪاﻟﺔ ‪: mysql_field_name‬‬
‫;)‪string mysql_field_name(integer result, integer feild‬‬
     ‫ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ اﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺤﺪد ﺑﺎﻟﺮﻗﻢ اﻟﻤﺮر إﻟﯿﮫﺎ واﻟﺬي ﻳﺒﺪأ ﺑﺎﻟﺮﻗﻢ ﺻﻔﺮ ﻟﻠﺤﻘﻞ ) اﻟﻌﻤﻮد ( اﻷول .‬
                                                                               ‫ﻣﺜﺎﻟﮫﺎ ﺳﯿﺄﺗﻲ ﺑﻌﺪ ﻗﻠﯿﻞ .‬

                                                                     ‫41- اﻟﺪاﻟﺔ ‪: mysql_field_type‬‬
‫;)‪string mysql_field_type(integer result, integer feild‬‬
‫ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻧﻮع اﻟﺤﻘﻞ اﻟﻤﺤﺪد ﺑﺎﻟﺮﻗﻢ اﻟﻤﺮر إﻟﯿﮫﺎ واﻟﺬي ﻳﺒﺪأ ﺑﺎﻟﺮﻗﻢ ﺻﻔﺮ ﻟﻠﺤﻘﻞ ) اﻟﻌﻤﻮد ( اﻷول . اﻟﻤﺜﺎل‬
                                                                                    ‫ﺎ‬
                                                                                 ‫ﺳﯿﺄﺗﻲ ﺑﻌﺪ ﻗﻠﯿﻞ أﻳﻀً ..‬

                                                                       ‫51- اﻟﺪاﻟﺔ ‪: mysql_field_len‬‬
‫;)‪string mysql_field_len(integer result, integer feild‬‬
‫ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ ﻃﻮل اﻟﺤﻘﻞ ﺑﺎﻟﺒﺎﻳﺖ اﻟﻤﺤﺪد ﺑﺎﻟﺮﻗﻢ اﻟﻤﺮر إﻟﯿﮫﺎ واﻟﺬي ﻳﺒﺪأ ﺑﺎﻟﺮﻗﻢ ﺻﻔﺮ ﻟﻠﺤﻘﻞ ) اﻟﻌﻤﻮد ( اﻷول‬
                                                                                     ‫. اﻟﻤﺜﺎل ﺑﻌﺪ ﻗﻠﯿﻞ ..‬

                                                                      ‫61- اﻟﺪاﻟﺔ ‪: mysql_field_flags‬‬
‫;)‪string mysql_field_flags(integer result, integer feild‬‬
     ‫ﺗﻌﯿﺪ ھﺬه اﻟﺪاﻟﺔ وﺻﻒ اﻟﺤﻘﻞ اﻟﻤﺤﺪد ﺑﺎﻟﺮﻗﻢ اﻟﻤﺮر إﻟﯿﮫﺎ واﻟﺬي ﻳﺒﺪأ ﺑﺎﻟﺮﻗﻢ ﺻﻔﺮ ﻟﻠﺤﻘﻞ ) اﻟﻌﻤﻮد ( اﻷول .‬

                                                                               ‫71- اﻟﺪاﻟﺔ ‪:mysql_list‬‬
‫;)‪mysql_list(string database, string table, integer link‬‬
                                                                                        ‫اﻟﻤﺜﺎل اﻟﺸﺎﻣﻞ :‬
‫?<‬
‫اﻹﺗﺼـﺎل ﺑﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت اﺳﻤﮫﺎ ‪ az‬اﻟﺒﺎﺳﻮرد ﺣﯿﺚ أن اﻟﻔﺮاغ ھﻮ //‬
‫;)"" ,"‪$link = mysql_pconnect("localhost", "az‬‬
‫ﺗﺮﺗﯿﺐ اﻟﺤﻘﻮل وﺟﻠﺒﮫﺎ //‬
‫;)‪$result = mysql_list_field("mag", "table", integer link‬‬
‫ﺣﻠﻘﺔ ﺗﻜﺮار ﻟﻠﻤﺮور ﻋﻠﻰ ﻛﻞ ﺣﻘﻞ //‬
‫)++‪for ($a = 0; $a < mysql_field_num($result); $a‬‬
‫{‬
    ‫;)‪print(mysql_field_name($result, $i‬‬
    ‫;))‪print(mysql_field_type($result, $i‬‬
    ‫;))‪print(mysql_field_len($result, $i‬‬
    ‫;))‪print(mysql_field_flags($result, i‬‬
‫}‬
‫>?‬

                                                                     ‫81- اﻟﺪاﻟﺔ ‪: mysql_fetch_field‬‬
‫?<‬
‫;)‪object mysql_fetch_field(integer result, integer field‬‬
‫>?‬

              ‫ﺔ‬
   ‫اﺳﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﺤﺼﻞ ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﺣﻮل ﺣﻘﻮل اﻟﺠﺪول اﻟﻤﺮاد، اﻟﺤﻘﻮل ﺗﺮﻗﻢ ﺑﺪاﻳ ً ﻣﻦ ﺻﻔﺮ وﺻﻒ‬
                                                                ‫اﻟﺤﻘﻞ ﻣﺸﺮوح ﻓﻲ اﻟﺠﺪول اﻟﺘﺎﻟﻲ:‬

                                     ‫اﻟﻮﺻﻒ‬                                                ‫اﻟﺨﺎﺻﺔ‬
                            ‫إذا ﻛﺎﻧﺖ ‪ TRUE‬ﻓﺎﻟﺤﻘﻞ ﻋﺒﺎرة ﻋﻦ ﻋﻦ ﺣﻘﻞ ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮ‬                ‫‪blob‬‬
                                                             ‫اﻟﻄﻮل اﻷﻗﺼﻰ ﻟﻠﺤﻘﻞ‬           ‫‪maxlength‬‬
                                                 ‫ﺗﻜﻮن ‪ TRUE‬إذا ﻛﺎن اﻟﺤﻘﻞ ﻣﻔﺘﺎﺣً‬
                                                 ‫ﺎ‬                                     ‫‪multiple_key‬‬
                                                                      ‫أﺳﻢ اﻟﺤﻘﻞ‬            ‫‪name‬‬
                                  ‫ﺎ‬
                                  ‫ﺗﻜﻮن ‪ TRUE‬إذا ﻛﺎن اﻟﺤﻘﻞ ﻻ ﻳﻤﻜﻦ أن ﻳﻜﻮن ﻓﺎرﻏً‬            ‫‪not_null‬‬
                                            ‫ﺗﻜﻮن ‪ TRUE‬إذا ﻛﺎن اﻟﺤﻘﻞ ﻳﺮﻗﻢ ﺗﻠﻘﺎﺋﯿً‬
                                            ‫ﺎ‬                                              ‫‪numric‬‬
                                     ‫ﺎ‬     ‫ﺎ‬
                                     ‫ﺗﻜﻮن ‪ TRUE‬إذا ﻛﺎن اﻟﺤﻘﻞ ﻳﻤﺜﻞ ﻣﻔﺘﺎﺣً رﺋﯿﺴً‬          ‫‪primary_key‬‬
                                    ‫ﺎ‬      ‫ﺎ‬
                                    ً‫ إذا ﻛﺎن اﻟﺤﻘﻞ ﻳﻤﺜﻞ ﻣﻔﺘﺎﺣً ﺛﺎﻧﻮﻳ‬TRUE ‫ﺗﻜﻮن‬      unque_key
                                        0 ‫ إذاﻛﺎن اﻟﺤﻘﻞ ﻳﻤﻸ ﺑﺎﻟﻘﯿﻤﺔ‬TRUE ‫ﺗﻜﻮن‬          zerofill

                                                      : mysql_fetch_lengths ‫91 - اﻟﺪاﻟﺔ‬
<?
array mysql_fetch_lengths(integer result);
?>
        .result‫اﺳﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻌﯿﺪ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻄﻮل اﻷﻗﺼﻰ ﻟﻜﻞ ﺣﻘﻞ ﻣﺤﺪد ﻓﻲ اﻟﻤﻌﻄﻲ‬
<?
//Connect to server as azzozhsn no password
$link = mysql_pconnect("localhost","azzozhsn","");
//Select th magazine database
mysql_select_db("magazine",$link);
//Get name and id from magazine
$Query = 'SELECT name, id FROM magazine';
$result = mysql_query($Query, $link);
$length = mysql_fetch($result);
//Print length of the third column
print($lengths[2]);
?>

                                                                : mysql_fetch_array ‫02 - اﻟﺪاﻟﺔ‬
<?
array mysql_fetch_array(integer result);
?>
               :‫ھﺬه اﻟﺪاﻟﺔ ﺗﻌﯿﺪ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻢ ﺳﺠﻞ وﺗﻨﻘﻞ اﻟﻤﺆﺷﺮ إﻟﻰ اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ. ﻣﺜﺎل‬
<?
//Connect to server as azzozhsn no password
$link = mysql_pconnect("localhost","azzozhsn","");
//Select th magazine database
mysql_select_db("magazine",$link);
//Get name and id from magazine
$Query = 'SELECT name, id FROM magazine';
$result = mysql_query($Query, $link);
//Get every row
while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
 //Print mane and id
   print({$row["id"]}={$row["name"]});
}
?>

                                                               : mysql_fetch_object ‫12- اﻟﺪاﻟﺔ‬
<?
object mysql_fetch_object(integer result)
?>
     ‫ إﻻ أﻧﮫﺎ ﺗﻌﯿﺪ ﻛﺎﺋﻦ. ﻋﻨﺪ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ ﻳﻨﺘﻘﻞ اﻟﻤﺆﺷﺮ إﻟﻰ‬mysql_fetch_array ‫ھﺬه اﻟﺪاﻟﺔ ﺗﺸﺒﻪ اﻟﺪاﻟﺔ‬
   ‫اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ ﻓﻲ اﻟﺠﺪول، وإذا ةﺻﻞ إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﺠﺪول ﺛﻢ اﺳﺘﺪﻋﯿﺖ اﻟﺪاﻟﺔ ﻣﺮة أﺧﺮى ﻓﺈﻧﮫﺎ ﺗﻌﯿﺪ اﻟﻘﯿﻤﺔ‬
                                                                                        :‫ ﻣﺜﺎل‬FALSE
<?
while($row=mysql_fetch_object(result)){
 //print id and name
     ‫)"‪print ("$row->id, $row->name‬‬
‫}‬
‫>?‬

                                                                 ‫22- اﻟﺪاﻟﺔ ‪: mysql_fetch_row‬‬
     ‫ھﺬه اﻟﺪاﻟﺔ ﺗﻌﯿﺪ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻢ ﺣﻘﻮل ﺳﺠﻞ ﻣﻦ اﻟﺠﺪول وﻛﻞ اﺳﺘﺪﻋﺎء ﻳﻌﯿﺪ ﻗﯿﻤﺔ اﻟﺤﻘﻮل ﻓﻲ‬
                                  ‫اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ ﻓﻲ اﻟﻮاﻗﻊ ھﺬه اﻟﺪاﻟﺔ ﺗﺸﺒﻪ اﻟﺪاﻟﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ. ﻣﺜﺎل:‬
‫?<‬
‫{))‪while($row=mysql_fetch_row(result‬‬
 ‫‪//print id and name‬‬
   ‫)"]1[‪print ("$row[0], $row‬‬
‫}‬
‫>?‬

                                                                ‫32- اﻟﺪاﻟﺔ ‪: mysql_change_user‬‬
‫?<‬
‫;)‪musql_change_user(string user, string password, string db, integer link‬‬
‫>?‬
                                       ‫اﺳﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﺘﻐﯿﯿﺮ ﻣﺴﺘﺨﺪم ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﻤﺘﺼﻞ ﺑﮫﺎ.‬
                      ‫اﻟﻤﻌﻄﯿﺎن ‪ link ,db‬اﺧﺘﯿﺎرﻳﺔ وﻓﻲ ﺣﺎﻟﺔ ﻓﻘﺪھﻤﺎ ﻳﺴﺘﻌﺎض ﻋﻨﮫﻤﺎ ﺑﺎﻻﺗﺼﺎل اﻟﺤﺎﻟﻲ.‬
                                               ‫ھﺬه اﻟﺪاﻟﺔ ﺗﺘﻄﻠﺐ إﺻﺪار 3.32.3 ‪ MySQL‬أو ﻣﺎ ﺑﻌﺪھﺎ.‬



      ‫ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ واﻟﺼﻼة واﻟﺴﻼم ﻋﻠﻰ اﺷﺮف اﻻﻧﺒﯿﺎء واﻟ ﻤﺮﺳﻠﯿﻦ ، ﻓﻲ ھﺬا اﻟﺪرس اﺣﺒﺒﺖ أن‬
                                                                               ‫ا‬
     ‫اﺟﯿﺐ ﻋﻠﻰ ﺗﺴﺂول ﻛﺜﯿﺮً ﻣﺎ ﻳﻄﺮح ﻓﻲ اﻟﻤﻨﺘﺪﻳﺎت وھﻮ ﻋﻦ اﻟﺘﺎرﻳﺦ ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ ، واﺗﻤﻨﻰ ﻣﻦ اﷲ اﻟﺘﻮﻓﯿﻖ‬
                                                    ‫ﻓﻲ ﻃﺮح اﻟﻤﻮﺿﻮع ﺑﺸﻜﻞ ﻣﺒﺴﻂ وﻓﻲ ﻣﺘﻨﺎول اﻟﺠﻤﯿﻊ ..‬

  ‫ﻓﻲ اﻟﺒﺪاﻳﺔ وﻛﻤﻘﺪﻣﺔ ﻟﻠﻤﻮﺿﻮع أود اﻹﺷﺎرة اﻻ أن اﻟﻄﺮﻳﻘﺔ اﻟﻤﺸﺮوﺣﺔ ﻓﻲ ھﺬا اﻟﺪرس ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﺘﺎرﻳﺦ‬
 ‫اﻟﻤﯿﻼدي ، وﺑﺎﻟﺘﺎﻛﯿﺪ ﻳﻤﻜﻦ اﺳﺘﺨﺪاﻣﮫﺎ ﻣﻊ اﻟﺘﺎرﻳﺦ اﻟﮫﺠﺮي وﻟﻜﻦ ﺗﺤﺘﺎج اﻟﻰ ﺗﻌﺪﻳﻞ وﺣﺴﺎﺑﺎت ﺧﺎﺻﺔ ، وﺑﺎذن‬
                                                                ‫اﷲ ﺳﯿﺘﻢ ﺷﺮﺣﮫﺎ ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ .‬

      ‫داﻟﺔ اﻟﺘﺎرﻳﺦ ﻓﻲ اﻟﺒﻲ اﺗﺶ ﺑﻲ ھﻲ ‪ ، Date‬وﻟﮫﺎ ﻣﻌﺎﻣﻠﯿﻦ ) أي ﻗﯿﻤﺘﯿﻦ ﻻﻋﺪاد ﻣﺨﺮﺟﺎت اﻟﺪاﻟﺔ ( ، اﺣﺪ‬
 ‫اﻟﻤﻌﺎﻣﻠﯿﻦ اﺟﺒﺎري واﻟﺜﺎﻧﻲ اﺧﺘﯿﺎري ، اﻣﺎ اﻻول وھﻮ اﻻھﻢ ﺗﻌﺘﻤﺪ ﻋﻠﯿﻪ ﻣﺨﺮﺟﺎت اﻟﺘﺎرﻳﺦ ﺑﺸﻜﻞ اﺳﺎﺳﻲ ﻣﺜﻞ‬
 ‫ﺿﺒﻂ اﻟﺴﻨﺔ ﺑﺨﺎﻧﺘﯿﻦ أو ﺿﺒﻂ اﻟﺸﮫﺮ ﺑﺎﺳﻢ اﻟﺸﮫﺮ .. وﻏﯿﺮھﺎ ، اﻣﺎ اﻟﻤﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ ﻓﮫﻮ ﻣﺎ ﻳﺴﻤﻰ ﺑـ ) ‪UNIX‬‬
                               ‫ﺎ‬
  ‫‪ (time stamp‬وھﻮ ﺧﺎص ﺑﻨﻈﺎم اﻟﯿﻮﻧﻜﺲ وﻛﯿﻔﯿﺔ ﺗﺨﺰﻳﻦ اﻟﺘﺎرﻳﺦ ﻓﯿﻪ ، ﻋﻤﻮﻣً ﻣﺎ ﻳﮫﻤﻨﺎ ھﻨﺎ ھﻮ اﻟﻤﻌﺎﻣﻞ اﻷول‬
                                           ‫وھﻮ ﻣﺎ ﻳﺴﻤﻰ ﺑـ ) ‪ ، ( Format String‬وﻛﻤﺜﺎل ﻋﻠﻰ ﻣﺎ ذﻛﺮﻧﺎ :‬
‫?<‬
‫;)‪$today = date(Y-m-d‬‬
‫;‪echo $today‬‬
‫>?‬
     ‫ھﺬا اﻟﻤﺜﺎل ﺳﯿﻘﻮم ﺑﻄﺒﺎﻋﺔ ﺗﺎرﻳﺦ اﻟﯿﻮم ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ 2002-30-31 ، وﻻھﻤﯿﺔ اﻟﺮﻣﻮز اﻟﺘﻲ ﻳﻤﻜﻦ‬
                                                                  ‫اﺳﺘﺨﺪاﻣﮫﺎ ﻣﻊ اﻟـ ‪ Date‬ﺳﺎذﻛﺮ اھﻤﮫﺎ :‬
                                              ‫‪ d‬رﻗﻢ اﻟﯿﻮم ﻓﻲ اﻟﺸﮫﺮ ﻋﻠﻰ ﺷﻜﻞ ﺧﺎﻧﺘﯿﻦ ﻣﻦ 10 اﻟﻰ 13 .‬
                                   ‫‪ D‬اﺳﻢ اﻟﯿﻮم ﻓﻲ اﻻﺳﺒﻮع ﻋﻠﻰ ﺷﻜﻞ 3 ﺧﺎﻧﺎت ﻣﺜﻞ ‪ Mon‬أي اﻻﺛﻨﯿﻦ .‬
                                                                 ‫‪ g‬رﻗﻢ اﻟﺴﺎﻋﺔ ﻓﻲ اﻟﯿﻮم ﻣﻦ 1 اﻟﻰ 21 .‬
                                                  ‫‪ j‬رﻗﻢ اﻟﯿﻮم ﻓﻲ اﻟﺸﮫﺮ ﻣﻦ 1 اﻟﻰ 13 ﺑﺪون وﺿﻊ اﻟﺼﻔﺮ .‬
                                          ‫‪ m‬رﻗﻢ اﻟﺸﮫﺮ ﻓﻲ اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ ﺧﺎﻧﺘﯿﻦ ﻣﻦ 10 اﻟﻰ 21 .‬
                                                             ‫‪ y‬رﻗﻢ اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ ﺧﺎﻧﺘﯿﻦ ، ﻣﺜﻼ 20 .‬
                                                    ‫‪ Y‬رﻗﻢ اﻟﺴﻨﺔ ﻋﻠﻰ ﺷﻜﻞ ارﺑﻊ ﺧﺎﻧﺎت ، وﻣﺜﺎﻟﮫﺎ 2002 .‬

                          ‫ﺎ‬
                        ‫ھﺬه ﻣﻦ اھﻢ اﻟﺮﻣﻮز ﻟﻜﻲ ﺗﺘﻀﺢ اﻟﺼﻮرة ﻓﻘﻂ ، وﻟﻌﻠﻨﺎ ﻧﺘﻄﺮق ﻟﮫﺎ ﺑﺸﻜﻞ اوﺳﻊ ﻗﺮﻳﺒً .‬
                                                 ‫ﻻ‬
  ‫ﻟﺘﺤﻮﻳﻞ اﻟﺘﺎرﻳﺦ اﻟﻰ اﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ ﻧﺤﺘﺎج أن ﻧﻨﺸﺊ ﺟﺪو ً ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ، ﻓﻠﺬﻟﻚ ﻗﻢ ﺑﻨﺴﺦ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬
 . ‫ أو ﺑﺄي ﻃﺮﻳﻘﺔ اﺧﺮى ﺗﺮاھﺎ ، اﻻھﻢ اﻧﺸﺎء اﻟﺠﺪول‬PHPMyadmin ‫ ﻓﻲ اﻟـ‬Run SQL query ‫واﻟﺼﻘﻪ ﻓﻲ ﺧﺎﻧﺔ‬
CREATE TABLE month_name (
id tinyint(4) NOT NULL default '0',
month text NOT NULL
) TYPE=MyISAM;

INSERT    INTO month_name VALUES (1, '‫;)'ﻳﻨﺎﻳﺮ‬
INSERT    INTO month_name VALUES (2, '‫;)'ﻓﺒﺮاﻳﺮ‬
INSERT    INTO month_name VALUES (3, '‫;)'ﻣﺎرس‬
INSERT    INTO month_name VALUES (4, '‫;)'اﺑﺮﻳﻞ‬
INSERT    INTO month_name VALUES (5, '‫;)'ﻣﺎﻳﻮ‬
INSERT    INTO month_name VALUES (6, '‫;)'ﻳﻮﻧﯿﻮ‬
INSERT    INTO month_name VALUES (7, '‫;)'ﻳﻮﻟﯿﻮ‬
INSERT    INTO month_name VALUES (8, '‫;)'اﻏﺴﻄﺲ‬
INSERT    INTO month_name VALUES (9, '‫;)'ﺳﺒﺘﻤﺒﺮ‬
INSERT    INTO month_name VALUES (10, '‫;)'اﻛﺘﻮﺑﺮ‬
INSERT    INTO month_name VALUES (11, '‫;)'ﻧﻮﻓﻤﺒﺮ‬
INSERT    INTO month_name VALUES (12, '‫;)'دﻳﺴﻤﺒﺮ‬
 ‫أن ﻟﺪﻳﻚ‬  ‫ﺑﻌﺪ اﻧﺸﺎء ھﺬا اﻟﺠﺪول ﻳﺠﺐ أن ﻳﻜﻮن ﻟﺪﻳﻚ ﺟﺪول اﺧﺮ ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﺘﺎرﻳﺦ اﻟﻤﺮاد ﺗﺤﻮﻟﯿﻪ ، وﻟﻨﻔﺘﺮض‬
                      : ‫ ( وﻳﺤﺘﻮي ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت اﻟﺘﺎﻟﯿﺔ‬title , date ) ‫ ( ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﺤﻘﻮل‬news ) ‫اﻟﺠﺪول‬
                                                                                              date title
                                                                                ‫2002-40-02 اﻟﺨﺒﺮ اﻷول‬
                                                                               ‫2002-40-52 اﻟﺨﺒﺮ اﻟﺜﺎﻧﻲ‬
                                                                               ‫2002-50-10 اﻟﺨﺒﺮ اﻟﺜﺎﻟﺚ‬
                                                                                     : ‫ﻗﻢ ﺑﺎﻧﺸﺎء اﻟﺠﺪول‬
CREATE TABLE news (
  title text NOT NULL,
  date date NOT NULL default '0000-00-00'
) TYPE=MyISAM;


INSERT INTO news VALUES ('20-04-2002','‫;)'اﻟﺨﺒﺮ اﻷول‬
INSERT INTO news VALUES ('25-04-2002','‫;)'اﻟﺨﺒﺮ اﻟﺜﺎﻧﻲ‬
INSERT INTO news VALUES ('01-05-2002','‫;)'اﻟﺨﺒﺮ اﻟﺜﺎﻟﺚ‬

   ‫ ، وﻟﻌﻤﻞ ذﻟﻚ ﺳﻨﻘﻮم ﺑﺎﺳﺘﺨﺪام داﻟﺔ‬PHP ‫ﺑﻘﻲ أن ﻧﻘﻮم ﺑﺘﺤﻮﻳﻞ اﻟﺘﺎرﻳﺦ اﻟﻰ اﻟﻌﺮﺑﯿﺔ ، وادراﺟﻪ ﻓﻲ ﺻﻔﺤﺔ‬
      ‫ ﻣﻦ ﺧﻼل ﻃﻠﺐ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ، ﻧﺤﺪد ﻣﻦ ﺧﻼﻟﻪ ﻃﺮﻳﻘﺔ ﺟﻠﺐ اﻟﺒﯿﺎﻧﺎت ووﺿﻌﮫﺎ‬Date_Format ‫ﺗﺴﻤﻰ‬
                                                                               . ‫ﺑﺎﻟﺼﻮرة اﻟﻤﻄﻠﻮﺑﺔ‬

 ‫ ( واﻻﺧﺮ‬title ) ‫ﺑﻘﻲ أن ﻧﺬﻛﺮ أﻧﻨﺎ ﺳﻮف ﻧﻀﻄﺮ اﻟﻰ ﻛﺘﺎﺑﺔ ﻃﻠﺒﯿﻦ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﺣﺪھﻤﺎ ﻟﺠﻠﺐ ﺣﻘﻮل اﻟﻌﻨﻮان‬
                                                                : ‫ ( ﻛﻤﺎ ﻳﻠﻲ‬date ) ‫ﻟﺠﻠﺐ ﺣﻘﻮل اﻟﺘﺎرﻳﺦ‬
<?
$result = mysql_query("select * from news");
$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d'),\"
\",month_name.month,\" \",DATE_FORMAT(date,'%Y'))
AS date FROM news ,month_name
WHERE month_name.id = month(date)";
$result2 = mysql_query("$sql");
while ($row=mysql_fetch_array($result)
and $row2=mysql_fetch_array($result2))
‫{‬
‫;]"‪$title = $row["title‬‬
‫;]"‪$date = $row2["date‬‬
‫;">‪echo "$title , $date<br‬‬
‫}‬
‫>?‬
                                                                  ‫ﻋﻨﺪ ﺗﻨﻔﯿﺬ اﻟﺴﻜﺮﺑﺖ ، ﺳﺘﺮى ﻣﺎ ﻳﻠﻲ :‬
                                                                            ‫اﻟﺨﺒﺮ اﻷول , 02 اﺑﺮﻳﻞ 2002‬
                                                                           ‫اﻟﺨﺒﺮ اﻟﺜﺎﻧﻲ , 52 اﺑﺮﻳﻞ 2002‬
                                                                            ‫اﻟﺨﺒﺮ اﻟﺜﺎﻟﺚ , 10 ﻣﺎﻳﻮ 2002‬

     ‫ﻓﻲ ﺣﺎﻻت ﻛﺜﯿﺮة ﺗﻜﻮن ﻛﺘﺎﺑﺔ اﻟﺴﻜﺮﺑﺖ اﻟﺴﺎﺑﻖ ﺑﮫﺬا اﻟﺸﻜﻞ ﻣﺴﺒﺒﻪ ﻟﻠﻜﺜﯿﺮ ﻣﻦ اﻟﻤﺸﺎﻛﻞ ، و ﺧﺎﺻﺔ ﻋﻨﺪ‬
  ‫ﻃﻠﺐ ﺗﺮﺗﯿﺐ ﻟﻠﺠﺪول ﻋﻠﻰ ﺣﺴﺐ ﺣﻘﻞ ﻣﻌﯿﻦ ، وھﺬه اﻟﻤﺸﺎﻛﻞ ھﻲ ﻓﻲ ﺗﻮاﻓﻖ اﻟﺒﯿﺎﻧﺎت ﻣﻊ ﺑﻌﻀﮫﺎ اﻟﺒﻌﺾ ،‬
       ‫ﻓﻠﻮ اﻓﺘﺮﺿﻨﺎ ﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ أن اﻟﺨﺒﺮ اﻷول اﻟﺬي ﻳﺤﻤﻞ اﻟﺘﺎرﻳﺦ 2002-40-02 ﻛﺎن ﺑﺎﺳﻢ آﺧﺮ ، ﻣﺜﻼ )‬
                                         ‫اﻟﻌﻨﻮان اﻷول ( ، وﺑﻌﺪ اﺿﺎﻓﺔ ﺣﻘﻮل ﺗﺮﺗﯿﺐ ﻟﺠﻠﺐ اﻟﺒﯿﺎﻧﺎت ﻛﺎﻟﺘﺎﻟﻲ :‬
‫?<‬
‫‪$result = mysql_query("select * from news‬‬
‫;)"‪order by title‬‬
‫"\,)'‪$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d‬‬
‫))'‪\",month_name.month,\" \",DATE_FORMAT(date,'%Y‬‬
‫‪AS date FROM news ,month_name‬‬
‫;")‪WHERE month_name.id = month(date‬‬
‫;)"‪$result2 = mysql_query("$sql‬‬
‫)‪while ($row=mysql_fetch_array($result‬‬
‫))2‪and $row2=mysql_fetch_array($result‬‬
‫{‬
‫;]"‪$title = $row["title‬‬
‫;]"‪$date = $row2["date‬‬
‫;">‪echo "$title , $date<br‬‬
‫}‬
‫>?‬
                                                                                ‫ﺳﺘﺠﺪ أن اﻟﻨﺘﺎﺋﺞ ھﻲ :‬
                                                                           ‫اﻟﺨﺒﺮ اﻟﺜﺎﻟﺚ , 02 اﺑﺮﻳﻞ 2002‬
                                                                           ‫اﻟﺨﺒﺮ اﻟﺜﺎﻧﻲ , 52 اﺑﺮﻳﻞ 2002‬
                             ‫اﻟﻌﻨﻮان اﻷول , 10 ﻣﺎﻳﻮ 2002 وھﺬا ﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻣﺸﻜﻠﺔ ﻓﻲ ﺗﻮاﻓﻖ اﻟﺒﯿﺎﻧﺎت .‬

  ‫وﻟﺤﻠﮫﺎ ﻳﺠﺐ أن ﻧﻮاﻓﻖ ﺑﯿﻦ اﻟﻄﻠﺒﯿﻦ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ، ﺑﻤﻌﻨﻰ أﻧﻪ اذا رﺗﺒﻨﺎ اﻟﻄﻠﺐ اﻻول ﺣﺴﺐ ) ‪ ( title‬ﻳﺠﺐ‬
                                                       ‫أن ﻧﻔﻌﻞ ذﻟﻚ ﻣﻊ اﻟﻄﻠﺐ اﻟﺜﺎﻧﻲ ﺑﺘﻌﺪﻳﻠﻪ ﻟﯿﺼﺒﺢ :‬
‫?<‬
‫"\,)'‪$sql = "SELECT CONCAT(DATE_FORMAT(date,'%d‬‬
‫))'‪\",month_name.month,\" \",DATE_FORMAT(date,'%Y‬‬
‫‪AS date FROM news ,month_name‬‬
‫)‪WHERE month_name.id = month(date‬‬
‫;"‪order by title‬‬
 ‫>?‬
                                                              ‫وﺑﺎﻟﺘﺎﻟﻲ ﺗﺼﺒﺢ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺮﺟﻪ ﻛﺎﻟﺘﺎﻟﻲ :‬
                                                                           ‫اﻟﺨﺒﺮ اﻟﺜﺎﻟﺚ , 10 ﻣﺎﻳﻮ 2002‬
                                                                          ‫اﻟﺨﺒﺮ اﻟﺜﺎﻧﻲ , 52 اﺑﺮﻳﻞ 2002‬
                                                                          ‫اﻟﻌﻨﻮان اﻷول , 02 اﺑﺮﻳﻞ 2002‬

                                                                                ‫وھﻲ ﺑﺎﻟﺘﺎﻛﯿﺪ ﺻﺤﯿﺤﺔ .‬
‫ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ واﻟﺼﻼة واﻟﺴﻼم ﻋﻠﻰ اﺷﺮف اﻻﻧﺒﯿﺎء واﻟﻤﺮﺳﻠﯿﻦ ، ﺑﻌﺪ اﻟﻤﻘﺪﻣﺎت اﻟﺴﺎﺑﻘﺔ واﻟﮫﺎﻣﺔ‬
 ‫ﻓﻲ ﻣﻌﺮﻓﺔ اﺳﺎﺳﯿﺎت اﻟﻠﻐﺔ ﻳﻤﻜﻨﻨﺎ ﺑﺪاﻳﺔ ﻛﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ ﺑﻠﻐﺔ اﻟﺒﻲ اﺗﺶ ﺑﻲ ، وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﺳﻨﺒﺪأ ﻣﻦ اﺻﻐﺮ‬
                                                         ‫ﺎ‬
                                         ‫اﻻﺳﺎﺳﯿﺎت واھﻤﮫﺎ ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ ﻋﻤﻮﻣً وھﻲ اﻟﻤﺘﻐﯿﺮات .‬

 ‫اﻟﻤﺘﻐﯿﺮات ﻓﻲ ﻟﻐﺔ اﻟـ ‪ PHP‬ﺗﺒﺪأ ﺑﻌﻼﻣﺔ اﻟﺪوﻻر ) $ ( ، وﻻﺳﻨﺎد ﻗﯿﻤﺔ ﻟﺬﻟﻚ اﻟﻤﺘﻐﯿﺮ ﻧﺴﺘﺨﺪم ﻋﻼﻣﺔ اﻟﻤﺴﺎواة‬
                                ‫) = ( ، ﻓﺮﺿﺎ ﻟﺪﻳﻨﺎ اﻟﻤﺘﻐﯿﺮ ) ‪ ( Name‬واﻟﻘﯿﻤﺔ ) ‪ ( Khaled‬ﻓﻨﻜﺘﺐ ﻣﺎ ﻳﻠﻲ :‬
‫?<‬
‫;"‪$Name = "Khaled‬‬
‫>?‬
 ‫ھﺬا ﻓﻲ ﺣﺎﻟﺔ اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ ) ‪ ، ( Text‬وﻓﻲ ﺣﺎﻟﺔ اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ ) ‪ ( Numbers‬ﻳﻤﻜﻦ ﺗﻌﺮﻳﻒ ﻣﺘﻐﯿﺮ )‬
                                                       ‫‪ ( Counter‬اﻟﺬي ﻳﺤﻤﻞ اﻟﻘﯿﻤﺔ ) 71 ( ﻛﺎﻟﺘﺎﻟﻲ :‬
‫?<‬
‫;71 = ‪$Counter‬‬
‫>?‬
     ‫اﻟﻔﺮق اﻟﻮاﺿﺢ ﻓﻲ ﻃﺮﻳﻘﺔ ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﯿﺮﻳﻦ اﻟﻨﺼﻲ واﻟﺮﻗﻤﻲ ھﻮ ﻋﺪم وﺟﻮد ﻋﻼﻣﺎت اﻟﺘﻨﺼﯿﺺ ﻓﻲ ﺗﻌﺮﻳﻒ‬
                       ‫اﻟﻤﺘﻐﯿﺮات اﻟﺮﻗﻤﯿﺔ ﺑﯿﻨﻤﺎ ﻳﺠﺐ وﺿﻊ ﻋﻼﻣﺎت اﻟﺘﻨﺼﯿﺺ ﻓﻲ ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ .‬

                                                            ‫ﻧﻘﺎط ھﺎﻣﺔ ﻓﻲ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮات :‬
‫- اﺳﻤﺎء اﻟﻤﺘﻐﯿﺮات ﻓﻲ ﻛﺜﯿﺮ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻻ ﺗﺘﻌﺪى 552 ﺣﺮف ) اﻟﻤﻘﺼﻮد ﺑﮫﺎ اﻟﺨﺎﻧﺎت ﺳﻮاء ﻛﺎﻧﺖ ﺣﺮوف‬
  ‫أو ارﻗـﺎم أو ﻋﻼﻣﺎت اﺧﺮى ( ، و ﻓﻲ ﻟﻐﺔ اﻟـ ‪ PHP‬ﻻ ﻳﻮﺟﺪ ﺣﺪود ﻋﻠﻰ ﻋﺪد اﻟﺨﺎﻧﺎت ﻓﻲ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮات ،‬
  ‫وﻟﻜﻦ ﻓﻲ اﻟﻐﺎﻟﺐ ﻟﻦ ﺗﺤﺘﺎج اﻟﻰ اﻛﺜﺮ ﻣﻦ 51 ﺧﺎﻧﺔ ﻟﺘﺴﻤﯿﺔ أي ﻣﺘﻐﯿﺮ ، ﻻن اﻟﻤﺒﺎﻟﻐﺔ ﻓﻲ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮات‬
                                             ‫ﺗﺴﺒﺐ ﻣﺸﺎﻛﻞ ﻓﻲ ﺗﺬﻛﺮ اﻟﻤﺘﻐﯿﺮات وﻣﺎ ﺗﺤﺘﻮﻳﺔ ﻣﻦ ﻗﯿﻢ .‬

      ‫- ﺑﺪاﻳﺔ ﻛﻞ ﻣﺘﻐﯿﺮ ﻳﺠﺐ أن ﺗﺒﺪأ ﺑﺤﺮف ) ﻳﻌﻨﻲ ﺣﺮف ھﺠﺎﺋﻲ ( أو ﻋﻼﻣﺔ ) _ ( ‪ ، Underscore‬ﻣﻊ ﺗﺠﺎھﻞ‬
                                                    ‫ﻋﻼﻣﺔ اﻟـ $ ﻻﻧﮫﺎ ﻻ ﺗﺤﺴﺐ ﻣﻦ اﺳﻢ اﻟﻤﺘﻐﯿﺮ .‬

‫- ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ اﻟﺤﺮوف أو اﻻرﻗﺎم أو ﻋﻼﻣﺔ ) _ ( ﻓﻘﻂ ، اﻣﺎ اﻟﻌﻼﻣﺎت اﻷﺧﺮى ﻣﺜﻞ ) + ,‬
                                                 ‫- , * , / ( أو اﻟـ & ﻻ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺘﮫﺎ ﻓﻲ اﺳﻢ اﻟﻤﺘﻐﯿﺮ .‬

‫- اﻟﻤﺘﻐﯿﺮ ) ‪ ( $Name‬ﻳﺨﺘﻠﻒ ﻋﻦ اﻟﻤﺘﻐﯿﺮ ) ‪ ( $name‬ﻻﺧﺘﻼف ﺣﺎﻟﺔ ﺣﺮف اﻟـ ‪ ، N‬وﻟﺬﻟﻚ ﻳﺠﺐ اﻟﺘﺎﻛﺪ ﻣﻦ اﺳﻢ‬
 ‫اﻟﻤﺘﻐﯿﺮات ﺑﺪﻗﺔ ﻟﺘﺠﻨﺐ ﺣﺪوث ﻣﺸﺎﻛﻞ ﻓﻲ اﻟﻮﺻﻮل اﻟﻰ ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ ، وﺑﺎﻟﺘﺎﻛﯿﺪ ﻟﻮ ﻛﺎن ﻟﺪﻳﻚ اﺳﻠﻮب ﺧﺎص‬
             ‫ﻓﻲ ﺗﺴﻤﯿﺔ اﻟﻤﺘﻐﯿﺮات ﻟﺴﮫﻮﻟﺔ اﻟﻮﺻﻮل اﻟﯿﮫﺎ وﺗﺬﻛﺮھﺎ ﺳﺘﻜﻮن ﻛﺘﺎﺑﺔ اﻟﺴﻜﺮﺑﺎت اﺳﮫﻞ ﺑﻜﺜﯿﺮ .‬

‫- ﻳﺴﺘﺤﺴﻦ أن ﺗﻜﻮن اﺳﻤﺎء اﻟﻤﺘﻐﯿﺮات داﻟﺔ ﻋﻠﻰ ﻣﻌﺎﻧﯿﮫﺎ ، ﺑﻤﻌﻨﻰ أﻧﻪ ﻟﻤﺘﻐﯿﺮ ﻣﺜﻞ ﻋﺪاد اﻟﺰوار ﻳﺴﺘﺤﺴﻦ أن‬
                                 ‫ﻳﻜﻮن ) ‪ ، ( $counter‬وﻟﻤﺘﻐﯿﺮ ﻣﺜﻞ اﺳﻢ اﻟﻤﺴﺘﺨﺪم ) ‪ .. ( $user‬اﻟﺦ .‬

                                                                             ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮات :‬
                     ‫ﺎ‬
    ‫ﻓﺎﺋﺪة اﻟﻤﺘﻐﯿﺮات ﺗﻜﻤﻦ ﻓﻲ ﻃﺮﻳﻘﺔ اﺳﺘﺨﺪاﻣﮫﺎ ﻓﻲ ﻛﺘﺎﺑﺔ اﻟﺴﻜﺮﺑﺖ ، وﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘً أﻧﻪ ﻟﻄﺒﺎﻋﺔ ﻣﺘﻐﯿﺮ‬
                                            ‫ﻣﻌﯿﻦ ﻧﺴﺘﺨﺪم اﻣﺮ اﻟﻄﺒﺎﻋﺔ ) ‪ ( echo‬أو ) ‪ ( print‬ﻛﻤﺎ ﻳﻠﻲ :‬
‫?<‬
‫;"‪$name = "Naser‬‬
‫;‪echo $name‬‬
‫>?‬
‫ﻓﻲ اﻟﺒﺪاﻳﺔ ﺳﯿﺘﻢ اﺳﻨﺎد اﻟﻘﯿﻤﺔ ) ‪ ( Naser‬اﻟﻰ اﻟﻤﺘﻐﯿﺮ ) ‪ ، ( $name‬وﻓﻲ اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻳﺘﻢ ﻃﺒﺎﻋﺔ اﻟﻤﺘﻐﯿﺮ‬
                                                          ‫، أو ﺑﺎﻻﺣﺮى اﻟﻘﯿﻤﺔ اﻟﻤﺴﻨﺪة اﻟﻰ اﻟﻤﺘﻐﯿﺮ .‬

                                                                     ‫اﻧﻮاع اﻟﺒﯿﺎﻧﺎت ) ‪: ( Data Types‬‬
                                ‫ﻨ‬
‫ﻓﻲ اﻻﻣﺜﻠﺔ اﻟﺴﺎﺑﻘﺔ ﻗﻤﻨﺎ ﺑﺎﺳﻨﺎد ﻗﯿﻤﺘﯿﻦ ﻋﺪدﻳﺔ وﻧﺼﯿﺔ اﻟﻰ ﻣﺘﻐﯿﺮﻳﻦ ، وﺑﯿ ًﺎ اﻟﻔﺮق ﺑﯿﻨﮫﻤﺎ ، وﻓﻲ ﻟﻐﺔ اﻟـ ‪PHP‬‬
                                       ‫ﺎ‬
       ‫ﺑﺸﻜﻞ ﻋﺎم ﻳﻮﺟﺪ أﻛﺜﺮ ﻣﻦ ھﺬﻳﻦ اﻟﻨﻮﻋﯿﻦ ﻣﻦ اﻟﺒﯿﺎﻧﺎت ، ﺳﺎﺷﺮح ﺑﻌﻀً ﻣﻨﮫﺎ اﻵن ، واﻟﺒﻘﯿﺔ ﻓﻲ اﻟﺪروس‬
                                                                                               ‫اﻟﻘﺎدﻣﺔ :‬
                                                                           ‫- اﻟﺒﯿﺎﻧﺎت اﻟﻨﺼﯿﺔ ) ‪. ( String‬‬
                                                               ‫- اﻟﺒﯿﺎﻧﺎت اﻟﻌﺪدﻳﺔ اﻟﺼﺤﯿﺤﺔ ) ‪. ( Integer‬‬
                                                                ‫- اﻟﺒﯿﺎﻧﺎت اﻟﻌﺪدﻳﺔ اﻟﻜﺴﺮﻳﺔ ) ‪. ( Double‬‬
                                                                              ‫- اﻟﻤﺼﻔﻮﻓـﺎت ) ‪. ( Array‬‬
                                                                                 ‫- اﻟﻜـﺎﺋﻨﺎت ) ‪. ( Object‬‬
                                                                              ‫- اﻟﺒﯿﺎﻧﺎت اﻟﻐﯿﺮ ﻣﻌﺮوﻓﺔ ! .‬

                                                                     ‫اﻟﺒﯿﺎﻧﺎت اﻟﻨﺼﯿﺔ ) ‪: ( String‬‬
‫ھﻲ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﻜﻮن ﺑﯿﻦ ﻋﻼﻣﺎت اﻟﺘﻨﺼﯿﺺ " " ﺑﻐﺾ اﻟﻨﻈﺮ ﻋﻦ ﻣﺤﺘﻮھـﺎ ، ﻓﯿﻤﻜﻦ أن ﺗﻜﻮن ﺣﺮوف أو اﻋﺪاد‬
                                                       ‫ﺎ‬
                                                     ‫أو رﻣﻮز أو ﻏﯿﺮھﺎ ، وﻣﺜﺎل ذﻟﻚ ﻛﻤﺎ ذﻛﺮﻧﺎ ﺳﺎﺑﻘً :‬
‫?<‬
‫;"‪$user = "Khaled‬‬
‫;"5.31" = ‪$age‬‬
‫>?‬

                                                       ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻨﺼﯿﺔ ) ‪: ( String‬‬
   ‫ﻻﺿـﺎﻓﺔ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﯿﺎﻧﺎت ﻧﺼﯿﺔ ﻣﻊ ﻣﺘﻐﯿﺮات ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع ﻧﺤﺘﺎج اﻟﻰ ﻋﻤﻠﯿﺔ دﻣﺞ ﺑﯿﻦ‬
                                                                   ‫اﻟﻤﺘﻐﯿﺮات ، وﻟﻌﻤﻞ ذﻟﻚ ﻧﻜﺘﺐ :‬
‫?<‬
‫;‪$total = $user . $age‬‬
‫>?‬
                               ‫ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﯿﺘﻢ اﺳﻨﺎد اﻟﻘﯿﻤﺔ 5.31‪ Khaled‬اﻟﻰ اﻟﻤﺘﻐﯿﺮ ) ‪. ( $total‬‬
    ‫اذا اردﻧﺎ وﺿﻊ ﻣﺴـﺎﻓﺔ ﺑﯿﻦ اﻟﻤﺘﻐﯿﺮﻳﻦ ﻧﻀﯿﻒ ﻣﺘﻐﯿﺮ ﺟﺪﻳﺪ ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﻤﺴـﺎﻓﺔ وھﻮ ) ‪ ( $space‬ﺛﻢ ﻧﻘﻮم‬
                                                                               ‫ﺑﻌﻤﻠﯿﺔ اﻟﺪﻣﺞ ﻛﺎﻟﺘﺎﻟﻲ :‬
‫?<‬
‫;" " = ‪$space‬‬
‫;‪$total = $user . $space . $age‬‬
‫>?‬
  ‫وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﯿﺘﻢ وﺿﻊ اﻟﻘﯿﻤﺔ 5.31 ‪ Khaled‬ﻓﻲ اﻟﻤﺘﻐﯿﺮ ) ‪ ، ( $total‬وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻳﻤﻜﻦ اﺳﺘﺨﺪم‬
                ‫اﻟﻤﺘﻐﯿﺮات اﻟﻨﺼﯿﺔ داﺧﻞ ﻣﺘﻐﯿﺮات ﻧﺼﯿﺔ أﺧﺮى ، ﺣﯿﺚ ﺳﯿﺘﻢ ﺗﻌﻮﻳﺾ اﻟﻤﺘﻐﯿﺮ ﺑﻘﯿﻤﺘﺔ اﻷﺻﻠﯿﺔ .‬

                                                                  ‫اﻟﺒﯿﺎﻧﺎت اﻟﻌﺪدﻳﺔ ) ‪: ( Numeric‬‬
 ‫وﻛﻤﺎ ذﻛﺮﻧﺎ ﻓﻲ اﻟﺘﻘﺴﯿﻢ اﻟﺴﺎﺑﻖ أﻧﮫﺎ ﻧﻮﻋﯿﻦ ) اﻻﻋﺪاد اﻟﺼﺤﯿﺤﺔ ‪ ( Integer‬و ) اﻻﻋﺪاد اﻟﻜﺴﺮﻳﺔ ‪، ( Double‬‬
                                                                             ‫وﻛﻤﺜﺎل ﻋﻠﻰ اﻟﻨﻮﻋﯿﻦ :‬
‫?<‬
‫;332 = 1‪$integer‬‬
‫92- = 2‪$integer‬‬
‫72.5 = 1‪$double‬‬
‫6.4- = 2‪$double‬‬
‫>?‬

                                                  ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻌﺪدﻳﺔ ) ‪: ( Numeric‬‬
   ‫ا‬
‫اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ اﻟﻤﺸﮫﻮرة ) + , - , * , / ( ﺑﺎﻻﺿـﺎﻓﺔ اﻟﻰ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ) % ( ﻋﻤﻠﯿﺎت ﺷﺎﺋﻌﺔ ﺟﺪً ﻓﻲ‬
 ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮات اﻟﻌﺪدﻳﺔ ، وﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل ﻟﻦ ﻧﺤﺘﺎج اﻟﻰ ذﻛﺮ أي ﻣﺜﺎل ﻋﻦ ھﺬه اﻟﻌﻤﻠﯿﺎت ، وﺳﻨﻜﺘﻔﻲ‬
                                       ‫ﺑﺬﻛﺮ ﺑﻌﺾ اﻟﻨﻘﺎط اﻻﺳﺎﺳﯿﺔ اﻟﺘﻲ ﻗﻞ ﻣﺎ ﻳﺨﻠﻮ ﺳﻜﺮﺑﺖ ﻣﻨﮫﺎ .‬

   ‫اول اﻟﻨﻘﺎط ھﻲ اﺿﺎﻓﺔ اﻟﻤﺘﻐﯿﺮ اﻟﻰ ﻧﻔﺴﻪ ، ﺑﻤﻌﻨﻰ ﺗﻌﺮﻳﻒ ﻋﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ ﻋﻠﻰ ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ ﺑﺤﯿﺚ ﺗﺨﺰن‬
   ‫اﻟﻘﯿﻤﺔ ﻓﻲ ﻧﻔﺲ اﻟﻤﺘﻐﯿﺮ ، ﻣﺜﻼ ﻟﻮ ﻛﺎن ﻟﺪﻳﻚ ﻋﺪد اﻟﺰوار وﺗﺮﻳﺪ ﻓﻲ ﻛﻞ ﻣﺮة أن ﻳﺰود ﻋﺪد اﻟﺰوار ﺑـ 1 ، ﻳﻤﻜﻨﻚ‬
                                                                                         ‫ﻛﺘﺎﺑﺔ ﻣﺎ ﻳﻠﻲ :‬
‫?<‬
‫;1 + ‪$counter = $counter‬‬
‫>?‬
 ‫ﺑﺎﻟﺘﺎﻟﻲ ﺳﯿﺘﻢ زﻳﺎدة اﻟﻤﺘﻐﯿﺮ ) ‪ ( $counter‬ﺑـ 1 ﻓﻲ ﻛﻞ ﻣﺮة ﻳﺘﻢ ﻓﯿﮫﺎ ﺗﻨﻔﯿﺬ اﻟﺴﻜﺮﺑﺖ ، وﺑﻄﺮﻳﻘﺔ أﺧﺮى ﻳﻤﻜﻦ‬
                                                                   ‫ﻛﺘﺎﺑﺔ اﻟﺴﻄﺮ اﻟﺴﺎﺑﻖ ﻛﺎﻟﺘﺎﻟﻲ :‬
‫?<‬
‫;++‪$ccounter = $counter‬‬
‫>?‬
 ‫واﻟـ ++ ﺗﻌﻨﻲ زﻳﺎدة ﻗﺪررھﺎ ) 1 ( ﻋﻠﻰ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻷﺻﻠﯿﺔ ، وﻛﺬﻟﻚ اﻟـ -- ﺗﻌﻨﻲ ﻃﺮح 1 ﻣﻦ اﻟﻘﯿﻤﺔ اﻷﺻﻠﯿﺔ‬
                                                                                                  ‫.‬

  ‫وﻓﻲ ﺣﺎﻟﺔ اﻟﺮﻏﺒﺔ ﺑﺰﻳﺎدة أي ﻋﺪد أﺧﺮ ) ﻏﯿﺮ اﻟﻮاﺣﺪ ( ﻋﻠﻰ أي ﻣﺘﻐﯿﺮ ﺑﺎﺳﻠﻮب اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﯿﺔ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻣﺎ‬
                                                                                                ‫ﻳﻠﻲ :‬
‫?<‬
‫;4=+ ‪$counter‬‬
‫>?‬
               ‫وھﺬا ﻳﻌﻨﻲ زﻳﺎدة ﻣﻘﺪارھﺎ 4 ﻋﻠﻰ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ اﻷﺻﻠﯿﺔ ، وﺑﺎﻟﺴﺎﻟﺐ ﻛﺬﻟﻚ ﺑﻨﻔﺲ اﻷﺳﻠﻮب .‬

                                                                  ‫ﺗﺮﺗﯿﺐ اﻧﺠﺎز اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ :‬
      ‫ﻳﻮﺟﺪ ﺑﻌﺾ اﻟﺮﻣﻮز واﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﺗﺴﺒﻖ ﻏﯿﺮھﺎ ﻋﻨﺪ اﻟﺒﺪء ﻓﻲ اﻧﺠﺎز ﻋﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ ﻣﻌﯿﻨﺔ ، واﻟﺘﺮﺗﯿﺐ‬
                                                               ‫اﻟﻤﺴﺘﺨﺪم ﻓﻲ اﻟﺒﻲ اﺗﺶ ﺑﻲ ﻛﺎﻟﺘﺎﻟﻲ :‬
                                                                                                    ‫-]‬
                                        ‫- ! ~ ++ -- ) ‪( int ) ( double ) ( string ) ( array ) ( object‬‬
                                                                                               ‫-*/%‬
                                                                                                ‫-+-.‬
                                                                                              ‫- >> <<‬
                                                                                        ‫- <= < >= >‬
                                                                                   ‫- !== === != ==‬
                                                                                                   ‫-&‬
                                                                                                    ‫-|‬
                                                                                                 ‫- &&‬
                                                                                                   ‫- ||‬
                                                                                                  ‫-:?‬
                                                     ‫- <<= >>= ~= ^= &= %= .= /= *= += =‬
                                                                                                ‫- ‪print‬‬
                                                                                                ‫- ‪AND‬‬
                                                                                                ‫- ‪XOR‬‬
                                                                                                 ‫- ‪OR‬‬
                                                                                                    ‫-,‬

     ‫ﺑﺎﻟﺘﺄﻛﯿﺪ اﻟﻘﺎﺋﻤﺔ ﻃﻮﻳﻠﺔ وﻓﯿﮫﺎ ﺗﻔﺎﺻﯿﻞ ﻛﺜﯿﺮة ، وﻟﻜﻦ ﻣﻦ اﻟﻤﮫﻢ ﻣﻌﺮﻓﺔ ﻃﺮﻳﻘﺔ اﻧﺠﺎز اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ‬
‫اﻟﻤﺨﺘﻠﻔﺔ ﻟﺴﮫﻮﻟﺔ اﻛﺘﺸﺎف اﻷﺧﻄـﺎء وﻣﻌﺮﻓﺔ اﻟﻄﺮﻳﻘﺔ اﻟﺼﺤﯿﺤﺔ ﻟﻜﺘﺎﺑﺔ ﺑﻌﺾ اﻟﻌﻤﻠﯿﺎت اﻟﻤﻌﻘﺪة ﻟﻠﺤﺼﻮل ﻋﻠﻰ‬
                                                                                    ‫ﻧﺎﺗﺞ ﺻﺤﯿﺢ .‬

                                                  ‫ﺑﻌﺾ اﻟﺪوال اﻟﮫﺎﻣﺔ ﻓﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﻐﯿﺮات :‬
                                               ‫- ‪ : isset‬وھﻲ داﻟﺔ ﻟﻠﺘﺄﻛﺪ ﻣﻦ وﺟﻮد ﻣﺘﻐﯿﺮ ﻣﻌﯿﻦ ، ﻓﻤﺜﻼ :‬
‫?<‬
‫;)‪echo isset($age‬‬
‫>?‬
                              ‫ﺎ‬                  ‫ا‬
 ‫ﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺮﻗﻢ 1 اذا ﻛﺎن اﻟﻤﺘﻐﯿﺮ ) ‪ ( $age‬ﻣﻮﺟﻮدً ) ﺗﻢ اﻧﺸﺎءه ﻣﺴﺒﺎﻗً ( ، واﻟﻌﻜﺲ اذا ﻛﺎن ﻏﯿﺮ ﻣﻮﺟﻮد‬
         ‫ﺎ‬                                    ‫ا‬
       ‫ﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺮﻗﻢ 0 ، وھﺬه اﻟﺪاﻟﺔ ﻳﺘﻢ اﺳﺘﺨﺪاﻣﮫﺎ ﻛﺜﯿﺮً ﻓﻲ اﻟﺸﺮوط وھﺬا ﻣﺎ ﺳﻨﺘﻄﺮق اﻟﯿﻪ ﻻﺣﻘً .‬

                  ‫- ‪ : unset‬ھﺬه اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻰ ﻣﺴﺢ اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﺬاﻛﺮة ﻛﻠﯿﺄ ، ﻓﻘﻂ ﻗﻢ ﺑﻌﻤﻞ اﻟﺘﺎﻟﻲ :‬
‫?<‬
‫;)‪unset($age‬‬
‫>?‬
                                           ‫وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﯿﺘﻢ ﻣﺴﺢ اﻟﻤﺘﻐﯿﺮ ) ‪ ( $age‬ﺑﺸﻜﻞ ﻛﺎﻣﻞ .‬

                                     ‫- ‪ : empty‬وھﺬه اﻟﺪاﻟﺔ ﻣﻌﺎﻛﺴﺔ ﻟﻠﺪاﻟﺔ ‪ isset‬ﺑﺤﯿﺚ ﻟﻮ ﻛﺘﺒﻨﺎ ﻣﺎ ﻳﻠﻲ :‬
‫?<‬
‫;)‪echo empty($age‬‬
‫>?‬
 ‫ﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟﺮﻗﻢ 1 ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم وﺟﻮد اﻟﻤﺘﻐﯿﺮ ) ‪ ( $age‬أو أن ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ﺗﺴﺎوي 0 أو ) ﻓﺮاغ ( ، وﻓﻲ‬
                                                    ‫ﺣﺎﻟﺔ وﺟﻮد اﻟﻤﺘﻐﯿﺮ ) ‪ ( $age‬ﻟﻦ ﻳﺘﻢ ﻃﺒـﺎﻋﺔ أي ﺷﻲ .‬
        ‫ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ واﻟﺼﻼة واﻟﺴﻼم ﻋﻠﻰ اﺷﺮف اﻻﻧﺒﯿﺎء واﻟﻤﺮﺳﻠﯿﻦ اﻣﺎ ﺑﻌﺪ ، ﻓﻲ ھﺬا اﻟﺪرس‬
     ‫ﺑﻤﺸﯿﺌﺔ اﷲ ﺳﻨﺘﺤﺪث ﻋﻦ ﻣﻘﺪﻣﺔ ﻟﻠﺘﺤﻜﻢ ﻓﻲ اﻟﻤﻮاﻗﻊ ﻋﻦ ﻃﺮﻳﻖ اﻟـ ‪ Session‬أو اﻟﺠﻠﺴـﺎت ﻛﻤﺎ اﺻﻄﻠﺢ‬
 ‫ﻋﻠﻰ ﺗﺴﻤﯿﺘﮫﺎ ، ﻓﻔﻲ اﻟﺒﺪاﻳﺔ ﺳﻨﺘﻌﺮف ﻋﻠﻰ اﻟـ ‪ Session‬وﻋﻦ اﻟﺘﺤﻜﻢ ﻓﯿﮫﺎ ، وﻣﻦ ﺛﻢ اﺳﺘﺨﺪاﻣﺎﺗﮫﺎ ﺑﺎﻻﺿﺎﻓﺔ‬
    ‫اﻟﻰ ﺑﻌﺾ اﻻﻣﺜﻠﺔ ، وﻓﻲ اﻟﻨﮫﺎﻳﺔ ﺳﻨﺘﻄﺮق اﻟﻰ ﺑﻌﺾ اﻷﺧﻄﺎء ﻓﻲ ﻛﺘﺎﺑﺔ اﻟـ ‪ Session‬وﺣﻠﻮل ﺗﻠﻚ اﻷﺧﻄﺎء ،‬
   ‫وﻓﻲ اﻟﺪرس اﻟﻘﺎدم ﺑﺈذن اﷲ ﺗﻌﺎﻟﻰ ﺳﻨﺘﻄﺮق اﻟﻰ ﻣﺜﺎل ﻛﺎﻣﻞ ﻟﻠﻮﺣﺔ ﺗﺤﻜﻢ ﻣﺒﺴﻄﺔ ﺗﺘﻌﺎﻣﻞ ﺑﺎﻟـ ‪، Session‬‬
                                                 ‫واﻷﻣﻞ أن ﻳﻜﻮن ﻓﻲ ھﺬا اﻟﺸﺮح اﻟﻤﺒﺴﻂ ﻓﺎﺋﺪة ﻟﻠﺠﻤﯿﻊ ..‬

                                                                     ‫- ﻣﻘﺪﻣﺔ ﻋﻦ اﻟـ ‪: Session‬‬
‫ﻋﻨﺪ اﻻﻧﺘﻘﺎل ﻣﻦ ﺻﻔﺤﺔ اﻟﻰ أﺧﺮى ﻓﻲ ﻣﻮﻗﻊ ﻣﻌﯿﻦ ﻓﺈن ﺑﺮوﺗﻮﻛﻮل اﻟـ ‪ HTTP‬ﻻ ﻳﻤﻜﻨﻪ ﻣﻌﺮﻓﺔ أن ﺗﻠﻚ اﻟﺼﻔﺤﺎت‬
  ‫ﻗﺪ ﺗﻢ ﺗﺼﻔﺤﮫﺎ ﻣﻦ ﻗﺒﻞ ﻧﻔﺲ اﻟﺸﺨﺺ ، وﻟﻜﻦ ﻣﻊ اﻟـ ‪ cookies‬وﻣﺎ ﻧﺤﻦ ﺑﺼﺪده ھﻨﺎ اﻟـ ‪ Session‬ﺗﻘﺪم ﺗﻠﻚ‬
   ‫اﻟﻄﺮﻳﻘﺔ ، وﻟﺬﻟﻚ وﺑﺒﺴﺎﻃﺔ ﻓﺈن اﻟـ ‪ Session‬ھﻲ ﻣﻜﺎن ﻋﻠﻰ ﺟﮫﺎز اﻟﻤﺘﺼﻔﺢ ﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻪ ﺗﺨﺰﻳﻦ ﻗﯿﻤﺔ‬
 ‫ﻣﻌﯿﻨﺔ ﻟﻠﺮﺟﻮع اﻟﯿﮫﺎ ﻓﻲ ﺣﺎل ﻗﺎم ﻧﻔﺲ اﻟﺸﺨﺺ ﺑﺎﻻﻧﺘﻘﺎل ﻣﻦ ﺻﻔﺤﺔ اﻟﻰ أﺧﺮى ، وﻟﻌﻞ ھﺬا اﻟﺘﻌﺮﻳﻒ ﻳﺼﻒ‬
                                  ‫ﺑﺒﺴﺎﻃﺔ ﻣﻌﻨﺎھﺎ اﻟﻌﺎم وﻻ ﻳﻌﻨﻲ ذﻟﻚ أﻧﻪ ﺗﻌﺮﻳﻒ ﺷﺎﻣﻞ ﻟﻜﻞ اﻟﻤﻌﺎﻧﻲ ..‬

  ‫إذً اﻟﺘﻌﺮف ﻋﻠﻰ اﻟﺸﺨﺺ اﻟﺬي ﻳﻘﻮم ﺑﺘﺼﻔﺢ اﻟﻤﻮﻗﻊ ھﻮ اﻟﮫﺪف اﻟﺮﺋﯿﺴﻲ ﻟﻠـ ‪ Session‬أو اﻟﺠﻠﺴـﺎت ، وﻟﻜﻦ‬ ‫ا‬
       ‫ﻛﯿﻒ ﻳﺘﻢ ذﻟﻚ ، وﻣﺎ ھﻲ اﻟﻨﻘﺎط اﻟﺮﺋﯿﺴﯿﺔ اﻟﺘﻲ ﻳﺠﺐ ﻣﻌﺮﻓﺘﮫﺎ ﻟﻔﮫﻢ ﻃﺮﻳﻘﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟـ ‪ Session‬؟‬

   ‫أول ﺗﻠﻚ اﻟﻨﻘﺎط أن ﻋﻤﻠﯿﺔ ﺗﺴﺠﯿﻞ اﻟﻤﺘﻐﯿﺮ ﻋﻠﻰ ﺟﮫﺎز اﻟﻤﺴﺘﺨﺪم ﻟﻪ ﻣﺪة ﻣﻌﯿﻨﺔ ﺗﻨﺘﮫﻲ ﺑﺎﻧﺘﮫﺎء اﻟﺠﻠﺴﺔ ،‬
  ‫وﻣﻦ ھﻨﺎ ﺟﺎءت اﻟﺘﺴﻤﯿﺔ ، أﻣﺎ ﻣﺎ ﺗﻌﻨﯿﻪ اﻟﺠﻠﺴﺔ ﻓﮫﻲ ﻣﺼﻄﻠﺢ ﻟﻘﯿﺎﻣﻚ ﺑﺎﻟﺘﺼﻔﺢ ﻣﻦ اﻟﻤﻮﻗﻊ وﻣﻦ ﺛﻢ اﻏﻼق‬
  ‫اﻟﻤﻮﻗﻊ ، ﺑﺒﺴﺎﻃﺔ ﻛﻞ ﻣﺮة ﺗﻘﻮم ﺑﺰﻳﺎرة اﻟﻤﻮﻗﻊ ﺗﺒﺪأ ﺟﻠﺴﺔ أو ‪ Session‬ﺟﺪﻳﺪة ، ﻣﻊ ﻣﻼﺣﻈﺔ أن ھﻨﺎك ﻃﺮق‬
 ‫ﻟﻠﺘﺤﻜﻢ ﺑﻮﻗﺖ اﻻﻧﺘﮫﺎء ﻛﻤﺎ ﻓﻲ اﻟـ ‪ ، cookies‬ﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ ﻃﺮق اﺧﺮى ﻋﻦ ﻃﺮﻳﻖ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وھﻮ ﺣﺪﻳﺚ‬
                                                                                  ‫ﺳﺎﺑﻖ ﻻواﻧﻪ .‬

        ‫ا‬
  ‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻨﻘﻄﺔ اﻷﺧﺮى اﻟﺘﻲ ﻳﺠﺐ وﺿﻌﮫﺎ ﻓﻲ اﻟﺤﺴﺒﺎن ھﻲ ﻣﺎ ﻳﺴﻤﻰ ﺑﺎﻟـ ‪ ID Session‬أو اﺧﺘﺼـﺎرً ‪SID‬‬
  ‫وﻳﻌﻨﻲ ذﻟﻚ ) رﻗﻢ اﻟﺠﻠﺴﺔ ( ، وھﻮ رﻗﻢ ﻋﺸﻮاﺋﻲ ﻓﺮﻳﺪ ﻳﺼﻌﺐ ﺗﻜﺮاره أو ﻓﻠﻨﻘﻞ أﻧﻪ ﻣﺴﺘﺤﯿﻞ ﻻﺣﺘﻮاﺋﻪ ﻋﻠﻰ‬
                                                        ‫ﺎ‬
   ‫ارﻗﺎم واﺣﺮف ﻛﺒﯿﺮة وﺻﻐﯿﺮة ﻓﻲ ﻣﺘﻐﯿﺮ ﻃﻮﻳﻞ ﻧﺴﺒﯿً ، وھﺬه اﻟﻘﯿﻤﺔ ھﻲ اﻷھﻢ ﻓﻲ ﻣﺎ ذﻛﺮت ، ﻹﻧﮫﺎ اﻟﻘﯿﻤﺔ‬
    ‫اﻟﻮﺣﯿﺪة اﻟﺘﻲ ﺗﺮﺑﻂ ﻣﺎ ﻳﺴﻤﻰ ﺑﺎﻟـ ‪ Session Variables‬أو ) ﻣﺘﻐﯿﺮات اﻟﺠﻠﺴﺔ ( ﻣﻊ ﺟﮫﺎز اﻟﻤﺴﺘﺨﺪم ، ﻓﺎﻟـ‬
        ‫‪ SID‬ھﻲ اﻟﻘﯿﻤﺔ اﻟﻮﺣﯿﺪة اﻟﺘﻲ ﻳﺘﻢ ﺗﺨﺰﻳﻨﮫﺎ ﻓﻲ ﺟﮫﺎز اﻟﻤﺴﺘﺨﺪم ) ‪ ، ( Client‬أﻣﺎ اﻟـ ﻣﺘﻐﯿﺮات اﻟﺠﻠﺴﺔ‬
  ‫‪ Session Variables‬ﻳﺘﻢ ﺗﺨﺰﻳﻨﮫﺎ ﻓﻲ اﻟﺴﯿﺮﻓﺮ ) ‪ ، ( Server‬ﻓﻌﻨﺪ اﻟﺘﺤﻘﻖ ﻣﻨﻪ وﺟﻮد ھﺬه اﻟﻘﯿﻤﺔ ﻋﻠﻰ ﺟﮫﺎز‬
                 ‫اﻟﻤﺴﺘﺨﺪم ﻳﻤﻜﻦ اﻟﺪﺧﻮل اﻟﻰ اﻟﻤﺘﻐﯿﺮ اﻵﺧﺮ اﻟﻤﺘﺮﺑﻂ ﺑﻪ واﻟﻤﺴﻤﻰ ﺑﺎﻟـ ‪. Session Variable‬‬

   ‫اﻟﻨﻘﻄﺔ اﻟﺜﺎﻟﺜﺔ ھﻲ ﻃﺮﻳﻘﺔ اﻟﺘﺨﺰﻳﻦ ﻟﻠـ ‪ SID‬و اﻟـ ‪ ، Variables Session‬أﻣﺎ اﻟـ ‪ SID‬وﻛﻤﺎ ﻗﻠﻨﺎ أﻧﮫﺎ ﺗﺨﺰن ﻋﻠﻰ‬
‫ﺟﮫﺎز اﻟﻌﻤﯿﻞ ) ‪ ( Client‬إﻣﺎ ﻋﻦ ﻃﺮﻳﻖ اﻟـ ‪ cookies‬واﻟﺘﻲ ﻟﮫﺎ ﺳﻠﺒﯿﺎﺗﮫﺎ اﻟﻤﺘﻌﺪدة أو ﻋﻦ ﻃﺮﻳﻖ ﺗﻤﺮﻳﺮھﺎ ﻋﺒﺮ اﻟـ‬
    ‫‪ ، HTTP‬أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠـ ‪ Session Variables‬ﻓﯿﺘﻢ ﺗﺨﺰﻳﻨﮫﺎ ﻓﻲ ﻣﻠﻔﺎت ﻓﺎرﻏﺔ ﻋﻠﻰ ﺟﮫﺎز اﻟـ ‪ Server‬وﻛﺬﻟﻚ‬
                                       ‫ﻓﻲ ﻣﺴﺘﻮﻳﺎت ﻣﺘﻘﺪﻣﺔ ﻳﻤﻜﻦ اﻟﺘﺤﻜﻢ ﺑﮫﺎ وﺗﺨﺰﻳﻨﮫﺎ ﻓﻲ ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت .‬

                                                                          ‫- إﻋﺪادت اﻟـ ‪: Session‬‬
       ‫ﻋﻦ ﻃﺮﻳﻖ ﻣﻠﻒ اﻟـ ‪ php.ini‬واﻟﺬي ﻳﺤﺘﻮي ﻋﻠﻰ إﻋﺪادت اﻟـ ‪ PHP‬ﻳﻤﻜﻦ اﻟﺘﺤﻜﻢ ﺑﺎﻋﺪادات اﻟـ ‪، Session‬‬
    ‫وﻛﺎﺳﺘﻌﺮاض ﻟﺘﻠﻚ اﻟﻨﻘﺎط اﻟﻤﺘﺤﻜﻤﺔ ﺑﺎﻟـ ‪ Session‬ﺳﻨﺘﻄﺮق أھﻢ اﻟﻨﻘﺎط وﻣﻌﺎﻧﯿﮫﺎ ، وﻟﻠﻮﺻﻮل اﻟﻰ ﻣﺎ ﻧﺤﻦ‬
‫ﺑﺼﺪده ﺗﺬﻛﺮ أن ﻣﻠﻒ اﻟـ ‪ php.ini‬ﻳﻮﺟﺪ ﻓﻲ دﻟﯿﻞ اﻟـ ‪ ، Windows‬وﻟﻠﻮﺻﻮل اﻟﻰ ﺧﺼﺎﺋﺺ اﻟـ ‪ Session‬إﺑﺤﺚ ﻋﻨﻪ‬
                                                           ‫ﻛﻠﻤﺔ ) ‪ ( Session‬وﺳﺘﺠﺪ اﻟﺴﻄﺮ اﻟﺘﺎﻟﻲ :‬
‫]‪[Session‬‬
     ‫ﻣﻦ ھﻨﺎ ﺗﺴﺘﻄﯿﻊ اﻟﺘﺤﻜﻢ ﺑﺨﯿﺎرات اﻟـ ‪ ، Sessions‬وﻛﻤﺎ ﻳﻈﮫﺮ ﻓﻲ اﻟﺠﺪول اﻟﺘﺎﻟﻲ وﺻﻒ ﻷھﻢ اﻟﺨﯿﺎرات ..‬
                                                                  ‫1- اﻟﺨﯿﺎر ‪: Session.auto_start‬‬
                                               ‫ﺎ‬
                     ‫ﺑﺪاﻳﺔ ﺗﻠﻘﺎﺋﯿﺔ ﻟﻠـ ‪ ) Session‬دون اﻟﺤﺎﺟﺔ ﻟﻌﻤﻞ ذﻟﻚ ﻳﺪوﻳ ً ﻋﻦ ﻃﺮﻳﻖ ‪. ( Session_start‬‬

                                                               ‫2- اﻟﺨﯿـﺎر ‪: Session.cache_expire‬‬
                                                                       ‫وﻗﺖ اﻧﺘﮫﺎء اﻟﺠﻠﺴﺔ ﺑﺎﻟﺪﻗﺎﺋﻖ .‬

                                                         ‫3- اﻟﺨﯿـﺎر ‪: Session.cookie_lifetime‬‬
                                            ‫ﺎ‬
  ‫وﻗﺖ اﻧﺘﮫﺎء اﻟـ ‪ cookie‬اﻟﻤﺮﺗﺒﻄﺔ ﺑﺎﻟﺠﻠﺴﺔ ، وھﻲ اﻓﺘﺮاﺿﯿً ﺳﺘﻜﻮن 0 أي أن اﻟـ ‪ cookie‬ﺳﺘﻨﺘﮫﻲ ﻓﺘﺮﺗﮫﺎ ﻣﻊ‬
                                                               ‫اﻗﻔـﺎل اﻟﺸﺨﺺ اﻟﻤﺘﺼﻔﺢ ﻟﻠﻤﻮﻗﻊ .‬

                                                                     ‫4- اﻟﺨﯿـﺎر ‪: Session_name‬‬
                                              ‫ﺎ‬
                            ‫إﺳﻢ اﻟـ ‪ Session‬اﻟﺘﻲ ﺳﺘﺴﺘﺨﺪم ﻛـ ‪ cookie‬واﻓﺘﺮاﺿﯿً ﺳﺘﻜﻮن ‪. PHPSESSID‬‬

                                                                   ‫5- اﻟﺨﯿـﺎر ‪: session.save_path‬‬
                     ‫ھﺬا اﻟﺴﻄﺮ ﻳﻌﻨﻲ ﻣﻜﺎن ﺗﺨﺰﻳﻦ ﻣﻠﻔﺎت اﻟـ ‪ Session‬ﻓﻲ ﺟﮫﺎزك ﺑﺎﻋﺘﺒﺎره ﺳﯿﺮﻓﺮ ، وھﻨﺎ‬
                                                ‫ﺎ‬
                   ‫ﺗﺴﺘﻄﯿﻊ أن ﺗﻀﻊ أي ﻋﻨﻮان ﻓﻲ ﺟﮫﺎزك ، أﻣﺎ ﺗﺮﻛﻪ ﻓﺎرﻏً ﻓﯿﻌﻨﻲ ﻋﺪم ﺗﻔﻌﯿﻞ اﻟـ ‪Session‬‬
                   ‫ﻟﺪﻳﻚ ، ﺑﺎﻟﻨﺴﺒﺔ ﻟﻲ أﻗﺘﺮح أن ﻳﻜﻮن اﻟﻤﺠﻠﺪ ‪ Temp‬داﺧﻞ اﻟـ ‪ Windows‬ھﻮ اﻟﺪﻟﯿﻞ اﻷﻣﺜﻞ‬
                       ‫ﻻﺣﺘﻮاﺋﻪ ﻋﻠﻰ ﻣﻠﻔﺎت ﻣﺆﻗﺘﺔ ﻳﻤﻜﻦ ﺣﺬﻓﮫﺎ ، اذا اﻟﻌﻨﻮان ﺳﯿﻜﻮن ‪c:\windows\Temp‬‬

                                                      ‫ھﺬه ﻓﻲ ﻧﻈﺮي أھﻢ اﻟﺨﯿـﺎرات اﻟﺘﻲ ﻳﺠﺐ ﻓﮫﻤﮫﺎ ،‬

                                                                              ‫- ﺑﺪاﻳﺔ اﻟـ ‪: Session‬‬
                                                                                  ‫ﺎ‬
  ‫ﻗﺒﻞ أن ﺗﺴﺘﺨﺪم أﻳً ﻣﻦ دوال اﻟـ ‪ Session‬ﻳﺠﺐ اﺧﺒﺎر اﻟﺴﻜﺮﺑﺖ أن ﻳﺒﺪأ ﺟﻠﺴﺔ ‪ ، Session‬واﻟﻄﺮﻳﻘﺔ ھﻲ أن‬
                                    ‫ﺗﻀﻊ ﻓﻲ ﺑﺪاﻳﺔ اﻟﺴﻜﺮﺑﺖ وﻓﻲ أول ﺳﻄﺮ ﻓﯿﻪ ﺑﻌﺪ ﻋﻼﻣﺔ اﻟﻔﺘﺢ ﻣﺎ ﻳﻠﻲ :‬
‫?<‬
‫;)(‪session_start‬‬
‫>?‬
   ‫ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻓﻘﻂ ﻳﻤﻜﻦ أن ﺗﻘﻮم ﺑﺎﺳﺘﺨﺪام دوال اﻟـ ‪ Session‬اﻷﺧﺮى ، أﻣﺎ اذا ﻟﻢ ﻳﺘﻢ ﻛﺘﺎﺑﺔ ھﺬا اﻟﺴﻄﺮ‬
                                                                                      ‫ﻓﻠﻦ ﻳﺘﻢ ذﻟﻚ .‬

    ‫ﻣﻼﺣﻈﺔ ﻣﮫﻤﺔ ﺣﻮل ﻋﻤﻠﯿﺔ ﺑﺪاﻳﺔ اﻟـ ‪ Session‬وھﻲ أن ﺗﺘﺄﻛﺪ ﻣﻦ أن ھﺬا اﻟﺴﻄﺮ ﻻ ﻳﺴﺒﻘﻪ ﻋﻤﻠﯿﺔ اﺧﺮاج‬
    ‫ﻣﺨﺮﺟﺎت ، ﺑﻤﻌﻨﻰ أﺧﺮى أي اﺳﺘﺨﺪام ﻟﺪوال ﻣﺜﻞ ‪ echo‬أو ‪ ، print‬وﻛﺬﻟﻚ ﻻ ﻳﺴﺒﻖ ھﺬا اﻟﺴﻄﺮ أي ﻓﺮاغ‬
                                        ‫ﺎ‬                              ‫ا‬
                               ‫وﺗﺄﻛﺪ ﻣﻦ ھﺬه اﻟﻨﻘﻄﺔ ﺟﯿﺪً ﻻﻧﮫﺎ ﻛﺜﯿﺮة اﻟﺤﺪوث وﺗﻌﻄﻰ اﻟﺨﻄً اﻟﺘﺎﻟﻲ :‬


     ‫وأﺳﻠﻢ ﻃﺮﻳﻘﺔ ﻣﻦ وﺟﮫﺔ ﻧﻈﺮي أن ﺗﻀﻊ ھﺬا اﻟﺴﻄﺮ ﻓﻲ ﺑﺪاﻳﺔ ﻣﻠﻒ اﻟـ ‪ header‬ﻻﻧﻚ ﺳﻨﻘﻮم ﺑﺎدراج ھﺬه‬
                     ‫اﻟﺼﻔﺤﺔ ﻓﻲ ﻛﻞ اﻟﺼﻔﺤﺎت اﻷﺧﺮى وﺑﺎﻟﺘﺎﻟﻲ ﻳﻜﻮن اﻟﺴﻄﺮ ھﻮ اﻷول ﻓﻲ ﻛﻞ اﻟﺤﺎﻻت ..‬

                                                                        ‫- ﺗﺨﺰﻳﻦ ﻣﺘﻐﯿﺮات اﻟﺠﻠﺴﺎت :‬
        ‫وھﻲ ﻣﺎ ﻧﺴﻤﯿﮫﺎ ﺑﺎﻟـ ‪ ، Session Variables‬وﻟﻌﻤﻞ ذﻟﻚ ﻳﻮﺟﺪ ﻟﺪﻳﻨﺎ اﻟﺪاﻟﺔ اﻟﻮاردة ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ :‬
‫?<‬
‫;"‪$user = "AbdulAziz‬‬
‫;)"‪session_register("user‬‬
‫>?‬
                                                                    ‫ﻣﺎ ﻗﻤﻨﺎ ﺑﻌﻤﻠﻪ ھﻮ اﻟﺘﺎﻟﻲ :‬
                                                                               ‫ا‬
                                             ‫1- ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮً ھﻮ ‪ user‬ﻳﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻤﺔ ﺣﺮﻓﯿﺔ .‬
    ‫2- ﻗﻤﻨﺎ ﺑﺘﺴﺠﯿﻞ ھﺬا اﻟﻤﺘﻐﯿﺮ ﻓﻲ ﻣﺘﻐﯿﺮ ﺟﻠﺴﺔ ) ‪ ( Session Variable‬وﺑﻨﻔﺲ اﻻﺳﻢ ‪ user‬وﻟﻜﻦ ﺑﺪون‬
                                                                                   ‫ﻋﻼﻣﺔ $ .‬

                                                               ‫- اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺘﻐﯿﺮات اﻟﺠﻠﺴﺔ :‬
   ‫ﺑﻌﺪ ﺗﺴﺠﯿﻞ اﻟﻤﺘﻐﯿﺮ ، ﻳﻤﻜﻦ اﻟﺮﺟﻮع اﻟﯿﻪ ﺑﻌﺪة ﻃﺮق ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﺨﯿﺎر ‪ register_globals‬ﻓﻲ ﻣﻠﻒ اﻟـ‬
 ‫‪ ، php.ini‬أﻣﺎ اذا ﻛﺎن ‪ on‬وھﺬا ھﻮ اﻻﺧﺘﯿﺎر اﻹﻓﺘﺮاﺿﻲ ﻓﺈن اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﺗﻢ ﺗﺴﺠﯿﻠﻪ ﻓﻲ اﻟـ ‪ Session‬ﻳﻤﻜﻦ‬
‫اﻟﺮﺟﻮع اﻟﯿﻪ ﻛﺄي ﻣﺘﻐﯿﺮ آﺧﺮ ، ﻋﻦ ﻃﺮﻳﻖ اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻓﻘﻂ ، وﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺤﺎﻟﻲ ﺳﯿﻜﻮن $‪ ، user‬أﻣﺎ اذا ﻛﺎن‬
                   ‫اﻟﺨﯿﺎر ﻏﯿﺮ ﻣﻔﻌﻞ وﻟﯿﺲ ﺑﺎﻟﺼﻮرة اﻟﺘﻲ ذﻛﺮﺗﮫﺎ ﻓﯿﻤﻜﻦ اﻟﺮﺟﻮع اﻟﻰ اﻟﻤﺘﻐﯿﺮ ﻋﻦ ﻃﺮﻳﻖ اﻷﻣﺮ‬
                                                           ‫$‪. ["HTTP_SESSION_VARs["user‬‬

                              ‫ﺎ‬     ‫ا‬
     ‫أﻳﻀﺎ ﻛﻨﻘﻄﺔ ﻣﮫﻤﺔ ﻳﺠﺐ ﻣﻌﺮﻓﺘﮫﺎ وھﻲ ﻃﺮﻳﻘﺔ اﻟﺘﺤﻘﻖ ﻣﻦ أن ﻣﺘﻐﯿﺮً ﻣﻌﯿﻨً ﻗﺪ ﺗﻢ ﺗﺴﺠﯿﻠﻪ أم ﻻ ، وھﺬه‬
   ‫اﻟﻄﺮﻳﻘﺔ ﻣﻔﯿﺪة ﻓﻲ اﻟﺼﻔﺤﺎت اﻟﺘﻲ ﻳﺠﺐ أن ﻳﻜﻮن ﻓﯿﮫﺎ اﻟﻤﺴﺘﺨﺪم ﻗﺪ ﺳﺠﻞ اﻟﺪﺧﻮل وﺑﺎﻟﻔﻌﻞ ﺗﻤﺖ ﻋﻤﻠﯿﺔ‬
                                              ‫ﺗﺴﺠﯿﻞ اﻟـ ‪ Session‬ﻟﻪ ، ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ﺗﻠﻚ اﻟﻄﺮﻳﻘﺔ :‬
‫?<‬
‫{ ))"‪if (session_is_registered("user‬‬
‫;"أھﻼ وﺳﮫﻼ ﺑﻜﻢ ﻓﻲ ﻗﺮﻳﺔ ﺑﻲ اﺗﺶ ﺑﻲ" ‪echo‬‬
‫}‬
‫{ ‪else‬‬
‫;".. ﻻ ﻳﺴﻤﺢ ﻟﻚ ﺑﺎﻟﺪﺧﻮل" ‪echo‬‬
‫}‬
‫>?‬
    ‫ﻓﻲ ھﺬا اﻟﻤﺜﺎل ﺳﯿﺘﻢ ﻋﺮض اﻟﺠﻤﻠﺔ )أھﻼ وﺳﮫﻼ ﺑﻜﻢ ﻓﻲ ﻗﺮﻳﺔ ﺑﻲ اﺗﺶ ﺑﻲ ( إذا ﻛﺎن ﻋﻤﻠﯿﺔ ﺗﺴﺠﯿﻞ اﻟـ‬
   ‫‪ Session‬ﺗﻤﺖ ﻟﻠﻤﺘﻐﯿﺮ ‪ ، user‬وﺳﯿﺘﻢ ﻋﺮض اﻟﺠﻤﻠﺔ )ﻻ ﻳﺴﻤﺢ ﻟﻚ ﺑﺎﻟﺪﺧﻮل .. ( ﻓﻲ ﺣﺎﻟﺔ ﻋﺪم ﺗﺴﺠﯿﻞ اﻟـ‬
                                                                                   ‫‪. Session‬‬

 ‫ﻧﻘﻄﺔ أﺧﯿﺮة ﻓﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺘﻐﯿﺮات اﻟﺠﻠﺴﺔ ، وھﻲ ﻋﻤﻠﯿﺔ اﻟﻐﺎء ﺗﺴﺠﯿﻞ اﻟـ ‪ Session‬ﻟﻤﺘﻐﯿﺮ ﻣﻌﯿﻦ ، وھﺬه‬
    ‫اﻟﻄﺮﻳﻘﺔ ﺗﺘﻢ ﻋﻦ ﻃﺮﻳﻖ اﻟﺪوال ‪ session_unregister‬و ‪ session_unset‬و ‪ ، session_destroy‬أﻣﺎ‬
   ‫اﻟﻔﺮق ﺑﯿﻨﮫﻢ ﻓﮫﻮ أن اﻟﺪاﻟﺔ اﻷوﻟﻰ ﺗﻘﻮم ﺑﻌﻤﻠﯿﺔ اﻟﻐﺎء اﻟﺘﺴﺠﯿﻞ ﻟـ ‪ Session‬ﻣﻌﯿﻨﺔ ، أي ﺑﺘﻤﺮﻳﺮ إﺳﻢ اﻟﻤﺘﻐﯿﺮ‬
                                                                               ‫ﻟﮫﺎ ﻛﻤﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ :‬
‫?<‬
‫;)"‪session_unregister("user‬‬
‫>?‬
  ‫اذا ﺳﯿﺘﻢ اﻟﻐﺎء ﺗﺴﺠﯿﻞ اﻟـ ‪ Session‬اﻟﻤﺘﻌﻠﻘﺔ ﺑﺎﻟﻤﺘﻐﯿﺮ ‪ user‬ﻓﻘﻂ ، أﻣﺎ اﻟﺪاﻟﺔ اﻟﺜﺎﻧﯿﺔ ﻓﺴﺘﻘﻮم ﺑﺎﻟﻐﺎء ﺗﺴﺠﯿﻞ‬
                  ‫ﺟﻤﯿﻊ اﻟـ ‪ Session‬اﻟﺘﻲ ﺗﻢ ﺗﺴﺠﯿﻠﮫﺎ ﻣﻦ ﻗﺒﻞ ، وﻓﻲ اﻟﻨﮫﺎﻳﺔ ﻳﺠﺐ أﺳﺘﺨﺪام اﻟﺪاﻟﺔ اﻟﺜﺎﻟﺜﺔ‬
                                   ‫‪ session_destroy‬ﻻﻟﻐﺎء اﻟـ ‪ SID‬واﻻﻧﺘﮫﺎء ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟـ ‪. Session‬‬
                                                                          ‫- ﻣﺜﺎل ﺑﺴﯿﻂ ﻋﻦ اﻟـ ‪: Session‬‬
                                                                           ‫ا‬
‫ﺳﺎﺗﻄﺮق اﻟﻰ ﻣﺜﺎل ﺑﺴﯿﻂ ﺟﺪً ﻟﺘﻮﺿﯿﺢ ﻛﯿﻔﯿﺔ ﻋﻤﻞ اﻟـ ‪ ، Session‬ﻓﻲ اﻟﺒﺪاﻳﺔ ﻗﻢ ﺑﻮﺿﻊ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻓﻲ ﻣﻠﻒ‬
                                                                             ‫وﻗﻢ ﺑﺘﺴﻤﯿﺘﻪ ‪: phpex1.php‬‬
‫?<‬
‫;21 = ‪$age‬‬
‫;)"‪session_register("age‬‬
‫;">‪ <br‬اﻟـﺠﻠﺴﺔ ‪ age‬ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ ‪echo "$age‬‬
‫;">‪ ..</a‬اﻟﺘــﺎﻟﻲ>‪echo "<a href=phpex2.php‬‬
‫>?‬
                                      ‫اﻟﺼﻔﺤﺔ اﻟﺜﺎﻧﯿﺔ اﺣﻔﻈﮫﺎ ﺑﺈﺳﻢ ‪ ، phpex2.php‬وﺿﻊ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻓﯿﮫﺎ :‬
‫?<‬
‫;">‪<br‬أﻧﺖ ﻓﻲ اﻟﺼﻔﺤﺔ اﻟﺜﺎﻧﯿﺔ" ‪echo‬‬
‫;">‪ <br‬اﻟـﺠﻠﺴﺔ ‪ age‬ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ ‪echo "$age‬‬
‫;)"‪session_unregister("age‬‬
‫;">‪ ..</a‬اﻟﺘــﺎﻟﻲ>‪echo "<a href=phpex3.php‬‬
‫>?‬
                                         ‫اﻟﺼﻔﺤﺔ اﻟﺜﺎﻟﺜﺔ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ، واﺳﻤﮫﺎ ‪: phpex3.php‬‬
‫?<‬
‫;">‪<br‬أﻧﺖ ﻓﻲ اﻟﺼﻔﺤﺔ اﻟﺜﺎﻟﺜﺔ" ‪echo‬‬
‫;">‪ <br‬اﻟـﺠﻠﺴﺔ ‪ age‬ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻘﯿﻤﺔ ‪echo "$age‬‬
‫>?‬
   ‫اﺑﺪأ ﻣﻦ اﻟﺼﻔﺤﺔ اﻷوﻟﻰ وﻣﻦ ﺛﻢ اﻧﺘﻘﻞ ﻣﻦ ﺻﻔﺤﺔ اﻟﻰ أﺧﺮى ، ﺣﺘﻰ ﺗﺼﻞ اﻟﻰ اﻟﺜﺎﻟﺜﺔ ، ﺑﺎﻓﺘﺮاض أﻧﻚ ﻗﻤﺖ‬
         ‫ﺑﺘﺠﺮﺑﺔ اﻟﻤﺜﺎل ، ﺳﺘﻼﺣﻆ أن اﻟﺼﻔﺤﺔ اﻷوﻟﻰ ﺳﯿﺘﻢ ﻃﺒﺎﻋﺔ اﻟـ ‪ Session‬اﻟﺘﻲ ﺗﻢ ﺗﺴﺠﯿﻠﮫﺎ وھﻲ ‪age‬‬
        ‫وﺳﺘﻈﮫﺮ اﻟﻘﯿﻤﺔ 21 ﻓﻲ اﻟﺠﻤﻠﺔ اﻟﻄﻮﻳﻠﺔ اﻟﺘﻲ ﺗﺒﯿﻦ أن اﻟﻤﺘﻐﯿﺮ ‪ age‬ﻳﺤﺘﻮي ﻋﻠﻰ ﻗﯿﻤﺔ ﻣﻌﯿﻨﺔ ، وﻓﻲ‬
      ‫اﻟﺼﻔﺤﺔ اﻟﺜﺎﻧﯿﺔ ﺳﺘﻼﺣﻆ ﻧﻔﺲ اﻟﺠﻤﻠﺔ وﻧﻔﺲ اﻟﻘﯿﻤﺔ ﺗﻤﺖ ﻃﺒﺎﻋﺘﮫﻤﺎ ، أﻣﺎ ﻓﻲ اﻟﺼﻔﺤﺔ اﻟﺜﺎﻟﺜﺔ واﻷﺧﯿﺮة‬
   ‫ﻓﺘﻤﺖ ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ ، ﻟﻜﻦ اﻻﺧﺘﻼف أن اﻟﻘﯿﻤﺔ 21 ﻓﻲ ﻣﺘﻐﯿﺮ اﻟـ ‪ age Session‬ﻟﻢ ﺗﺘﻢ ﻃﺒﺎﻋﺘﮫﺎ ، ﻟﻤﺎذا ؟‬

     ‫ﻟﺴﺒﺐ ﺑﺴﯿﻂ وھﻮ أﻧﻨﺎ ﻓﻲ اﻟﺼﻔﺤﺔ اﻟﺴﺎﺑﻘﺔ ﻗﻤﻨﺎ ﺑﺎﻟﻐﺎء ﺗﺴﺠﯿﻞ اﻟـ ‪ Session‬ﻟﻠﻤﺘﻐﯿﺮ ‪ age‬وﺑﺎﻟﺘﺎﻟﻲ ﻓﺈن‬
 ‫اﻟﺼﻔﺤﺔ اﻟﺜﺎﻟﺜﺔ ﻟﻢ ﺗﺘﻌﺮف ﻋﻠﻰ ﻣﺘﻐﯿﺮ ﻣﺒﺎﺷﺮ ﻟﻪ اﻻﺳﻢ ‪ age‬وﻻ ﻋﻠﻰ ﻣﺘﻐﯿﺮ اﻟـ ‪ ، age Session‬وﺑﺎﻟﺘﺎﻟﻲ ﺗﻢ‬
                                                                           ‫ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ ﺑﺪون اﻟﻘﯿﻤﺔ .‬
                                  ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت واﻟﻤﺠﻠﺪات‬
‫ﻛﻞ ﻣﺒﺮﻣﺞ ﻳﺠﺐ أن ﻳﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت واﻟﻤﺠﻠﺪات ﻓﻲ ﺑﻌﺾ اﻟﻨﻘﺎط ، ﺑﺮﻧﺎﻣﺠﻚ ﺳﻮف ﻳﺴﺘﺨﺪم اﻟﻤﻠﻔﺎت ﻟﻜﻲ‬
   ‫ﻳﻘﻮم ﺑﺘﺨﺰﻳﻦ ﻣﻌﻠﻮﻣﺎت اﻹﻋﺪاد ﻟﻠﺴﻜﺮﺑﺖ ، أو ﻳﻘﻮم ﺑﺘﺨﺰﻳﻦ اﻟﺒﯿﺎﻧﺎت ﻟﻘﺮاءﺗﮫﺎ وﻛﺘﺎﺑﺘﮫﺎ ، أو ﻟﻜﻲ ﻳﻘﻮم ﺑﺤﻔﻆ‬
    ‫اﻟﺒﯿﺎﻧﺎت اﻟﻤﺆﻗﺘﺔ ، وﻛﻤﺜﺎل ﻓﺈن أﺗﻔﻪ ﺑﺮﻧﺎﻣﺞ ﻋﺪاد ﻳﺤﺘﺎج إﻟﻲ ﻣﻠﻒ ﻳﻘﻮم ﺑﺘﺨﺰﻳﻦ آﺧﺮ رﻗﻢ ﺗﻢ اﻟﻮﺻﻮل إﻟﯿﻪ ..‬

     ‫اﻟﻤﻠﻒ : ﻟﯿﺲ ﻋﺒﺎرة ﻋﻦ أﻛﺜﺮ ﻣﻦ ﺑﺎﻳﺘﺎت ﻣﺘﺴﻠﺴﻠﺔ ﻳﺘﻢ ﺗﺨﺰﻳﻨﮫﺎ ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ أو أي ﻣﺎده ﺗﺨﺰﻳﻨﯿﺔ‬
                                                                                         ‫أﺧﺮى .‬
     ‫واﻟﻤﺠﻠﺪ : ھﻮ ﻋﺒﺎرة ﻋﻦ ﻧﻮع ﻣﺤﺪد ﻣﻦ اﻟﻤﻠﻔﺎت ﻳﺤﺘﻔﻆ ﺑﺄﺳﻤﺎء ﻣﻠﻔﺎت أﺧﺮي وﻣﺠﻠﺪات أﺧﺮي ) ﺗﺴﻤﻲ‬
  ‫ﺑﺎﻟﻤﺠﻠﺪات اﻟﻔﺮﻋﯿﺔ ( ، ﻛﻞ ﻣﺎ ﺗﺤﺘﺎﺟﻪ ﻟﺘﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت واﻟﻤﺠﻠﺪات ھﻮ ﻛﯿﻒ ﻳﻤﻜﻨﻚ رﺑﻂ ﺳﻜﺮﺑﺘﻚ ﺑﮫﻢ ..‬

   ‫ھﺬا اﻟﺪرس ﺳﯿﺄﺧﺬك إﻟﻲ ﺟﻮﻟﺔ ﻟﺘﻌﻠﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت واﻟﻤﺠﻠﺪات وﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻳﻮﻓﺮ ﻟﻚ ﻣﺮﺟﻌﯿﺔ‬
                                   ‫ﻟﺒﻌﺾ اﻟﺪوال اﻟﺘﻲ ﺗﺴﺎﻋﺪك ﻓﻲ ذﻟﻚ ﻣﻤﺎ ﻳﺠﻌﻞ ﻣﮫﻤﺘﻚ أﺳﮫﻞ ...‬

                                                           ‫ﺳﯿﻘﻮم ھﺬا اﻟﺪرس ﺑﺘﻐﻄﯿﻪ اﻟﻤﻮاﺿﯿﻊ اﻟﺘﺎﻟﯿﺔ :‬

                                                                            ‫ﻓﺘﺢ وإﻏﻼق اﻟﻤﻠﻒ .‬     ‫1‬
                                                               ‫اﻟﻘﺮاءة ﻣﻦ اﻟﻤﻠﻒ واﻟﻜﺘﺎﺑﺔ إﻟﯿﻪ .‬   ‫2‬
                                                                 ‫ﻣﺴﺢ وإﻋﺎدة ﺗﺴﻤﯿﺔ اﻟﻤﻠﻔﺎت‬         ‫3‬
                                                                 ‫اﺳﺘﻌﺮاض وﺗﺠﻮل ﻓﻲ اﻟﻤﻠﻒ .‬         ‫4‬
                                                                        ‫ﻓﺘﺢ وإﻏﻼق اﻟﻤﺠﻠﺪات .‬      ‫5‬
                                                              ‫ﻧﺴﺢ وإﻋﺎدة ﺗﺴﻤﯿﻪ اﻟﻤﺠﻠﺪات .‬         ‫6‬

                                                                                          ‫ﻣﻼﺣﻈﺔ :‬
      ‫ﻗﺒﻞ أن ﻧﺒﺪأ دﻋﻨﺎ ﻧﻨﺒﮫﻚ أن اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت ﻳﺨﺘﻠﻒ ﻣﻦ ﻧﻈﺎم ﺗﺸﻐﯿﻞ إﻟﻲ آﺧﺮ ﻓﻔﻲ أﻧﻈﻤﺔ اﻟﯿﻮﻧﻜﺲ‬
                                                            ‫ﺗﺴﺘﺨﺪم اﻟﻤﺴﺎرات اﻟﻌﻼﻣﺔ اﻟﻤﺎﺋﻠﺔ ﻟﻸﻣﺎم‬
                                                                                               ‫ﻣﺜﺎل‬
‫‪/home/usr/bin/data.txt‬‬
                                                           ‫ﺑﯿﻨﻤﺎ ﻓﻲ اﻟﻮﻳﻨﺪوز ﻓﺈن اﻟﻤﺴﺎر ﻳﻜﻮن ﻛﺎﻟﺘﺎﻟﻰ‬
‫‪C:\usr\bin\perl‬‬
 ‫وإذا اﺳﺘﺨﺪﻣﻨﺎ اﻟﻌﻼﻣﺔ اﻷﻣﺎﻣﯿﺔ ﻓﻲ ‪ PHP‬ﻟﻠﻮﻳﻨﺪوز ﻓﺈﻧﻪ ﻳﻘﻮم ﺑﺘﺤﻮﻳﻠﮫﺎ ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ إﻟﻲ ﻋﻼﻣﺔ ﺧﻠﻔﯿﺔ ﺑﯿﻨﻤﺎ‬
                ‫إذا أردﻧﺎ اﺳﺘﺨﺪام اﻟﻌﻼﻣﺔ اﻷﻣﺎﻣﯿﺔ ﻓﺈﻧﻨﺎ ﻳﺠﺐ أن ﻧﻘﻮم ﺑﺘﻜﺮار اﻟﻌﻼﻣﺔ ﻟﻜﻲ ﻳﺘﻢ اﻟﺘﻌﺮف ﻋﻠﯿﮫﺎ‬
‫‪C:\\windows\\PHP‬‬

                                    ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت‬
‫ﻳﻮﻓﺮ اﻟـ‪ PHP‬ﻧﻮﻋﯿﻦ ﻣﻦ اﻟﺪوال اﻟﻤﺘﻌﻠﻘﺔ ﺑﺎﻟﻤﻠﻔﺎت ﻓﮫﻨﺎك ﻧﻮع ﻣﻦ اﻟﺪوال ﻳﺴﺘﺨﺪم ﻣﻘﺒﺾ ﻟﻠﻤﻠﻒ )‪(file handle‬‬
     ‫أو ﻣﺎ ﻳﺴﻤﻮﻧﻪ ﺑﺎﻟﻤﺆﺷﺮ )‪ (pointer‬ﻓﻲ اﻟﻌﺎدة ، ﺑﯿﻨﻤﺎ ﺑﻌﺾ اﻟﺪوال ﻳﺴﺘﺨﺪم ﻗﯿﻤﻪ ﺣﺮﻓﯿﻪ ﺗﺸﯿﺮ إﻟﻲ ﻣﻮﺿﻊ‬
                                                                                ‫اﻟﻤﻠﻒ ﻣﺒﺎﺷﺮه ...‬

   ‫ﻣﻘﺒﺾ اﻟﻤﻠﻒ ﻟﯿﺲ أﻛﺜﺮ ﻣﻦ ﻋﺪد ﺻﺤﯿﺢ )‪ (integer‬ﻳﻘﻮم ﺑﺘﻌﺮﻳﻒ اﻟﻤﻠﻒ اﻟﻤﺮاد ﻓﺘﺤﻪ ﺣﺘﻲ ﻳﺘﻢ إﻏﻼﻗﻪ ، إذا‬
     ‫ﻛﺎن ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﻣﻠﻒ ﻣﻔﺘﻮح ﻓﺎن ﻟﻜﻞ ﻣﻠﻒ ﻣﻘﺒﻀﻪ اﻟﺘﻌﺮﻳﻔﻲ اﻟﺨﺎص ﺑﻪ ، وﺑﺎﻟﻄﺒﻊ ﻓﺈﻧﻪ ﻻ ﻳﺘﻮﺟﺐ ﻋﻠﯿﻚ‬
                                                                              ‫ﻣﻌﺮﻓﻪ ھﺬا اﻟﺮﻗﻢ ....‬

‫ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻓﺈن اﻟﺪاﻟﺔ )(‪ fwrite‬ﺗﻘﻮم ﺑﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻜﺘﺎﺑﺔ ﺑﯿﺎﻧﺎت إﻟﯿﻪ وھﻲ ﺗﺴﺘﺨﺪم ﻣﻘﺒﺾ ﻟﻜﻲ ﺗﻘﻮم‬
                                                                      ‫ﺑﺎﻟﺘﻌﺮف إﻟﻲ اﻟﻤﻠﻒ وﻓﺘﺤﻪ ..‬
‫;)’‪Fwrite ($fp,’Hello World‬‬
    ‫ﺑﯿﻨﻤﺎ اﻟﺪاﻟﺔ )(‪ file‬اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻟﻠﻘﺮاءة ﻣﻦ اﻟﻤﻠﻒ ﺗﻘﻮم ﺑﺎﺳﺘﺨﺪام ﻗﯿﻤﺔ ﻧﺼﯿﺔ ﺗﻘﻮم ﺑﺎﻹﺷﺎرة إﻟﻰ ﻣﻜﺎن‬
                                                     ‫اﻟﻤﻠﻒ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ﻟﻜﻲ ﻳﺘﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻌﻪ ..‬

                                 ‫ﺎ‬
 ‫ﻻ ﺗﺼﺐ ﺑﺎﻟﺮﻋﺐ واﻟﺨﻮف ﻣﻦ ھﺬا اﻟﻜﻼم ﻓﺄﻧﺎ أﻋﻠﻢ أﻧﻪ ﻗﺪ ﻳﻜﻮن ﻏﺎﻣﻀً ﻋﻠﯿﻚ .. ﺗﻨﻔﺲ اﻟﺼﻌﺪاء وﺟﮫﺰ ﻟﻨﻔﺴﻚ‬
                                                                                         ‫ﺎ‬
                                                    ‫ﻛﺄﺳً ﻣﻦ اﻟﺸﺎي ﻷﻧﻨﺎ ﺳﻨﺒﺪأ ﻓﻲ اﻟﺠﺪ اﻵن ....‬

       ‫ﻣﻼﺣﻈﺔ : ﺳﺘﺠﺪ أن اﻏﻠﺐ اﻟﺪوال أو ﻣﻌﻈﻤﮫﺎ أو ﻛﻠﮫﺎ ﺗﻘﺮﻳﺒﺎ ﺗﻘﻮم ﺑﺈرﺟﺎع اﻟﻘﯿﻤﺔ ‪ True‬إذا ﺗﻤﺖ ﺑﻨﺠﺎح‬
                                                  ‫واﻟﻘﯿﻤﺔ ‪ False‬إذا ﻓﺸﻠﺖ ﻓﻲ اﻟﺤﺼﻮل ﻋﻠﻰ ھﺪﻓﮫﺎ ..‬
                                                  ‫ﻟﻨﺒﺪأ اﻵن ﻣﻊ ﺳﻜﺮﺑﺘﺎت ﻣﺒﺴﻄﺔ ﻟﻠﻌﻤﻞ ﻣﻊ اﻟﻤﻠﻔﺎت ..‬

                                        ‫ﻓﺘﺢ واﻏﻼق اﻟﻤﻠﻔﺎت‬

                                                                                                ‫‪Fopen‬‬
‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﺛﻼث ﻋﻮاﻣﻞ ھﻲ ﻣﺴﺎر اﻟﻤﻠﻒ )‪ (path‬واﻟﻮﺿﻊ ﻟﻪ ) ﻟﻠﻘﺮاءة ، ﻟﻠﻜﺘﺎﺑﺔ .....( ﺑﺎﻻﺿﺎﻓﺔ إﻟﻰ‬
                                            ‫ﻣﺴﺎر اﻟـ‪ Include‬ﻓﯿﻪ وﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈرﺟﺎع ﻣﻘﺒﺾ ﻟﻠﻤﻠﻒ ...‬

   ‫ﻗﺪ ﺗﻮاﺟﮫﻨﺎ ﻣﺸﺎﻛﻞ أﺣﯿﺎﻧﺎ ﻓﻘﺪ ﻳﻜﻮن اﻟﻤﻠﻒ ﻏﯿﺮ ﻣﻨﺸﺄ أو أﻧﻨﺎ ﻻ ﻧﻤﻠﻚ ﺻﻼﺣﯿﺎت ﻋﻠﯿﻪ وﻟﺬﻟﻚ ﻓﺈﻧﻪ ﻳﻤﻜﻨﻨﺎ‬
 ‫اﺧﺘﺒﺎر اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺗﺮﺟﻌﮫﺎ ھﺬه اﻟﺪاﻟﺔ ﻓﺈذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ ﺻﻔﺮ ﻓﮫﺬا ﻣﻌﻨﺎه أن اﻟﺪاﻟﺔ ﻓﺸﻠﺖ ﻓﻲ إرﺟﺎع ﻣﻘﺒﺾ‬
             ‫اﻟﻤﻠﻒ أو ﻧﻮﻋﻪ ، أﻣﺎ إذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ ھﻲ واﺣﺪ ﻓﮫﺬا ﻣﻌﻨﺎه أن اﻟﺪاﻟﺔ ﻗﺪ ﻧﺠﺤﺖ ﻓﻲ ﻓﺘﺢ اﻟﻤﻠﻒ‬

                                                                                                  ‫ﻣﺜﺎل‬
‫;)”‪$fp=fopen (“./data.txt”, “r‬‬
‫;)”ﻓﺸﻞ ﻓﻲ ﻗﺮاءه اﻟﻤﻠﻒ ﺗﺄﻛﺪ ﻣﻦ اﻟﺘﺮاﺧﯿﺺ وﻣﻦ ﻣﺴﺎر اﻟﻤﻠﻒ“( ‪if (!$fp) die‬‬
                                                              ‫ﻳﻤﻜﻨﻨﺎ ﻛﺘﺎﺑﺔ اﻟﻤﺜﺎل أﻳﻀﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :‬
‫;)”ﻻ ﻳﻤﻜﻦ اﻟﻘﺮاءة ﻣﻦ اﻟﻤﻠﻒ“( ‪If (!($fp=fopen (“./data.txt”, “r”))) die‬‬


                                                                                   ‫ﺎ‬
  ‫ﻻﺣﻆ أﻧﻨﺎ ﻗﻠﻨﺎ ﺳﺎﺑﻘً أن ھﻨﺎك دوال ﺗﺴﺘﺨﺪم ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت ﺗﺴﺘﺨﺪم ﻣﻘﺒﺾ وھﺬا اﻟﻤﻘﺒﺾ ھﻮ ﻋﺒﺎرة‬
  ‫ﻋﻦ رﻗﻢ ، ﻓﻲ ﻣﺜﺎﻟﻨﺎ ھﺬا ﻳﺘﺤﺪد رﻗﻢ اﻟﻤﻘﺒﺾ اﻟﺬي ھﻮ اﻟﻤﺘﻐﯿﺮ ‪ $fp‬اﻟﺬي ﻳﺨﺰن ﻓﯿﻪ ﻣﻜﺎن اﻟﻤﻠﻒ وﻣﺎ إذا ﻛﺎن‬
      ‫ﺎ‬                                                                                           ‫ﻼ‬
 ‫ﻗﺎﺑ ً ﻟﻠﻔﺘﺢ أو ﻻ أو ﻳﻌﻤﻞ أو ﻻ ﻳﻌﻤﻞ ، واﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﺗﺘﺨﺰن ﻓﻲ اﻟﻤﺘﻐﯿﺮ ‪ $fp‬ھﻲ رﻗﻢ ﻣﺜﻠﻤﺎ ﻗﻠﻨﺎ ﺳﺎﺑﻘً وھﻮ‬
                                           ‫ﺻﻔﺮ إذا ﻛﺎن اﻟﻤﻠﻒ ﻻ ﻳﻌﻤﻞ أو واﺣﺪ إذا ﺗﻢ ﻓﺘﺢ اﻟﻤﻠﻒ ﺑﻨﺠﺎح ..‬

                               ‫اﻵن دﻋﻨﺎ ﻧﻨﺎﻗﺶ ﻣﻌﺎﻣﻼت اﻟﺪاﻟﺔ ‪ fopen‬اﻟﺬي ﺗﻘﻮم ﺑﺈﻋﻄﺎﺋﻨﺎ رﻗﻢ اﻟﻤﻘﺒﺾ ..‬

                                                        ‫أول ﻣﻌﺎﻣﻞ ھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ ﻋﻠﻰ اﻟﻘﺮص اﻟﺼﻠﺐ‬

‫ﻟﻨﻔﺮض أن ﻟﺪﻳﻚ ﻣﺠﻠﺪا ﻗﻤﺖ ﺑﺈﻧﺸﺎﺋﻪ ﻓﻲ ﻣﺠﻠﺪ اﻟﺴﻜﺮﺑﺘﺎت اﻟﺮﺋﯿﺴﻲ ﻟﺪﻳﻚ اﻟﺬي ﻳﺴﻤﻰ ‪ htdocs‬وأﺳﻤﯿﺘﻪ‬
                                                                                   ‫‪data‬‬

                                                                 ‫وﻟﻨﻔﺮض أن ﺳﻜﺮﺑﺘﻚ ﻳﺴﺘﺨﺪم ﻣﻠﻔﯿﻦ :‬
                                                            ‫1- ﻣﻠﻒ ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ ﻳﺴﻤﻲ ‪. data.txt‬‬
                                        ‫2- وﻣﻠﻒ ﻳﻘﻮم ﺑﻌﺮض اﻟﻤﺪﺧﻼت واﻹﺿﺎﻓﺔ إﻟﯿﮫﺎ اﺳﻤﻪ ‪. script.txt‬‬

                                                                 ‫ﺣﺴﻨﺎ ﻟﺪﻳﻨﺎ اﻵن ﺛﻼث ﺣﺎﻻت ﻟﻠﺴﻜﺮﺑﺖ‬

                                                                               ‫اﻟﺤﺎﻟﺔ اﻷوﻟﻰ :‬
   ‫أن ﻳﻜﻮن اﻟﻤﻠﻔﯿﻦ ﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ )‪ (data‬وﻋﻨﺪ ذﻟﻚ ﻳﻤﻜﻨﻚ ﻓﺘﺢ اﻟﻤﻠﻒ اﻟﺬي ﺗﺮﻳﺪ ﻓﺘﺤﻪ ﺑﺬﻛﺮ اﺳﻤﻪ ﻓﻘﻂ‬
                                                                               ‫ﻣﻦ ﻏﯿﺮ إﺿﺎﻓﺎت‬
‫;)”‪$fp=fopen (“data.txt”, “r‬‬

                                                                                         ‫اﻟﺤﺎﻟﺔ اﻟﺜﺎﻧﯿﺔ:‬
          ‫أن ﻳﻜﻮن ھﻨﺎك ﻣﺠﻠﺪ ﻓﻲ ﻧﻔﺲ ﻣﺠﻠﺪ اﻟـ‪ data‬ﺑﺎﺳﻢ آﺧﺮ وﻟﻨﻘﻞ أن ھﺬا اﻻﺳﻢ ھﻮ ‪ gb‬وﻓﯿﻪ ﻣﻠﻒ‬
                                  ‫‪ data.txt‬ﻋﻠﻰ ذﻟﻚ ﻓﺈﻧﻨﺎ ﻧﻜﺘﺐ اﻟﻤﺴﺎر اﻟﻤﻄﻠﻖ ﻟﮫﺬا اﻟﻤﺠﻠﺪ ﻛﺎﻟﺘﺎﻟﻲ :‬
‫;)”‪$fp=fopen (“./gb/data.txt”, “r‬‬

                                                                                    ‫اﻟﺤﺎﻟﺔ اﻟﺜﺎﻟﺜﺔ :‬
      ‫أن ﻳﻜﻮن اﻟﻤﻠﻒ اﻟﺬي ﺗﺮﻳﺪ ﻗﺮاءﺗﻪ ﻣﻮﺟﻮد ﻓﻲ اﻟﻤﺠﻠﺪ ‪ htdocs‬ﺑﯿﻨﻤﺎ اﻟﺴﻜﺮﺑﺖ ﻣﻮﺟﻮد ﻓﻲ اﻟﻤﺠﻠﺪ ‪data‬‬
                                        ‫اﻟﻤﻮﺟﻮد داﺧﻞ ‪ htdocs‬ﻋﻠﻰ ذﻟﻚ ﻧﻜﺘﺐ اﻟﻤﺴﺎر اﻟﻨﺴﺒﻲ ﻛﺎﻟﺘﺎﻟﻲ‬
‫;)”‪$fp=fopen (“../data.txt”, “r‬‬
                                                      ‫ﻻﺣﻆ اﻟﻨﻘﻄﻪ اﻟﺘﻲ ﺗﺴﺒﻖ اﻟﻌﻼﻣﺔ اﻷﻣﺎﻣﯿﺔ ﺟﯿﺪا..‬
              ‫أﺗﻤﻨﻲ أن ﺗﻜﻮن ﻓﮫﻤﺖ ﻣﻦ ھﺬا اﻟﻜﻼم ﻣﺎ ھﻮ اﻟﻤﻘﺼﻮد ﺑﺎﻟﻤﺴﺎر اﻟﻤﻄﻠﻖ واﻟﻤﺴﺎر اﻟﻨﺴﺒﻲ ..‬
                ‫ﻳﻤﻜﻨﻨﺎ أﻳﻀﺎ وﺿﻊ راﺑﻂ ﺻﻔﺤﺔ ﻓﻲ ﻣﻮﻗﻊ آﺧﺮ وﻟﻜﻨﻨﺎ ﻟﻦ ﻧﺴﺘﻄﯿﻊ اﻟﻜﺘﺎﺑﺔ ﻋﻠﯿﻪ ﺑﻞ ﻗﺮاءﺗﻪ ﻓﻘﻂ‬

                                                                                                ‫ﻣﺜﺎل :‬

‫;)”ﻻ ﻳﻤﻜﻦ اﻟﻘﺮاءة ﻣﻦ اﻟﻤﻠﻒ“( ‪If (!($fp=fopen (“http://www.swalif.net/softs/index.php”, “r”))) die‬‬

                            ‫ﻳﻨﻘﺼﻨﺎ ﻧﻘﻄﻪ ﻳﺠﺐ أن ﻧﺘﻜﻠﻢ ﻋﻨﮫﺎ وھﻲ ﻋﻨﺪ ﺗﺤﺪﻳﺪ اﻟﻌﺎﻣﻞ ‪use_include_path‬‬

                                                  ‫اﻟﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ اﻟﺬي ﻧﺴﺘﺨﺪﻣﻪ ﻟﻠﻤﻠﻔﺎت ھﻮ ﺣﺎﻟﻪ اﻟﻤﻠﻒ‬

     ‫) ﻟﻠﻘﺮاءة ، ﻟﻠﻜﺘﺎﺑﺔ ، ﻟﻺﺿﺎﻓﺔ إﻟﯿﻪ( ﻳﺤﺪد وﺿﻌﯿﺔ اﻟﻤﻠﻒ ﺣﺎل ﻓﺘﺤﻪ إذا ﻛﺎن ﻟﻠﻘﺮاءة ﻓﻘﻂ أو ﻟﻠﻜﺘﺎﺑﺔ ﻓﻘﻂ أو‬
                                                                                           ‫ﺎ‬
                                                   ‫ﻟﻼﺛﻨﯿﻦ ﻣﻌً أو ﻟﻺﺿﺎﻓﺔ ، وأرﺗﺒﮫﺎ ھﻨﺎ ﻓﻲ ﺟﺪول ﺑﺴﯿﻂ ..‬

                                                                           ‫اﻟﻮﺻﻒ‬      ‫اﻟﻘﯿﻤﺔ‬
                              ‫ﺗﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة ﻓﻘﻂ وﻳﻜﻮن اﻟﻤﺆﺷﺮ ﻓﻲ ﺑﺪاﻳﺔ اﻟﻤﻠﻒ‬           ‫‪r‬‬
                            ‫ﻳﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ وﻳﻀﻊ اﻟﻤﺆﺷﺮ ﻓﻲ ﺑﺪاﻳﺔ اﻟﻤﻠﻒ‬       ‫+‪r‬‬
              ‫ﻳﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة ﻓﻘﻂ ، أي ﺑﯿﺎﻧﺎت ﻣﻮﺟﻮدة ﺳﯿﺘﻢ ﻣﺴﺤﮫﺎ ، إذا ﻟﻢ ﻳﻜﻦ‬           ‫‪w‬‬
                                                ‫اﻟﻤﻠﻒ ﻣﻮﺟﻮدا ﺳﯿﺤﺎول ‪ PHP‬إﻧﺸﺎؤه‬
         ‫ﻳﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة واﻟﻜﺘﺎﺑﺔ ، أي ﺑﯿﺎﻧﺎت ﻣﻮﺟﻮدة ﺳﯿﺘﻢ ﻣﺴﺤﮫﺎ ، إذا ﻟﻢ ﻳﻜﻦ‬          ‫+‪w‬‬
                                                ‫اﻟﻤﻠﻒ ﻣﻮﺟﻮدا ﺳﯿﺤﺎول ‪ PHP‬إﻧﺸﺎؤه‬
          ‫ﻳﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻺﺿﺎﻓﺔ ﻓﻘﻂ ، إذا ﻟﻢ ﻳﻜﻦ اﻟﻤﻠﻒ ﻣﻮﺟﻮدا ﺳﯿﺤﺎول ‪ PHP‬إﻧﺸﺎؤه‬                ‫‪a‬‬
                                                  ‫، ﺳﯿﻜﻮن اﻟﻤﺆﺷﺮ ﻓﻲ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ‬
            ‫ﻳﻔﺘﺢ اﻟﻤﻠﻒ ﻟﻠﻘﺮاءة و ﻟﻺﺿﺎﻓﺔ ، إذا ﻟﻢ ﻳﻜﻦ اﻟﻤﻠﻒ ﻣﻮﺟﻮدا ﺳﯿﺤﺎول ‪PHP‬‬              ‫+‪a‬‬
                                           ‫إﻧﺸﺎؤه ، ﺳﯿﻜﻮن اﻟﻤﺆﺷﺮ ﻓﻲ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ‬
         ‫ﻳﺴﺘﺨﺪم ﻟﻔﺘﺢ وﻗﺮاءه ﻣﻠﻔﺎت اﻟﺼﻮر ﻋﻠﻰ ﻧﻈﺎم أو ﺳﯿﺮﻓﺮات اﻟﻮﻳﻨﺪوز ﻓﻘﻂ .. أﻣﺎ‬            ‫‪b‬‬
                  ‫اﻟﯿﻨﻮﻛﺲ ﻓﺎﻟﻌﻮاﻣﻞ اﻟﺴﺎﺑﻘﻪ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻣﻠﻔﺎت اﻟﺼﻮر ﺑﺸﻜﻞ ﻋﺎدي ..‬

‫ھﻨﺎك ﻣﺆﺷﺮ ﻟﻠﻤﻠﻔﺎت ﻳﺤﺪد إذا ﻣﺎ ﻛﻨﺖ ﺳﺘﻜﺘﺐ ﻣﻦ ﻧﮫﺎﻳﺔ أو ﺑﺪاﻳﺔ اﻟﻤﻠﻒ أو ﺣﺘﻰ ﻣﻦ وﺳﻄﻪ أو ﻣﻦ أي ﻣﻜﺎن‬
                                            ‫ﺑﺎﻟﻤﻠﻒ ، ﺳﺘﻌﺮف ﻛﯿﻔﯿﺔ اﻟﺘﺤﻜﻢ ﺑﮫﺬا اﻟﻤﺆﺷﺮ ﺑﻌﺪ ﻗﻠﯿﻞ .‬

                                                            ‫اﻟﻌﺎﻣﻞ اﻟﺜﺎﻟﺚ ھﻮ ﺗﺤﺪﻳﺪ ‪use_include_path‬‬

 ‫ﻓﺈذا ﻗﻤﺖ ﺑﺘﺤﺪﻳﺪ ﻗﯿﻤﺘﻪ إﻟﻲ )1( وﻗﻤﺖ ﺑﻜﺘﺎﺑﺔ اﺳﻢ اﻟﻤﻠﻒ ﻣﺒﺎﺷﺮة ﻓﺴﯿﺒﺤﺚ اﻟـ‪ PHP‬ﻋﻦ اﻟﻤﻠﻒ ﻓﻲ ﻧﻔﺲ‬
  ‫اﻟﻤﺠﻠﺪ اﻟﻤﻮﺟﻮد ﺑﻪ اﻟﺴﻜﺮﺑﺖ ﺛﻢ ﺳﯿﻘﻮم ﺑﺎﻟﺒﺤﺚ ﻋﻦ اﻟﻤﻠﻒ ﻓﻲ اﻟﻤﺠﻠﺪات اﻟﺘﻲ ﺗﻢ ﺗﺤﺪﻳﺪھﺎ ﻓﻲ اﻟﻤﺘﻐﯿﺮ‬
                                                            ‫‪ use_include_path‬ﻓﻲ ﻣﻠﻒ ‪php.ini‬‬
                                                                                                ‫ﻣﺜﺎل :‬
‫;)1,”‪$fp=fopen (“./data.txt”, “r‬‬

                                                                                           ‫‪fclose‬‬
      ‫ﻋﻨﺪﻣﺎ ﺗﻨﺘﮫﻲ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻒ ، ﺗﺤﺘﺎج إﻟﻰ إﻏﻼﻗﻪ ﻟﻜﻲ ﻳﺘﻢ ﺣﻔﻆ اﻟﺘﻌﺪﻳﻼت ﻋﻠﯿﻪ ، إذا ﺗﻢ إﺣﺒﺎط‬
          ‫ﺳﻜﺮﺑﺘﻚ ﻷي ﺳﺒﺐ أو أن اﻟﺴﻜﺮﺑﺖ اﻧﺘﮫﻲ ﻋﻤﻠﻪ ﻓﺈن اﻟـ‪ PHP‬ﻳﻘﻮم ﺑﺈﻏﻼق ﺟﻤﯿﻊ اﻟﻤﻠﻔﺎت ﺗﻠﻘﺎﺋﯿﺎ‬
 ‫ﺗﻘﻮم اﻟﺪاﻟﺔ )(‪ fclose‬ﺑﺈﻏﻼق اﻟﻤﻠﻒ ﻋﻨﺪﻣﺎ ﺗﺮﻳﺪ إﻏﻼﻗﻪ وھﻲ ﺗﺤﺘﺎج إﻟﻲ ﻣﻌﺎﻣﻞ واﺣﺪ ﻓﻘﻂ وھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ‬
                                                                                  ‫اﻟﺬي ﺗﺮﻳﺪ إﻏﻼﻗﻪ‬
                                                                                           ‫ﻣﺜﺎل :‬
‫; )‪Fclose ($fp‬‬

                                        ‫ﻗﺮاءه وﻛﺘﺎﺑﻪ اﻟﻤﻠﻔﺎت‬

‫ﻟﻘﺪ ﺗﻌﺮﻓﻨﺎ اﻵن ﻛﯿﻔﯿﺔ ﻓﺘﺢ وإﻏﻼق اﻟﻤﻠﻒ ، ﻟﻨﻘﻢ اﻵن ﺑﺎﻟﺘﻌﺮف ﻋﻠﻲ ﻛﯿﻔﯿﺔ ﻗﺮاءة و ﻛﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﻤﻠﻒ ،‬

                                                                                                 ‫‪Fread‬‬
      ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻘﺮاءة واﺳﺘﺨﺮاج اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻠﻔﺎت ووﺿﻌﮫﺎ ﺑﻤﺘﻐﯿﺮ وھﻲ ﺗﺄﺧﺬ ﻣﻌﺎﻣﻠﯿﻦ‬
                           ‫اﻟﻤﻌﺎﻣﻞ اﻷول ھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ واﻟﻌﺪد اﻟﺜﺎﻧﻲ ھﻮ ﻋﺪد اﻟﺤﺮوف اﻟﻤﺮاد ﻗﺮاءﺗﮫﺎ ..‬
                                                                                                ‫ﻣﺜﺎل :‬
‫;)"‪$fp=fopen("data.txt","r‬‬
‫;)01,‪$data=fread($fp‬‬
                                                                            ‫وﺧﺬ ﺑﺎﻋﺘﺒﺎرك ﻧﻘﻄﺘﯿﻦ وھﻤﺎ :‬
   ‫إذا ﻣﺜ ً ﻗﺮأت ﻋﺸﺮ ﺣﺮوف ﻣﻦ اﻟﻤﻠﻒ وﻛﺎن ﻓﻲ اﻟﻤﻠﻒ ﻋﺸﺮﻳﻦ ﺣﺮف وﻗﻤﺖ ﺑﻄﻠﺐ اﻟﺪاﻟﺔ ‪fread‬‬     ‫ﻼ‬          ‫1-‬
                                                    ‫ﻣﺮه أﺧﺮي ﻓﺴﯿﺘﻢ ﻗﺮاءة اﻟﻌﺸﺮ أﺣﺮف اﻟﺜﺎﻧﯿﺔ ..‬
                                 ‫إذا ﻛﺎن ﻓﻲ اﻟﻤﻠﻒ أﻗﻞ ﻣﻦ ﻋﺸﺮ أﺣﺮف ﻓﺴﯿﺘﻢ ﻗﺮاءة اﻟﻤﻮﺟﻮد .‬          ‫2-‬

                                                                                             ‫‪Fwrite‬‬
    ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﻜﺘﺎﺑﺔ إﻟﻰ اﻟﻤﻠﻒ وﺗﺤﺘﺎج إﻟﻰ ﻋﺎﻣﻠﯿﻦ وھﻲ ﻣﻘﺒﺾ اﻟﻤﻠﻒ واﻟﻘﯿﻤﺔ اﻟﻤﺮاد ﻛﺘﺎﺑﺘﮫﺎ إﻟﻰ‬
  ‫اﻟﻤﻠﻒ ، ﻓﻌﻠﻰ اﻓﺘﺮاض أﻧﻚ ﻗﺪ ﻓﺘﺤﺖ اﻟﻤﻠﻒ واﻟﻤﻘﺒﺾ ھﻮ ‪ $fp‬ﻓﺈﻧﻨﺎ ﻧﻜﺘﺐ اﻟﻜﻠﻤﺔ ‪ PHP‬إﻟﻰ اﻟﻤﻠﻒ ﺑﺎﻟﻄﺮﻳﻘﺔ‬
                                                                                            ‫اﻟﺘﺎﻟﯿﺔ :‬

‫;)"‪Fwrite ($fp, "PHP‬‬
  ‫وھﻨﺎك ﻣﻌﺎﻣﻞ ﺛﺎﻟﺚ ﻟﮫﺬه اﻟﺪاﻟﺔ ﻳﺤﺪد ﻛﻢ ﺣﺮﻓﺎ ﺳﻨﻘﻮم ﺑﻜﺘﺎﺑﺘﻪ ﻣﻦ اﻟﻘﯿﻤﺔ اﻟﺤﺮﻓﯿﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﻌﺎﻣﻞ‬
 ‫اﻟﺜﺎﻧﻲ ﻓﻠﻮ ﻣﺜﻼ ﻛﺘﺒﻨﺎ‬
‫;)1,"‪Fwrite ($fp, "PHP‬‬
                                                                 ‫ﻓﺴﻮف ﻳﺘﻢ ﻛﺘﺎﺑﻪ أول ﺣﺮف ﻓﻘﻂ ...‬


                                   ‫ﻗﺮاءة وﻛﺘﺎﺑﺔ اﻟﺤﺮوف ﻓﻲ اﻟﻤﻠﻔﺎت‬

                                                                                                ‫‪Fgetc‬‬
           ‫ا‬     ‫ﻼ‬
  ‫ﺗﺴﺘﺨﺪم ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة ﺣﺮف واﺣﺪ ﻣﻦ اﻟﻤﻠﻒ ﻓﻲ ﻛﻞ ﻣﺮة ، وھﻲ ﺗﺴﺘﺨﺪم ﻣﻌﺎﻣ ً واﺣﺪً وھﻮ ﻣﻘﺒﺾ‬
                                                                                           ‫اﻟﻤﻠﻒ‬
                         ‫وﺗﻘﻮم ﺑﺈرﺟﺎع ﺣﺮف واﺣﺪ ﻣﻦ اﻟﻤﻠﻒ أو )‪ (False‬ﻋﻨﺪ اﻟﻮﺻﻮل إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ ..‬

                                                                                            ‫‪Feof‬‬
 ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺨﺪﻣﺘﻨﺎ ﻓﻲ ھﺪف ﺑﺴﯿﻂ وﺷﻲ ﻣﻤﺘﺎز وھﻲ ﻣﻌﺮﻓﺔ إذا ﻣﺎ ﻛﻨﺎ ﻗﺪ وﺻﻠﻨﺎ إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ‬
       ‫ﻼ‬
 ‫ﻋﻨﺪ ﻗﺮاءﺗﻪ وﺗﻘﻮم ﺑﺈرﺟﺎع )‪ (true‬ﻋﻨﺪ اﻟﻮﺻﻮل إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ أو ﺣﺼﻮل ﺧﻄﺄ ﻣﺎ ، وھﻲ ﺗﺄﺧﺬ ﻣﻌﺎﻣ ً واﺣﺪ‬
                                                                               ‫وھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ .‬
                                                                                   ‫ﻼ‬
 ‫ﻓﻘﺪ ﺗﻜﻮن ﻣﺜ ً ﺗﺮﻳﺪ أن ﺗﺘﺄﻛﺪ أن اﻟﻤﺆﺷﺮ ﻟﻢ ﻳﺼﻞ إﻟﻲ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ ﺑﻌﺪ اﺳﺘﺨﺪاﻣﻚ ﻷﺣﺪ اﻟﺪوال اﻟﺘﻲ ﺗﻘﻮم‬
‫ﺑﻨﻘﻞ اﻟﻤﺆﺷﺮ ﻣﻦ ﻣﻜﺎن إﻟﻲ آﺧﺮ ، ﻋﻨﺪ ذﻟﻚ ﺳﺘﻜﻮن ھﺬه اﻟﺪاﻟﺔ ﻣﻔﯿﺪة ﻟﺘﺨﺒﺮك إذا ﻣﺎ وﺻﻠﺖ إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ‬
                                                                                         ‫أو ﻻ ...‬


                                                                             ‫ﺗﻄﺒﯿﻖ ﻋﻤﻠﻲ :‬
 ‫ﻗﻢ ﺑﺈﻧﺸﺎء ﻣﻠﻒ ﺳﻤﻪ ‪ file.txt‬واﻛﺘﺐ ﻓﯿﻪ أﻛﺜﺮ ﻣﻦ ﺳﻄﺮ ﺛﻢ ﻗﻢ ﺑﺈﻧﺸﺎء ﻣﻠﻒ ‪ PHP‬وﺳﻤﻪ ﺑﺄي اﺳﻢ وﺿﻊ ﻓﯿﻪ‬
                                              ‫اﻟﺸﻔﺮة اﻟﺘﺎﻟﯿﺔ ﺛﻢ اﺧﺘﺒﺮه ، ﻟﻜﻲ ﺗﺮى ﻋﻤﻞ اﻟﺪاﻟﺘﯿﻦ‬
 ‫?<‬
‫;)"‪$fp= fopen("file.txt","r‬‬
‫))‪While (!feof($fp‬‬
‫{‬
 ‫;)‪$char=fgetc($fp‬‬
    ‫;‪echo $char‬‬
‫>? }‬

                                                                                                  ‫‪Fgets‬‬
                                ‫ا‬     ‫ﺎ‬
  ‫إذا اﺳﺘﺨﺪﻣﻨﺎ اﻟﺪاﻟﺔ ‪ fgetc‬ﻟﻘﺮاءة اﻟﻤﻠﻔﺎت اﻟﻄﻮﻳﻠﺔ ﻓﺈﻧﮫﺎ ﺳﺘﺄﺧﺬ وﻗﺘً وﻋﻤﺮً ﺣﺘﻰ ﻳﺘﻢ ﻗﺮاءﺗﮫﺎ ، ﻳﻘﻮم اﻟـ‪PHP‬‬
‫ﺑﺘﻮﻓﯿﺮ داﻟﺔ ‪ fgets‬ﻟﺘﺴﺎﻋﺪﻧﺎ ﻓﻲ ﻗﺮاءة ﻋﺪد ﻣﺤﺪد ﻣﻦ اﻟﺒﺎﻳﺘﺎت وھﻲ ﺗﺄﺧﺬ ﻣﻌﺎﻣﻠﯿﻦ ، اﻟﻤﻌﺎﻣﻞ اﻷول ھﻮ ﻣﻘﺒﺾ‬
     ‫اﻟﻤﻠﻒ واﻟﻤﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ ھﻮ ﻋﺪد اﻟﺤﺮوف اﻟﻤﺮاد ﻗﺮاءﺗﮫﺎ +1 ، ﻓﺈذا ﻣﺜﻼ أردت ﻗﺮاءة ﻣﻠﻒ ﻳﺘﻜﻮن ﻣﻦ ﺧﻤﺲ‬
           ‫ﺣﺮوف ﻓﺴﯿﻜﻮن اﻟﻤﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ ﻟﻠﺪاﻟﺔ ھﻮ اﻟﺮﻗﻢ 6 وﺗﺘﻮﻗﻒ اﻟﺪاﻟﺔ ﻋﻨﺪ ﺣﺪوث أﺣﺪ ﻣﻦ ﺛﻼث ﺣﺎﻻت‬
                                                       ‫اﻷول : ھﻮ إذا ﺗﻢ ﻗﺮاءة ﻋﺪد اﻟﺒﺎﻳﺘﺎت اﻟﻤﺤﺪد ة‬
                                                 ‫اﻟﺜﺎﻧﻲ : إذا ﺗﻢ اﻟﻮﺻﻮل إﻟﻰ ﻧﮫﺎﻳﺔ ﺳﻄﺮ ﻓﻲ اﻟﻤﻠﻒ .‬
                                                                ‫اﻟﺜﺎﻟﺚ : إذا وﺻﻠﺖ إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ .‬
                                                                                                 ‫ﻣﺜﺎل :‬
‫;)"‪$fd = fopen ("/tmp/inputfile.txt", "r‬‬
‫{ ))‪while (!feof ($fd‬‬
   ‫;)6904 ,‪$buffer = fgets($fd‬‬
   ‫;‪echo $buffer‬‬
‫}‬
‫;)‪fclose ($fd‬‬

                                                                                           ‫‪Fputs‬‬
                                ‫ﺗﻘﻮم ﺑﻨﻔﺲ وﻇﯿﻔﺔ اﻟﺪاﻟﻪ ‪ fwrite‬وﺗﺄﺧﺬ ﻧﻔﺲ ﻣﻌﺎﻣﻼﺗﮫﺎ وﻧﻔﺲ ﻃﺮﻳﻘﺘﮫﺎ ..‬

                                       ‫اﻟﻘﺮاءة داﺧﻞ اﻟﻤﻠﻔﺎت‬

                                                                                                ‫‪File‬‬
   ‫ﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﻣﻌﺎﻣﻞ واﺣﺪ ھﻮ ﻣﺴﺎر اﻟﻤﻠﻒ وﻻ ﺗﺤﺘﺎج إﻟﻲ ﻣﻘﺒﺾ ، وﻋﻤﻠﮫﺎ ھﻮ ﻗﺮاءة ﻣﺎ ﺑﺪاﺧﻞ‬
                                                                       ‫ا‬     ‫ا‬
   ‫اﻟﻤﻠﻒ وﺗﺨﺰﻳﻨﻪ ﺳﻄﺮً ﺳﻄﺮً ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﺣﯿﺚ أن ھﺬه اﻟﻤﺼﻔﻮﻓﺔ ﺗﻘﻮم ﺑﺄﺧﺬ ﻛﻞ ﺳﻄﺮ ﻓﻲ اﻟﻤﻠﻒ ﻛﺄﻧﻪ‬
‫ﻋﻨﺼﺮ ﻟﻮﺣﺪه وﺗﻈﻞ اﻟﺴﻄﻮر ﺳﻄﻮرا )أي أن اﻟﻤﺼﻔﻮﻓﺔ ﺗﺤﺘﻔﻆ ﺑﺎﻟﻤﻌﺎﻣﻞ ﻟﻠﺴﻄﺮ اﻟﺠﺪﻳﺪ )‪ (\n‬ﺑﺪاﺧﻠﮫﺎ ( ، ھﺬه‬
 ‫اﻟﺪاﻟﺔ ﻻ ﺗﺤﺘﺎج إﻟﻲ ﻣﻘﺒﺾ ﻟﻠﻤﻠﻒ ﺑﻞ ﺗﺤﺘﺎج إﻟﻰ ﻣﺴﺎر اﻟﻤﻠﻒ ﻓﻘﻂ ، وھﻲ ﺗﻘﻮم ﺑﻔﺘﺢ وﻗﺮاءة وإﻏﻼق اﻟﻤﻠﻒ‬
                                                                                         ‫ﺗﻠﻘﺎﺋﯿﺎ ...‬
                                   ‫وﻛﻐﯿﺮھﺎ ﻣﻦ اﻟﺪوال ﻓﺈﻧﮫﺎ ﺗﺴﺘﻄﯿﻊ ﻗﺮاءة ﺻﻔﺤﺎت اﻹﻧﺘﺮﻧﺖ اﻟﺨﺎرﺟﯿﺔ ..‬
  ‫ﻣﻊ ذﻟﻚ ﻳﺴﺘﺤﺴﻦ أن ﻻ ﺗﻘﻮم ﺑﺎﺳﺘﻌﻤﺎل ھﺬه اﻟﺪاﻟﺔ ﻟﻘﺮاءة اﻟﻤﻠﻔﺎت اﻟﻄﻮﻳﻠﺔ ﻷﻧﮫﺎ ﺗﻘﻮم ﺑﺎﺳﺘﺨﺪام ﻗﺪر ﻛﺒﯿﺮ‬
                                                  ‫ﻣﻦ اﻟﺬاﻛﺮة اﻟﻤﺤﺠﻮزة ﻟﻠـ ‪ PHP‬وﻗﺪ ﺗﺴﺘﺨﺪﻣﮫﺎ ﻛﻠﮫﺎ ...‬
                                                                                             ‫ﻣﺜﺎل :‬
‫?<‬
‫;)'‪$fcontents = file ('file.txt‬‬
‫{ ))‪while (list ($line_num, $line) = each ($fcontents‬‬
   ‫;"‪echo "<b>Line $line_num:</b> $line <br>\n‬‬
‫}‬
‫>?‬

                                                                                         ‫‪Fpassthru‬‬
  ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻘﺮاءة ﻣﺤﺘﻮﻳﺎت اﻟﻤﻠﻒ ﺑﺪاﻳﺔ ﻣﻦ اﻟﻨﻘﻄﺔ اﻟﺘﻲ ﺗﻮﻗﻒ ﻣﻨﮫﺎ اﻟﻤﺆﺷﺮ اﻟﻮھﻤﻲ ﻋﻨﺪ أي ﻋﻤﻠﯿﺔ‬
  ‫ﻗﺮاءه أﺧﺮى ، وﺗﻘﻮم ﺑﺎﻟﺘﻮﻗﻒ ﻋﻨﺪ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ وﺗﻘﻮم ﺑﺈﻏﻼق اﻟﻤﻠﻒ ﻣﻦ ﺗﻠﻘﺎء ﻧﻔﺴﮫﺎ ﻟﺬﻟﻚ ﻻ داﻋﻲ ﻹﻏﻼق‬
  ‫اﻟﻤﻠﻒ ﺑﻮاﺳﻄﺔ اﻟﺪاﻟﺔ ‪ fclose‬ﺑﻌﺪ اﺳﺘﺨﺪاﻣﻚ ﻟﮫﺬه اﻟﺪاﻟﺔ ، وﺗﻘﻮم اﻟﺪاﻟﺔ ﺑﻘﺮاءة اﻟﻤﺤﺘﻮﻳﺎت وﻃﺒﺎﻋﺘﮫﺎ ﺑﺸﻜﻞ‬
                                     ‫ﻗﯿﺎﺳﻲ ، وھﻲ ﺗﺤﺘﺎج إﻟﻰ ﻣﻌﺎﻣﻞ واﺣﺪ ﻓﻘﻂ وھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ ...‬
                                                                                              ‫ﻣﺜﺎل :‬
‫?<‬
‫;)"‪$fp=fopen("file.txt","r‬‬
‫)‪fpassthru($fp‬‬
‫>?‬

                                                                                           ‫‪Readfile‬‬
 ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻘﺮاءة ﺟﻤﯿﻊ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻠﻒ وﻻ ﺗﺤﺘﺎج إﻟﻲ ﻣﻘﺒﺾ ﺑﻞ إﻟﻰ ﻣﺴﺎر اﻟﻤﻠﻒ ﻓﻘﻂ وﺗﻘﻮم ﺑﻘﺮاءة‬
 ‫ﻛﺎﻣﻞ ﻣﺤﺘﻮﻳﺎت اﻟﻤﻠﻒ ﺛﻢ ﻃﺒﺎﻋﺘﮫﺎ ﺑﺸﻜﻞ ﻗﯿﺎﺳﻲ وﺗﻘﻮم ﺑﺈرﺟﺎع ﻋﺪد اﻟﺒﺎﻳﺘﺎت اﻟﺘﻲ ﺗﻢ ﻗﺮاءﺗﮫﺎ أو )‪ (false‬ﻋﻨﺪ‬
                                                                                      ‫ﺣﺪوث ﺧﻄﺄ ﻣﺎ‬
‫?<‬
‫;)"‪Readfile ("file.txt‬‬
‫>?‬

                                                                        ‫اﻟﻮﺻﻮل اﻟﻌﺸﻮاﺋﻲ إﻟﻰ اﻟﻤﻠﻔﺎت‬

‫أﺧﺒﺮﻧﺎﻛﻢ ﺳﺎﺑﻘﺎ ﺑﺄن ھﻨﺎك ﻃﺮﻳﻘﺔ ﺗﺠﻌﻠﻚ ﺗﺘﺤﻜﻢ ﻓﻲ اﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﺆﺷﺮ اﻟﻮھﻤﻲ ﻟﻠﻤﻠﻒ واﻟﻮﺻﻮل إﻟﻲ أي ﻣﻜﺎن‬
                   ‫ﻼ‬
   ‫ﻓﻲ اﻟﻤﻠﻒ أو ﻋﻨﺪ أي ﺣﺮف ﺗﺮﻳﺪه ، ﺑﺎﻟﺪوال اﻟﺴﺎﺑﻘﺔ ﻛﻨﺎ ﻋﻨﺪﻣﺎ ﻧﺼﻞ إﻟﻲ ﺣﺮف ﻣﻌﯿﻦ ﻣﺜ ً ﺑﺪاﻟﺔ ﻣﻦ اﻟﺪوال‬
 ‫ﻓﺈﻧﻨﺎ ﻧﻘﻮم ﺑﺈﻏﻼق اﻟﻤﻠﻒ ﺛﻢ ﻧﻌﺎود ﻓﺘﺤﻪ ﻛﻲ ﻧﻜﻤﻞ اﻟﻘﺮاءة ﻣﻦ ﻋﻨﺪ اﻟﺤﺮف اﻟﺬي ﺗﻢ اﻟﻮﺻﻮل إﻟﯿﻪ وﻟﻜﻦ ھﺬه‬
                                                                        ‫اﻟﻄﺮﻳﻘﺔ ﻏﯿﺮ ﻋﻤﻠﯿﻪ ﻧﮫﺎﺋﯿﺎ .....‬
  ‫ﻳﻮﺻﻞ ﻟﻨﺎ اﻟـ‪ PHP‬ﺑﻌﺾ اﻟﺪوال اﻟﺘﻲ ﺗﻤﻜﻨﻨﺎ ﻣﻦ اﻟﻮﺻﻮل إﻟﻲ اﻟﻤﻠﻒ ﺑﺎﻟﻤﻜﺎن اﻟﺬي ﻧﺮﻳﺪه وﻣﻦ ھﺬه اﻟﺪوال :‬

                                                                                          ‫‪Fseek‬‬
‫ﺗﺤﺘﺎج ھﺬه اﻟﺪاﻟﺔ إﻟﻰ ﻋﺎﻣﻠﯿﻦ ، اﻟﻌﺎﻣﻞ اﻷول ھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ ‪ $fp‬واﻟﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ ھﻮ ﻋﺒﺎرة ﻋﻦ رﻗﻢ ﺻﺤﯿﺢ‬
‫ﻳﺴﻤﻮﻧﻪ ﻛﻤﺼﻄﻠﺢ ﺑﺎﻟـ)‪ (offset‬أي اﻟﻤﻜﺎن اﻟﺬي ﺳﯿﺘﻮﻗﻒ ﻓﯿﻪ اﻟﻤﺆﺷﺮ ، ﺳﯿﻘﻮم اﻟـ‪ PHP‬ﺑﺎﻟﺘﺤﺮك ﻓﻲ اﻟﻤﻠﻒ‬
 ‫إﻟﻲ أن ﻳﺼﻞ إﻟﻰ اﻟﻤﻜﺎن اﻟﺬي ﺗﻢ ﺗﺤﺪﻳﺪه .. أي أﻧﻪ إذا ﻛﺎن ﻓﻲ اﻟﻤﻠﻒ ﺳﻄﺮ واﺣﺪ ﻣﻜﻮن ﻣﻦ ﻋﺸﺮه ﺣﺮوف‬
          ‫وﻗﻤﻨﺎ ﺑﺠﻌﻞ اﻟـ‪ offset‬ﺧﻤﺴﺔ ، ﺳﯿﻘﻮم اﻟـ‪ PHP‬ﺑﺎﻟﺘﺤﺮك ﺣﺘﻰ ﻳﺼﻞ إﻟﻰ ﻧﮫﺎﻳﺔ اﻟﺤﺮف اﻟﺨﺎﻣﺲ ...‬
   ‫وھﻨﺎك ﻣﻌﺎﻣﻞ ﺛﺎﻟﺚ اﺧﺘﯿﺎري ﻟﮫﺬه اﻟﺪاﻟﺔ وﻳﺴﻤﻮﻧﻪ ﻛﻤﺼﻄﻠﺢ ﺑﺎﻟـ ) ‪ ( whence‬وﻟﻪ إﺣﺪى ﺛﻼث ﺧﯿﺎرات :‬
                 ‫‪ Seek_set‬وﻳﻘﻮم ﺑﻘﺮاءة اﻟﻤﻠﻒ ﻣﻦ ﺑﺪاﻳﺘﻪ ﺣﺘﻰ ﻳﺼﻞ إﻟﻰ اﻟﻤﻜﺎن اﻟﻤﻄﻠﻮب ﺑﺎﻟـ‪offset‬‬
               ‫‪ Seek_cur‬ﻳﻘﻮم ﺑﺎﻟﻘﺮاءة ﻣﻦ اﻟﻤﻜﺎن اﻟﺤﺎﻟﻲ ﺣﺘﻰ ﻳﺼﻞ إﻟﻲ اﻟﻤﻜﺎن اﻟﻤﻄﻠﻮب ﺑﺎﻟـ‪offset‬‬
                  ‫‪ Seek_End‬ﻳﻘﻮم ﺑﺎﻟﻘﺮاءة ﻣﻦ ﻧﮫﺎﻳﺔ اﻟﻤﻠﻒ ﺣﺘﻰ ﻳﺼﻞ إﻟﻲ اﻟﻤﻜﺎن اﻟﻤﺤﺪد ﺑﺎل‪offset‬‬

  ‫ﺗﻌﺘﺒﺮ ھﺬه اﻟﺪاﻟﺔ ﻧﺎدرة ﻓﻲ ﻋﻤﻠﮫﺎ ) أو ﻛﻤﺎ ﻳﺴﻤﯿﮫﺎ اﻟﻤﺒﺮﻣﺠﻮن ﺷﺎذة( ﺑﺴﺒﺐ أﻧﮫﺎ ﺗﻘﻮم ﺑﺈرﺟﺎع اﻟﻘﯿﻤﺔ )0(‬
                                                      ‫ﻋﻨﺪ ﻧﺠﺎﺣﮫﺎ واﻟﻘﯿﻤﺔ )-1( ﻋﻨﺪ ﺣﺼﻮل ﺧﻄﺄ ﻣﺎ ..‬

                                                                                                ‫ﻣﺜﺎل :‬
‫ﻗﻢ ﺑﻔﺘﺢ ﻣﻠﻒ واﻛﺘﺐ ﻓﯿﻪ ﺛﻤﺎن ﺣﺮوف ﻣﺘﺘﺎﻟﯿﺔ ﺛﻢ ﻗﻢ ﺑﺤﻔﻈﻪ ﺑﺎﺳﻢ ‪ file.txt‬ﺛﻢ ﻗﻢ ﺑﻮﺿﻌﻪ ﻣﻊ ﻣﻠﻒ ‪ PHP‬ﻓﯿﻪ‬
                                     ‫اﻟﺸﻔﺮة اﻟﺘﺎﻟﯿﺔ ، ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﺷﻐﻞ ﻣﻠﻒ اﻟـ‪ PHP‬واﻧﺘﻈﺮ اﻟﻨﺘﯿﺠﺔ :‬
 ‫?<‬
‫;)"‪$fp = fopen("file.txt‬‬
‫;)‪fseek($fp,4,SEEK_SET‬‬
‫;)‪fpassthru($fp‬‬
‫>?‬

                                                                                              ‫‪Ftell‬‬
  ‫ھﺬه اﻟﺪاﻟﺔ ﻣﻦ اﻟﺪوال اﻟﻤﻔﯿﺪة ﻓﮫﻲ ﺗﻘﻮم ﺑﺈرﺟﺎع ﻣﻜﺎن اﻟـ‪ ) offset‬أو اﻟﻤﺆﺷﺮ اﻟﻮھﻤﻲ( ﻓﻲ اﻟﻤﻠﻒ وﺗﺤﺘﺎج‬
                                                              ‫إﻟﻲ ﻣﻌﺎﻣﻞ واﺣﺪ وھﻮ ﻣﻘﺒﺾ اﻟﻤﻠﻒ ...‬
‫?<‬
‫;)"‪$fp = fopen ("file.txt‬‬
‫;)‪$p = ftell($fp‬‬
‫;‪echo $p‬‬
‫>?‬

                                                                                             ‫‪Rewind‬‬
                                                               ‫ﺗﻘﻮم ﺑﺈرﺟﺎع اﻟﻤﺆﺷﺮ إﻟﻲ ﺑﺪاﻳﺔ اﻟﻤﻠﻒ ...‬
‫?<‬
‫;)"‪$fp = fopen ("file.txt‬‬
‫)‪rewind($fp‬‬
‫>?‬

                                                                                 ‫ﺟﻠﺐ ﻣﻌﻠﻮﻣﺎت اﻟﻤﻠﻒ‬

                             ‫ا‬
        ‫ﻳﻮﻓﺮ اﻟـ‪ PHP‬دوال ﺗﺴﺎﻋﺪﻧﺎ ﻓﻲ ﻣﻌﺮﻓﻪ ﺣﺠﻢ اﻟﻤﻠﻒ وﻣﺎ إذا ﻛﺎن اﻟﻤﻠﻒ ﻣﻮﺟﻮدً أم ﻻ ﻣﻦ ھﺬه اﻟﺪوال :‬

                                                                                        ‫‪File_exists‬‬
                                             ‫ا‬
   ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺎﻟﻘﯿﺎم ﺑﺎﻟﺘﺄﻛﺪ ﻣﺎ إذا ﻛﺎن اﻟﻤﻠﻒ ﻣﻮﺟﻮدً أم ﻻ وھﻲ ﺗﺤﺘﺎج ﻋﻠﻰ ﻣﻌﺎﻣﻞ واﺣﺪ وھﻮ ﻣﺴﺎر‬
                                                ‫ا‬
                ‫اﻟﻤﻠﻒ ، وﺗﻘﻮم ﺑﺈرﺟﺎع ‪ (1) true‬إذا ﻛﺎن اﻟﻤﻠﻒ ﻣﻮﺟﻮدً و ‪ false‬إذا ﻛﺎن اﻟﻤﻠﻒ ﻏﯿﺮ ﻣﻮﺟﻮد‬
‫?<‬
‫;)"‪$Th=File_exists("file.txt‬‬
‫; ‪echo $Th‬‬
‫>?‬

                                                                                             ‫‪Filesize‬‬
                               ‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈرﺟﺎع ﺣﺠﻢ اﻟﻤﻠﻒ ﺑﺎﻟﺒﺎﻳﺘﺎت أو ‪ false‬ﻋﻨﺪ ﺣﺼﻮل ﺧﻄﺄ ...‬

                                                                      ‫دوال اﻟﻤﻠﻔﺎت اﻟﻤﺘﻌﻠﻘﺔ ﺑﺎﻟﻮﻗﺖ :‬

 ‫ھﺬه اﻟﺪوال ﺗﻘﻮم ﺑﺈرﺟﺎع ﻣﻌﻠﻮﻣﺎت ﻣﻔﯿﺪة ﻋﻦ وﻗﺖ اﻟﺘﻐﯿﯿﺮ اﻟﺬي ﻃﺮا ﻋﻠﻰ اﻟﻤﻠﻒ أو آﺧﺮ ﻣﺮه ﺗﻢ ﻗﺮاءﺗﻪ وھﻲ‬
  ‫ﻋﻠﻰ ﺣﺴﺐ ﻧﻈﺎم اﻟﺘﺸﻐﯿﻞ ﻓﺈذا ﻛﺎن ﻧﻈﺎم اﻟﺴﯿﺮﻓﯿﺮ ھﻮ ﻳﻮﻧﻜﺲ أو ﻟﯿﻨﻮﻛﺲ ﺳﺘﻘﻮم اﻟﺪوال ﺑﺈرﺟﺎع اﻟﻮﻗﺖ‬
‫ﺑﻨﻈﺎم )‪ (timestamp‬وھﻮ اﻟﻮﻗﺖ ﻣﺘﺮﺟﻢ إﻟﻲ ﻋﺪد اﻟﺜﻮاﻧﻲ ﻣﻨﺬ ﺻﺪور ﻳﻮﻧﻜﺲ وﻣﻮﻟﺪه ﻋﻠﻰ اﻟﻌﺎﻟﻢ ، ﺑﯿﻨﻤﺎ ﺗﻘﻮم‬
                                                 ‫ﺑﺈرﺟﺎع وﻗﺖ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ ﻧﻈﺎم اﻟﻮﻳﻨﺪوز ﻣﺒﺎﺷﺮه ...‬

                                                        ‫ﻳﻘﻮم اﻟـ‪ PHP‬ﺑﺘﺰوﻳﺪﻧﺎ ﺑﺪاﻟﺘﯿﻦ ﻟﻤﻌﺮﻓﻪ اﻟﻮﻗﺖ :‬
    ‫‪ Filectime‬وﺗﻘﻮم ﺑﺈرﺟﺎع آﺧﺮ وﻗﺖ ﺗﻢ ﻓﯿﻪ اﻟﺘﻐﯿﯿﺮ ﻋﻠﻰ اﻟﻤﻠﻒ ﻋﻠﻰ ﺷﻜﻞ ‪ timestamp‬وﻳﺸﻤﻞ ھﺬا آﺧﺮ‬
                                        ‫وﻗﺖ ﺗﻢ ﻓﯿﻪ إﻧﺸﺎء اﻟﻤﻠﻒ أو اﻟﻜﺘﺎﺑﺔ إﻟﯿﻪ أو ﺗﻐﯿﯿﺮ ﺗﺮاﺧﯿﺼﻪ ...‬
    ‫‪ Filemtime‬ﺗﻘﻮم ﺑﺈرﺟﺎع آﺧﺮ وﻗﺖ ﺗﻢ ﻓﯿﻪ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ اﻟﻤﻠﻒ ﻋﻠﻰ ﺷﻜﻞ ‪ timestamp‬وﻳﺸﻤﻞ ھﺬا‬
                                                            ‫إﻧﺸﺎء اﻟﻤﻠﻒ أو ﺗﻐﯿﯿﺮ ﻣﺤﺘﻮﻳﺎﺗﻪ ...‬
          ‫ﺗﻘﻮم اﻟﺪاﻟﺔ ‪ getdate‬ﺑﻌﻤﻞ ﻣﻔﯿﺪ وھﻮ ﺗﺤﻮﻳﻞ اﻟﻮﻗﺖ ﻣﻦ ‪ timestamp‬إﻟﻲ اﻟﻮﻗﺖ اﻟﻌﺎدي‬
                                                                                       ‫اﻟﻤﻠﻜﯿﺔ واﻟﺘﺮاﺧﯿﺺ‬

            ‫ﻋﻠﻰ أﻧﻈﻤﺔ ﺗﺸﻐﯿﻞ اﻟﯿﻮﻧﻜﺲ ﻣﺜﻞ ﻳﻮﻧﻜﺲ ﺗﺮﺗﺒﻂ اﻟﻤﻠﻔﺎت ﻣﻊ ﻣﺴﺘﺨﺪم ﺧﺎص أو ﻣﺠﻤﻮﻋﺔ ﻣﻦ‬
  ‫اﻟﻤﺴﺘﺨﺪﻣﯿﻦ )‪ (group‬وﺗﺤﺘﻮي ﻋﻠﻰ ﻋﻼﻣﺎت وﺗﺮاﺧﯿﺺ ﺗﻘﻮم ﺑﺘﻮﺿﯿﺢ ﻣﻦ ﻟﻪ ﺻﻼﺣﯿﺔ ﻋﻠﻰ اﺳﺘﺨﺪاﻣﮫﺎ ..‬
                                                         ‫ﻳﻤﻜﻨﻨﺎ أن ﻧﺨﻠﺺ اﻟﺘﺮاﺧﯿﺺ ﻛﺎﻟﺘﺎﻟﻲ :‬
       ‫1 / ﻣﻤﺘﻠﻚ اﻟﻤﻠﻒ )‪ ، (owner‬ﺑﺸﻜﻞ اﻓﺘﺮاﺿﻲ ، وھﻮ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﺗﻢ اﺳﺘﺨﺪام ﺣﺴﺎﺑﻪ ﻓﻲ‬
                                                                   ‫اﺳﺘﺨﺪام اﻟﻤﻠﻒ .‬

 ‫2 / ﻣﺠﻤﻮﻋﻪ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ )‪ ، (group‬ﺑﺸﻜﻞ اﻓﺘﺮاﺿﻲ ، اﻟﻤﺠﻤﻮﻋﺔ اﻟﺘﻲ ﻳﻜﻮن ﺿﻤﻨﮫﺎ ﻣﺎﻟﻚ اﻟﻤﻠﻒ‬

                                    ‫3 / ﺟﻤﯿﻊ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ )‪ (all‬ﻛﻞ ﺷﺨﺺ ﻟﻪ ﺣﺴﺎب ﻋﻠﻰ اﻟﻨﻈﺎم .‬

   ‫اﻟﻤﺴﺘﺨﺪﻣﯿﻦ واﻟﻤﺠﻤﻮﻋﺎت ﻓﻲ أﻧﻈﻤﺔ اﻟﯿﻮﻧﻜﺲ ﻳﺘﻢ ﺗﻌﺮﻓﮫﻢ ﻋﻦ ﻃﺮﻳﻖ رﻗﻢ )‪ (ID‬ﻣﺜﻠﻤﺎ ﻳﺘﻢ ﺗﻌﺮﻳﻔﮫﻢ ﻋﺒﺮ‬
        ‫أﺳﻤﺎﺋﮫﻢ ، إذا ﻛﻨﺖ ﺗﺮﻳﺪ ﻣﻌﺮﻓﻪ ﻣﻌﻠﻮﻣﺎت ﺷﺨﺺ ﻋﻦ ﻃﺮﻳﻖ رﻗﻤﻪ ، ﻳﻤﻜﻨﻚ اﺳﺘﺨﺪام ھﺬه اﻟﺪاﻟﺔ :‬

                                                                                    ‫‪Posix_getpwind‬‬
                                            ‫اﻟﺘﻲ ﺳﺘﻘﻮم ﺑﺈﻋﻄﺎﺋﻨﺎ ﻣﺼﻔﻮﻓﺔ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻤﻌﻠﻮﻣﺎت اﻟﺘﺎﻟﯿﺔ‬

                                   ‫اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﺬي ﻳﺪﺧﻞ ﺑﻪ ﻓﻲ ﺣﺴﺎﺑﻪ‬                   ‫‪Name‬‬
                                               ‫ﻛﻠﻤﺔ اﻟﺴﺮ اﻟﻤﺸﻔﺮة ﻟﻠﻤﺴﺘﺨﺪم‬              ‫‪passwd‬‬
                                                       ‫رﻗﻢ اﻟﺤﺴﺎب ﻟﻠﻤﺴﺘﺨﺪم‬                 ‫‪uid‬‬
                                    ‫رﻗﻢ ﺣﺴﺎب اﻟﻤﺠﻤﻮﻋﺔ اﻟﺘﻲ ﻓﯿﮫﺎ اﻟﻤﺴﺘﺨﺪم‬                   ‫‪gid‬‬
                           ‫اﺳﻢ اﻟﻤﺴﺘﺨﺪم اﻟﻜﺎﻣﻞ ، رﻗﻢ ﺗﻠﻔﻮﻧﻪ وﻣﻌﻠﻮﻣﺎت إﺿﺎﻓﯿﺔ‬             ‫‪gecos‬‬
                                                   ‫اﻟﻤﺠﻠﺪ اﻟﺮﺋﯿﺴﻲ ﻟﻠﻤﺴﺘﺨﺪم‬                 ‫‪dir‬‬
                                          ‫اﻟﻤﺴﺎر اﻟﺮﺋﯿﺴﻲ ﻟﺤﺴﺎب اﻟﻤﺴﺘﺨﺪم‬                  ‫‪shell‬‬

                                                                                  ‫‪Posix_getgrgid‬‬
‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈرﺟﺎع ﻣﺼﻔﻮﻓﺔ ﻋﻦ ﻣﻌﻠﻮﻣﺎت اﻟﻤﺠﻤﻮﻋﺔ ، وھﻲ ﺗﺤﺘﺎج إﻟﻰ ﻣﻌﺎﻣﻞ واﺣﺪ ﻓﻘﻂ وھﻮ رﻗﻢ اﻟـ‪ID‬‬
                                                                                    ‫ﻟﻠﻤﺠﻤﻮﻋﺔ ...‬
                                                             ‫وﺳﻮف ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻌﻨﺎﺻﺮ اﻟﺘﺎﻟﯿﺔ :‬

                                                            ‫‪ Name‬اﺳﻢ اﻟﻤﺠﻤﻮﻋﺔ‬
                                                             ‫‪ Gid‬رﻗﻢ اﻟﻤﺠﻤﻮﻋﺔ‬
                                                        ‫‪ members‬ﻋﺪد أﻋﻀﺎء اﻟﻤﺠﻤﻮﻋﺔ‬

    ‫وھﻨﺎك اﻳﻀﺎ ﺧﻤﺲ دوال ﺗﺴﺎﻋﺪﻧﺎ ﻓﻲ ﻣﻌﺮﻓﺔ ﻣﻌﻠﻮﻣﺎت أﻛﺜﺮ ﻋﻦ اﻟﻤﻠﻔﺎت وﺗﺤﺘﺎج ﻓﻘﻂ إﻟﻲ ﻣﺴﺎر اﻟﻤﻠﻔﺎت‬

                                                                                             ‫‪Fileowner‬‬
                                                            ‫ﺗﻘﻮم ﺑﺈرﺟﺎع رﻗﻢ اﻟﻤﻌﺮف )‪ (ID‬ﻟﻤﺎﻟﻚ اﻟﻤﻠﻒ ...‬

                                                                                        ‫‪Filegroup‬‬
                          ‫ﺗﻘﻮم ﺑﺈرﺟﺎع رﻗﻢ اﻟﻤﻌﺮف )‪ (ID‬ﻟﺮﻗﻢ اﻟﻤﺠﻤﻮﻋﺔ اﻟﺘﻲ ﻳﻌﺘﺒﺮ ﻣﺎﻟﻚ اﻟﻤﻠﻒ ﺿﻤﻨﮫﻢ ..‬

                                                                                                  ‫‪Filetype‬‬
‫ﺗﻘﻮم ﺑﺈرﺟﺎع رﻗﻢ ﻧﻮع اﻟﻤﻠﻒ وﻗﺪ ﺗﻌﻮد ﺑﺈﺣﺪى ھﺬه اﻟﻘﯿﻢ )‪ ( block، link ، fifo، char ، dir ، file‬واﻟﺬي ﻳﮫﻤﻨﺎ‬
                                                                                    ‫ﻣﻨﮫﻢ ھﻮ ‪ file‬و‪... dir‬‬

                                                                                                ‫‪Is_dir‬‬
                                                    ‫وﺗﻘﻮم ﺑﺈرﺟﺎع ‪ True‬إذا ﻛﺎﻧﺖ ﻗﯿﻤﻪ اﻟﻤﺴﺎر ھﻮ ﻣﺠﻠﺪ ..‬
                                                                                           ‫‪Is_file‬‬
                                                ‫وﺗﻘﻮم ﺑﺈرﺟﺎع ‪ True‬إذا ﻛﺎﻧﺖ ﻗﯿﻤﻪ اﻟﻤﺴﺎر ھﻮ ﻣﻠﻒ ..‬

                                                  ‫اﻟﺤﺼﻮل ﻋﻠﻰ اﺳﻢ اﻟﻤﻠﻒ ﻣﻦ وﺳﻂ ﻣﺴﺎر اﻟﻤﻠﻒ ..‬
                                                                                ‫)(‪Basename‬‬
                                                                                      ‫ﻣﺜﺎل :‬
‫?<‬
‫;"3‪$path = "/home/httpd/html/index.php‬‬
‫;)‪$file = basename ($path‬‬
‫;'>‪echo '$file <br‬‬
‫;)"3‪$file = basename ($path,".php‬‬
‫;'>‪echo '$file <br‬‬
‫>?‬
                                                                       ‫ا‬
                                  ‫ھﺬه اﻟﺪاﻟﺔ ﻣﻔﯿﺪة ﺟﺪً ﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﻤﻠﻒ ﻣﻦ وﺳﻂ ﻣﺴﺎر ﻣﺠﻠﺪ ..‬

                                 ‫ﻧﺴﺦ ، اﻋﺎدة ﺗﺴﻤﯿﺔ وﺣﺬف اﻟﻤﻠﻔﺎت‬

        ‫ﺗﺴﻤﺢ ﻟﻚ اﻟـ‪ PHP‬ﺑﻨﺴﺦ ، وإﻋﺎدة ﺗﺴﻤﯿﺔ ، وﺣﺬف واﻟﺪوال اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻟﺘﻨﻔﯿﺬ ھﺬه اﻟﻌﻤﻠﯿﺎت ھﻲ‬

                                                                                     ‫)( ‪Copy‬‬
‫ﺗﻘﻮم ﺑﺄﺧﺬ ﻗﯿﻤﺘﯿﻦ ﺣﺮﻓﺘﯿﻦ وﺗﺸﯿﺮ إﻟﻲ ﻣﺼﺪر اﻟﻤﻠﻒ اﻟﺮﺋﯿﺴﻲ اﻟﺬي ﻳﻮﺟﺪ ﻓﯿﻪ اﻟﻤﻠﻒ واﻟﻤﺼﺪر اﻟﮫﺪف اﻟﺬي‬
                                                                   ‫ﺳﯿﺘﻢ ﻧﺴﺦ اﻟـ‪ PHP‬إﻟﯿﻪ ...‬
‫?<‬
‫{ ))'‪if (!copy($file, $file.'.bak‬‬
    ‫;)"‪print ("failed to copy $file...<br>\n‬‬
‫}‬
‫>?‬

                                                                                     ‫‪Rename‬‬
   ‫ﻧﺴﺘﻄﯿﻊ اﻵن اﺳﺘﺨﺪام ھﺬه اﻟﺪاﻟﺔ ﻹﻋﺎدة ﺗﺴﻤﯿﺔ اﻟﻤﻠﻒ وھﻲ ﺗﺤﺘﺎج إﻟﻲ ﻗﯿﻤﺘﯿﻦ ﺣﺮﻓﺘﯿﻦ وھﻲ اﻟﻤﺼﺪر‬
                     ‫اﻟﻤﻠﻒ أو ﻣﻜﺎﻧﻪ واﺳﻤﻪ اﻟﺮﺋﯿﺴﻲ ﺛﻢ اﻻﺳﻢ اﻟﺠﺪﻳﺪ اﻟﺬي ﺗﺮﻳﺪ إﻋﺎدة اﻟﺘﺴﻤﯿﺔ ﺑﻪ ..‬
                                                                                        ‫ﻣﺜﺎل :‬
‫?<‬
‫;)'‪Rename ('file.txt','newfile.txt‬‬
‫>?‬

                                                                                      ‫)(‪Unlink‬‬
                                      ‫ﺗﺤﺘﺎج إﻟﻲ ﻗﯿﻤﻪ ﺣﺮﻓﯿﻪ واﺣﺪه وھﻲ ﻣﺴﺎر اﻟﻤﻠﻒ اﻟﺬي ﺗﺮﻳﺪ ﺣﺬﻓﻪ‬
‫?<‬
‫;)'‪unlink ('file.txt‬‬
‫>?‬

                                                                               ‫اﻟﻌﻤﻞ ﻣﻊ اﻟﻤﺠﻠﺪات‬

    ‫ﻣﺜﻠﻤﺎ ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ اﻟﻤﻠﻔﺎت ﻓﻲ اﻟـ‪ PHP‬ﻓﺈﻧﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺠﻠﺪات ، ﻓﮫﻨﺎك دوال ﻟﻠﻤﺠﻠﺪات ﺗﺘﻄﻠﺐ ﻣﻘﺒﺾ‬
                                       ‫ﻻ‬
‫اﻟﻤﺠﻠﺪ ، وھﻨﺎك دوال ﺗﺤﺘﺎج ﻓﻘﻂ إﻟﻲ اﻟﻘﯿﻤﺔ اﻟﺤﺮﻓﯿﺔ ﻓﻘﻂ وﺑﺪ ً ﻣﻦ اﻹﻃﺎﻟﺔ دﻋﻨﺎ ﻧﻘﻮم ﺑﺎﻟﺪﺧﻮل ﻓﻲ اﻟﻤﻮﺿﻮع‬
                                                                                          ‫ﻣﺒﺎﺷﺮة‬

                                                                                        ‫‪Opendir‬‬
                                                           ‫ﺗﻘﻮم ﺑﻔﺘﺢ اﻟﻤﺠﻠﺪ وإﻋﻄﺎﺋﻨﺎ ﻣﻘﺒﺾ اﻟﻤﺠﻠﺪ‬

                                                                                       ‫)(‪Closedir‬‬
                                        ‫ﺗﻘﻮم ﺑﺈﻏﻼق اﻟﻤﺠﻠﺪ اﻟﻤﻔﺘﻮح وﺗﺤﺘﺎج ﻓﻘﻂ إﻟﻰ ﻣﻘﺒﺾ اﻟﻤﺠﻠﺪ ...‬

                                                                                           ‫‪Readdir‬‬
                                                               ‫ﺗﻘﻮم ﺑﻘﺮاءة اﻟﻤﺪﺧﻞ اﻟﺤﺎﻟﻲ ﻟﻠﻤﺠﻠﺪ ...‬

                                                                                          ‫‪Rewindir‬‬
                                                                     ‫ﺗﻘﻮم ﺑﺈرﺟﺎع اﻟﻤﺪﺧﻞ ﻣﻦ اﻟﺼﻔﺮ ..‬

                                                                                               ‫‪Chdir‬‬
                               ‫ﻟﻼﻧﺘﻘﺎل إﻟﻲ ﻣﺠﻠﺪ آﺧﺮ ، وﺗﺘﻄﻠﺐ اﻟﻤﺴﺎر ﻟﻠ ﻤﺠﻠﺪ اﻟﺬي ﺗﺮﻳﺪ اﻻﻧﺘﻘﺎل إﻟﯿﻪ ..‬



                                                                                          ‫‪Rmdir‬‬
     ‫ﺗﻘﻮم ﺑﻤﺴﺢ ﻣﺠﻠﺪ ، وﻟﻜﻦ ﻳﺠﺐ أن ﻳﻜﻮن اﻟﻤﺠﻠﺪ ﺧﺎﻟﯿﺎ ﻣﻦ أي ﻣﻠﻔﺎت أو ﻣﺠﻠﺪات ، وﺗﺘﻄﻠﺐ ﻣﺴﺎر اﻟﻤﺠﻠﺪ‬
                                                                               ‫اﻟﺬي ﺗﺮﻳﺪ ﻣﺴﺤﻪ ..‬

                                                                                           ‫‪Mkdir‬‬
                                ‫ﺎ‬
     ‫ﺗﻘﻮم ﺑﺈﻧﺸﺎء ﻣﺠﻠﺪ ﺟﺪﻳﺪ وﺗﺘﻄﻠﺐ أن ﻳﻜﻮن ھﺬا اﻟﻤﺠﻠﺪ ﻏﯿﺮ ﻣﻮﺟﻮد ﻣﺴﺒﻘً وﺗﺤﺘﺎج إﻟﻲ ﻗﯿﻤﺘﯿﻦ وھﻤﺎ اﺳﻢ‬
                                                 ‫اﻟﻤﺠﻠﺪ اﻟﺠﺪﻳﺪ ﻣﻊ ﻣﺴﺎره ، واﻟﺘﺮﺧﯿﺺ اﻟﻤﻄﻠﻮب ﻟﻪ ..‬

                                                                                          ‫‪Dirname‬‬
                         ‫ﺗﻘﻮم ﺑﺈﻋﻄﺎﺋﻨﺎ اﺳﻢ اﻟﻤﺠﻠﺪ اﻟﺤﺎﻟﻲ اﻟﺬي ﻓﯿﻪ اﻟﻤﻠﻒ ، وﺗﺤﺘﺎج إﻟﻲ ﻣﺴﺎر اﻟﻤﻠﻒ ..‬

                                                                              ‫ﺗﻄﺒﯿﻖ ﻋﻤﻠﻲ :‬
 ‫أﻧﺸﺊ ﻣﺠﻠﺪ اﺳﻤﻪ ‪ tmp‬ﻓﻲ ﻣﺠﻠﺪ اﻟـ ‪ htdocs‬وﺿﻊ ﻓﯿﻪ ﻣﻠﻔﺎت ، ﺛﻢ أﻧﺸﺊ ﻣﻠﻒ اﺳﻤﻪ ‪ test.php‬ﻓﻲ ﻣﺠﻠﺪ‬
                                                     ‫اﻟـ‪ htdocs‬واﻛﺘﺐ اﻟﺸﻔﺮة اﻟﺘﺎﻟﯿﺔ ﺛﻢ ﺷﻐﻠﻪ :‬
‫‪<?php‬‬
‫{ ))"‪if ($dir = @opendir("/tmp‬‬
  ‫{ ))‪while($file = readdir($dir‬‬
    ‫;"‪echo "$file\n‬‬
  ‫}‬
  ‫;)‪closedir($dir‬‬
‫}‬

‫>?‬

                                                                                            ‫)(‪Dir‬‬
‫ﻋﺒﺎرة ﻋﻦ ﻛﺎﺋﻦ ﻳﺤﺘﻮي ﻋﻠﻰ ﺛﻼث وﻇﺎﺋﻒ .. وﻧﻘﻮم ﺑﺈﻋﻄﺎﺋﻪ ﻣﺴﺎر اﻟﻤﺠﻠﺪ اﻟﺬي ﻧﺮﻳﺪه أن ﻳﺘﻌﺎﻣﻞ ﻣﻌﻪ ﺛﻢ ﺑﻌﺪ‬
                                                   ‫ذﻟﻚ ﻧﻘﻮم ﺑﻮﺿﻊ ﻗﯿﻤﺘﻪ ﻓﻲ ﻣﺘﻐﯿﺮ ﻳﻘﻮم ﺑﻮراﺛﺔ ﺻﻔﺎﺗﻪ‬

                                                                                     ‫ﺧﺼﺎﺋﺺ اﻟﻜﺎﺋﻦ :‬

                                                                                           ‫‪handle‬‬
                                                                       ‫ﺗﻘﻮم ﺑﺈﻋﻄﺎﺋﻚ ﻣﻘﺒﺾ اﻟﻤﺠﻠﺪ ..‬

                                                                                               ‫‪Path‬‬
                                                                      ‫ﺗﻘﻮم ﺑﺈﻋﻄﺎﺋﻚ اﻟﻤﺴﺎر ﻟﻠﻤﺠﻠﺪ ..‬

                                                                                             ‫‪Read‬‬
                                                                   ‫ا‬
                                       ‫ﺗﻘﻮم ﺑﺈﻋﻄﺎﺋﻨﺎ اﻟﻤﺠﻠﺪات اﻋﺘﻤﺎدً ﻋﻠﻰ اﻟﻤﺆﺷﺮ اﻟﺤﺎﻟﻲ ﻟﻠﻤﺠﻠﺪ ..‬
                                                                                        ‫‪Rewind‬‬
                                                       ‫ﺎ‬
                                ‫ﺗﻘﻮم ﺑﺈرﺟﺎع ﻣﺆﺷﺮ اﻟﻤﺠﻠﺪ ﻣﻦ اﻟﺼﻔﺮ ..ﺗﻘﺮﻳﺒً ﻧﻔﺲ ﻋﻤﻠﯿﻪ ‪.. rewinddir‬‬

                                                                                         ‫‪Closedir‬‬
                                                                             ‫ﺗﻘﻮم ﺑﺈﻏﻼق اﻟﻤﺠﻠﺪ ..‬

                                                                         ‫ﺑﮫﺬا ﻳﻜﻮن اﻧﺘﮫﻲ اﻟﺪرس‬
       ‫ﻗﺪ ﺗﻜﻮن ﺑﻌﺾ اﻟﻨﻘﺎط ﻏﯿﺮ واﺿﺤﺔ ، ﻓﻲ اﻟﻮاﻗﻊ ﻟﻦ ﺗﺤﺘﺎج إﻟﻲ ﻛﻞ ھﺬه اﻷﻣﻮر ﻓﻲ ﺗﻌﺎﻣﻠﻚ ﻣﻊ اﻟﻤﻠﻔﺎت‬

                  ‫دﻋﻨﺎ ﻧﺄﺧﺬ ﻓﻜﺮة ﻋﻦ ﻃﺮف اﻟﺘﺨﺰﻳﻦ ﻓﻲ اﻟﺒﺪاﻳﺔ وﻛﯿﻒ ﻛﺎﻧﺖ ﻋﻠﻰ اﻹﻧﺘﺮﻧﺖ ﻓﻲ اﻟﺴﺎﺑﻖ ....‬
 ‫ﻛﺎن ﻣﻦ أﻛﺜﺮ ﻃﺮق اﻟﺘﺨﺰﻳﻦ اﻧﺘﺸﺎرا ﻓﻲ اﻟﺴﺎﺑﻖ ﻋﻠﻰ اﻹﻧﺘﺮﻧﺖ ورﺑﻤﺎ ھﻮ ﻻ ﻳﺰال ﻳﺴﺘﺨﺪم ﻓﻲ ﺑﻌﺾ اﻟﻤﻮاﻗﻊ‬
   ‫واﻟﻤﻨﺘﺪﻳﺎت ﻳﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻤﻠﻔﺎت ....ﻓﻜﺎن ﺻﺎﺣﺐ اﻟﻤﻮﻗﻊ اﻟﺬي ﻟﺪﻳﻪ ھﺬه اﻟﻄﺮﻳﻘﺔ ﻓﻲ ﺗﺨﺰﻳﻦ اﻟﺒﯿﺎﻧﺎت ﺧﻮف‬
                                                                            ‫ﻼ‬
       ‫وﺗﻌﺐ ﻣﻦ ﻓﻘﺪاﻧﮫﺎ ﻣﺜ ً وﻛﺎن اﻟﺸﺒﺢ اﻟﺬي ﻳﻜﺪر ﻋﻠﯿﻪ ﺻﻔﻮة ﻧﺠﺎح ﻣﻮﻗﻌﻪ ھﻮ ﻋﻤﻞ ﻧﺴﺦ اﺣﺘﯿﺎﻃﯿﺔ ﻟﮫﺬه‬
‫اﻟﻤﻠﻔﺎت ﻟﻜﻲ ﻳﺘﻤﻜﻦ ﻣﻦ اﺳﺘﺮﺟﻌﮫﺎ ﻓﻲ ﺣﺎل ﻓﻘﺪاﻧﮫﺎ ﻓﻜﺎﻧﺖ ھﺬه اﻟﻌﻤﻠﯿﺔ ﺗﺄﺧﺬ وﻗﺖ وﺟﮫﺪ وﻣﺎل ....ﻛﻤﺎ ﻛﺎن‬
      ‫ﻣﻦ ﻋﯿﻮب ﺗﺨﺰﻳﻦ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺠﺪاول ﺿﻐﻂ اﻟﺨﺎدم أو )‪ (server‬ﻓﻲ ﺣﺎل اﻻﺳﺘﻌﻼم ﻋﻦ ﻣﻌﻠﻮﻣﺔ ﻣﻌﯿﻨﺔ‬
       ‫واﻟﺒﺤﺚ ﻋﻨﮫﺎ ﻛﻤﺎ أﻧﻪ ﻳﺴﺘﮫﻠﻚ اﻟﻜﺜﯿﺮ ﻣﻦ ذاﻛﺮة ھﺬا اﻟﺨﺎدم ﻓﻲ ﻋﻤﻠﯿﺔ ﺑﺤﺚ ﻣﻌﯿﻨﺔ ﻓﮫﻮ ﻳﺤﺠﺰ ﻣﺴﺎﺣﺔ‬
                                                        ‫ﻻ‬
                                         ‫ﻟﯿﺴﺖ ﺑﺎﻟﮫﯿﻨﺔ ﻓﻲ ﻋﻤﻠﯿﺔ ﺑﺤﺚ ﻋﻦ أﺳﻢ ﻣﺜﺎ ً أو ﻣﺎ ﺷﺎﺑﮫﮫﺎ .‬

                             ‫رﺑﻤﺎ ﻳﺘﺮدد ﻋﻨﺪ اﻟﺒﻌﺾ ذاﻟﻚ اﻟﺴﺆال وھﻮ ....ﻣﺎ ھﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﻀﺒﻂ ؟‬

                                                ‫ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﺒﺴﺎﻃﺔ ﺟﻤﻊ اﻟﻤﻌﻄﯿﺎت أو اﻟﻤﺪﺧﻼت .‬
     ‫ﻛﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت رﺑﻤﺎ ﺗﺘﻜﻮن ﻣﻦ ﺟﺪول )‪ (Table‬واﺣﺪ أو ﻋﺪة ﺟﺪاول ھﺬه اﻟﺠﺪاول ﺗﺤﺘﻮي ﻋﻠﻲ أﻋﻤﺪة‬
  ‫وﺻﻔﻮف ﺗﮫﯿﻜﻞ اﻟﺒﯿﺎﻧﺎت وﺗﺮﺗﺒﮫﺎ ,,,,,وﺳﻮف أﺟﻌﻞ ﻟﻚ ﻣﮫﻤﺔ اﻛﺘﺸﺎف ﻓﻮاﺋﺪ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻓﻲ آﺧﺮ اﻟﺪرس .‬
                                                              ‫ﻟﺘﺮى اﻟﺠﺪول اﻟﺬي ﺑﺎﻷﺳﻔﻞ ﻛﻤﺜﺎل :‬


‫"‪#Table "Coustomers‬‬

            ‫‪Lname‬‬                           ‫‪Fname‬‬                               ‫‪Id‬‬
             ‫ﺻﺎﻟﺢ‬                          ‫ﻋﺒﺪاﻟﻮاھﺐ‬                            ‫520‬
              ‫ﺧﺎﻟﺪ‬                            ‫ﻣﺤﻤﺪ‬                              ‫440‬

‫ﻛﻤﺎ ﺗﻼﺣﻆ , اﻟﺠﺪول ﻗﺴﻢ اﻟﺒﯿﺎﻧﺎت إﻟﻰ ﺻﻔﻮف ...ﻣﻊ ﻛﻞ إﺿﺎﻓﺔ ﻋﻤﯿﻞ ﺟﺪﻳﺪ ﺳﻮف ﻳﻜﻮن ھﻨﺎك ﺻﻒ )ﺳﺠﻞ(‬
‫ﺟﺪﻳﺪ ... رﺑﻤﺎ ﻟﻮ ﺗﻄﻠﻖ ﻟﺨﯿﺎﻟﻚ اﻟﻌﻨﺎن ﺳﻮف ﺗﻼﺣﻆ أن ھﺬا اﻟﺠﺪول ﻣﺸﺎﺑﻪ ﻟﻠﺪوﻻب واﻟﺼﻔﻮف رﻓﻮف ﻓﺈذا أردت‬
‫أن ﺗﻀﯿﻒ ﻛﺘﺐ أو ﻣﻼﺑﺲ أو أي ﻛﺎن ﺳﻮف ﺗﻀﯿﻔﮫﺎ ﻓﻲ رف ﺟﺪﻳﺪ ..ﻛﻤﺎ ﻳﺤﺼﻞ ﻓﻲ إﺿﺎﻓﺔ ﻋﻤﯿﻞ ﺟﺪﻳﺪ ﺳﻮف‬
                                                               ‫ﺗﻀﯿﻔﻪ ﻓﻲ ﺻﻒ )ﺳﺠﻞ( ﺟﺪﻳﺪ .‬

 ‫اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻛﻞ ﺻﻒ ﻗﺴﻤﺖ إﻟﻰ ﻣﺪى أﺑﻌﺪ ﻓﻲ اﻟﺨﻼﻳﺎ ) أو اﻟﺤﻘﻮل( , ﻛﻞ ﻣﻦ ھﺬه اﻟﺒﯿﺎﻧﺎت ﺗﺤﺘﻮي ﻋﻠﻰ‬
‫ﻗﯿﻤﺔ ﻣﺤﺪدة وﺻﻔﺔ ﻣﺤﺪدة , ﻋﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻣﺤﻤﺪ ﺧﺎﻟﺪ ﺳﻮف ﺗﺮى أن ھﺬا اﻟﻌﻤﯿﻞ اﻧﻘﺴﻤﺖ ﺑﯿﺎﻧﺎﺗﻪ ﻓﻲ‬
                                                       ‫اﻟﺤﻘﻞ إﻟﻰ ‪ id‬واﻻﺳﻢ اﻷول واﻻﺳﻢ اﻷﺧﯿﺮ .‬

 ‫اﻟﺼﻔﻮف ﻓﻲ اﻟﺠﺪول ﻟﯿﺲ ﻟﮫﺎ ﺗﺮﺗﯿﺐ ﻣﻌﯿﻦ .. ﻳﻤﻜﻦ أن ﻳﻜﻮن اﻟﺘﺮﺗﯿﺐ أﺑﺠﺪﻳﺎ وﻳﻤﻜﻦ أن ﻳﻜﻮن ﺑﺎﺳﻢ اﻟﻌﻀﻮ أو‬
                                                ‫ﺎ‬
     ‫ﺑﺎﺳﻤﻪ اﻷﺧﯿﺮ أو ﺑﺂي ﻣﻌﯿﺎر أﺧﺮ ﻳﻤﻜﻦ أن ﺗﺤﺪده ﻣﺴﺒﻘً ﻟﺘﺮﺗﯿﺐ اﻟﺼﻔﻮف وﻟﮫﺬا ﻳﻜﻮن ﻣﻦ اﻟﻀﺮوري ﺗﺤﺪﻳﺪ‬
‫ﻃﺮﻳﻘﺔ ﻟﯿﺴﮫﻞ ﻋﻠﯿﻚ ﺗﺤﺪﻳﺪ ﺻﻒ)ﺳﺠﻞ( ﻣﻌﯿﻦ ....ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻧﺴﺘﻄﯿﻊ إﺧﺮاج اﻟﺴﺠﻞ ﻣﻦ ﺑﯿﻦ ﺑﺎﻗﻲ‬
 ‫اﻟﺴﺠﻼت ﺑــ ‪ id‬وھﻮ رﻗﻢ اﻟﻌﻤﯿﻞ اﻟﺬي ھﻮ ﻋﺪد ﻓﺮﻳﺪ ﻻ ﻳﺘﻜﺮر ﻓﻲ أي ﺻﻒ)ﺳﺠﻞ( أﺧﺮ وﺳﺒﺐ اﺳﺘﻨﺎدي ﻓﻲ‬
     ‫اﺳﺘﺨﺮاج اﻟﺴﺠﻞ ﻋﻠﻲ ‪ id‬ﻻﻧﻪ رﺑﻤﺎ ﻳﻜﻮن ھﻨﺎك ﻋﻤﯿﻼن ﻟﮫﺎ ﻧﻔﺲ اﻻﺳﻢ .... وھﺬا ﻟﯿﺲ ﺷﺮط أن ﻳﻜﻮن‬
        ‫ﻟﻠﺠﺪول ﻣﻔﺘﺎح ﻓﺮﻳﺪ ﻟﻜﻦ ھﻨﺎ ﺣﺪدﻧﻪ ﻟﻜﻲ ﻳﺘﻢ اﺳﺘﺨﺮاج اﻟﺴﺠﻼت اﻟﻤﻄﻠﻮﺑﺔ ﺑﺴﮫﻮﻟﻪ وﺑﺴﺮﻋﺔ اﻛﺒﺮ .‬


                                            ‫اﻟﻌﻼﻗﺎت‬
 ‫اﻟﻜﺜﯿﺮ ﻣﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﯿﻮم ھﻲ ﻧﻈﻢ إدارة ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت ﻋﻼﺋﻘﯿﺔ ) ‪relational database management‬‬
‫‪ ( systems‬ﺗﺨﺘﺼﺮ ﻓﻲ ‪ , RDBMS‬ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻌﻼﺋﻘﯿﺔ ھﺬه ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺠﺪاول أو ﻧﻤﻮذج ﻣﻦ‬
                                     ‫اﻟﺠﺪاول اﻟﻨﻤﻮذﺟﯿﺔ اﻟﻤﺘﻌﺪدة اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﻣﺘﺮاﺑﻄﺔ .‬
                                                                                  ‫ﺎ‬
‫رﺑﻤﺎ ﺗﺴﻤﻊ اﻳﻀً اﻟﻜﺜﯿﺮ ﻋﻦ ‪ SQL‬وھﻲ اﺧﺘﺼﺎر ل)‪ ( Structured Query Language‬وھﻲ ﺗﺴﻤﺢ ﻟﻚ أن ﺗﻮﺣﺪ‬
               ‫ھﺬه اﻟﻤﻌﻠﻮﻣﺎت ﻣﻦ اﻟﺠﺪاول اﻟﻤﺘﺮاﺑﻄﺔ وﺑﺬاﻟﻚ ﺗﺴﻤﺢ ﻟﻚ ﺑﺈﻧﺸﺎء وﺗﺤﻠﯿﻞ اﻟﻌﻼﻗﺎت اﻟﺠﺪﻳﺪة .‬

‫اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻟﻠﻌﻤﻼء ﻛﺎن ﻋﺒﺎرة ﻋﻦ ﺟﺪول واﺣﺪ ﻓﻘﻂ , وﻟﺬاﻟﻚ ﻟﻦ ﺗﺤﺘﺎج إﻟﻰ رﺑﻂ ﺑﯿﻨﻪ وﺑﯿﻦ ﺟﺪول آﺧﺮ ﻷﻧﻪ‬
                                                                                        ‫ﻻ ﻳﺠﺪ .‬

  ‫ﻟﻜﻦ إذا ﻛﺎن ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﺟﺪول وﻛﺎﻧﺖ ھﺬه اﻟﺠﺪاول ﻣﺘﺮاﺑﻄﺔ ﻣﻊ ﺑﻌﻀﮫﺎ اﻟﺒﻌﺾ ﻓﻲ اﻟﺒﯿﺎﻧﺎت ﺳﻮف ﺗﻼﺣﻆ‬
    ‫أﻧﻚ ﺑﺤﺎﺟﺔ إﻟﻰ ﻧﻈﻢ إدارة اﻟﺒﯿﺎﻧﺎت اﻟﻌﻼﺋﻘﯿﺔ )‪.... (RDBMS‬ﻓﻠﻨﺮى ھﺬه اﻟﻤﺜﺎل ﻟﻜﻲ ﺗﺘﻀﺢ اﻟﺼﻮرة أﻛﺜﺮ :‬

‫" ‪#Table "Coustomers‬‬

             ‫‪Lname‬‬                           ‫‪Fname‬‬                               ‫‪Id‬‬
               ‫ﺻﺎﻟﺢ‬                         ‫ﻋﺒﺪاﻟﻮاھﺐ‬                            ‫520‬
               ‫ﺧﺎﻟﺪ‬                           ‫ﻣﺤﻤﺪ‬                               ‫440‬
               ‫ﻃﺎرق‬                            ‫ﺣﻤﺪ‬                               ‫220‬

‫"‪#Table "Address‬‬

    ‫‪Country‬‬                  ‫‪City‬‬             ‫‪Street‬‬                ‫‪Tel‬‬                 ‫‪Id‬‬
       ‫ﻣﺼﺮ‬                  ‫اﻟﻘﺎھﺮة‬        ‫ﺷﺎرع اﻻھﺮام‬           ‫225810‬                ‫440‬
     ‫اﻟﺴﻌﻮدﻳﺔ‬              ‫اﻟﺮﻳﺎض‬        ‫ﻃﺮﻳﻖ اﻟﻤﻠﻚ ﻓﮫﺪ‬         ‫50552210‬               ‫220‬
      ‫اﻟﻜﻮﻳﺖ‬
                            ‫اﻟﻜﻮﻳﺖ‬         ‫ﻃﺮﻳﻖ اﻻرﺑﻌﯿﻦ‬          ‫5052210‬               ‫520‬


‫"‪#Table "Account‬‬

                      ‫‪accountb‬‬                                            ‫‪Id‬‬
                      ‫0000.01‬                                             ‫440‬
                      ‫0000.02‬                                             ‫520‬
                       ‫000.02‬                                             ‫220‬


  ‫ﻛﻞ ﻣﻦ ھﺬه اﻟﺠﺪاول اﻟﺜﻼﺛﺔ ﻛﯿﺎن ﻣﺴﺘﻘﻞ .... ﻟﻜﻦ ﺗﻼﺣﻆ أﻧﮫﻢ ﻣﺮﺗﺒﻄﯿﻦ ﻣﻊ ﺑﻌﻀﮫﻢ اﻟﺒﻌﺾ ب)‪ , (id‬ﻋﻠﻰ‬
 ‫ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺑﺄﻣﺎﻛﻨﻨﺎ أن ﻧﻌﺮف رﺻﯿﺪ اﻟﻌﻤﯿﻞ ﻋﺒﺪ اﻟﻮاھﺐ ﺻﺎﻟﺢ ﻣﻦ ‪ , id‬ﻛﻤﺎ ﻳﻤﻜﻨﻨﺎ ﻣﻌﺮﻓﺔ اﻳﻦ ﻳﺴﻜﻦ ﺣﻤﺪ‬
                      ‫ﺎ‬                                              ‫ﺎ‬
     ‫ﻃﺎرق وﻛﻢ رﻗﻢ اﻟﺘﻠﻔﻮن واﻳﻀً ﺑﻤﻜﻨﻨﺎ أن ﻧﻌﺮف ﻣﻦ ھﻮ ﺻﺎﺣﺐ اﻟﺮﺻﯿﺪ 000.02 أﻳﻀً ﻛﻢ واﺣﺪ ﻣﻦ ﻣﺪﻳﻨﺔ‬
                                           ‫اﻟﻘﺎھﺮة واﻟﻜﺜﯿﺮ اﻟﻜﺜﯿﺮ ..... رﺑﻤﺎ اﺗﻀﺢ ﻟﻚ اھﻤﯿﺔ اﻟﻌﻼﻗﺎت .‬

                                                                                           ‫ا‬
    ‫إذً ﻋﺮﻓﻨﺎ أن اﻟﻌﻼﻓﺎت ھﻲ اﻷﺳﺎس اﻟﺠﻮھﺮي ﻟﻨﻈﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻌﻼﺋﻘﯿﺔ , ﺑﺠﻌﻠﮫﺎ ﻣﺮﻧﻪ وﺳﮫﻠﺔ ﺑﺤﺚ‬
                                   ‫ﺗﺘﻤﻜﻦ ﻣﻦ رﺑﻂ اﻟﺴﺠﻼت اﻟﻤﺨﺘﻠﻔﺔ ﻣﻊ ﺑﻌﻀﮫﺎ اﻟﺒﻌﺾ ﻓﻲ اﻟﺠﺪاول .‬


                                        ‫اﻟﻤﻔﺘﺎح اﻷﺟﻨﺒﻲ‬

        ‫ﺳﻮف ﺗﻼﺣﻆ أن ﺣﻘﻞ )‪ ( id‬اﻟﺬي ﻳﻈﮫﺮ ﻓﻲ اﻟﺠﺪاول ﻓﻲ اﻟﺜﻼﺛﺔ واﻟﺬي ﺟﻌﻞ ﻣﻦ اﻟﻤﻤﻜﻦ رﺑﻂ اﻟﺠﺪاول‬
                                                                                   ‫ﺎ‬
   ‫اﻟﻤﺨﺘﻠﻔﺔ ﻣﻌً أﻧﺔ ﻣﻔﺘﺎح أﺟﻨﺒﻲ ﻷﻧﺔ ﺑﺎﻷﺻﻞ ﻣﻔﺘﺎح ﻓﺮﻳﺪ ) ‪ (primary key‬ﻓﻲ ﺟﺪول )‪... (COUSTOMERS‬‬
                                                                                ‫ﺎ‬
‫ﻟﯿﺲ ﺿﺮورﻳً أن ﻳﻜﻮن ھﻨﺎك ﻣﻔﺘﺎح أﺟﻨﺒﻲ ﻓﻲ ﻛﻞ ﺟﺪول وﻟﻜﻦ ﻳﺘﻢ إﺿﺎﻓﺔ ﻋﻠﻰ ﺣﺴﺐ ﺣﺎﺟﺘﻚ ﻓﺈذا ﻛﻨﺖ ﺗﺮﻳﺪ‬
                                                ‫رﺑﻂ ﺑﯿﺎﻧﺎت اﻟﺠﺪاول ﻣﻊ ﺑﻌﻀﮫﺎ ﻓﺴﻮف ﺗﺤﺘﺎج إﻟﯿﮫﺎ.‬


                   ‫ﻼ‬
‫ﻓﻲ ﻛﻞ ﺟﺪول ﻳﺠﻮد ﺑﻪ اﻟﻤﻔﺘﺎح اﻷﺟﻨﺒﻲ ﺳﻮف ﻳﻜﻮن ﻟﻪ ﻣﺮﺟﻌﯿﺔ ﻟﻠﺠﺪول اﻷﺻﻞ ﻓﻤﺜ ً ھﻨﺎ اﻟﻤﺮﺟﻌﯿﺔ ﺳﺘﻜﻮن‬
  ‫ﺟﺪول )‪.... (customers‬ﺑﻤﻌﻨﻰ أن اﻟﻤﻔﺘﺎح اﻷﺟﻨﺒﻲ ﺳﻮف ﻳﻘﻮم ﺑﺮﺑﻂ اﻟﺒﯿﺎﻧﺎت ﻣﺎ ﺑﯿﻦ اﻟﺠﺪول اﻷﺻﻞ وﺑﯿﻦ‬
     ‫اﻟﺠﺪول اﻟﺬي ﻳﺘﻮاﺟﺪ ﺑﻪ ﻛﻤﻔﺘﺎح أﺟﻨﺒﻲ ....ﻣﻦ ھﻨﺎ ﻳﺘﻀﺢ ﻟﻨﺎ ﻣﻔﮫﻮم اﻻﺳﺘﻘﺎﻣﺔ اﻟﻤﺮﺟﻌﯿﺔ وھﺬا ﻣﻔﮫﻮم‬
 ‫أﺳﺎﺳﻲ وﻣﮫﻢ ﻋﻨﺪﻣﺎ ﺗﺼﻤﻢ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺑﺄﻛﺜﺮ ﻣﻦ ﺟﺪول . ﺳﻮف ﻳﻜﻮن ﻟﻠﻤﻔﺘﺎح اﻷﺟﻨﺒﻲ ﻗﯿﻤﺔ ﺛﺎﺑﺘﺔ ﻓﻲ‬
   ‫ﺟﻤﯿﻊ اﻟﺠﺪاول ﺑﻤﻌﻨﻰ ﻟﻮ ﻛﺎن ﻗﯿﻤﺔ اﻟﻤﻔﺘﺎح اﻷﺟﻨﺒﻲ ﻓﻲ ﺟﺪوﻟﻪ اﻷﺻﻞ ﻋﺪد ﺻﺤﯿﺢ ﻓﺴﻮف ﻳﻜﻮن ﺑﻨﻔﺲ‬
    ‫اﻟﻘﯿﻤﺔ ﻓﻲ ﺟﻤﯿﻊ اﻟﺠﺪاول ,,,,وﻧﻘﻄﺔ أﺧﺮى إذا ﺣﺪث ﺗﺤﺪﻳﺚ أو ﺗﻐﯿﯿﺮ أو ﺣﺬف ﻻ ﺣﺪ اﻟﻘﯿﻢ ﻓﻲ اﻟﻤﻔﺘﺎح‬
                       ‫اﻷﺟﻨﺒﻲ ﻓﺴﻮف ﺗﺘﻢ ﻓﻲ ﺟﻤﯿﻊ اﻟﺠﺪاول ...ھﺬا ھﻮ ﻣﻔﮫﻮم اﻻﺳﺘﻘﺎﻣﺔ اﻟﻤﺮﺟﻌﯿﺔ .‬

                                            ‫ﺎ‬
‫ﻛﺜﯿﺮ ﻣﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﯿﻮم ﻳﺘﻢ ﺗﻌﺪﻳﻞ اﻟﻘﯿﻢ ﺑﮫﺎ ﺗﻠﻘﺎﺋﯿً ﻛﻤﻜﺮ ﺳﻮﻓﺖ أﻛﺴﺲ وﺑﻌﺾ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻷﺧﺮى‬
   ‫, ﻟﻜﻦ ھﻨﺎك ﺑﻌﺾ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺤﺘﺎج إﻟﻰ ﺗﻌﺪﻳﻞ ﻳﺪوي ﻋﻠﻰ ﻛﻞ ﻗﯿﻤﺔ ﻳﺘﻢ اﻟﺘﻌﺪﻳﻞ ﻋﻠﯿﻪ ...وھﺬا‬
                                                                               ‫ﻻﺷﻚ اﻧﻪ ﻣﺘﻌﺐ !!‬


                                           ‫اﻟﻔﮫﺮﺳﺔ‬

   ‫ﻟﻮ ﻛﺎن ﻟﺪﻳﻚ ﺟﺪول ﺑﻪ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﺴﺠﻼت , ﻳﻤﻜﻨﻚ أن ﺗﺴﺘﻌﻠﻢ ﺑﺴﺮﻋﺔ ﻛﺒﯿﺮة ﻋﻦ أﻳﻤﻦ ھﺬه اﻟﺴﺠﻼت‬
                                      ‫ا‬          ‫ﺎ‬
    ‫ﺑﻮاﺳﻄﺔ "ﻓﮫﺮﺳﺔ" ﻛﻞ اﻟﺴﺠﻼت . ھﺬا اﻟﻤﻔﮫﻮم ﺗﻘﺮﻳﺒً ﺷﺒﯿﻪ ﺟﺪً ﺑﺎﻟﻔﮫﺮس اﻟﺬي ﻳﻮﺟﺪ ﻧﮫﺎﻳﺔ ﻛﻞ ﻛﺘﺎب‬
‫...ﻛﻤﺎ ﻳﺴﮫﻞ ﻋﻠﯿﻚ ھﺬا اﻟﻔﮫﺮس اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﻜﺘﺎب ﻓﻲ ﺳﺮﻋﺔ اﻟﺒﺤﺚ ﻋﻦ اﻟﻤﻮاﺿﯿﻊ اﻟﺘﻲ ﻳﺘﻀﻤﻨﮫﺎ اﻟﻜﺘﺐ‬
             ‫, ﻧﻔﺲ اﻟﻜﻼم ﻳﻨﻄﺒﻖ ﻋﻠﻰ ﻓﮫﺮﺳﺔ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول ....دﻋﻨﺎ ﻧﺮى ﻣﺜﺎل ﻟﺘﺘﻀﺢ اﻟﺼﻮرة :‬


‫;022 = ‪SELECT * FROM names WHERE ID‬‬

   ‫ﺳﻮف ﻳﻘﻮم ھﺬا اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﺒﺤﺚ ﻓﻲ ﺟﻤﯿﻊ اﻟﻤﻌﻠﻮﻣﺎت وإرﺟﺎع ﻗﯿﻤﺘﮫﺎ ﺑﺸﺮط أن ﻳﻜﻮن رﻗﻢ اﻟﺴﺠﻞ‬
                                                                            ‫)اﻟﻔﮫﺮس( 220‬

                                                                ‫ا‬
 ‫ھﻨﺎ ﺳﮫﻠﺖ ﻋﻠﯿﻨﺎ اﻟﻤﮫﻤﺔ ﻛﺜﯿﺮً وذاﻟﻚ ﻻن اﻟﺴﺠﻼت ﻣﺮﺗﺒﻪ ﺑﺄرﻗﺎم ﻓﻠﻲ ﻛﻞ ﺳﺠﻞ رﻗﻢ ﻓﺮﻳﺪ ﻳﻤﯿﺰه ﻋﻦ اﻷﺧﺮ‬
          ‫وﺑﮫﺬه اﻟﺤﺎﻟﺔ ﺳﻮف ﻳﻘﻮم ھﺬا اﻻﺳﺘﻌﻼم اﻟﺴﺎﺑﻖ ﺑﺠﻠﺐ ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﻌﻤﯿﻞ "ﺣﻤﺪ ﻃﺎرق " ....‬

				
DOCUMENT INFO
Shared By:
Categories:
Stats:
views:5
posted:6/10/2012
language:
pages:41