آموزش ساخت سیستم کوتاه کننده لینک ( نسخه کاملتر )

adnan magic

تازه وارد
درود بر شما دوستان گرامی

قرار هستش براتون آموزش ساخت کوتاه کننده لینک رو براتون آموزش بدم ( بدون کپی رایت برید و حال کنید :D )

البته باید بگم که قبلا آموزش ساخت کوتاه کننده لینک قرار داده شده بود ولی من کاملترش کردم

قرار هستش تو این آموزش یک کوتاه کننده لینک با امکانات زیر بسازیم

1-سیستم کوتاه کننده لینک

2-سیستم آمار لینک های کوتاه شده ( به علاوه پرداخت آنلاین برای فعالسازی آمار )

3-امکان ساخت خودکار کد های کوتاه شده

4-جلوگیری از ایجاد کد هایی که قبلا استفاده شده است

5-پنل مدیریت کامل

6-کد های آماده برای شناسه ها

و اگه بشه امکان دیگه ای هم اضافه می کنم

در ضمن منظور از " به علاوه پرداخت آنلاین برای فعالسازی آمار " این هست که کاربر اگه بخواد برای مثال آمار لینک کوتاه شده رو ببینه باید یه مبلغی رو پرداخت کنه که پس از پرداخت به صورت اتوماتیک آمار براش فعال میشه و درگاه پرداختی که من انتخاب کردم زرین پال هستش. البته این امکان اختیاری هستش و اجباری نیست!

و نکته بعدی اینکه از قالب سیستم کوتاه کننده قبلی برای این سیستم استفاده می کنم تا یک نواخت بشه

خوب بریم سر درس اول:

اولین کاری که باید بکنیم اینکه صفحه اصلی رو بسازیم

کد صفحه اصلی:


کد:
<?php
error_reporting (0);
include_once('config.php');
$a = $_GET['a'];
$code = $_GET['code'];
?>
<!DOCTYPE HTML>
<html dir="Rtl">
<head>
<title><?php echo "$webtitle"; ?></title>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>
<body>
<?php
if($a=="1")
{
echo '<div class="result">
لینک شما با موفیت ایجاد شد ' . $local . '/' .$code . '
<br>
شناسه شما: ' . $code . '
</div>';
echo '<br>';
}
if($a=="2")
{
echo '<div class="result">کد مورد نظر شما از قبل در سیستم ثبت شده است</div>';
echo '<br>';
}
?>
<form action="add.php" method="GET">
<label for="url">لینک مورد نظر خود را وارد کنید:</label><br /><input type="url" name="url" required="required" placeholder="برای مثال : http://www.google.com" /><br />
<label for="code">حرف اختصار شده ( برای ایجاد به صورت تصادفی خالی بگذارید ): </label><br /><input type="text" name="code"/><br>
<label for="random">در صورتی که فیلد بالا را خالی گذاشتید تعداد کاراکتر های حرف تصادفی را وارد کنید</label><br /><input type="text" name="coderand"/><br>
<input type="submit" value="کوتاه کن">
</form>


<fieldset>
<legend>بخش آمار</legend>
در بخش آمار شما می توانید بازدید کلی لینک کوتاه شده خود را مشاهده کنید
<br>
<form action="statdirect.php" method="POST">
شناسه خود را در فیلد زیر وارد کنید<br>
<input type="text" placeholder="شناسه" name="sh" required="required"><br>
<input type="submit" value="انتقال به بخش آمار">
</form>
</fieldset>
</body>
</html>
این کد رو در index.php ذخیره کنید

در خط اول پی اچ پی رو شروع می کنیم و می گیم اگه خطایی هم بود نشون نده چون بعضی متغییر ها خالی هستن

خط سوم فایل config.php رو فراخوانی می کنیم

در خط چهار و پنج متغییری رو از داده GET می گیریم

در این بخش:


کد:
<title><?php echo "$webtitle"; ?></title>
عنوان صفحه رو که در فایل config.php با متغییر webtitle ذخیره کردیم فراخوانی می کنیم

و در خط:


کد:
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
فایل css رو فراخوانی می کنیم

در خط های بعدی چندتا شرط هستش که بعدا توضیح می دم الان توضیح بدم قاطی میشه :D

و در خط های بعدی دوتا فرم ایجاد کردیم که اولی برای ایجاد لینک و بعدی برای نشان دادن آمار هستش

در فرم اول ما سه تا فیلد داریم

یکی لینک اصلی که اجباری هستش

