سایت خود را بسازید ، به روش saalek110

saalek110

Well-Known Member
جدول users در دیتابیس فعلا ۳ ستون داره.
طبق معمول ستون اول number که تیک A.I را بزنید. نوعش int است.

ستون دوم: ستون username
ستون سوم‌: ستون password

Collation ستون username را utf8_persian_ci انتخاب کنید. و نوعش varchar و تعداد کاراکتر به تعداد حروف اسم دوستانتان مثلا ۴۰ تا.

ستون password هم varchar و ۴۰ تا. و collation اون مهم نیست. پسورد فارسی نزنید.
پسورد به شکل md5 در دیتابیس ذخیره میشه. شکل زیر:
Screenshot_۲۰۲۴-۰۱-۲۶_۰۹۴۸۳۳.jpg
و ۳۲ کاراکتری است که من گفتم ۴۰ کاراکتر برای ستونش در نظر بگیرید.
پس ادمین نمی تواند پسورد دیگران را در جدول دیتابیس ببیند.

جدول من:
Screenshot_۲۰۲۴-۰۱-۲۶_۰۹۵۶۱۵.jpg
 
آخرین ویرایش:

saalek110

Well-Known Member
فایل login_center.php

PHP:
<?php
session_start();
?>
<html>

<head>
  <title>login_center</title>
</head>
       <?php
     require "../base/ccoonn.php";
      include"functions/functions.php";
  echo'<body>';


 echo"<center>";
echo"<br><br><br><br><br>";
$user_name =test_input( $_POST["username"] );
$user_pass =test_input( $_POST["password"]  );


$user_pass=md5($user_pass);



$mysql_qry = "select * from users where username= '$user_name' and password like '$user_pass' ";


echo"<br>";

$result = mysqli_query($conn ,$mysql_qry);

if(mysqli_num_rows($result) > 0) {
  echo "<h1>";
 echo "<center><br><br>";
 writeMsg(11); //login sucessfull
 echo "<br>";
 $temp=writeMsg(4);  //prease click to go first page
 echo "<br>";
  echo " <a href='../index.php'>$temp</a>";
echo "<br>";
 echo "Please go to <a href='../index.php'>first page</a>";
 //=================================
$_SESSION["username"] =$user_name;
 
//----- cookie --------
setcookie("sth", $user_name, time() + (86400 * 120), "/"); // 86400 = 1 day
 
//  --- cookie ------
} // result>0
//======================================================
else {
echo "<h3>login not success</h3>";  echo "<br>";
unset($_SESSION['username']);
}
//--------------------------


  echo "</h1>";
 echo "</center>";




function test_input($data) {
  $data = trim($data);
    $data = stripslashes($data);
      $data = htmlspecialchars($data);
        return $data;
        }
       
?>

</body>
</html>
 

saalek110

Well-Known Member
می توانید خودتان یک ستون ایمیل به جدول user اضافهکنید تا اگر کسی پسوردش را فراموش کرد ، به شکل دستی برایش ارسال کنید. در صفحه ثبت نام می توانید خودتان این توصیه را بکنید.
 

saalek110

Well-Known Member
فایلlogin_center.php






PHP:
<?php
session_start();
?>
<html>

<head>
  <title>login_center</title>
</head>
       <?php
     require "../base/ccoonn.php";
      include"../functions/functions.php";
  echo'<body>';

 echo"<center>";
echo"login center";
echo"<br><br><br><br><br>";

$user_name =test_input( $_POST["username"] );
$user_pass =test_input( $_POST["password"]  );


$user_pass=md5($user_pass);



$mysql_qry = "select * from users where username= '$user_name' and password like '$user_pass' ";


echo"<br>";

$result = mysqli_query($ccoonn ,$mysql_qry);

