آیا شما تا به حال خواسته اید که کارتهای الکترونیکی برای سایت تان بسازید ؟ حال آیا اینکه شما فکر کنید که این کار یک قطعه session ساده و آسان می خواهد، درست است ؟ خیر ، اینکار را نکنید، خود من هم دقیقا علت آن را نمی دانم چرا که اگر من در session_destory( ) این کار را انجام می دادم session ID از پذیرفتن آن به این روش امتناع می ورزید . اشکال این ایجاد کردن ها زمانی بود که کاربر یک e_card را ارسال می نمود و موقعی که سعی می کرد که برگردد و یک کارت جدید را ایجاد کند اینکار را نمی توانست انجام دهد زیرا که خطایی مبنی بر ID مشابه پیش می آمد ( چه زحمتی! ) . برای اینکار اول از همه من، باید عکسها را بسازم و آشکار است که همه آنها بر روی صفحه index.php نمایش داده می شود ، کد اینجا : [TABLE="width: 500, align: center"] [TR] [TD] <A HREF=”makecard.php?image=imagename.jpg”> [/TD] [/TR] [/TABLE] به طور معمول هر تصویر یک imagename متفاوت دارد حالا من برای ساختن makecard.php در جائیکه کاربر می رسد و در his/her/its اطلاعات شخصی را وارد می کند از session ها استفاده نمودم که در صورت صرفنظر از این قسمت این خودآموز دیگر بلا استفاده می شود . [TABLE="width: 500, align: center"] [TR] [TD] <? session_start(); session_register(“image”); ?> <HTML>[/TD] [/TR] [/TABLE] رجیستر سازی تصویر به این معنی است که موقعی session خراب شده است، کاربر عکس را انتخاب و به نام متغیر آن به چسباند . همه اطلاعات session باید همزمان با شروع HTML شروع به رفتن کند . حال کد زیر : [TABLE="width: 500, align: center"] [TR] [TD] <CENTER> <IMG SRC=”<?echo $image;?>”> </CENTER> <form action=”sendcard.php” method=GET> Your Name: <input type=text name=s_name size=25 maxlength=50> <?escapeshellcmd($s_name);?> <p> Your Email Address: <input type=text name=s_email size=25 maxlength=50><?escapeshellcmd($s_email);?> <p> Receiver’s Name: <input type=text name=r_name size=25 maxlength=50> <?escapeshellcmd($r_name);?> <p> Receiver’s Email Address: <input type=text name=r_email size=25 maxlength=50> <?escapeshellcmd($r_email);?> <p> Your Personal Message:<BR> <TEXTAREA name=message cols=50 rows=5 wrap></TEXTAREA> <?escapeshellcmd($message);?> <P> <input type=submit value=”Send my card!”> <input type=reset value=”Clear it”> </form> [/TD] [/TR] [/TABLE] اگر شما بدانید که چگونه از فرم ها استفاده کنید در اغلب مواقع ضروری بیشتر باید از آن استفاده کنید . در اینجا یکی از خصیصه های امنیتی Escapeshellcmd( ) اینست که کاربران بدجنس نمی توانند دستورات mysql را وارد فیلد ها بکنند و از آن طریق اطلاعات شما را بگیرند .اگر شما همه جزئیات آن را بخواهید ، می توانید در راهنمای دستی آن نگاه کنید . در ادامه من در یک جا به این مسأله برخورد کردم که اگر کاربر یک تصویر را انتخاب کند و در آن موقع به ذهنش برسد که باید برگردد و his/her/its را تغییر داده باید چکار کند زیرا که تصویر یک متغیر رجیستر شده است و در تصویر اول هیچ موضوعی نمانده که انتخاب نشده باشد . با این وجود خوشبختانه این حالت نیز آسان می باشد و در بالای صفحه index.php من به راحتی کد زیر را اضافه کردم : [TABLE="width: 500, align: center"] [TR] [TD] <? session_start(); session_destroy(); ?>[/TD] [/TR] [/TABLE] و سپس به یاد می آورد که قبل از هر کاری از HTML آن را وارد کند و حالا کارت را می فرستد . قدم اول این بود که یک جدول درون mysql ایجاد کنید ، شما می توانید خودآموز های بیشتر را از روی devshed پیدا کنید .برای گرفتن یک ID منحصر به فرد برای هر کارت من از یک تابع استفاده کردم ( که دوباره هر کدام قبل از HTML می روند ) و آن را به صورت session_destory( ) ذکر کردم تا نتواند ظاهر شود و ID خودش را خراب کند . به همین دلیل اطلاعات در داخل session هستند اگر شما کتاب Core php programming را که منبع اصلی من نیز می باشد را داشته باشید این تابع را خواهید شناخت . [TABLE="width: 500, align: center"] [TR] [TD] <?php session_start(); function CreateID($length=16){ $Pool = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”; $Pool .= ”1234567890floppydogs”; for($index = 0; $index < $length; $index++){ $sid .= substr($Pool,(rand()%(strlen($Pool))), 1); } return($sid); } $sid=CreateID(); ?>[/TD] [/TR] [/TABLE] اساسا این تابع یک مجموعه طبقه بندی شده از ۱۶ کاراکتر را تولید می کند که از کاراکتر های انتخابی من ساخته شده است مشروط بر اینکه درون $Pool باشد .حال هر چیزی می خواهید وارد جدول mysql بکنید و ترتیب نگهداری متغیر هایتان را به یاد داشته باشید . اگر در آنجا یک عنصر با همان ID وجود داشته باشد mysql بصورت اتوماتیک در صورتی که اجرا شود یک خطا برمی گرداند که در مورد ( نتیجه !) است و یک ID جدید می سازد . [TABLE="width: 500, align: center"] [TR] [TD] <? $result = mysql_query(“INSERT INTO ecards VALUES(’$sid’, ‘$s_name’, ‘$s_email’,'$r_name’, ‘$r_email’,'$message’, ‘$image’)”); if(!$result){ $sid=CreateID(); $result = mysql_query(”INSERT INTO ecards VALUES(’$sid’, ‘$s_name’, ‘$s_email’,'$r_name’, ‘$r_email’,'$message’, ‘$image’)”); } ?>[/TD] [/TR] [/TABLE] حال با پست کردن موفقیت آمیز یک پیام با عنوان him/her/its گیرنده می فهمد که he/she/it یک e_card دارد ! و در پایان نمی تواند session را خراب کند همچنین کاربر می تواند در صورتی که he/she/it بخواهد برود و کارتی دیگر بسازد . [TABLE="width: 500, align: center"] [TR] [TD] <?php $mailTo = “$r_email”; $mailSubject = ”You Have A FloppyDog!”; $mailHeader = ”From: $s_name”; $message = ”You lucky person, you! Someone has thought of you in a warm and fuzzy way and sent you a floppydog studios (TM) e-card! You can view this card at the following webpage: ”; $message .= ”http://www.floppydogs.com/ecards/viewcard.php?ID=”; $message .= $sid; mail($mailTo, $mailSubject, $message, $mailHeader); session_destroy(); ?>[/TD] [/TR] [/TABLE] این هم از این . لحظات خوشی با e_card سازی داشته باشید .