دومی حرف اختصار شده که اگه خالی بمونه به صورت اتوماتیک ایجاد میشه

و سومی اگه فیلد بالا خالی بمونه با پر کردن این فیلد تعداد حروف تصادفی تعیین میشه

در بخش آمار هم یه فیلد هستش که شناسه داخل اون وارد میشه و به بخش آمار انتقال داده میشه ( این کلا بحثش جدا گونه هستش )

خوب کار صفحه اصلی تموم شد حالا بریم سر فایل config.php که اطلاعات کلی توی اون هستش

کد فایل config.php :


کد:
<?php
//dbconnect
$dbaddress = "localhost";
$dbusername = "username";
$dbpassword = "password";
$dbname = "name";


//public
$webtitle = "کوتاه کننده لینک";
$local = "http://www.you.com";


//vip
$vipprice = "100";
$zarinpalmerchant = "";
?>
که در متغییر ها به ترتیب این اطلاعات وجود دارد

$dbaddress : آدرس دیتابیس که معمولا localhost هستش

$dbusername : نام کاربری دیتابیس

$dbpassword : رمز عبور دیتابیس

$dbname : نام دیتابیس

$webtitle : نام وبسایت

$local : آدرس وبسایت. این خیلی مهم هستش باید به درتسی وارد کنید ( طرز صحیح: یا ) نباید در آخرش / وارد شده باشه

$vipprice : این برای مبلغی هستش که کاربر باید پرداخت کنه تا بخش آمار یک شناسه باز بشه

$zarinpalmerchant : مرچنت کد زرین پال برای اتصال به درگاه پرداخت زرین پال هستش

خوب تا اینجا فعلا بسه

هر روز یه بخش دیگه میزارم

 

adnan magic

تازه وارد
خوب در جلسه قبل در مورد صفحه اصلی و کانفیگ توضیح دادیم

همون طور که می دونید در صفحه اصلی یک فراخوانی برای فایل استایل وجود دارد

می توانید از استایل آماده زیر استفاده کنید


کد:
* {
margin:0;
padding:0;
}
html {
font:10pt "Tahoma",Arial,senf-serif;
direction:rtl;
background:#FFF;
text-shadow:1px 1px 1px #cacaca;
}
A {
text-decoration: none;
color: #ffffff;
}
body {
margin:50px auto;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
padding:10px;
border:1px solid #c9c9c9;
width:450px;
}
form {
text-align:center;
}
input,select,textarea {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
font:10pt "Tahoma",Arial,senf-serif;
padding:5px;
margin-bottom:7px;
border:1px solid #cacaca;
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
transition: all 500ms ease;
width:300px;
margin-top:4px;
}
input:hover,select:hover,textarea:hover {
border:1px solid #7613ae;
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
transition: all 500ms ease;
}
input:focus,select:fous,textarea:focus {
border:1px solid #0096ff;
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
transition: all 500ms ease;
}
input[type="url"]:focus {
direction:ltr;
}
input[type="submit"],button {
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
font:10pt "Tahoma",Arial,senf-serif;
padding:5px;
border:1px solid #cacaca;
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
transition: all 500ms ease;
background:#cacaca;
color:#FFF;
}
input[type="submit"]:hover,button:hover {
background:#7613ae;
border:1px solid #c9c9c9;
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
transition: all 500ms ease;
}
input[type="submit"]::disable,button::disable{
background:#000;
border:1px solid #c9c9c9;
-webkit-transition: all 500ms ease;
-moz-transition: all 500ms ease;
-o-transition: all 500ms ease;
transition: all 500ms ease;
}
.result {
background:#7613ae;
border-radius:5px;
-moz-border-radius:5px;
-webkit-border-radius:5px;
color: #ffffff;
text-align:center;
padding:5px;
}
img {
border:none;
}
 fieldset {
border: 1px solid #C9C9C9;
border-radius: 5px;
}
این کد ها رو در فایل style.css در همون پوشه اصلی ذخیره کنید

خوب حالا بریم سراغ فایل add.php که در فرم اول صفحه اصلی اطلاعات به این فایل ارسال میشه

کد فایل:


کد:
<?php
include_once('config.php');
$coderand = $_GET['coderand'];
function rand_string( $length ) {
$chars = "qwertyuiopasdfghjklzxcvbnm0123456789"; 


$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ ) {
$str .= $chars[ rand( 0, $size - 1 ) ];
}


return $str;
} 


$my_string = rand_string( $coderand );
$code = $_GET['code'];
if($code=="")
{
$fcode = $my_string;
}
else {
$fcode = $code;
}
$con = mysql_connect("$dbaddress","$dbusername","$dbpassword");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}