if(mysqli_num_rows($result) > 0) {
  echo "<h1>"; 
 echo "<center><br><br>";
 $str=writeMsg(15); //login sucessfull
 echo $str;
 echo "<br>"; 
 $str=writeMsg(16);  //prease click to go first page
  echo $str;

 echo "<br>";
  echo " <a href='../index.php'>$temp</a>";
echo "<br>";
 echo "Please go to <a href='../index.php'>first page</a>";
 //=================================
$_SESSION["username"] =$user_name;
 
//----- cookie --------
setcookie("sth", $user_name, time() + (86400 * 120), "/"); // 86400 = 1 day
 
//  --- cookie ------
} // result>0
//======================================================
else {
echo "<h3>login not success</h3>";  echo "<br>";
unset($_SESSION['username']);
}
//--------------------------


  echo "</h1>";
 echo "</center>";




function test_input($data) {
  $data = trim($data);
    $data = stripslashes($data);
      $data = htmlspecialchars($data);
        return $data;
        }
        
?>

</body>
</html>
 
آخرین ویرایش:

saalek110

Well-Known Member
فایل ثبت نام:
PHP:
<!DOCTYPE html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="rtl">
<head>
<title>Register</title>
</head>

       <?php
     require "../base/ccoonn.php";
      include"../functions/functions.php";
    echo '<body>';
      ?>




 <form id='myform' action="<?php echo $_SERVER['PHP_SELF']; ?>"  method = 'POST'>
<?php


echo "<br><br><br>";
echo "<h1>";

//======================================
echo "<center>";  // table center
echo "<table border=1>";   //==========  form   ========
echo "<tr>";
echo "<td>";
echo "<center>";  // ..........................bb
  echo"<center>";
  echo"name:<input type='text' name='name'><br>";
  echo"password: <input type='text' name='password'><br>";

  echo" <center><input type='submit' name='action'> </center>";
  echo"</form>";
echo "</center>";  // ..........................bb
echo "</td></tr>";
echo "</table >";   //=============================================
echo "</center>";  // table center
echo "<br>";

//========================================
echo "</h1>";  //ooooooooo

//---------------------------------------------------
 if(isset($_POST['action']))   // add one text at end
 {//action
 $name =test_input( $_POST["name"] );
$password =test_input( $_POST["password"]  );
 

 if (empty($name)   ) { //if empty
     echo"<center><h1><span style='color:red'>bayad yek naam vared konid</span></h1></center>";
     $error=1;
                      echo "<meta http-equiv='refresh' content='10'>";
                  
                        } //if empty

 
if (empty($password)) {//if empty
            echo"<center><h1><span style='color:red'>bayad yek password vared konid</span></h1></center>";
    $error=1;
                      echo "<meta http-equiv='refresh' content='10'>";
                             }//if empty
 
                
 $sql = "SELECT * FROM users WHERE username='$name' LIMIT 1";
   $result = mysqli_query($ccoonn ,$sql);
   $user = mysqli_fetch_assoc($result);
 
  if ($user) { // if user exists
    if ($user['username'] === $name) {
         echo"<center><h1><span style='color:red'>in naam  vojod darad.naame digari entekhab konid.</span></h1></center>";
         $error=1;
         echo "<meta http-equiv='refresh' content='10'>";
    }

  }// if exsist
 


  if ( $error==0)
 {//error 0
   $password=md5( $password);
  $sql = "INSERT INTO `users` (`username`, `password`) VALUES ('$name','$password')";
 $result = mysqli_query($ccoonn ,$sql);
 echo "<center><h1>--------------------------------</h1></center><br>";
 echo"<center><h2>";
writeMsg(7); // now you can do login.
echo" you can login now";
echo"</h2></center>";
   echo "<center><h1>naam= ".$name."</h1></center>";
    echo "<center><h1>password=  makhfi</h1></center>";

     echo "<center><h1>";  echo "<a href='login.php'>login</a>"; echo "</h1></center>";
}//erro 0

 }//action
function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
         return $data;
                           }
                                  
?>


</body>
</html>

