آموزش ساخت CMS (مدیریت محتوا)
#1
Note 
با درود

در این تاپیک قصد داریم آموزش ایجاد و ساخت یک سیستم مدیریت محتوای ساده به زبان PHP همراه با دیتابیس رو به شما آموزش بدیم!

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

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



سطح این آموزش معمولی هست.

مواد لازم:

نرم افزار XAMPP
نرم افزار notepad++
نرم افزار محبوب Dreamweaver



پیش نیاز ها برای درک این آموزش :

آشنایی با CSS و HTML در حد معمولی
آشنایی با دستورات php در حد مبتدی


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

منبع : persianscript.ir

پاسخ
#2
Note 
کد php:
<?php
$hostname 
'localhost';
$dbuser 'root';
$dbpass 'password';
$dbname 'cms';
$persianscript mysql_connect ($hostname$dbuser$dbpass);
mysql_select_db ($dbname$persianscript);

/***  S I T E  S E T T I N G  ***/
$adminuser "admin";
$adminpass "admin";
$title 'سیستم مدیریت محتوا';
$email 'info@persianscript.ir';
$desc 'توضیحات سایت';

?>

ما در 7 خط اول فایل config.php مشخصات دیتابیسمون رو میدیم!

و بعد با استفاده از دستور mysql_connect به دیتابیس متصل میشیم...


در متغیر های adminuser و adminpass میتونید مشخصات ورود به مدیریت رو وارد کنید
در متغیر های title,email,desc اطلاعاتی نظیر عنوان سایت, ایمیل (برای ارسال فرم های تماس به ایمیل),کلمات کلیدی و توضیحات سایت هست. اینها برای فراخوانی در قالب و سیستم بکار میره.

پاسخ
#3
Note 
خب. حالا میریم سراغ ساختن بخش ورود به مدیریت
فایل index.php موجود در پوشه admin رو باز میکنیم. یا اگه قبلا ایجاد نکردید ایجاد کنید

برای ساخت بخش ورود به مدیریت ما با استفاده از سشن ها(جلسه) دسترسی رو برای مدیر ایجاد میکنیم. در اینجا ابتدا یک فرم میسازیم با دو فیلد text و یک دکمه :

[HTML]
<form action="" method="POST">
نام کاربری:<input type="text" name="username" size="20">
<br/>
رمز عبور:<input type="password" name="password" size="20">
<br/>
<br/>
<input type="submit" value=" ورود " name="submit">
</form>
[/HTML]
در این فرم نام کاربری و رمز عبور رو از کاربر میگیرم. و با زدن دکمه submit دوباره مقادیر به همین صفحه ارسال میشه چون تو اون اول action فرم برابر تهی بود

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

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

کد php:
<?php 
session_start
();
if ( isset(
$_POST['username']) && isset($_POST['username']) )
{
    include 
"config.php";
    if ( (
$_POST['username'] == $adminuser) && ($_POST['username'] == $adminpass) )
    {
        
$_SESSION['user'] = $_POST['username'];
        
header ("Location: home.php");
    }
}
?>
در خط اول ما php رو شروع میکنیم.
در خط دوم لایه جلسه (سشن) رو استارت (روشن) میکنیم
در خط سوم ما میگیم در صورتی که نام کاربری و رمز عبور به وسیله Post از فرم برامون ارسال شده بود. دستورات زیر رو اجرا کن
در خط پنجم ما فایل کانفیگ رو با include فراخوانی میکنیم.
در خط شش یک دستور شرطی دیگه هست که میگه اگه مقدار ارسال شده username با مقدار موجود در adminuser (فایل کانفیگ) برابری کرد. و همچنین (با &&) مقدار ارسال شده password با مقدار موجود در adminpass (فایل کانفیگ) برابری کرد . اون وقت مقدار ارسال شده username رو بریز داخل سشن user
این سشن user تا وقتی کاربر داخل سایت باشه لازم هست...
در خط بعد میگه وقتی همه این دو شرط درست بود. بعنی:

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


اون وقت برو به صفحه home.php

صفحه home.php نقش داشبورد یا صفحه اصلی کنترل پنل مدیریت رو بازی میکنه



محتویات فایل index.php شد این:
کد php:
<?php 
session_start
();
if ( isset(
$_POST['username']) && isset($_POST['username']) )
{
    include 
"config.php";
    if ( (
$_POST['username'] == $adminuser) && ($_POST['username'] == $adminpass) )
    {
        
$_SESSION['user'] = $_POST['username'];
        
header ("Location: home.php");
    }
}
?>
<html>
<head>
<title>ورود به مدریت</title>
</head>
<body>
<form action="" method="POST">
نام کاربری:<input type="text" name="username" size="20">
<br/>
رمز عبور:<input type="password" name="password" size="20">
<br/>
<br/>
<input type="submit" value="ورود" name="submit">
</form>
</body>

</html> 

خیلی آسون بود... نه؟ جلسه بعدی میریم داخل مدیریت. و مراحل بعدی ایجاد دیتابیس و وارد کردن اطلاعات