mysql_select_db("$dbname", $con);
$sql = "SELECT code FROM `link`
WHERE `code` = '$_GET[code]' ";
$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);
$TotalResults = mysql_num_rows($SearchResult);
if($TotalResults>"0")
{
header("Location: $local/index.php?a=2");
mysql_close($con);
}
else {


mysql_query("INSERT INTO `link`(`code`, `url`, `statactive`, `visit`) VALUES ('$fcode','$_GET[url]','0','0')");


mysql_close($con);


header("Location: $local/index.php?a=1&code=$fcode");


}
?>
این کد ها رو در فایل add.php ذخیره کنید

خوب در سطر اول پی اچ پی رو باز می کنیم

در خط بعدی فایل config.php رو فراخوانی می کنیم

در خط بعدی اطلاعات داده GET فیلد coderand رو ذخیره می کنیم ( این برای تعداد حرف تصادفی هستش )

در خط بعدی فانکشن ایجاد کد راندوم رو نوشتیم

در خط بعدی:


کد:
$my_string = rand_string( $coderand );
کد راندوم را در my_string ذخیره می کنیم و فانکشن را در این متغییر اجرا می کنیم و در داخل پارانتز برای تعداد حروف متغییر $coderand را که قبلا ذخیره کرده ایم می گذاریم

در خط بعدی اطلاعات داده GET فیلد code را ذخیره می کنیم

در این بخش:


کد:
if($code=="")
{
$fcode = $my_string;
}
else {
$fcode = $code;
}
شرطی را تعیین کرده ایم که اگر $code خالی بود از کد راندوم که قبلا ذخیره کردیم برای $fcode استفاده کنیم

و در خط بعدی در صورتی که شرط لغو شود $fcode همان $code خواهد بود

در این حالت اگر کاربر فیلد کد را خالی بگذارد به صورت اتوماتیک اجرا می شود

در خط:


کد:
$con = mysql_connect("$dbaddress","$dbusername","$dbpassword");
با دیتابیس ارتباط برقرار می کنیم و در خط:


کد:
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
چک می کنیم که آیا ارتباط با دیتابیس برقرار شد یا نه

در خط:


کد:
mysql_select_db("$dbname", $con);
نام دیتابیس را انتخاب می کنیم

( اطلاعات دیتابیس را قبلا در فایل کانفیگ ذخیره کرده ایم )

در این بند:


کد:
$sql = "SELECT code FROM `link`
WHERE `code` = '$_GET[code]' ";
$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);
$TotalResults = mysql_num_rows($SearchResult);
کئوری شناسه ای به نام code را در دیتابیس انتخاب می کنیم که با اطلاعات ارسال GET فیلد code را انتخاب می کنیم

و در خط بعدی تعداد یافته ها را برسی می کنیم

و در خط بعدی شرطی اجرا می کنیم که اگر تعداد یافته ها بیشتر از 0 بود به لینک index.php?a=1 انتقال بده که در فایل index.php برای این کد پیغام خاصی را تعریف کرده ایم

در این حالت امکان ساخت کد های هم نام برای لینک های کوتاه شده غیرفعال میشه

در غیر اینصورت سیستم در هنگام ارسال درخواست قاطی می کنه

و در بند:


کد:
else {


mysql_query("INSERT INTO `link`(`code`, `url`, `statactive`, `visit`) VALUES ('$fcode','$_GET[url]','0','0')");


mysql_close($con);


header("Location: $local/index.php?a=1&code=$fcode");


}
اگر شرط بالا لغو شد یک رکورد جدید در دیتابیس اضافه می کنیم و کاربر را به لینک $local ( که آدرس سایت است ) و فایل index.php با اطلاعات GET که a=1 باشد و code=$fcode باشد

اگر یادتان باشد در فایل index.php یکی چندتا php بود که گفتم بعدا توضیح میدم

کد ها:


کد:
if($a=="1")
{
echo '<div class="result">
لینک شما با موفیت ایجاد شد ' . $local . '/' .$code . '
<br>
شناسه شما: ' . $code . '
</div>';
echo '<br>';
}
if($a=="2")
{
echo '<div class="result">کد مورد نظر شما از قبل در سیستم ثبت شده است</div>';
echo '<br>';
}
در این کد ها پیغام های مناسب برای هر رکورد از a را تعیین می کنیم

خوب اینم از فایل add.php تا جلسه بعدی خدانگهدار

 
آخرین ویرایش توسط مدیر:

adnan magic

تازه وارد
خوب دیتابیس این اسکریپت خیلی ساده هستش و فقط یک تیبل داره

می تونید فایل زیر را در دیتابیس خودتون آپلود کنید



خوب حالا فایل اصلی direct.php که مهم ترین و اصلی ترین فایل این اسکریپت هستش

کد فایل:


کد:
<?php
include_once('config.php');$id = $_GET['id'];$con = mysql_connect("$dbaddress","$dbusername","$dbpassword");if (!$con)  {  die('Could not connect: ' . mysql_error());  }
mysql_select_db("$dbname", $con);
$result = mysql_query("SELECT * FROM link WHERE code = '".$id ."'");
while($row = mysql_fetch_array($result)){$url = $row['url'];$visit = $row['visit'];$addvisit = $visit + 1;mysql_query("UPDATE link SET visit='$addvisit' WHERE code='$_GET[id]'", $con);
header("Location: $url");
}?>
خوب اول پی اچ پی رو باز می کنیم

در خط بعدی فایل config.php رو فراخوانی می کنیم

در خط بعدی داده GET فیلد id رو ذخیره می کنیم

در خطوط بعدی با دیتابیس ارتباط برقرار می کنیم

در خط:


کد:
$result = mysql_query("SELECT * FROM link WHERE code = '".$id ."'");
تمام داده های دیتابیسی که code آنها مساوی $id باشد را انتخاب می کنیم ( یعنی فقط یک رکورد چون از ایجاد رکورد های هم کد در جلسه قبلی جلوگیری کردیم )

در پاراگراف:


کد:
while($row = mysql_fetch_array($result)){$url = $row['url'];$visit = $row['visit'];$addvisit = $visit + 1;mysql_query("UPDATE link SET visit='$addvisit' WHERE code='$_GET[id]'", $con);
header("Location: $url");
}
ابتدا یک حلقه ایجاد می کنیم تا متغییری تعریف بشه برای داده های رکوردی که ما انتخاب کردیم

در خط های بعدی:


کد:
$url = $row['url'];$visit = $row['visit'];
اطلاعات داده url در دیتابیس رو در متغییر $url و همچنین اطلاعات داده visit در دیتابیس رو در متغییر $visit ذخیره می کنیم

و در متغییر:


کد:
$addvisit = $visit + 1;
$visit رو به علاوه 1 می کنیم تا یک عدد به بازدید اضافه بشه

حالا باید این بازدید جدید رو اضافه کنیم

در کد:


کد:
mysql_query("UPDATE link SET visit='$addvisit' WHERE code='$_GET[id]'", $con);
رکوردی که code اون مساوی اطلاعات داده GET فیلد id هستش visit رو تغییر می دیم به $addvisit که همون visit قبلی به علاوه 1 بود در این حالت به بازدید یکی اضافه میشه

( بخش بازدید رو بعدا میسازیم )

و در نهایت با کد زیر:


کد:
header("Location: $url");
کاربر رو به $url که همون متغییری هستش که از اطلاعات داده url دیتابیس توش ذخیره شده انتقال میدیم

و حلقه رو می بندیم

خوب حالا در این حالت برای لینک های کوتاه شده باید به صورت زیر کاربر بره به لینک تا انتقال پیدا کنه


کد:
www.you.com/direct.php?id=ex
که این اصلا به لینک کوتاه شده شبیه نیست!

حالا باید کاری کنیم وقتی کاربر لینک


کد:
www.you.com/ex
رو درخواست کرد به صورت خودکار به لینک


کد:
www.you.com/direct.php?id=ex
انتقال داده بشه

حالا یک فایل به نام .htaccess ایجاد کنید ( توجه کنید این فایل اسم نداره و فقط پسوند داره )

و داخل اون کد زیر رو کپی کنید: ( چون خودمم از آموزش قبلی کپی کردم :p )


کد:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(\w+)$ ./direct.php?id=$1
خوب اینم آموزش این بخش

تا الان یک سیستم کامل کوتاه کننده لینک دارید

در بخش های بعدی امکانات اضافه رو یاد می دم اضافه کنید

تا بخش بعدی منتظر باشید

 

پیوست‌ها

  • sql.zip
    664 بایت · بازدیدها: 4
آخرین ویرایش توسط مدیر:

adnan magic

تازه وارد
خوب حالا رسیدیم به بخش آمار سیستم

در ضمن اینو بگم اگه می خواهید سیستم آمار به صورت رایگان باشه در فایل add.php این خط رو پیدا کنید:


