PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : كارتهاي الكترونيكي با php وmysql



TAHA
10-31-2009, 09:31 PM
آيا شما تا به حال خواسته ايد كه كارتهاي الكترونيكي براي سايت تان بسازيد ؟ اين كار را اخيرا من انجام داده ام و همزمان با آن همه يك روش كار درست بدست آوردم . بنابراين اينجا يك خودآموز سريع است و از اين جهت شما مجبور نيستيد كارهايي را كه من انجام داده ام را بپذيريد . همچنين در اين خودآموز شما ممكن است براي نكات بيشتر ارجاعهايي به “ Floppydogs” داشته باشيد . ولي آنچه بر روي آن است نيز از روي كد من در Floppydogs.com آمده است .
حال آيا اينكه شما فكر كنيد كه اين كار يك قطعه session ساده و آسان مي خواهد، درست است ؟ خير ، اينكار را نكنيد، خود من هم دقيقا علت آن را نمي دانم چرا كه اگر من در session_destory( ) اين كار را انجام مي دادم session ID از پذيرفتن آن به اين روش امتناع مي ورزيد .
اشكال اين ايجاد كردن ها زماني بود كه كاربر يك e_card را ارسال مي نمود و موقعي كه سعي مي كرد كه برگردد و يك كارت جديد را ايجاد كند اينكار را نمي توانست انجام دهد زيرا كه خطايي مبني بر ID مشابه پيش مي آمد ( چه زحمتي! ) . براي اينكار اول از همه من، بايد عكسها را بسازم و آشكار است كه همه آنها بر روي
صفحه index.php نمايش داده مي شود ، كد اينجا :


<A HREF=\"makecard.php?image=imagename.jpg\">



به طور معمول هر تصوير يك imagename متفاوت دارد حالا من براي ساختن makecard.php در جائيكه كاربر مي رسد و در his/her/its اطلاعات شخصي را وارد مي كند از session ها استفاده نمودم كه در صورت صرفنظر از اين قسمت اين خودآموز ديگر بلا استفاده مي شود .


<?
session_start();
session_register("image\");
?>
<HTML>



رجيستر سازي تصوير به اين معني است كه موقعي session خراب شده است، كاربر عكس را انتخاب و به نام متغير آن به چسباند . همه اطلاعات session بايد همزمان با شروع HTML شروع به رفتن كند . حال كد زير :



<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>



اگر شما بدانيد كه چگونه از فرم ها استفاده كنيد در اغلب مواقع ضروري بيشتر بايد
از آن استفاده كنيد .
در اينجا يكي از خصيصه هاي امنيتي Escapeshellcmd( ) اينست كه كاربران بدجنس نمي
توانند دستورات mysql را وارد فيلد ها بكنند و از آن طريق اطلاعات شما را بگيرند
.اگر شما همه جزئيات آن را بخواهيد ، مي توانيد در راهنماي دستي آن نگاه كنيد .
در ادامه من در يك جا به اين مسأله برخورد كردم كه اگر كاربر يك تصوير را انتخاب
كند و در آن موقع به ذهنش برسد كه بايد برگردد و his/her/its را تغيير داده بايد
چكار كند زيرا كه تصوير يك متغير رجيستر شده است و در تصوير اول هيچ موضوعي نمانده
كه انتخاب نشده باشد . با اين وجود خوشبختانه اين حالت نيز آسان مي باشد و در بالاي
صفحه index.php من به راحتي كد زير را اضافه كردم :


<?
session_start();
session_destroy();
?>




و سپس به ياد مي آورد كه قبل از هر كاري از HTML آن را وارد كند و حالا كارت را
مي فرستد .
قدم اول اين بود كه يك جدول درون mysql ايجاد كنيد ، شما مي توانيد خودآموز هاي
بيشتر را از روي devshed پيدا كنيد .براي گرفتن يك ID منحصر به فرد براي هر كارت
من از يك تابع استفاده كردم ( كه دوباره هر كدام قبل از HTML مي روند ) و آن را
به صورت session_destory( ) ذكر كردم تا نتواند ظاهر شود و ID خودش را خراب كند
. به همين دليل اطلاعات در داخل session هستند اگر شما كتاب Core php programming
را كه منبع اصلي من نيز مي باشد را داشته باشيد اين تابع را خواهيد شناخت .


<?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();
?>



اساسا اين تابع يك مجموعه طبقه بندي شده از 16 كاراكتر را توليد مي كند كه از
كاراكتر هاي انتخابي من ساخته شده است مشروط بر اينكه درون $Pool باشد .حال هر
چيزي مي خواهيد وارد جدول mysql بكنيد و ترتيب نگهداري متغير هايتان را به ياد
داشته باشيد . اگر در آنجا يك عنصر با همان ID وجود داشته باشد mysql بصورت اتوماتيك
در صورتي كه اجرا شود يك خطا برمي گرداند كه در مورد ( نتيجه !) است و يك ID جديد
مي سازد .


<?
$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')\");
}
?>


حال با پست كردن موفقيت آميز يك پيام با عنوان him/her/its گيرنده مي فهمد كه
he/she/it يك e_card دارد ! و در پايان نمي تواند session را خراب كند همچنين كاربر
مي تواند در صورتي كه he/she/it بخواهد برود و كارتي ديگر بسازد .


<?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();
?>


اين هم از اين . لحظات خوشي با e_card سازي داشته باشيد .اگر شما بخواهد همه اين
كارها را ببينيد مي توانيد مقداري از كارتهاي الكترونيكي را موقعيكه همه آنها روي
هم گذاشته شد از طريق floppydogs.com براي دوستانتان بفرستيد .


موفق باشيد