شرح کد:
دو تیکه کد که می آید نام و پسورد را بررسی می کند ، اگر خالی باشد تذکر می دهد.
تکه بعدی امی رود دیتابیس را دنبال نام پیشنهادی فرل ثبت نام کننده میگردد، تگر این نام در دیتابیس وجود داشته باشد احازه ثبت نام نمی دهد. این کد خیلی مهم است ، وگرنه یکی نفر با نامی که شما ثبت نام گرده اید دوباره ثبت نام می کند و ادمین می شود.

تکه انتهایی اگر متغیر error صفر باشد ، کار ثبت نام و پسورد را در دیتابیس انجام می دهد. متغیر error می بیند در ۳ جا مقدار یک بهش داده شده تا جلوی ثبت نام گرفته شود. فرض کنید ۳ تا بازرس قبل رسیدن فرد به باجه ثبت نام وجود دارند و هر یک خطا ببینید متغیر error را یک می کند. این طرز کد نوشتن ابتکار خودم بود.اگر مشکل واره یک روش دیگه را به کار ببرید.

هر جا فرم و ورودی باشد من تابع test_input را قرار می دهم تا جلوی وارد شدن کاراکترهای مضر گرفته شود. کاراکترهای html می تواند مخرب باشد.

قسمت انتهایی کد یک insert ساده به جدول users است.‌
قبل insert پسورد با تابع md5 به شکل خاص در می آید تا در دیتابیس قابل خواندن نباشد. اگر می خواهید ببینید خاصیت md5چیه در گوگل سرچ کنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
این کد را هم در فایل index.php بعد اینکلودها اضافه کنید:

PHP:
 if (  isset(  $_SESSION["username"] )  )
 {
echo"<center>";
echo"Hi ".$_SESSION["username"];
echo"</center>";
 }//if sess

سه خط اول فایل index.php و login_center.php و تماجی صفحاتی که بعدا به سایت خود اضافه می کنید این ۳ خط باشه:
PHP:
<?php
session_start();
?>
 

saalek110

Well-Known Member
جلسه یا سسیون session :
ایرانی ها تلفظ فرانسوی میگن ، انگلیسی اش سشن است.

در پست قبل گفتیم اول فایل login_center.php و اول فایل index.php و اول همه صفحاتی که به سایت خود خواهید افزود کد زیر را بیافزایید:

PHP:
<?php
session_start();
?>

فایل login_center.php بعد اینکه از یوزر و پسورد شما مطمئن میشه به شما جلسه می دهد یا همان سسیون.. برای همین باید اول تمام صفحات سایت شما این ۳ خط باشه تا بشود جلسه را بررسی کرد.

کد زیر به هر لوگین کرده ای سلام می دهد:
PHP:
if (  isset(  $_SESSION["username"] )  )
 {
echo"<center>";
echo"Hi ".$_SESSION["username"];
echo"</center>";
 }//if sess

ولی ما برای سلام دادن به لوگین کرده ها این همه کار انجام ندادیم...
PHP:
 if ( $_SESSION["username"]== "Admin")
{


}

کد بالا بررسی می کند ببیند ، فردی که در سایت هست Admin هست یا نه.

اگر ادمین باشد دکمه ادیت به او نشان داده می شود.
و همچنین کد بالا را باید به فایلهای new_post.php و edit_post.php. بیافزایید تا فقط شما بتوانید این کارها را بکنید.می توانید کل کدهای اون دو فایل را وسط کروشه های کد بالا قرار دهید ، البته بعد اینکلودها و یک مقدار سلام و علیک مجاز... ولی وقتی به دستکاری ها رسید کدها را در کروشه هایی می زاریم که مال ادمین است.

بهتر است اسم admin اصلا ادمین نباشد. مثلا اسمش را می زاریم bahar ، و می نویسیم:
PHP:
if ( $_SESSION["username"]== "bahar")
{


}

اول با اسم bahar در سایت خود ثبت نام کنید و بعد کد بالا را هر جا می خواهید مختص ادمین باشه اونجا اضافه کنید.
اینکه چرا بهتره اسم‌ ادمین نباشه ، چون هکر احتمال می دهد کاربر admin دسترسی به مدیریت دارد پس اولین تلاش را روی اسم ادمی می کند.
 
