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

saalek110

Well-Known Member
صفحه ۳۲:

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

قسمتهای مدیریت را هم تلاش می کنم کار کنیم.
 

saalek110

Well-Known Member
فایل دیلت را هم ساختم با کویری زیر:

PHP:
$sql = "DELETE FROM posts WHERE number=$post_number";

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

PHP:
mysqli_set_charset($conn, "utf8");     // yaftane topici ke bodim
$sql = "SELECT * FROM posts WHERE  number=$post_number";
$result = mysqli_query($conn ,$sql );
while($info = mysqli_fetch_array( $result ))
        {
             $topic_number=$info['topic'];
        }//while

این شد چهارمین فایلی که پیام میده:

Screenshot_16.png
 

saalek110

Well-Known Member
موقع نمایش پست ستون user را هم بخوان . بعد ببین سسیون خواننده با اون برابره یا نه. اگر برابر باشه یعنی اون پست متعلق به خواننده است. و لینک به فایل دیلت یا ادیت را بهش بده.

PHP:
$str="delete";
     if ( $_SESSION["username"] == $user )   
           echo'<a href="delete_post.php?number='.$post_number.'">'.$str.'</a>';
 

saalek110

Well-Known Member
داخل فایل دیلت و ادیت را هم این چک را بکن:

PHP:
if ( $_SESSION["username"] == $user )   //aya khode saheb posteh
{// Auth
 if(  !   isset($_POST['act']))
{
     ....
         .....
         .....
         ......

سلب مسولیت:
سالک: اینها ساخته های ذهن من است ، از جای معتبری نیست ، تضمین امنیت ندارد.

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

یعنی آماده باش که هک بشی و برای بعد هک هم برنامه داشته باش.


سالک: من متخصص امنیت نیستم. و نظری دراین مورد ندارم.
 
آخرین ویرایش:

saalek110

Well-Known Member
ادمین هم باید بتواند هر پستی را ادیت و دیلت کند:
PHP:
if ( $_SESSION["username"] == $user  || $_SESSION["username"] == "َAdmin" )   //aya khode saheb posteh
{// Auth
 if(isset($_POST['act'])) 
 {// if action
 

saalek110

Well-Known Member
Div داخل div :

در عکس زیر می بینید زیر اسم هر تالار ، من شرحی اضافه کردم. و اسم هر تالار هم داخل کادری است که در یک محوطه رنگی قرار دارد.
اون محوطه رنگی ، یک div است و اسم تالار هم یک div است و شرح تالار هم یک div است.

Screenshot_۲۰۲۴-۰۹-۱۱_۰۶۴۶۳۲.jpg

PHP:
                   echo"<div id='forum'>";



    echo"<div id='forum_inner'>";
echo"<a href='http://saalek110.is-great.net/forum/forum.php?number=$forum_number'>".$forum_name."</a>";

         echo"<div id='forum_desc'>";
              echo $forum_sharh;
         echo"</div'>";

    echo"</div'>";
                     echo"</div'>";
در بالا ، کدش را گذاشتم. و مسلما ۳ تا css داره هر div که من بالای صفحه css ها را می نویسم. بین همون تگ استیل و هد.
 

saalek110

Well-Known Member
چاپ div اگر شرایطی برقرار بود:

PHP:
if ($user=="hamid")
{
    echo"<div id='user_darajeh'>";
    echo"Active";
    echo"</div>";
}

در کد بالا ، اگر یوزر حمید باشه ، زیر اسمش نوشته میشه Active.
نکته اش اینه که باز و بسته شدن div هم در کروشه گذاشته شده. اگر این طوری ننویسیم ، برای همه غیرحمید ها یک کادر خالی ایجاد خواهد شد و این خوب نیست. کد زیر اشتباه است:

PHP:
    echo"<div id='user_active'>";


if ($user=="hamid")  echo"Active";
   

    echo"</div>";

چون برای تمام کاربران یک کادر خالی ایجاد میشه و به یک نفر حمید لقب اکتیو داده میشه. اون کادرهای خالی زیبا نیست.

کلا منظورم اینه ادوات بصری و چاپ را هم باید کروشه داخل شرط گذاشت تا اگر شرط برقرار نبود چیزهای قاب و حاشیه خالی چاپ نشود،
 

saalek110

Well-Known Member
طراحی صفحه خودتان در فروم من:

کسانی که دوست دارند در فروم من عضو شوند و صفحه home خود را خودشان طراحی کنند ، اقدام کنند.
اگر کسی دوست داره بیاید عضو بشود. تا تمهیدات کار را فراهم کنیم.

در تالار رویداهای فروم این را اعلام کردم:


با این کار ، html تمرین می کنید.

حرفه ای ها ، هم بیایند تا به ما چیز یاد بدهند.
 
آخرین ویرایش:

saalek110

Well-Known Member
تگ کد را ساختم.از phpbb یاد گرفتم نمونه اش:


برای ساختش در ادیتور این را بیاندازید:
PHP:
[code]
[/CODE]

.........کد بسته اش افتاده بیرون ، شاید با تگ ها فروم مجیدآنلاین تداخل کرده

بعدش در فایل replace به جای تگ ها اینها را بزارید:
PHP:
<pre><code>

</code></pre>

PHP:
     $post=str_replace("[code]","<div id='code-kadr'><pre><code>",$post);
     $post=str_replace("
","</code></pre></div>",$post);
[/CODE]

باز هم تداخل کرد با تگ های فروم مجید آنلاین و خط دومش ریخت بیرون. از روی خط اول بفهمید خط دوم چیه.

یک div هم در css خودتون برایش بسازید و direction را و text-align را درش تنظیم کنید. شاید هر دو نیاز نباشه ، خودتان چک کنید.
CSS:
                direction: ltr;
                 text-align: left;

یک کادری هم دورش باشه و رنگ پس زمینه متفاوت هم فکر کنم داشته باشه بهتره:



البته تگ رنگ است کدهای phpbb ، در مجیدآنلاین که قالب بالتن است ، شاید با رگولار اکسپرژن کلمات را رنگی می کنند.
CSS:
        background-color:rgba(250,190,150,0.6);
        border:1px solid #eeff22;
        border-radius:5px;
 
آخرین ویرایش:

saalek110

Well-Known Member
خنثی سازی علامت کوچکتر و بزرگتر:

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



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

در اینجا:


گویا تابع htmlspecialchars این کارو انجام میده.


PHP:
& (ampersand)    &amp;
" (double quote)    &quot;, unless ENT_NOQUOTES is set
' (single quote)    &#039; (for ENT_HTML401) or &apos; (for ENT_XML1, ENT_XHTML or ENT_HTML5), but only when ENT_QUOTES is set
< (less than)    &lt;
> (greater than)    &gt;

مثال از همین لینک که بالاتر دادم:
PHP:
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

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

saalek110

Well-Known Member
یادآوری اینکه در فیلتر محتویات همه ورودی های سایت من این ۳ تابع را قرار دادم:

PHP:
            $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);

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

برای درمان و علاجش اومدم الان این خط را انتهای فایل str_replace ام اضافه کردم:
PHP:
     $post = htmlspecialchars($post);

ولی کدها ناخوانا شد در فروم و محتوای پستها ریخت به هم. چون احتمالا علامتهای کوچکتر و بزرگتر ، ادوات پست من بودند و با این تابع نابود شدند. پس نباید وقتی ادوات اضافه کردی آخر کار بیای با این تابع نابودشان کنی. مثل مثلا کادر دور کدها ، از بین رفته بود ، چون یک div بود و دو طرفش علامتهای بزرگتر و کوچکتر داشت.

پس فعلا اون یک خط کد را از انتهای فایل str_replace برداشتم تا بعدا بفهمم راه حل چیه.

فایل str_replace موقع نمایش اکلادها را تبدیل به کوچکتر و بزرگتر می کنه تا عملکرد html ئی داشته باشه و به پستها شکل و حالت بدهد.
کدهایی هم که کاربران در پستها می زنند ، قبلا با تابع htmlspecialchars خنثی سازی شده. ولی چرا وقتی دوباره خنثی سازی می کنیم از شکل درمیاد؟
چرا در مجیدآنلاین وقتی سورس را می بینیم در کدهای کاربران علامت کوچکتر بزرگتر نیست ولی در نمایش انتهایی علامتهای کوچکتر و بزرگتر هست؟

سورس تاپیک فروم خودم را هم دیدم، این لینکشه:

view-source:http://saalek110.is-great.net/forum/topic.php?number=62

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

و شاید علامت کوچکتر و بزرگتر که فایل str_replace من اضافه می کنه ، لازم است و نمیشه خنثی سازی بشه.
موردهایی بوده باعث دردسر شده ، شاید باید بروم اون مورد های خاص را بررسی کنم. و نباید کلا بگم علامت کوچکتر و بزرگتر نباید در ساماندهی پستها استفاده بشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
افزودن ستون زمان به تاپیک ها:

در فرومها ، تاپیک جدید و قدیم داریم.
پس من یک ستون تایم به تاپیک اضافه کردم و در فایل create post که محل ایجاد پست است ، گفتم تایم تاپیک مربوطه را آپدیت کند.

SQL:
$sql="update topics SET time=$my_time WHERE number=$the_topic_number";

ورودی فایل create post ، محتوای پست و شماره تاپیک است. پس در آپدیت تایم تاپیک خود مشکلی ندارد.

در فایل create post داریم:

PHP:
$my_time=time();

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

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

Screenshot_۲۰۲۴-۰۹-۱۲_۱۵۳۵۴۲.jpg
 
آخرین ویرایش:

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

بالا