نکته مهم: توجه کنید که تمامی فایل های سایت شما باید charset شون روی UTF-8 without BOM باشه (با نرم افزار notepad++ میتونین اوکی کنید)

پاسخ
#4
Note 
صفحه اصلی مدیریت :: فایل home.php موجود در پوشه admin

همون طور که گفتم فایل home.php نقش داشبورد یا کنترل پنل مدیریت رو بازی میکنه
همون طور که میدونید به این صفحه فقط باید مدیر دسترسی داشته باشه. یعنی کسی که نام کاربری و رمز عبور رو وارد کرده میتونه بیاد اینجا رو ببینه
حالا چگونه؟ با استفاده از همون سشن یا جلسه ای که ایجاد کردیم و نامش رو گذاشتیم user

در ابتدای فایل home مینویسیم:
کد php:
<?php
session_start
();
if ( isset(
$_SESSION['user']) ) {
if ( (isset(
$_GET['logout'])) && ($_GET['logout'] == "true") )
{
unset (
$_SESSION['user']);
header ("Location: index.php");
}
?>
اگه کاربر وارد شده بود اینجا رو نشون میده

کد php:
<?php } else { header ("location: index.php"); } ?>

توضیحات:
ما در خط اول php رو شروع میکنیم
در خط دوم سشن رو start میکنیم.
در خط سوم میگیم اگه سشن ما (که در قسمت ورود گرفتیم) در user وجود داشت. اون وقت تمام زیر مجموعه رو نمایش بده.
در خط اخر گفتیم. در غیر اینصورت برگرد به صفحه ورود (index.php)

در خط چهارم میگیم اگه کاربر برای ما logout رو فرستاد و همچنین logout برابر با true بود اون وقت سشن user رو unset کن
میشه به این صورت:

(حالا unset چیه؟ و چیکار میکنه؟: وقتی کاربر یوزر و پسورد رو درست میزنه یک سشن به اسم user ایجاد میشه. این user وقتی برای شما set شده باشه به شما اجازه می ده به صفحات دیگه مدیریت سر بزنید... و وقتی unset میکنیم. دیگه متغیر user چیزی داخلش نیست که بتونه وارد مدیریت بشه)

اون قسمتی هم که نوشتم "اگه کاربر وارد شده بود اینجا رو نشون میده" وقتی نشون داده میشه که کاربر وارد شده باشه... در غیر اینصورت برمیگرده به صفحه index یا همون ورود به مدیریت"

حالا ما در فایل home.php داریم:

کد php:
<?php
session_start
();
if ( isset(
$_SESSION['user']) ) {
if ( (isset(
$_GET['logout'])) && ($_GET['logout'] == "true") )
{
unset (
$_SESSION['user']);
header ("Location: index.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title> مدیریت سایت</title>
<link href="files/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="main">
<img src="files/header.jpg" border="0">
<div class="navbar">
<ul>
    <li><a href="home.php">داشبورد</a></li>
    <li><a href="../index.php" target="_blank">نمایش سایت</a></li>
</ul>
</div>
</div>
  
    
        <div id="sidebar">
        <ul>
        <li><a href="home.php">داشبورد</a></li>
        <li><a href="addnews.php">ارسال خبر جدید</a></li>
        <li><a href="addpage.php">ایجاد صفحه جدید</a></li>
        <li><a href="addlink.php">ارسال لینک جدید</a></li>
        <li><a href="news.php">مدیریت اخبار</a></li>
        <li><a href="pages.php">مدیریت صفحات</a></li>
        <li><a href="links.php">مدیریت لینک ها</a></li>
        <li><a href="homepage.php">مدیریت صفحه نخست</a></li>
        <li><a href="?logout=true"><font color="red"><b>خروج!</b></font></a></li>

        </ul>
        
    </div>
    


<div class="content">
<div class="top-text">داشبورد</div> 
    به کنترل پنل مدیریت خوش آمدید. شما میتوانید از منوی سمت راست به مدیریت بخش های مورد نظر بپردازید

    </div>
    <div class="clear"></div>
</div>
</body></html>
<?php } else { header ("location: index.php"); } ?>

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

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

پاسخ
#5
Note 
برای اینکه بخوایم اخبار رو ارسال کنیم تا در دیتابیس ذخیره بشه باید ابتدا دیتابیس و table اخبار رو میسازیم. توضیحات زیادی در مورد نحوه ساخت دیتابیس نمیدم! چون چیز خاصی نداره. و محیط phpmyqdmin فارسی هست...

خب ما میخوایم تیبل اخبار رو بسازیم. ابتدا یک دیتابیس مثلا با نام cms میسازیم.
داخل دیتابیس cms ما یک table با نام news می سازیم. این news شامل مشخصات و داده های اخبار هست

ما تو این تیبل (table) چه فیلد هایی داریم؟
فیلد id از نوع عددی (int) هست و به صورت خودکار به ترتیب عدد داده میشه (AUTO_INCREMENT هست) ما با id هر خبر رو صدا میکنیم و از دیتابیس میخوایم که خبر رو بر اساس id اون نشون بده. چون این id به صورت یکتا هست (تکراری نیست)

فیلد title که قراره عنوان هر خبر داخلش ذخیره بشه . از نوع متنی (text)
فیلد content که قراره خلاصه هر خبر داخلش باشه . از نوع متنی (text)
فیلد fullcontent که قرار متن کامل خبر داخلش باشه . از نوع متنی (text)
فیلد date که قراره تاریخ ارسال خبر داخلش ذخیره بشه. از نوع VARCHAR (اندازه 20)
و همون طور که گفتم id کلید هر فیلد هست

تیبل news ما شد این:

[SQL]
CREATE TABLE `news` (
`id` INT NOT NULL AUTO_INCREMENT ,
`title` TEXT NOT NULL ,
`content` TEXT NOT NULL ,
`fullcontent` TEXT NOT NULL ,
`date` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM;[/SQL]

میتونید از طریق import داخل phpmyadmin بریزید داخل دیتابیستون

پاسخ
#6
Note 
میرسیم به بخش ارسال خبر و همچنین ویرایش خبر

معمولا برای بخش ارسال و ویرایش خبر باید یک ویرایشگر مناسب گذاشت. ما هم از ویرایشگر elrte استفاده میکنیم.

کدهای بخش فایل addnews.php به شرح زیر هست.

کد php:
<?php
session_start
();
if ( isset(
$_SESSION['user']) ) {
if ( (isset(
$_GET['logout'])) && ($_GET['logout'] == "true") )
{
unset (
$_SESSION['user']);
header ("Location: index.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>مدیریت سایت - ارسال خبر جدید</title>
<link href="files/style.css" rel="stylesheet" type="text/css">
<!-- jQuery and jQuery UI -->
    <script src="elrte-1.2/js/jquery-1.4.4.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="elrte-1.2/js/jquery-ui-1.8.7.custom.min.js" type="text/javascript" charset="utf-8"></script>
    <link rel="stylesheet" href="elrte-1.2/css/smoothness/jquery-ui-1.8.7.custom.css" type="text/css" media="screen" charset="utf-8">

    <!-- elRTE -->
    <script src="elrte-1.2/js/elrte.min.js" type="text/javascript" charset="utf-8"></script>
    <link rel="stylesheet" href="elrte-1.2/css/elrte.min.css" type="text/css" media="screen" charset="utf-8">

    <!-- elRTE translation messages -->
    <script src="elrte-1.2/js/i18n/elrte.fa.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript" charset="utf-8">
        $().ready(function() {
            var opts = {
                cssClass : 'el-rte',
                lang     : 'fa',
                height   : 300,
                toolbar  : 'normal',
                cssfiles : ['elrte-1.2/css/elrte-inner.css']
            }
            $('#editor').elrte(opts);
        })
        
        $().ready(function() {
            var opts = {
                cssClass : 'el-rte',
                lang     : 'fa',
                height   : 300,
                toolbar  : 'normal',
                cssfiles : ['elrte-1.2/css/elrte-inner.css']
            }
            $('#more').elrte(opts);
        })
    </script>
</head>
<body>

<?php
if ( isset($_POST['go']) && ($_POST['go'] == "add") )
{
    include 
"config.php";
    
$add mysql_query ("INSERT INTO `news` VALUES ('', '".$_POST['newstitle']."', '".$_POST['newscontent']."', '".$_POST['newsfullcontent']."', '".mktime()."')");
    if ( 
$add )
    {
        
$status '<div class="ok">خبر جدید با موفقیت ثبت شد.</div>';
    }
    else { 
$status '<div class="error">متاسفانه مشکلی در ثبت خبر جدید وجود دارد.</div>'; }
}
elseif ( isset(
$_POST['go']) && ($_POST['go'] == "edit") )
{
    include 
"config.php";
    
$edit mysql_query ("UPDATE `news` SET `title` = '".$_POST['newstitle']."', `content` = '".$_POST['newscontent']."', `fullcontent` = '".$_POST['newsfullcontent']."' WHERE `id` = '".$_POST['id']."' LIMIT 1");
    if ( 
$edit )
    { 
    
$status '<div class="ok">تغییرات با موفقیت اعمال شدند.</div>'
    }
    else { 
$status '<div class="error">متاسفانه مشکلی در ثبت تغییرات وجود دارد</div>'; }
}
if ( isset(
$_GET['editnews']) && ($_GET['editnews'] !== "") )
{
    include 
"config.php";
    
$Query mysql_query("SELECT * FROM `news` WHERE `id` = '".intval($_GET['editnews'])."' LIMIT 1");
    
$row_news mysql_fetch_array($Query);
}
?>

<div id="main">
<img src="files/header.jpg" border="0">
<div class="navbar">
<ul>
    <li><a href="home.php">داشبورد</a></li>
    <li><a href="../index.php" target="_blank">نمایش سایت</a></li>
</ul>
</div>
</div>
  
    
        <div id="sidebar">
        <ul>
        <li><a href="home.php">داشبورد</a></li>
        <li><a href="addnews.php">ارسال خبر جدید</a></li>
        <li><a href="addpage.php">ایجاد صفحه جدید</a></li>
        <li><a href="addlink.php">ارسال لینک جدید</a></li>
        <li><a href="news.php">مدیریت اخبار</a></li>
        <li><a href="pages.php">مدیریت صفحات</a></li>
        <li><a href="links.php">مدیریت لینک ها</a></li>
        <li><a href="homepage.php">مدیریت صفحه نخست</a></li>
        <li><a href="?logout=true"><font color="red">خروج!</b></font></a></li>

        </ul>
        
    </div>
    


<div class="content">

<div class="top-text">ارسال خبر جدید</div> 
    <?php echo $status?>
    <div class="forms">                        
    <form method="post" action="">
    <input type="hidden" name="go" value="<?php echo (isset($row_news)) ? "edit" "add"?>">
    <?php echo (isset($row_news)) ? '<input type="hidden" name="id" value="'.$row_news['id'].'">' ''?>
    <label for="username"> عنوان خبر : </label>
    <input name="newstitle" type="text" value="<?php echo $row_news['title']; ?>" class="form" />
    <br  /><br  /><br  />
    <label for="content"> خلاصه خبر : </label>
    <textarea name="newscontent" rows="10" cols="80" id="editor"><?php echo $row_news['content']; ?></textarea>
    <br /><br /><br /><br />
    <label for="fullcontent"> ادامه مطلب : </label>
    <textarea name="newsfullcontent" rows="10" cols="80" id="more"><?php echo $row_news['fullcontent']; ?></textarea>
    <br /><br /><br /><br />
    <input type="submit" value="ارسال خبر" name="submit">
    </form>
    </div>

    </div>
    <div class="clear"></div>
</div>
</body></html>
<?php } else { header ("location: index.php"); } ?>
حالا شروع میکنیم به توضیح دادن هر قسمت از فایل Addnews.php

بررسی ورود مدیر:
کد PHP:
<?php
session_start
();
if ( isset(
$_SESSION['user']) ) {
if ( (isset(
$_GET['logout'])) && ($_GET['logout'] == "true") )
{
unset (
$_SESSION['user']);
header ("Location: index.php");
}
?>

در ابتدا ما مثل صفحه Home.php بررسی میکنیم که کاربر وارد شده یا نه
-------------------------

کد های مربوط به قالب و ادیتور:

[HTML]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>مدیریت سایت - ارسال خبر جدید</title>
<link href="files/style.css" rel="stylesheet" type="text/css">
<!-- jQuery and jQuery UI -->
<script src="elrte-1.2/js/jquery-1.4.4.min.js" type="text/javascript" charset="utf-8"></script>
<script src="elrte-1.2/js/jquery-ui-1.8.7.custom.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="elrte-1.2/css/smoothness/jquery-ui-1.8.7.custom.css" type="text/css" media="screen" charset="utf-8">

<!-- elRTE -->
<script src="elrte-1.2/js/elrte.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="elrte-1.2/css/elrte.min.css" type="text/css" media="screen" charset="utf-8">

<!-- elRTE translation messages -->
<script src="elrte-1.2/js/i18n/elrte.fa.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript" charset="utf-8">
$().ready(function() {
var opts = {
cssClass : 'el-rte',
lang : 'fa',
height : 300,
toolbar : 'normal',
cssfiles : ['elrte-1.2/css/elrte-inner.css']
}
$('#editor').elrte(opts);
})

$().ready(function() {
var opts = {
cssClass : 'el-rte',
lang : 'fa',
height : 300,
toolbar : 'normal',
cssfiles : ['elrte-1.2/css/elrte-inner.css']
}
$('#more').elrte(opts);
})
</script>
</head>
<body>[/HTML]

این کد ها شامل کد های قالب و کد های html ,java مربوط به ادیتور هست. که قراره داخل textarea ها لود بشه

--------------

کد های php شامل ارسال و ویرایش خبر:

کد php:
if ( isset($_POST['go']) && ($_POST['go'] == "add") )
{
    include 
"config.php";
    
$add mysql_query ("INSERT INTO `news` VALUES ('', '".$_POST['newstitle']."', '".$_POST['newscontent']."', '".$_POST['newsfullcontent']."', '".mktime()."')");
    if ( 
$add )
    {
        
$status '<div class="ok">خبر با موفقیت ارسال شد</div>';
    }
    else { 
$status '<div class="error">مشکلی در ارسال خبر وجود دارد. دوباره امتحان کنید</div>'; }


ما در ابتدا بررسی میکنیم که اگر از فرم ارسال خبر go ارسال شد و همچنین این go برابر با add بود اون وقت مقدار های داخل فرم که شامل عنوان خبر newstitle و متن خبر newscontent و همچنین ادامه مطلب newsfullcontent هست به ترتیب بریز داخل table خبر که همون news باشه

بعدش به وسیله متغیر add میتونیم بفهمیم که مقدار ها ریخته شده داخل دیتابیس یا نه. در اینجا شرط میزاریم براش که اگه خبر ارسال شده بود پیغام " خبر با موفقیت ارسال شد " رو بریز تو متغیر status
در غیر اینصورت مقدار "مشکلی در ارسال خبر وجود دارد. دوباره امتحان کنید" رو بریز داخل متغیر status

متغیر status قراره بعد از ارسال موفقیت امیز یا مشکل دار هر خبر چاپ بشه...
--------------

ویرایش خبر:
کد php:
elseif ( isset($_POST['go']) && ($_POST['go'] == "edit") )
{
    include 
"config.php";
    
$edit mysql_query ("UPDATE `news` SET `title` = '".$_POST['newstitle']."', `content` = '".$_POST['newscontent']."', `fullcontent` = '".$_POST['newsfullcontent']."' WHERE `id` = '".$_POST['id']."' LIMIT 1");
    if ( 
$edit )
    { 
    
$status '<div class="ok">خبر با موفقیت ویرایش شد</div>'
    }
    else { 
$status '<div class="error">مشکلی در ویرایش ثبت خبر وجود دارد.دوباره امتحان کنید</div>'; }

این قسمت بعد از شرط ارسال خبر اجرا میشه! یعنی اگه کاربر به جای add که همون ارسال خبر باشه از فرم مقدار edit اومد دستورهای زیر رو اجرا کن. یعنی: مقدار های عنوان خبر, متن خبر و ادامه مطلب رو بر اساس id اون خبر آپدیت کن(جایگزین کن)

در اینجا ما از طریق متغیر edit میتونیم بفهمیم که با موفقیت خبر اپدیت شد یا نه؟
میگیم در صورتی که خبر تو دیتابیس در جدول news آپدیت شد متغیر status برابر هست با "خبر با موفقیت ویرایش شد" در غیر اینصورت "مشکلی در ویرایش ثبت خبر وجود دارد.دوباره امتحان کنید" وارد status میشه
همون طور که گفتم status بعدا برای مدیر نمایش داده میشه


ادامه در تاپیک بعدی...

پاسخ
#7
Note 
حالا چطور هر خبر رو برای ویرایش از دیتابیس فراخوانی کنیم؟
اینطوری:
کد php:
if ( isset($_GET['editnews']) && ($_GET['editnews'] !== "") )
{
    include 
"config.php";
    
$Query mysql_query("SELECT * FROM `news` WHERE `id` = '".intval($_GET['editnews'])."' LIMIT 1");
    
$row_news mysql_fetch_array($Query);


در اینجا میگیم در صورتی که کاربر بوسیله get مقدار editnews رو برای ما فرستاد و همچنین editnews ارسال شده خالی نبود اون وقت اون مقدار editnews که عدد (id) خبر تو دیتابیس هست رو از داخل تیبل نمایش بده!

حالا کجا نمایش بده؟
داخل value یا همون مقدار فرم ما.
چطوری؟
اینطوری:

کد php:
<div class="content">

<
div class="top-text">ارسال خبر جدید</div>
    <?
php echo $status?>
    <div class="forms">                        
    <form method="post" action="">
    <input type="hidden" name="go" value="<?php echo (isset($row_news)) ? "edit" "add"?>">
    <?php echo (isset($row_news)) ? '<input type="hidden" name="id" value="'.$row_news['id'].'">' ''?>
    <label for="username"> عنوان خبر : </label>
    <input name="newstitle" type="text" value="<?php echo $row_news['title']; ?>" class="form" />
    <br  /><br  /><br  />
    <label for="content"> خلاصه خبر : </label>
    <textarea name="newscontent" rows="10" cols="80" id="editor"><?php echo $row_news['content']; ?></textarea>
    <br /><br /><br /><br />
    <label for="fullcontent"> ادامه مطلب : </label>
    <textarea name="newsfullcontent" rows="10" cols="80" id="more"><?php echo $row_news['fullcontent']; ?></textarea>
    <br /><br /><br /><br />
    <input type="submit" value="ارسال خبر" name="submit">
    </form>
    </div>

    </div> 
ما در ابتدا برای نمایش وضعیت خبر ارسال شده یا ویرایش شده status رو چاپ میکنیم تا مدیر از وضعیت خبر ارسالی آگاه باشه

بعد ما دو فیلد مخفی "hidden" داریم که یکی برای اون دستورات php مشخص میکنیم این مقدار های ارسال شده برای ویرایش خبر هست یا ارسال خبر جدید
فیلد دیگه id خبر رو مشخص میکنه (در صورتی که ما بخوایم یک خبر رو ویرایش کنیم)

سوالاتی که ممکنه براتون پیش بیاد:

1.row_news چیه؟

این متغیر ردیف هر فیلد رو برامون نمایش میده. این قسمت برای ویرایش خبر کاربرد داره. یعنی ما وقتی بخوایم خبر رو ویرایش کنیم باید مقدار های قبلیش رو ببینیم دیگه؟ برای همین مثلا در مقدار value عنوان خبر مینویسیم


کد php:
$row_news['title']; 

در آخرین خط فایل addnews.php هم ما شرط مدیر رو میبندیم (همون کدی که اول وارد کردیم تا بررسی کنیم مدیر وارد شده یا نه)



کد php:
<?php } else { header ("location: index.php"); } ?>

پاسخ
#8
Note 
ساخت جدول صفحات:

[SQL]
CREATE TABLE `page` (
`id` INT NOT NULL AUTO_INCREMENT ,
`title` TEXT NOT NULL ,
`content` TEXT NOT NULL ,
`date` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM;
[/SQL]

در اینجا ما مرحله جدید, یعنی مرحله طراحی جدول صفحات رو شروع میکنیم.

یک تیبل/جدول با نام page ایجاد میکنیم.

ما قراره در این جدول فیلد های زیر رو داشته باشیم:

id = شناسه هر خبر (کلید ما هست)
title = عنوان صفحات
content = متن صفحات
date = تاریخ ارسال خبر


ساخت جدول به پایان رسید. مرحله بعدی ... ایجاد و ارسال صفحه

پاسخ
#9
Note 
بخش ارسال صفحه (addpage.php) دقیقا شبیه به فایل addnews.php هست! و هیچ تفاوتی نداره. تنها تفاوت اون, وارد کردن (insert) کردن اطلاعات درون جدول صفحات (pages) هست! همین

سورس کامل صفحه Addpage.php به شرح زیر هست...

کد php:
<?php
session_start
();
if ( isset(
$_SESSION['user']) ) {
if ( (isset(
$_GET['logout'])) && ($_GET['logout'] == "true") )
{
unset (
$_SESSION['user']);
header ("Location: index.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>مدیریت سایت - ایجاد صفحه جدید</title>
<link href="files/style.css" rel="stylesheet" type="text/css">
<!-- jQuery and jQuery UI -->
    <script src="elrte-1.2/js/jquery-1.4.4.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="elrte-1.2/js/jquery-ui-1.8.7.custom.min.js" type="text/javascript" charset="utf-8"></script>
    <link rel="stylesheet" href="elrte-1.2/css/smoothness/jquery-ui-1.8.7.custom.css" type="text/css" media="screen" charset="utf-8">

    <!-- elRTE -->
    <script src="elrte-1.2/js/elrte.min.js" type="text/javascript" charset="utf-8"></script>
    <link rel="stylesheet" href="elrte-1.2/css/elrte.min.css" type="text/css" media="screen" charset="utf-8">

    <!-- elRTE translation messages -->
    <script src="elrte-1.2/js/i18n/elrte.fa.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript" charset="utf-8">
        $().ready(function() {
            var opts = {
                cssClass : 'el-rte',
                lang     : 'fa',
                height   : 300,
                toolbar  : 'normal',
                cssfiles : ['elrte-1.2/css/elrte-inner.css']
            }
            $('#editor').elrte(opts);
        })
        
        $().ready(function() {
            var opts = {
                cssClass : 'el-rte',
                lang     : 'fa',
                height   : 300,
                toolbar  : 'normal',
                cssfiles : ['elrte-1.2/css/elrte-inner.css']
            }
            $('#more').elrte(opts);
        })
    </script>
</head>
<body>

<?php
if ( isset($_POST['go']) && ($_POST['go'] == "add") )
{
    include 
"config.php";
    
$add mysql_query ("INSERT INTO `page` VALUES ('', '".$_POST['pagetitle']."', '".$_POST['pagecontent']."', '".mktime()."')");
    if ( 
$add )
    {
        
$status '<div class="ok">صفحه جدید با موفقیت ثبت شد</div>';
    }
    else { 
$status '<div class="error">متاسفانه در ایجاد صفحه مشکلی به وجود آمده است! دوباره سعی کنید</div>'; }
}
elseif ( isset(
$_POST['go']) && ($_POST['go'] == "edit") )
{
    include 
"config.php";
    
$edit mysql_query ("UPDATE `page` SET `title` = '".$_POST['pagetitle']."', `content` = '".$_POST['pagecontent']."' WHERE `id` = '".$_POST['id']."' LIMIT 1");
    if ( 
$edit )
    { 
    
$status '<div class="ok">تغییرات با موفقیت اعمال شدند.</div>'
    }
    else { 
$status '<div class="error">متاسفانه مشکلی در ثبت تغییرات وجود دارد</div>'; }
}
if ( isset(
$_GET['editpage']) && ($_GET['editpage'] !== "") )
{
    include 
"config.php";
    
$Query mysql_query("SELECT * FROM `page` WHERE `id` = '".intval($_GET['editpage'])."' LIMIT 1");
    
$row_page mysql_fetch_array($Query);
}
?>

<div id="main">
<img src="files/header.jpg" border="0">
<div class="navbar">
<ul>
    <li><a href="home.php">داشبورد</a></li>
    <li><a href="../index.php" target="_blank">نمایش سایت</a></li>
</ul>
</div>
</div>
  
    
        <div id="sidebar">
        <ul>
        <li><a href="home.php">داشبورد</a></li>
        <li><a href="addnews.php">ارسال خبر جدید</a></li>
        <li><a href="addpage.php">ایجاد صفحه جدید</a></li>
        <li><a href="addlink.php">ارسال لینک جدید</a></li>
        <li><a href="news.php">مدیریت اخبار</a></li>
        <li><a href="pages.php">مدیریت صفحات</a></li>
        <li><a href="links.php">مدیریت لینک ها</a></li>
        <li><a href="homepage.php">مدیریت صفحه نخست</a></li>
        <li><a href="?logout=true"><font color="red">خروج!</b></font></a></li>

        </ul>
        
    </div>
    


<div class="content">

<div class="top-text">ایجاد صفحه جدید</div> 
    <?php echo $status?>
    <div class="forms">                        
    <form method="post" action="">
    <input type="hidden" name="go" value="<?php echo (isset($row_page)) ? "edit" "add"?>">
    <?php echo (isset($row_page)) ? '<input type="hidden" name="id" value="'.$row_page['id'].'">' ''?>
    <label for="username"> عنوان صفحه : </label>
    <input name="pagetitle" type="text" value="<?php echo $row_page['title']; ?>" class="form" />
    <br  /><br  /><br  />
    <label for="content"> متن صفحه: </label>
    <textarea name="pagecontent" rows="10" cols="80" id="editor"><?php echo $row_page['content']; ?></textarea>
    <br /><br /><br /><br />
    
    <input type="submit" value="ایجاد صفحه" name="submit">
    </form>
    </div>

    </div>
    <div class="clear"></div>
</div>
</body></html>
<?php } else { header ("location: index.php"); } ?>

زیاد توضیح نمیدم! چون قبلا این مراحل رو رفتیم...

--------------
کد های بررسی ورود مدیر:

کد php:
<?php
session_start
();
if ( isset(
$_SESSION['user']) ) {
if ( (isset(
$_GET['logout'])) && ($_GET['logout'] == "true") )
{
unset (
$_SESSION['user']);
header ("Location: index.php");
}
?>
لایه جلسه که در ابتدای تمامی بخش های مدیریت هست که بررسی می کنه مدیر وارد شده یا نه...

--------------
کد های HTML سربرگ (header)


[HTML]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>مدیریت سایت - ایجاد صفحه جدید</title>
<link href="files/style.css" rel="stylesheet" type="text/css">
<!-- jQuery and jQuery UI -->
<script src="elrte-1.2/js/jquery-1.4.4.min.js" type="text/javascript" charset="utf-8"></script>
<script src="elrte-1.2/js/jquery-ui-1.8.7.custom.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="elrte-1.2/css/smoothness/jquery-ui-1.8.7.custom.css" type="text/css" media="screen" charset="utf-8">

<!-- elRTE -->
<script src="elrte-1.2/js/elrte.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" href="elrte-1.2/css/elrte.min.css" type="text/css" media="screen" charset="utf-8">

<!-- elRTE translation messages -->
<script src="elrte-1.2/js/i18n/elrte.fa.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript" charset="utf-8">
$().ready(function() {
var opts = {
cssClass : 'el-rte',
lang : 'fa',
height : 300,
toolbar : 'normal',
cssfiles : ['elrte-1.2/css/elrte-inner.css']
}
$('#editor').elrte(opts);
})

$().ready(function() {
var opts = {
cssClass : 'el-rte',
lang : 'fa',
height : 300,
toolbar : 'normal',
cssfiles : ['elrte-1.2/css/elrte-inner.css']
}
$('#more').elrte(opts);
})
</script>
</head>[/HTML]

کد های قالب که html هست و همچنین کد های ادیتور پیشرفته ...

-------------------

کد ها و دستورات شرطی:


کد php:
<?php
if ( isset($_POST['go']) && ($_POST['go'] == "add") )
{
    include 
"config.php";
    
$add mysql_query ("INSERT INTO `page` VALUES ('', '".$_POST['pagetitle']."', '".$_POST['pagecontent']."', '".mktime()."')");
    if ( 
$add )
    {
        
$status '<div class="ok">صفحه جدید با موفقیت ثبت شد</div>';
    }
    else { 
$status '<div class="error">متاسفانه در ایجاد صفحه مشکلی به وجود آمده است! دوباره سعی کنید</div>'; }
}
elseif ( isset(
$_POST['go']) && ($_POST['go'] == "edit") )
{
    include 
"config.php";
    
$edit mysql_query ("UPDATE `page` SET `title` = '".$_POST['pagetitle']."', `content` = '".$_POST['pagecontent']."' WHERE `id` = '".$_POST['id']."' LIMIT 1");
    if ( 
$edit )
    { 
    
$status '<div class="ok">تغییرات با موفقیت اعمال شدند.</div>'
    }
    else { 
$status '<div class="error">متاسفانه مشکلی در ثبت تغییرات وجود دارد</div>'; }
}
if ( isset(
$_GET['editpage']) && ($_GET['editpage'] !== "") )
{
    include 
"config.php";
    
$Query mysql_query("SELECT * FROM `page` WHERE `id` = '".intval($_GET['editpage'])."' LIMIT 1");
    
$row_page mysql_fetch_array($Query);
}
?>
در اینجا ما باید ورودی داشته باشیم . ورودی رو به وسیله GET میگیریم و به کد ها میگیم چه کار کنن...

در خط اول php شروع میشه
در خط دوم میگیم در صورتی که go ارسال شد و مقدار این go برابر با add بود. مقادیر ورودی رو insert (بریز داخل) جدول اخبار

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

در صورتی که با موفقیت انجام نشد مقادیر "متاسفانه در ایجاد صفحه مشکلی به وجود آمده است! دوباره سعی کنید" رو بریز داخل status

--
در خط بعدی میگیم. در صورتی که کاربر go رو زده بود! ولی مقدار go برابر با edit بود. مقادیر گرفته شده از فرم رو بروز رسانی کن (update کن)
این قسمت برای ویرایش صفحه هست...

وضعیت رو هم میریزیم داخل status که بعدا به کاربر بگیم که صفحه ویرایش شده یا نه...


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



ادامه در تاپیک بعدی...

پاسخ
#10
Note 
کد های html قالب و فرم وارد و ویرایش کردن اطلاعات


کد php:
<div id="main">
<
img src="files/header.jpg" border="0">
<
div class="navbar">
<
ul>
    <
li><a href="home.php">داشبورد</a></li>
    <
li><a href="../index.php" target="_blank">نمایش سایت</a></li>
</
ul>
</
div>
</
div>
  
    
        <
div id="sidebar">
        <
ul>
        <
li><a href="home.php">داشبورد</a></li>
        <
li><a href="addnews.php">ارسال خبر جدید</a></li>
        <
li><a href="addpage.php">ایجاد صفحه جدید</a></li>
        <
li><a href="addlink.php">ارسال لینک جدید</a></li>
        <
li><a href="news.php">مدیریت اخبار</a></li>
        <
li><a href="pages.php">مدیریت صفحات</a></li>
        <
li><a href="links.php">مدیریت لینک ها</a></li>
        <
li><a href="homepage.php">مدیریت صفحه نخست</a></li>
        <
li><a href="?logout=true"><font color="red">خروج!</b></font></a></li>

        </
ul>
        
    </
div>
    


<
div class="content">

<
div class="top-text">ایجاد صفحه جدید</div
    <?
php echo $status?>
    <div class="forms">                        
    <form method="post" action="">
    <input type="hidden" name="go" value="<?php echo (isset($row_page)) ? "edit" "add"?>">
    <?php echo (isset($row_page)) ? '<input type="hidden" name="id" value="'.$row_page['id'].'">' ''?>
    <label for="username"> عنوان صفحه : </label>
    <input name="pagetitle" type="text" value="<?php echo $row_page['title']; ?>" class="form" />
    <br  /><br  /><br  />
    <label for="content"> متن صفحه: </label>
    <textarea name="pagecontent" rows="10" cols="80"  id="editor"><?php echo $row_page['content'];  ?></textarea>
    <br /><br /><br /><br />
    
    <input type="submit" value="ایجاد صفحه" name="submit">
    </form>
    </div>

    </div>
    <div class="clear"></div>
</div>
</body></html>
<?php } else { header ("location: index.php"); } ?>
در ادامه کد های قالب وجود دارن و فرم وارد کردن و ویرایش کردن اطلاعات... که قبلا در قسمت ارسال خبر مفصل توضیح داده شده...

در خط اخر هم بررسی لایه جلسه (ورود مدیر) انجام میشه (اگه مدیر وارد نشده بود برو به صفحه ورود index.php)


مرحله بعدی: نمایش لیست اخبار/حذف خبر

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note آموزش MVC به زبان ساده (تصویری) Daniel 1 808 16-08-2016 ساعت 09:24
آخرین ارسال: aaiz
  خدمات سئو سایت vayas 0 126 02-08-2016 ساعت 10:25
آخرین ارسال: vayas
Note آموزش MVC Daniel 1 683 26-11-2015 ساعت 12:56
آخرین ارسال: bkk
Note کتاب آموزش PHP از مقدماتی تا پیشرفته Stack OverFlow 0 998 16-02-2015 ساعت 10:48
آخرین ارسال: Stack OverFlow
Note کد بدست آوردن رتبه سایت WWWorker 0 757 07-02-2015 ساعت 09:40
آخرین ارسال: WWWorker
Note محدود کردن ارسال فایل در php (امنیت آپلود فایل) saber2 6 1,224 30-09-2014 ساعت 20:11
آخرین ارسال: Daniel
Note راهکارهای افزایش امنیت آپلود فایل در PHP Daniel 0 1,279 30-09-2014 ساعت 20:10
آخرین ارسال: Daniel
Note گرفتن فایلهای یک دایرکتوری mahbobe.prog 1 337 23-07-2014 ساعت 15:51
آخرین ارسال: PHP.sec
Note نحوه فرستادن ایمل به کاربر و مدیر سایت hasti 1 483 11-07-2014 ساعت 22:08
آخرین ارسال: Comodo
Note ایجاد دایرکتوری در php maynoush 14 1,808 11-07-2014 ساعت 17:54
آخرین ارسال: maynoush

کاربرانِ درحال بازدید از این موضوع:   1 مهمان