آخرین ویرایش:

saalek110

Well-Known Member
پس کد زیر:
PHP:
if ( $_SESSION["username"]== "bahar")
{


}

را دو طرف هر کد حساس بزارید ، مثلا در فایل ادیت پست
یا دو طرف دکمه ادیت در صفحه اول..
این جوری فقط شما دگمه ادیت را می بینید.
و در فایل ادیت پست یا پست جدید کسی جز شما قادر به انجام کاری نیست.
ولی گفتم اول باید با اسم bahar در سایت خود ثبت نام کنید. البته با یک اسم دیگه نه bahar. هر اسمی خودتان دوست دارید و بعدش اون اسم را در کد بالا وارد کنید و این خطوط را جاهای حساس استفاده کنید. کدهای حساس می روند داخل کروشه های کد بالا.
 

saalek110

Well-Known Member
فایل login_center.php علاوه بر دادن سسیون به شما کوکی هم در دستگاه شما ذخیره کرد.
کوکی برای اینه نخواهید دوباره لوگین کنید.
 

saalek110

Well-Known Member
لوگات ، فایل logout.php

PHP:
<?php
session_start();
    session_unset();
    session_destroy();
?>


<html>
<head>
<title>logout</title>
</head>
       <?php
     require "../base/ccoonn.php";
      include "../functions/functions.php";
   
 
  echo'<body>';
   echo "<br>";

   echo"<center><h2>logout</h2></center>";
     

 
  setcookie("sth", "j2", time() + (86400 * 400), "/");

 echo "<br><br>";
   
   
      echo "<h2>"; 
 echo "<center><br><br>";
 $str=writeMsg(18); //logout sucessfull
 echo $str;
 echo "<br>"; 
 
  echo " <a href='../index.php'>$temp</a>";
echo "<br>";
 echo "Please go to <a href='../index.php'>first page</a>";
  echo "</h2>"; 

   
?>


</body>
</html>
اون حروف j2 ساختگی از سمت من است. نشانه لوگات است.‌

کوکی فرض کنید یک اسم داره و یک مقدار...
اسمش را من sth گذاشتم...یک اسم ساختگی است باز، من ساختم..
و مقدارش دا فایل لوگات برابر j2 می کنه...

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

saalek110

Well-Known Member
کد زیر را به صفحه اول می توانید اضافه کنید....اختیاری است.
همان طور که در کد می بینید برای کسانی است که سسیون ندارند یعنی لوگین نکرده اند... شاید بگید خوب بروند لوگین بکنند ... ولی یک راه راحت تر برای لوگین است... کافیه صفحه اول را رفرش کنید تا لوگین اتوماتیک بشوید...
ولی چطوری؟
اگر قبلا لوگین کرده باشید ، من ی کوکی با طول مصرف چند ماهه ثبت کردم... شما درسته لوگین نیستید ولی کوکی در دستگاه شما هست.. کد زیر برای راحتی خودتان و کاربرانی است که زیاد سایت شما سر می زنند..
کار کد زیر اینه بوسیله کوکی دستگاه شما ، شما را اتوماتیک لوگین می گنه و تا ماهها نیاز به لوگین مجدد ندارید....

در فایل logout مقدار کوکی برابر با j2 شد.... کد زیر اگر مقدار کوکی با j2 برابر باشد کار نمی کنه... برای اینه شما بتوانید با اسمی مختلف لوگین و لوگات کنید و تمرین کنید.
کد زیر هم ابتکار خودم است و شاید یک راه عجیب باشه ولی کار می کنه و کار من را ره انداخت.

