1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

کارتهای الکترونیکی با php و Mysql

شروع موضوع توسط hector2141 ‏10/9/12 در انجمن PHP

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,318
    تشکر شده:
    2,702
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    [​IMG]
    آیا شما تا به حال خواسته اید که کارتهای الکترونیکی برای سایت تان بسازید ؟


    حال آیا اینکه شما فکر کنید که این کار یک قطعه 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 سازی داشته باشید .