![]() |
|
|
|
#1 |
|
مدير بخش
![]() تاریخ عضویت: Sunday 1 January 2006
نوشته ها: 608
با تشکر: 0 تشکر شده 212 بار 76 پست ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
آموزش PHP (قسمت هفتم )
SQL چيست ؟ مخفف Structured Query Language و به معني زبان پرس و جوي ساخت يافته است. پرس جو ؟ اصطلاح پرس و جو يا Query به اين معني است كه ما اطلاعاتي كه داريم رو ميخواييم باهاش چكار كنيم. مثلا اون رو بخونيم ، قسمتي از اون رو بخونيم ، تغييرش بديم ، بهش يه چيزايي اضافه كنيم و ... مثال : 1- ليست تمام كاربراني كه از تاريخ 12 فروردين 1385 به بعد ثبت نام كرده اند را مي خواهم. 2- حساب كاربري فلاني را قفل كن. 3- پسورد كاربري كه يوزر اون برابر با ali هست رو به 123 تغيير بده . حال ما مي خواييم بدونيم كه چطوري اين ها رو به كامپيوتر بفهمونيم. اكثر Query هايي كه ما استفاده مي كنيم از 4 حالت زير خارج نيستند. 1- Select خواندن ، جستجو ... 2- Insert درج اطلاعات جديد. 3- Update به هنگام سازي. 4- Delete حذف اطلاعات. SELECT: اول يه مثال ميزنيم تا گيج نشويد: كد: SELECT user FROM userTable اين Query از تمامي ركورد هاي جدول userTable فيلد user را پيدا مي كند. يكي ديگه : كد: SELECT user, name, lastName, Id FROM userTable اين يكي تمامي فيلد هاي ذكر شده جلوي دستور SELECT را از جدول userTable پيدا مي كنه. اگه همه فيلد ها رو بخواييم نشون بده چي ؟ بايد همه فيلد ها رو جلوي SELECT بنويسيم؟ براي اين كار به جاي اين كه نام همه فيلد ها رو بنويسيد مي تونيد از * استفاده كنيد يعني : كد: SELECT * FROM userTable اگه يه شرط داشتيم چي؟ مثلا "كاربري رو پيدا كن كه نام كاربري اون ali و پسورد اون 123 است"... براي شرط در query ها از WHERE استفاده ميكنيم. اينطوري: كد: SELECT * FROM userTable WHERE userName = 'ali' معني اين: تمام ركورد هاي جدول userTable رو پيدا كن كه شرط كد: userName = 'ali' رو داشته باشند. اگه شرط هامون چند حالت داشته باشند ؟ مثلا اين: كد: SELECT * FROM userTable WHERE userName = 'ali' AND userPassword='123 ' يعني: تمام ركورد هاي جدول userTable را پيدا كن كه فيلد userName اون برابر با ali و فيلد userPassword اون برابر با 123 باشه. به همين ترتيب ميتونه به جاي AND كلمه OR را قرار بدين همچنين ميتونين هر شرطي خواستيد اضاف كنيد. مرتب سازي داده هاي خروجي: براي مرتب كردن خروجي براساس يك فيلد از اين دستور توي Query استفاده ميكنيم. كد: ORDER BY FieldName ASC كه FieldName نام فيلدي هست كه مرتب سازي بر اساس اون صورت مي گيره و اون ASC ميگه كه مرتب سازي صعودي باشه ؛ اگه بخواييم مرتب سازي نزولي باشه به جاي ASC از DESC استفاده مي كنيم. مثال: كد: SELECT * FROM postTable WHERE postId>50 ORDER BY postTitle ASC يعني چه ..؟ تمام ركورد هاي جدول postTable رو پيدا كن كه مقدار فيلد postId اون بزرگتر از 50 باشه و اون رو بر اساس فيلد postTitle به صورت صعودي مرتب كن. از كد: GROUP BY FieldName استفاده ميكنيم. مثلا : كد: SELECT * FROM postTable WHERE senderId=103 GROUP BY postID يعني؟ : تمام ركورد ها را از جدول postTable نمايش بده كه فيلد postID (كد ارسال كننده) اون برابر 103 است. و پست هاي تكراري رو حذف كن.(اون ركورد هايي كه postID مشابهي دارند فقط يكي شون رو نشون بده) شايد مثال خوبي نباشه.. جستجو: براي جستجو در داده هاي يه جدول به صورتي كه مثلا اگه ali رو جستجو گرديم تمامي نتايجي كه شامل عبارت ali ميشود را نشان دهيم. كد: SELECT * FROM postTable WHERE postBody LIKE '%ali%' تمام چيزهايي كه توش ali باشه رو پيدا ميكنه اگه بخواييم فقط اونايي كه اولشون با ali شروع مي شه به جاي '%ali%' فقط آخرش % مي گذاريم يعني : كد: SELECT * FROM postTable WHERE postBody LIKE 'ali%' براي اونايي كه به ali ختم مي شن وارونه فقط اولش % مي گذاريم. داشت يادم مي رفت براي شمردن نتيجه يك SELECT كه فقط تعداد برامون مهم باشه از تابع COUNT استفاده مي كنيم: كد: SELECT COUNT(*) FROM userTable WHERE registerDate < '85/10/15' البته توابع ديگه اي هم هست كه فعلا نمي گم چون ممكنه سر در گم بشيد. INSERT: اين query براي درج ركود جديد توي جدول استفاده ميشه. اين طوري: كد: INSERT INTO myTable (userName, userPassword, userReallyName) VALUES ('ali', '123', 'Ali Agho') (تو چند خط نوشتم كه راحتتر خونده بشه البته توصيه مي شه توي برنامه هاتون هم اينطوري بنويسيد) خوب اين query يه ركورد جديد رو توي جدول myTable درج ميكنه كه مقدار فيلد userName اون ali و مقدار فيلد userPassword اون 123 و مقدار فيلد userReallyName اون Ali Agho هست. تو پرانتز اولي اگه فيلدي رو ننويسيد اشكالي نداره (البته اگه فيلد اون Not NULL نباشه) مقدار Default توش قرار ميگيره كه اگه موقع ساختن جدول تعيين نشده باشه Null خواهد شد. در هر صورت بايستي تعداد فيلدي كه توي پرانتز اولي مي نويسيد با تعداد فيلد پرانتز دوم برابر باشه. در ضمن ميتونيد كلا پرانتز اول رو نگذاريد اونوقت توي پرانتز دوم براي تمام فيلد ها بايستي مقدار تعيين كنيد. يک نكته : توي MySQL ميتونيد n تا ركورد رو با يه query درج كنيد. مثال: كد: INSERT INTO myTable VALUES ('ali', '123', 'Ali Agho'), ('mojataba', '1100012', 'Agh Mojtaba'), ('reza', '1545587ax1', 'Agha Reza') به همين سادگي. UPDATE: براي ويرايش يه چيز استفاده ميشه. مثلا تغيير پسورد، ويرايش يه مطلب و ... مثال: كد: UPDATE myTable SET userName='ali' يعني : براي تمام ركورد هاي جدول myTable مقدار فيلد userName رو به ali تغيير بده ... تمام ركورد ها براي اين كه شرطي تعيين نكرديم. اگه اين طوري بنويسيم اون وقت محدود به ركورد (هاي) خاصي مي شه: كد: UPDATE myTable SET userName='ali' WHERE userID=53 فقط ركورد هايي كه مقدار فيلد userID اونا برابر با 53 باشه تغيير ميكنند. ما ميتونيم همزمان چند تا فيلد رو با هم تغيير بديم: كد: UPDATE myTable SET userName='ali', userPassword='123', userReallyName = 'Ali Aghoye Gol' WHERE userID=53 WHERE اينجا مثل توي SELECT هست. DELETE: براي حذف ركورد از جدول استفاده ميشه. مثلا: كد: DELETE FROM myTable تمامي ركورد هاي جدول myTable رو حذف ميكنه. توجه : 1- اينجا بعد از DELETE و قبل از FROM چيزي نيست با SELECT اشتباه نكنيد. 2- بايد خيلي مواظب اين جور query ها باشيد. چون بعضي وقت ها به خاطر يه اشتباه كوچولو خيلي چيزا از دست ميروند. اگه بخواهيم ركورد(هاي) خاصي رو حذف كنيم بايستي از شرط استفاده كنيم مثل update : كد: DELETE FROM myTable WHERE userID=662 فقط ركورد هايي رو حذف مي كنه كه مقدار فيلد userID اونا برابر 662 باشه. |
|
|
|
| ....... | |
|
|
#2 |
|
مدير بخش
![]() تاریخ عضویت: Sunday 1 January 2006
نوشته ها: 608
با تشکر: 0 تشکر شده 212 بار 76 پست ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
آموزش php قسمت هشتم
امروز آموزش ساخت یک جستجو در بانک اطلاعاتی رو آموزش میدیم. توی این قسمت با Request ها و بازیابی اطلاعات از دیتا بیس آشنا می شویم. خوب اول یه فرم نیاز داریم که فرم جستجوی ما می شود: كد: <form method="get" action="search.php"> <p> <input type="text" name="q" size="20"> <input type="submit" value="Search" name="searchBtn"> </p> </form> كد بالا رو توي يه فايل با پسوند html ذخيره كنيد. حالا برنامه phpMyAdmin رو باز میکنیم و یه دیتابیس جدید و توی اون یه جدول جدید می سازیم (البته اگه جدولی که می خواییم توش بگردیم وجود نداشته باشه). براي ساخت جدول از SQL زير استفاده كنيد: كد: CREATE TABLE `text` ( `id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR( 255 ) NOT NULL , `body` TEXT NOT NULL , PRIMARY KEY ( `id` ) ) TYPE = MYISAM ; (توي phpMyAdmin پس از انتخاب ديتا بيس مورد نظر بر روي SQL كليك كنيد و كد بالا رو اونجا كپي كنيد بعد بر روي Go كليك كنيد تا جدول مورد نظر ساخته بشه) بعد از اين كه جدول text رو ساختيد روي Insert كليك كنيد و چند تا ركورد توي جدول وارد كنيد.(فعلا سعي كنيد لاتين وارد كنيد تا بعد ...) خوب حالا ما يه فرم جستجو داريم و يه جدول كه يه سري اطلاعات توي اونه و ميخواييم توي اون جستجو كنيم ... * خوب بريم سراغ ساختن فايل search.php كه مهمترين قسمت كاره ؛ يه ويرايشگر مثل notepad يا Dream Weaver باز كنيد. موقعي كه كاربر بر روي دكمه search توي فايل html اولي كليك ميكنه اون فرم و تمامي اشيايي كه روي اونه با مقاديرشان ميان تو سرور و فايل search.php كه ما براش تعيين كرديم. يه آرايه هست كه مال خود php هست و تمامي مقادير فرم ارسال شده توي اون قرار ميگيره مثلا مقدار Edit Box ي كه نام اون رو q گذاشتيم ميره توي اين : كد: $_GET["q"] اين GET براي موقعي به كار ميره كه فرم ما با method ـ get ارسال شده اگه با post ارسال شده بود از POST استفاده ميكرديم (دقت كنيد كه بايد با حروف بزرگ نوشته بشن). خوب حالا كه ميدونيم كه كاربر چي وارد كرده پس ميريم سراغ قسمت بعد. راستي تا يادم نرفته بگم اگه يه كاربر شيطون اومد از راه ديگه اي فايل search.php رو باز كرد مثلا آدرس اون رو توي Address Bar نوشت ... اونوقت چيزي به نام كد: $_GET["q"] وجود نداره و برنامه به ما اررور ميده، همچنين توي جاهايي كه چيزي رو قراره ثبت كنيم (Insert) نبايد ركورد خالي ثبت بشه ... براي اين كار بايستي از تابعي به نام isset استفاده كنيم ، اينطوري : كد: if(isset($_GET['q'])) { ... } اين تابع در صورتي كه همچين متغيري وجود داشته باشه مقدار true بر ميگردونه و در غير اين صورت false بر مي گردونه. پس ما توي خطوط اولي فايلمون اون رو چك ميكنيم. كد: if(!isset($_GET['q'])) die("The Search key word is not set!"); در صورتي كه كاربر از طريق فرم به اين صفحه منتقل نشده باشه يه پيغام خطا چاپ مي كنيم. خوب حالا بايد چك كنيم كه كاربر مقدار مورد جستجو رو خالي نگذاره با اين : كد: $key = $_GET['q']; if($key == "") die("The Search key word must be entered!"); وقتی به اینجا میرسیم دیگه مطمئنیم که کاربر از طریق فرم به اینجا اومده چون اگه اینطور نبود در خطوط بالایی با دستور die برنامه به پايان مي رسيد و به اينجا نمي رسيديم. * خوب حالا كارهاي پايگاه داده (جستجو): اول از همه كد هاي ارتباط با ديتابيس رو كه قبلا توضيح داده شده رو مينويسيم : كد: $DbConn = mysql_connect("localhodt", "root", "" ) or die(mysql_error()); mysql_select_db("test",$DbConn) or die("Can Not Select DataBase Because: ". mysql_error()); خوب حالا كه اتصال با موفقيت انجام شد، بريم سراغ SQL : كد: $sql = "SELECT * FROM `text` WHERE `title` LIKE '%".$key ."%' "; دقت كنيد كه ما جستجو را بر اساس فيلد title از جدول text انجام ميديم و هر ركوردي كه فيلد title اون خود اون يا قسمتي از اون برابر چيزي باشه كه كاربر وارد مي كنه را برامون پيدا ميكنه. خوب حالا query رو اجرا ميكنيم : كد: $SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql); اگه تا حالا همه چيز با موفقيت انجام شده باشه با اجراي خط بالا نتايج جستجو را با استفاده از متغير SearchResult به دست مي آوريم . اول از همه بياييد ببينيم جيتجوي ما چند تا نتيجه داشته : كد: $TotalResults = mysql_num_rows($SearchResult); خط بالا تعداد نتايج را در متغير TotalResults مي ريزه . خوب حالا تعداد نتايج به دست آمده رو چك ميكنيم كه اگه نتيجه اي در بر بوده اون(ها) رو چاپ كنيم و اگه نبود پيغام مناسب چاپ كنيم: كد: if($TotalResults <= 0) die("Not found any record for your key word!"); خوب حالا نتايج رو چاپ ميكنيم : اول بايد بدونيم كه براي دستيابي به نتايج يك query بايد از تابع mysql_result استفاده ميكنيم. با مثال بهتر متوجه مي شويد: كد: for($i = 0; $i != $TotalResults; $i++ ) { //<!-- Start of Print Results... $TextTitle = mysql_result($SearchResult, $i, 1); $TextBody = mysql_result($SearchResult, $i, 2); print($TextTitle ." ==> ". $TextBody ."<br /><br />"); //End of Print Results. --> } توي حلقه بالا تابع mysql_result رو ميبينيم كه با سه ورودي فراخوني شده ورودي اول متغيري هست كه نتيجه اجراي Query رو توي اون ريختيم ، ورودي دوم شماره ركودي است كه توي جستجوي ما پيدا شده و از صفر شروع ميشه (چون ممكنه كه جستجوي ما چند ركورد را پيدا كند بايستي توي حلقه اونا رو يكي يكي چاپ كنيم) ، ورودي سوم انديس فيلد (ستون) جدول ما است كه اون هم از صفر شروع ميشه. و اين هم سورس كامل امروز : كد: <?php if(!isset($_GET['q'])) die("The Search key word is not set!"); $key = $_GET['q']; if($key == "") die("The Search key word must be entered!"); $DbConn = mysql_connect("localhodt", "root", "" ) or die(mysql_error()); mysql_select_db("test",$DbConn) or die("Can Not Select DataBase Because: ". mysql_error()); $sql = "SELECT * FROM `text` WHERE `title` LIKE '%".$key ."%' "; $SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql); $TotalResults = mysql_num_rows($SearchResult); if($TotalResults <= 0) die("Not found any record for your key word!"); for($i = 0; $i != $TotalResults; $i++ ) { //<!-- Start of Print Results... $TextTitle = mysql_result($SearchResult, $i, 1); $TextBody = mysql_result($SearchResult, $i, 2); print($TextTitle ." ==> ". $TextBody ."<br /><br />"); //End of Print Results. --> } ?> ------------- نكته : فايل html ي كه اول ساختيم و فايل search.php رو توي يه فولدر مشترك باشند. توجه : اين اگه خواستيد از اين كد توي وبسايتتون استفاده عملي بكنيد حتما با من مشورت كنيد ، به اين دليل كه چون اين كد جنبه آموزشي داره مسائل امنيتي توي اون رعايت نشده كه خيلي پيچيده نشه. در ضمن : اين خيلي ساده است فقط براي يه مورد جستجو انجام ميده با تلاش بيشتر ميتونيد query هاي پيچيده بنويسيد و خيلي كاراي ديگه بكنيد مثلا مدت زمان جستجو رو به دست بياريد يا كلمه هاي كليدي كه مورد جستجو قرار گرفته رو توي نتايج رنگي نشون بديم و ... موفق و پيروز باشيد. RightClick.ir |
|
|
|
| 2 کاربر برای پست مفید Bztajik تشکر کرده اند |
asoft (Wednesday 9 July 2008),
pournejati (Monday 19 November 2007)
|
![]() |
| ابزارهای موضوع | |
| نحوه نمایش | |
|
|