PHP:
 if ( ! isset(  $_SESSION["username"] )  )   // username enterrrrrrrrrrrrrrrrrrrrrrr
   {  //not login userr noooooooooooooooooooooo
       //================= cookie ===== not login===========
     $cookie_name='sth';
     echo"<br>";

      if(    $_COOKIE[$cookie_name]  =="j2"    )
       {

       echo "shoma logout kardid , ba har esmi mitavanid login konid";
 }
        if(    $_COOKIE[$cookie_name]  !="j2"    )
        {

   
          $_SESSION["username"]=$_COOKIE[$cookie_name];

}

شاید بهتر باشه اون اسم sth را عوض کنید... البته بعد مدتی تمرین و ماهر شدن..باز برای امنیت. مثلا ممکن است کسی شما را به سایت خود دعوت کند و کوکی های دستگاه شما را بخواند و بفهمد مقدار sth برابر majid است. و بیاید در دستگاه خود کوکی با نام sth و مقدار majid بسازد... پس شاید بهتر باشد اسم sth مختص خودتان باشد....برای من هم sth نیست... در آموزش این اسم را استفاده کردم.
شاید بهتر باشه در مورد گوکی مقداری مطلب در گوگل مطالعه کنید. در مورد سسیون هم همی طور. ضرر نداره.
 

saalek110

Well-Known Member
به کسی که لوگین است ، دکمه لوگین را درست نیست نشان دهیم...پس اول سسیون را چک کنید اگر سسیون ست نبود دکمه لوگین را نشان دهید...
PHP:
if (  !isset(  $_SESSION["username"] )  )
 {

Neshan dadane dokmeye login

 }//if not  sess

اون علامت تعجب قبل isset منفی می کنه ، یعنی وقتی سسیون ست نبود...


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

و اگر فردی لوگین هست ، به او دکمه لوگات را نشان دهید:
PHP:
if (  isset(  $_SESSION["username"] )  )
 {
Neshan dadane dokmeye logout
 }//if sess

من ممکن است اینها را در سایتم رعایت نکنم چون می خوام خوانندگان همه چیز را با هم ببینند ، چون سایت من آموزشی است ولی خودتان اینها را رعایت کنید.
 

saalek110

Well-Known Member
تابعی که جدول text را می خونه باید کد uft را داشته باشه، این جوری:



PHP:
function writeMsg( $number) {


global $ccoonn;

    echo"<br>";
    mysqli_set_charset($ccoonn, "utf8");
    
$sql = "SELECT my_text FROM texts WHERE number=$number ";
$result = mysqli_query($ccoonn ,$sql);

   while($info = mysqli_fetch_array( $result ))
    {
  $str=$info['my_text'];
    }
return $str;

}//func

منظورم این خط کد بالا است:
PHP:
   mysqli_set_charset($ccoonn, "utf8");

وگرنه علامت سوال روی سایت نشان داه میشه..
 

saalek110

Well-Known Member
بازدید به ۲۰۰۰ رسید.
چهارشنبه یعنی دو روز پیش بازدید ۱۰۰۰ بود.
در عرض دو روز دو برابر شد.....
خیلی عالیه.

:):):):D

:0::0::0::2:
 

saalek110

Well-Known Member
لیست پوشه ها و فایلهای من:

Screenshot_۲۰۲۴-۰۱-۲۶_۱۴۱۲۰۸.jpg

اون سایت دو فرومه در یک هاست دیگه است و اصلا ربطی به این سایت نداره.
در شکا بالا فایل و پوشه admin را هم می بینید که برنامه بعدی ماست.
 

saalek110

Well-Known Member
فایلهای پوشه login:

Screenshot_۲۰۲۴-۰۱-۲۶_۱۴۱۴۲۸.jpg

یادتون باشه هیچ پوشه ای بدون فایل index.php نباشه. برای امنیت. تا اگر کسی نام پوشه شما را در بروسر وارد کرد لیست بهش نده.

من فایلهای login_center.php و register.php را تست کردم و خوب کار می کنه....
ولی برای ثبت نام اسمهای نزدیک به هم ، یا لوگین اسمهای نزدیک به هم ، باید بررسی بشود...
یک وقت دیگر سعی می کنم کار کنیم. فعلا مباحث دیگر را بزنیم بعدا روی این چیزها کار می کنیم.
 

جدیدترین ارسال ها

بالا