کد:
mysql_query("INSERT INTO `link`(`code`, `url`, `statactive`, `visit`) VALUES ('$fcode','$_GET[url]','0','0')");
و کد زیر را جایگزین آن کنید:


کد:
mysql_query("INSERT INTO `link`(`code`, `url`, `statactive`, `visit`) VALUES ('$fcode','$_GET[url]','1','0')");
خوب حالا بریم سر فایل statdirect.php که دومین فرم ارسالی صفحه اصلی به این صفحه ارسال میشه

کد فایل:


کد:
<?php$directlink = $_POST['sh'];header("Location: stat.php?id=$directlink");?>
توضیح زیادی نداره

داده POST فیلد sh رو در متغییر $directlink ذخیره می کنیم و کاربر رو به لینک

stat.php?id=$directlink هدایت می کنیم

خوب حالا برسیم سر اصل مطلب! فایل stat.php !

کد فایل:


کد:
<?phperror_reporting (0);include_once('config.php');if($_GET[m]=="1"){$mas = 'با تشکر سیستم آمار این شناسه فعال شد<hr><br>';}?><!DOCTYPE HTML><html dir="Rtl"><head><title><?php echo "$webtitle"; ?> - بخش آمار</title><meta charset="utf-8" /><link rel="stylesheet" href="style.css" type="text/css" media="screen" /></head><body><center><?php$con = mysql_connect("$dbaddress","$dbusername","$dbpassword");if (!$con)  {  die('Could not connect: ' . mysql_error());  }
mysql_select_db("$dbname", $con);$sql = "SELECT code FROM `link`WHERE `code` = '$_GET[id]' ";$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);$TotalResults = mysql_num_rows($SearchResult);if($TotalResults=="0"){echo 'لینکی به این شناسه وجود ندارد';}else {
$result = mysql_query("SELECT * FROM `link` WHERE `code` = '$_GET[id]' ");
while($row = mysql_fetch_array($result)){$visit = $row['visit'];$url = $row['url'];$code = $row['code'];if($row['statactive']=="1"){echo "$mas";echo '<div align="right">';echo 'تعداد بازدید ها از این لینک: ';echo "$visit";echo '<br>';echo 'لینک متصل شده به این لینک کوتاه شده: ';echo "$url";echo '<br>';echo 'لینک کوتاه شده: ';echo "$local/$code";echo '<hr>';echo 'کد های آماده:<br>کد یک:<br>نمونه: <a href="' . $local . '/' . $code . '" target="_blank">کلیک کنید</a><br>کد:<br><textarea cols="50"><a href="' . $local . '/' . $code . '" target="_blank">کلیک کنید</a></textarea>';
echo '</div>';mysql_close($con);
}else {echo 'آمار این شناسه غیر فعال است جهت فعال سازی اطلاعات زیر را تکمیل و روی فعال سازی آمار کلکیک کنید. پس از پرداخت آمار به صورت خودکار فعال خواهد شد<br><br><form action="statactive.php" method="GET"><input type="hidden" value="' . $_GET[id] . '" name="id"><input type="text" name="email" placeholder="ایمیل"><br><input type="text" name="telephone" placeholder="تلفن همراه"><br><input type="submit" value="فعالسازی آمار"></form>';}
}
}?></center></body></html>
خوب بعد از شروع پی اچ پی می گیم که اگه اروری هم بود نمایش نده ( چون متغییر هایی داریم که خالی هم می مونه )

بعد فایل config.php رو فراخوانی می کنیم

بعدش هم HTML هستش که توضیح نمی دم ( فکر کنم همه بلد باشن :D )

در بخش PHP بعدی با دیتابیس ارتباط برقرار می کنیم

و در پاراگراف:


کد:
$sql = "SELECT code FROM `link`WHERE `code` = '$_GET[id]' ";$SearchResult = mysql_query($sql) or die(mysql_error(). "<br />SQL: ". $sql);$TotalResults = mysql_num_rows($SearchResult);
if($TotalResults=="0"){echo 'لینکی به این شناسه وجود ندارد';}
چک می کنیم که چند تا از این شناسه ها وجود داره

و در صورتی که مساوی 0 بود پیغامی رو چاپ کنه

و در بخش:


کد:
else {
$result = mysql_query("SELECT * FROM `link` WHERE `code` = '$_GET[id]' ");
while($row = mysql_fetch_array($result)){$visit = $row['visit'];$url = $row['url'];$code = $row['code'];if($row['statactive']=="1"){echo "$mas";echo '<div align="right">';echo 'تعداد بازدید ها از این لینک: ';echo "$visit";echo '<br>';echo 'لینک متصل شده به این لینک کوتاه شده: ';echo "$url";echo '<br>';echo 'لینک کوتاه شده: ';echo "$local/$code";echo '<hr>';echo 'کد های آماده:<br>کد یک:<br>نمونه: <a href="' . $local . '/' . $code . '" target="_blank">کلیک کنید</a><br>کد:<br><textarea cols="50"><a href="' . $local . '/' . $code . '" target="_blank">کلیک کنید</a></textarea>';
echo '</div>';mysql_close($con);
}else {echo 'آمار این شناسه غیر فعال است جهت فعال سازی اطلاعات زیر را تکمیل و روی فعال سازی آمار کلکیک کنید. پس از پرداخت آمار به صورت خودکار فعال خواهد شد<br><br><form action="statactive.php" method="GET"><input type="hidden" value="' . $_GET[id] . '" name="id"><input type="text" name="email" placeholder="ایمیل"><br><input type="text" name="telephone" placeholder="تلفن همراه"><br><input type="submit" value="فعالسازی آمار"></form>';}
}
}
در صورتی که شرط بالا لغو بشه یه بخش جدید باز میشه که در اون حلقه ای برای نمایش اطلاعات دیتابیس باز میشه و در داخل حلقه اطلاعات رو در متغییر هایی ذخیره می کنیم

و دوباره شرطی رو اجرا می کنیم


کد:
if($row['statactive']=="1"){echo "$mas";echo '<div align="right">';echo 'تعداد بازدید ها از این لینک: ';echo "$visit";echo '<br>';echo 'لینک متصل شده به این لینک کوتاه شده: ';echo "$url";echo '<br>';echo 'لینک کوتاه شده: ';echo "$local/$code";echo '<hr>';echo 'کد های آماده:<br>کد یک:<br>نمونه: <a href="' . $local . '/' . $code . '" target="_blank">کلیک کنید</a><br>کد:<br><textarea cols="50"><a href="' . $local . '/' . $code . '" target="_blank">کلیک کنید</a></textarea>';
echo '</div>';mysql_close($con);
}
که اگه statactive مساوی 1 باشه در دیتابیس اطلاعات زیر رو نشون بده

اگه توجه کردید باشید ما متغییر $mas رو نشون می دیم که در بالای صفحه نوشتیم در صورتی که اطلاعات داده GET فیلد m مساوی 1 باشه $mas مساوی با یک پیغام باشه که این 1 زمانی ارسال میشه به این صفحه که از پرداخت آنلاین کاربر برگشته باشه

و در پاراگراف زیر:


کد:
else {echo 'آمار این شناسه غیر فعال است جهت فعال سازی اطلاعات زیر را تکمیل و روی فعال سازی آمار کلکیک کنید. پس از پرداخت آمار به صورت خودکار فعال خواهد شد<br><br><form action="statactive.php" method="GET"><input type="hidden" value="' . $_GET[id] . '" name="id"><input type="text" name="email" placeholder="ایمیل"><br><input type="text" name="telephone" placeholder="تلفن همراه"><br><input type="submit" value="فعالسازی آمار"></form>';}
در صورتی که شرط لغو بشه اطلاعاتی رو نشون بده

که در این اطلاعات یک فرم هستش

که در فیلد اول اون خود شناسه ارسال میشه

و در فیلد های بعدی به ترتیب ایمیل و شماره تلفن خواسته میشه که به درگاه زرین پال متصل بشه

در جلسه بعدی فایل های اتصال به زرین پال و فعالسازی اتوماتیک آمار رو براتون آموزش میدم

تا جلسه بعدی جان من یکی چند تا تشکر بکنید

وگرنه ادامه نمی دم
biggrin.gif


در ضمن دوستان لطفا امکاناتی که می خواهید به این سیستم اضافه کنم رو به صورت پیغام خصوصی برام ارسال کنید تا نظم تاپیک به هم نخوره

من خودم یک ایده دارم که بشه برای وبلاگ ها و وبسایت ها کد html داده بشه تا بتونن یک باکس ایجاد لینک کوتاه شده برای وبلاگشون ایجاد کنن

خیلی ممنون

 
آخرین ویرایش توسط مدیر:

adnan magic

تازه وارد
خوب جلسه قبل از اونجایی موندیم که قرار بود براتون بخش پرداخت آنلاین برای فعالسازی آمار شناسه ها بزارم ( که البته کسانی که آمار رو رایگان گذاشتن این بخش رو بی خیال بشن )

خوب وقتی آمار غیر فعال هستش فرمی میاد که به صفحه statactive.php ارسال میشه که در این صفحه پرداخت انجام می گیره

قبل از هر چیزی باید بگم این سیستم برای پرداخت از no soap استفاده می کنه

و نکته بعدی اینکه فایل های زیر رو دانلود کنید و در همان پوشه اصلی ( محلی که این اسکریپت رو دارید میسازید ) آپلود کنید این فایل ها برای زرین پال هستش.

You must be registered for see images attach


خوب حالا بریم سر فایل statactive.php

کد فایل:


کد:
<?phpinclude_once('config.php');    require_once('lib/nusoap.php');$id = $_GET['id'];$email = $_GET['email'];$telephoe = $_GET['telephone'];        $MerchantID = $zarinpalmerchant ;  //Required    $Amount = $vipprice ; //Amount will be based on Toman  - Required    $Description = "فعالسازی شناسه $id";  // Required    $Email = $email; // Optional    $Mobile = $telephone; // Optional    $CallbackURL = "$local/verify.php?id=$id";  // Required            // URL also Can be https://ir.zarinpal.com/pg/services/WebGate/wsdl    $client = new nusoap_client('https://de.zarinpal.com/pg/services/WebGate/wsdl', 'wsdl');     $client->soap_defencoding = 'UTF-8';    $result = $client->call('PaymentRequest', array(                                                    array(                                                            'MerchantID'     => $MerchantID,                                                            'Amount'         => $Amount,                                                            'Description'     => $Description,                                                            'Email'         => $Email,                                                            'Mobile'         => $Mobile,                                                            'CallbackURL'     => $CallbackURL                                                        )                                                    )    );        //Redirect to URL You can do it also by creating a form    if($result['Status'] == 100)    {        Header('Location: https://www.zarinpal.com/pg/StartPay/'.$result['Authority']);    } else {        echo'ERR: '.$result['Status'];    }?>
بعد از بازکردنن پی اچ پی فایل config.php رو فراخوانی می کنیم

و در پاراگراف:


کد:
$id = $_GET['id'];$email = $_GET['email'];$telephoe = $_GET['telephone'];
سه عدد داده GET رو در متغییر ها ذخیره می کنیم

که id همونی آی دی هستش که در فرم قبل ارسال شده بود

و دو متغییر بعدی نیز از فرم ارسال شده است که توسط کاربر پر شده است

کد های بعدی مربوط به زرین پال هستش

فقط ما در برابر داده های ارسال متغییر هایی رو گذاشتیم که تو فایل config.php ذخیره کردیم

و برای بازگشت از:


کد:
$local/verify.php?id=$id
استفاده کردیم که $local در فایل config.php آدرس اسکریپت هستش و $id هم همونی آی دی ای هستش که در این فایل ذخیره شد و در هنگام بازگشت به صورت داده ی GET خواهد بود

خوب حالا بریم سر فایل verify.php که مهمترین انجام دهنده فعالسازی آمار این فایل هستش

کد فایل:


کد:
<?phpinclude_once('config.php');    require_once('lib/nusoap.php');$id = $_GET['id'];        $MerchantID = $zarinpalmerchant ;    $Amount = $vipprice ; //Amount will be based on Toman    $Authority = $_GET['Authority'];        if($_GET['Status'] == 'OK'){        // URL also Can be https://ir.zarinpal.com/pg/services/WebGate/wsdl        $client = new nusoap_client('https://de.zarinpal.com/pg/services/WebGate/wsdl', 'wsdl');         $client->soap_defencoding = 'UTF-8';        $result = $client->call('PaymentVerification', array(                                                            array(                                                                    'MerchantID'     => $MerchantID,                                                                    'Authority'      => $Authority,                                                                    'Amount'          => $Amount                                                                )                                                            )        );                if($result['Status'] == 100){$con = mysql_connect("$dbaddress","$dbusername","$dbpassword");if (!$con)  {  die('Could not connect: ' . mysql_error());  }
mysql_select_db("$dbname", $con);
$result = mysql_query("SELECT * FROM link WHERE code = '".$id ."'");
while($row = mysql_fetch_array($result)){mysql_query("UPDATE link SET statactive='1' WHERE code='$_GET[id]'", $con);
header("Location: stat.php?id=$id&m=1");
}        } else {            echo 'Transation failed. Status:'. $result['Status'];        }
    } else {        echo 'Transaction canceled by user';    }    
?>
بعد از بازکردن پی اچ پی فایل config.php رو فراخوانی می کنیم و سپس داده ای که در هنگام برگشت به صورت GET هستش رو در متغییر ذخیره می کنیم

و بقیش دوباره مربوط به زرین پال و متغییر های ذخیره شده در فایل config.php هستش

ما فقط با بخش تایید پرداخت کار داریم و با بقیه کاری نداریم البته شما می تونید تغییراتی توش هم بدید

خوب در بخش تایید وقتی پرداخت تایید شد این بخش نشون داده و یا عمل می کنه

در اول با دیتابیس ارتباط برقرار می کنیم

و با کد:


کد:
$result = mysql_query("SELECT * FROM link WHERE code = '".$id ."'");
رکوردی که code اون مساوی با $id همون متغییری که ذخیرش کردم رو انتخاب می کنیم

خوب حلقه رو باز می کنیم ( البته اگه باز نکینم هم میشه ولی اگه بخواهید از اطلاعات داخل دیتابیس استفاده کنید باید از این حلقه استفاده کنید )

و در خط:


کد:
mysql_query("UPDATE link SET statactive='1' WHERE code='$_GET[id]'", $con);
statactive رکوردی که code اون مساوی داده GET فلید id باشه رو به 1 تغییر میدیم که در این صورت آمار فعال میشه

و در خط:


کد:
header("Location: stat.php?id=$id&m=1");
کاربر رو به stat.php?id=$id&m=1 ارسال می کنیم که $id همون متغییری هستش که ذخیره کرده بودیم و m رو هم 1 ارسال می کنیم

در فایل stat.php پیغامی هم برای متغییر m که مساوی 1 باشه تعیین کردیم

خوب تا اینجا یک سیستم کامل کوتاه کننده لینک داریم

ولی می مونه پنل مدیریت که اونو هم به زودی میزارم

 

adnan magic

تازه وارد
خوب فایل اسکریپتی که تا اینجا انجام دادیم رو قرار میدم



اگر بخواهید واقعا یاد بگیرید از روی آموزش ها خودتون بسازید و اگر مشکلی داشتید فایل رو دانلود کنید و از روی اون مشکل خودتون رو حل کنید

 

پیوست‌ها

  • index.zip
    157.1 کیلوبایت · بازدیدها: 30

william

کاربر عضو
اسکریپت شما یک سری مشکل داره. مثلا خیلی راحت دچار SQL Injection میشه.

 

adnan magic

تازه وارد
درود خیلی ممنون بابت نظرتون

و خوشحال میشم راهنمایی هاتون رو در مورد این مشکل بشنوم

 

adnan magic

تازه وارد
دوستان می خوام پنل مدیریت رو آموزش بدم

ولی اگه امکاناتی در نظر دارید تا به خود سیستم یا پنل مدیریت اضافه بشه بگید

امکان پنل مدیریت:

اضافه کردن لینک

ویرایش لینک ها ( فعال و غیر فعال کردن آمار - حذف - ویرایش اطلاعات )

حذف تمامی لینک ها ( به صورت یکجا )

جستجو بر اساس ف ی ل ت ر های مختلف ( شناسه - لینک متصل - فعال/غیر فعال بودن آمار - تعداد بازدید )

شما هم اگه امکاناتی مد نظرتون هستش بگید تا اضافه کنم

 

william

کاربر عضو
شما اطلاعاتی که از خارج برنامه وارد میشه رو ولیدیت نمیکنید. و این میتونه مشکل ساز باشه!

مثلا کد زیر رو ببینید:


کد:
mysql_query("UPDATE link SET statactive='1' WHERE code='$_GET[id]'", $con);
اگه من در پارامتر URL مقدار id رو برابر مقدار زیر قرار بدم، چی میشه؟


کد:
' OR ''='
statactive همه لینک های دیتابیس شما برابر 1 میشه.


کد:
mysql_query("UPDATE link SET statactive='1' WHERE code='' OR ''=''", $con);
 

adnan magic

تازه وارد
درود دوست عزیز

این مشکل وجود نداره

چون در بین دو تا ' قرار گرفته

و این به معنای این هستش که خود این کلمه و نه عملکرد اون

و در ضمن من امتحان کردم وقتی این کد رو میزنید بعد از بازگشت صفحه پرداخت سفید میشه و نمایش داده نمیشه و هیچ عملکردی تو دیتابیس انجام نمیده!

ولی بازم ممنون به خاطر گزارشتون

 
آخرین ویرایش توسط مدیر:
بالا