# زبان های اسکریپتی > PHP > سوال: مشكل تكرار شدن كل قالب

## ravand

سلام
كدهاي زير رو كه مي بينيد باعث ميشه كل قالب من چند بار تكرار بشه در صورتي كه من ميخوام فقط عنوان مطلب و خود مطلب به همراه همديگه تكرار بشن.
اين كدهاي html قالب:
template.htm
<!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" />
<style type="text/css">
A{ text-decoration: none; }
#asli{
width:580px; 
border:2px solid #B013F1;
}
#mokaab{
width:570px; 
}
#header{
border:3px solid #29C60A;
background-color:#CC99FF;
width:565px;
height:60px;
margin-top:5px;
 padding-top:18px;
text-align:center;
 direction:rtl;
 color:blue;
font-family:tahoma;
font-size:8pt;
line-height: 1em;
}
#chap{
width:485px; 
border:0px;
float:left;
margin-top:10px;
}
#onvan-matlab{ 
width:477px; 
border:2px solid #0A54EA;
text-align:right;
float:left;
}
#matlab{
width:477px; 
border:2px solid #EA0A2F;
float:left;
margin-bottom:10px;
text-align:right;
}
#menu{
width:70px; 
border:2px solid #0A54EA;
text-align:center;
float:right;
margin-top:10px;
}
#title{
font-family: Tahoma; 
font-size: 8pt;
width:67px; 
border:2px solid #0A54EA;
text-align:center;
}
</style>
<title><-BlogAndPostTitle-></title>
</head>
<body>
<div align="center">
<div id="asli">
<div id="header">
<-BlogAndPostTitle->
</div>
<div align="center">
<div id="mokaab">
<div id="menu">
<div id="title">
موضوعات
</div>
<-BlogAndMenu->
</div>
<div id="chap">
<div id="onvan-matlab">
<-BlogAndTitleMatlab->
</div>
<div id="matlab">
<-BlogAndPostmatlab->
</div>
</div>
<div style="clear: both;font-size: 2pt">
</div>
</div>
</div>
</div>
</div>
</body>
</html>
و كدهاي php
<?php
$servername="localhost";
$dbname="cms2";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
mysql_query("SET CHARACTER SET  utf8",$dblink);
$dbresult=mysql_query("SELECT * FROM jadval LIMIT 5 ",$dblink);
while($record=mysql_fetch_assoc($dbresult))
{
$title=$record['onvan'];
 $matlabtitle = '<a href="id.php?id='.$record['id'].'"> '.$record['title'].'</a>&nbsp;<br>';
$matlab = $record['msg'];
$menu = '<a href="id.php?id='.$record['id'].'"> '.$record['title'].'</a><br>';
$template = file_get_contents('template.htm');
$chaptitle = str_replace('<-BlogAndPostTitle->', $title, $template);
$chapmatlab = str_replace('<-BlogAndPostmatlab->', $matlab, $chaptitle);
$chaptitlematlab = str_replace('<-BlogAndTitleMatlab->', $matlabtitle, $chapmatlab);
$chapmenu = str_replace('<-BlogAndMenu->', $menu, $chaptitlematlab);
echo $chapmenu;
}
mysql_close($dblink);
?>
علت تكرار شدن قالب هم اينه كه خروجي ها كه شامل هدر ، منو، عنوان مطلب ، و مطلب هست داخل يك حلقه و در واقع داخل {} قرار گرفته. اگه من اينا رو از حلقه خارج كنم ديگه اينطوري عنوان مطلب و خود مطلب چند تا چاپ نميشه. شايد اگه من بيام براي هر كدوم از اينا يعني هدر ، منو، عنوان مطلب ، و مطلب يك template.htm يا همون قالب خاص خودشون رو بسازم و همه رو در اين فايل از هم جدا كنم بهتر باشه ولي من فقط مي خوام يك template.htm داشته باشم.
متشكرم

----------


## ravand

نشستم فكرام رو كردم ديدم اگه توي همون حلقه از div استفاده كنم و بخشي از كدهاي قالبم رو اونجا بنويسيم مشكلم حل ميشه ولي چه فايده؟ من ميخواستم از تگ در كدهاي قالبم استفاده كنم كه طراح قالب مجبور نباشه توي همه ي كدهاي سايت دست ببره.
*كسي راه حل بهتري سراغ نداره؟*

----------


## MMSHFE

با سلام، یک راه دیگه هم دارین: کل مطلب رو (شامل عنوان و متن و...) داخل یک تگ سفارشی دیگه بگذارین و بعد، موقع خوندن قالب، اون تگ رو با کمک حلقه تکرار کنید. برای مثال:
کد HTML قالب:


```
<!doctype html>
<html dir="rtl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
    a {
        text-decoration: none;
    }
    #asli {
        border: solid 2px #b013f1;
        width: 580px;
    }
    #mokaab {
        width: 570px;
    }
    #header {
        background-color: #cc99ff;
        border: solid 3px #29c60a;
        color: blue;
        font-family: tahoma;
        font-size: 8pt;
        height: 60px;
        line-height: 1em;
        margin-top: 5px;
        padding-top: 18px;
        text-align: center;
        width: 565px;
    }
    #chap {
        border: 0px;
        float: left;
        margin-top: 10px;
        width: 485px;
    }
    #onvan-matlab {
        border: solid 2px #0a54ea;
        float: left;
        text-align: right;
        width: 477px;
    }
    #matlab {
        border: solid 2px #ea0a2f;
        float: left;
        margin-bottom: 10px;
        text-align: right;
        width: 477px;
    }
    #menu {
        border: solid 2px #0a54ea;
        float: right;
        margin-top: 10px;
        text-align: center;
        width: 70px;
    }
    #title {
        border: solid 2px #0a54ea;
        font-family: Tahoma;
        font-size: 8pt;
        text-align: center;
        width: 67px;
    }
</style>
<title><-BlogAndPostTitle-></title>
</head>
<body>
<div align="center">
<div id="asli">
<div id="header">
<-BlogAndPostTitle->
</div>
<div align="center">
<div id="mokaab">
<div id="menu">
<div id="title">
موضوعات
</div>
<-BlogAndMenu->
</div>
<div id="chap">
<!-- start blogs -->
<div id="onvan-matlab">
<-BlogAndTitleMatlab->
</div>
<div id="matlab">
<-BlogAndPostmatlab->
</div>
<!-- end blogs -->
</div>
<div style="clear: both;font-size: 2pt">
</div>
</div>
</div>
</div>
</div>
</body>
</html>
```

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


```
$servername = 'localhost';
$dbname = 'cms2';
$user = 'root';
$pass = 'barnamenevis';
$title = 'وبلاگ من';
$menu = '';
mysql_connect($servername, $user, $pass) or die('Connection error');
mysql_select_db($dbname) or die('DB error');
mysql_query('SET NAMES \'utf8\'');
$template = file_get_contents('template.htm');
$template = str_replace('<-BlogAndPostTitle->', $title, $template);
$blog_start = strpos($template, '<!-- start blogs -->');
$blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
$blog_end = strpos($template, '<!-- end blogs -->');
$blogs_text = '';
$dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
while($record = mysql_fetch_assoc($dbresult)) {
    $matlabtitle = '<a href="id.php?id='.$record['id'].'"> '.$record['title'].'</a>';
    $menu .= $matlabtitle.'<br/>';
    $matlab = $record['msg'];
    $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
    $blogtemp = str_replace('<-BlogAndTitleMatlab->', $blog['onvan'], $blogtemp);
    $blogtemp = str_replace('<-BlogAndPostmatlab->', $blog['msg'], $blogtemp);
    $blogs_text .= $blogtemp;
}
$template = str_replace('<-BlogAndMenu->', $menu', $template);
mysql_close($dblink);
echo substr($template, 0, $blog_start);
echo $blogs_text;
echo substr($template, $blog_end);
```

اگه جایی از روش کار رو متوجه نشدین، بفرمایید تا توضیح بدم.
موفق باشید.

----------


## ravand

متشكر داداش.
من كد شما رو امتحان كردم ولي جواب نميده.
علتشم اينه كه فايل template.htm براي همه ي اين تگ ها فراخواني ميشه . و من بايد براي هر كدوم از اين تگ ها يه فايلي مثل همين فايل  template.htm جداگانه بسازم و حتي تغييرش بدم. ولي من نميخوام اين كار رو بكنم . چون اگه اين كار رو بكنم ديگه استفاده از تگ هم معنايي نداره.
خروجي كدهاي شما به اين شكلي كه در تصوير هست درآمد.
يعني راهي براي حل اين مشكل نيست؟  :ناراحت:  فكر كنم يه هفته اي هست دارم روش كار ميكنم  :لبخند گشاده!: 
aks.jpg

----------


## MMSHFE

با سلام مجدد، اون خطای Warning بخاطر حذف نکردن دستور mysql_close هست که ضروری نیست و بهتره حذفش کنید چون اتصالها به MySQL بطور خودکار با پایان یافتن اسکریپت، قطع میشه.
اما درمورد کد، من دقیقاً تستش کردم:
Temp.jpg
البته چون به دیتابیس شما دسترسی نداشتم، خودم دو سطر رو دستی ساختم. درصورت تمایل برای تطبیق کد با ساختار شما، یک export از دیتابیس یا حداقل جدول مربوط به مطالب اینجا ضمیمه کنید.
این کد دقیقی هست که من استفاده کردم:


```
<?php
    $blogs[] = array('id'=>1, 'onvan'=>'مطلب شماره 1', 'msg'=>'اين مطلب، شماره 1 است.');
    $blogs[] = array('id'=>2, 'onvan'=>'مطلب شماره 2', 'msg'=>'اين مطلب، شماره 2 است.');
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', 'وبلاگ من', $template);
    $template = str_replace('<-BlogAndMenu->', '<a href="#">گزينه 1</a><br/><a href="#">گزينه 2</a><br/>', $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
    foreach($blogs as $blog) {
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $blog['onvan'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $blog['msg'], $blogtemp);
        $blogs_text .= $blogtemp;
    }
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>
```

موفق باشید.

----------


## ravand

كد شما رو امتحان كردم و اين شكلي شد.
aks2.jpg

-- phpMyAdmin SQL Dump
-- version 2.11.6
-- http://www.phpmyadmin.net
--
-- ميزبان: localhost
-- زمان توليد: 25 دسامبر 2011 ساعت 12:08 PM
-- نسخه سرور: 5.0.51
-- نسخه PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- پايگاه داده: `cms2`
--

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

--
-- Table structure for table `jadval`
--

CREATE TABLE `jadval` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(50) collate utf8_persian_ci NOT NULL,
  `msg` text collate utf8_persian_ci NOT NULL,
  `date` varchar(50) collate utf8_persian_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=18 ;

--
-- حذف داده‌هاي جدول `jadval`
--

INSERT INTO `jadval` (`id`, `title`, `msg`, `date`) VALUES
(10, '6', '<P>999</P>\r\n<P>&nbsp;</P>', 'سه شنبه, ۸ آذر ۱۳۹۰'),
(11, 'حسن', 'علي', 'سه شنبه, ۸ آذر ۱۳۹۰'),
(12, 'ببين', '<P align=left>تست كن</P>', 'سه شنبه, ۸ آذر ۱۳۹۰'),
(13, 'بار', '<P align=center>تست كن</P>', 'سه شنبه, ۸ آذر ۱۳۹۰'),
(14, 'عكس', '<P align=center><IMG alt="" src="http://www.blogfa.com/images/blogfa.gif"></P>', 'سه شنبه, ۸ آذر ۱۳۹۰'),
(15, 'پنج تا', '<FONT color=#0000ff>پنج تا بيشتر نميتونه ارسال كنه.</FONT>', 'سه شنبه, ۸ آذر ۱۳۹۰'),
(16, 'عنوان', 'مطلب<BR>', 'یکشنبه, ۱۳ آذر ۱۳۹۰'),
(17, 'موضوع4', 'مطلب4<BR>', 'شنبه, ۳ دی ۱۳۹۰');

راستي ميخواستم طوري بنويسيم كه فقط عنوان مطلب و خود مطلبي كه روي قالب ارسال ميشه تا مثلا پنج پست روي قالب ارسال بشه ولي عنوان سايت و منوها تكرار نشه.
بازم متشكر

----------


## MMSHFE

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


```
<!doctype html>
<html dir="rtl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
    a {
        text-decoration: none;
    }
    #asli {
        border: solid 2px #b013f1;
        width: 580px;
    }
    #mokaab {
        width: 570px;
    }
    #header {
        background-color: #cc99ff;
        border: solid 3px #29c60a;
        color: blue;
        font-family: tahoma;
        font-size: 8pt;
        height: 60px;
        line-height: 1em;
        margin-top: 5px;
        padding-top: 18px;
        text-align: center;
        width: 565px;
    }
    #chap {
        border: 0px;
        float: left;
        margin-top: 10px;
        width: 485px;
    }
    #onvan-matlab {
        border: solid 2px #0a54ea;
        float: left;
        text-align: right;
        width: 477px;
    }
    #matlab {
        border: solid 2px #ea0a2f;
        float: left;
        margin-bottom: 10px;
        text-align: right;
        width: 477px;
    }
    #menu {
        border: solid 2px #0a54ea;
        float: right;
        margin-top: 10px;
        text-align: center;
        width: 70px;
    }
    #title {
        border: solid 2px #0a54ea;
        font-family: Tahoma;
        font-size: 8pt;
        text-align: center;
        width: 67px;
    }
</style>
<title><-BlogAndPostTitle-></title>
</head>
<body>
<div align="center">
<div id="asli">
<div id="header">
<-BlogAndPostTitle->
</div>
<div align="center">
<div id="mokaab">
<div id="menu">
<div id="title">
موضوعات
</div>
<-BlogAndMenu->
</div>
<div id="chap">
<!-- start blogs -->
<div id="onvan-matlab">
<-BlogAndTitleMatlab->
</div>
<div id="matlab">
<-BlogAndPostmatlab->
</div>
<!-- end blogs -->
</div>
<div style="clear: both;font-size: 2pt">
</div>
</div>
</div>
</div>
</div>
</body>
</html>
```

کد PHP برای استفاده از قالب:


```
<?php
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = '';
    $title = 'وبلاگ من';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br/>';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
        $blogs_text .= $blogtemp;
    }
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>
```

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

----------


## ravand

خيلي ممنون داداش.
مشكلم حل شد. ولي يه مشكلي هست اونم چاپ عنوان قالب هست.
الان شما يه متغيير $title رو نوشتيد و يه متني به صورت رشته بهش داديد.
ولي من اگه بخوام يه متني رو براي قالب ارسال كنم چجوري بايد اين كار رو بكنم؟
الان اين كدهاي عنوان هست:
$title = $record['onvan'];
چون كدهاي عنواني كه شما نوشتيد قبل از حلقه ايجاد شده من نميتونم داخل حلقه اين كد رو بنويسم چون كار نميكنه.
چه راهي رو پيشنهاد ميديد؟
متشكرم

----------


## MMSHFE

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

----------


## ravand

يعني بايد يك كد چاپ مطلب ديگه براش بذارم؟ من هر وقت خواستم يه مطلبي رو چاپ كنم از همين روش كه شما براي اين كدها گذاشتيذ استفاده كردم. كه وقتي مطلبي بخواد چاپ شه داخل حلقه قرار بگيره.

----------


## MMSHFE

نه قرار نیست کد جداگانه ای بنویسید. توی دیتابیس یک جدول دیگه برای تنظیمات وبلاگ درست کنید و مواردی مثل عنوان وبلاگ و... رو توی اون ذخیره کنید. مثلاً جدول مربوطه میتونه به اسم config و حاوی فیلدهای id و name و value باشه و مقادیری که توی اون ذخیره میشه، جدا از id که به ترتیب شماره میخوره، بصورت زیر باشه:
وبلاگ من = name = title, value
name = owner, value = ravand
و...
حالا موقع خوندن هر بخش، میتونید با یک select ساده، تنظیمات دلخواه رو بخونید:
$title = mysql_result(mysql_query('SELECT `value` FROM `config` WHERE (`name`=\'title\')'), 0, 0);
موفق باشید.

----------


## ravand

راستش رو بخوايد من از كدهاي شما سر در نياوردم. و نميدونم چجوري بايد اين كدها رو داخل كدهاي خودم قرار بدم تا عنوان سايت چاپ بشه.
بهتره اينطوري بگم. من يه جدول ساختم با عنوان header و با دو فيلد به نام هاي onvan كه براي عنوان سايت هست و tozih براي توضيحات سايت كه اين توضيح زياد مهم نيست. حالا چجوري بايد اين كدهايي كه شما گذاشتيد رو داخل كدهاي قبلي بذارم با اين مقادير ديتابيس؟
من از اين مقاديري كه نوشتيد چيزي سر در نياوردم:
مثلا اين : `value`و , 0, 0
متشكرم.

----------


## MMSHFE

با سلام، هرچند ساختار جدولی که برای تنظیمات گذاشتین، بهینه نیست ولی در کل، طبق ساختار جدول شما، این کد رو امتحان کنید:

<?php
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = '';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title.'<br/>'.$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br/>';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
        $blogs_text .= $blogtemp;
    }
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>

اما درمورد value و 0 و 0 هم باید بگم که value اسم فیلد حاوی مقدار هست (توی ساختاری که من برای جدول تنظیمات پیشنهاد دادم) و اون دو عدد هم مربوط به تابع mysql_result هست. این تابع سه پارامتر میگیره. پارامتر اول خروجی دستور mysql_query هست. پارامتر دوم شماره سطر (رکورد) و پارامتر سوم شماره ستون (فیلد) موردنظر هست و مستقیماً مقدار اون خونه از جدول رو برمیگردونه. البته سرعت این تابع خیلی زیاد نیست و بهتره در مواقع خاص ازش استفاده کنیم و توی حلقه ها و موارد پرکاربرد از اون استفاده نشه.
موفق باشید.

----------


## ravand

متشكر
نميدونم چرا اخطار ميده سعي كردم حلش كنم ولي نتونستم.
براي اين خطر ارور ميده :
$title = $header['onvan'];
از اين ارور هاي STRING

----------


## MMSHFE

با سلام، میشه متن کامل خطا رو بنویسید؟ البته من توی خط قبل از این دستور یک گیومه رو جا انداخته بودم که سریع درستش کردم. شاید اون رو نگذاشتین. کلاً خطاهای T_STRING و... وقتی پیش میاد، باید ببینید جایی یک رشته بازشده دارین که نبستین یا اینکه دو رشته رو بهم وصل کردین و . بینشون رو یادتون رفته یا هرگونه خطایی شبیه این. لطفاً وقتی چنین خطاهای جزئی پیش میاد، خودتون دنبالش بگردین و اصلاح کنید. شماره خط مربوط به خطا راهنمای خوبی هست. البته همیشه خطا دقیقاً توی اون خط نیست و ممکنه یکی از خطوط قبلی خطا رو ایجاد کرده باشه. مثلاً اگه یک ; رو جا بندازین، هم اون خط و هم خط بعدی دچار مشکل میشن و خطا تولید میکنن. تقاضا میکنم برای اینجور خطاها پست نگذارین (البته قصد جسارت ندارم ها).
موفق باشید.

----------


## ravand

ببخشيد من ديروز اصلاً فراموش كردم اينو بگم.
من اول تاپيك نوشته بودم ميخوام اگه بشه از كدهاي قالب توي اين كدهاي php استفاده نكنم. چون ميخوام يه نفر كه قالب رو تغيير ميده كدهاش رو فقط توي پوشه ي temp.htm بذاره و توي كدهاي php نذاره. مثلاً الان توي كدهايي كه شما نوشتيد اين خط نوشته شده كه من ميخوام فقط توي كدهاي html باشه.
<div id="onvan-matlab">
يه مشكل ديگه هم اينه كه الان كه در قسمت منو عنوان مطالب چاپ ميشه زير هم قرار نميگيره من سعي كردم اين مشكل رو با <br> و echo حل كنم ولي نشد چون اين كدها بهم وابسته هستن حتي خواستم از هم جداش كنم ولي بهم ميريزه.
بازم از لطفتون ممنونم

----------


## MMSHFE

با سلام، کدی که گذاشتم که درست نشون میده:
pic.jpg
دقت کنید که این ادیتور جدید و (معذرت میخوام) مزخرف سایت برنامه نویس باعث میشه تگ br توی کدهای PHP حذف بشه. توی خط زیر:
;'</menu .= $matlabtitle.'<br$
که داخل حلقه while قرار داره، تگ br حذف شده و انتهاش فقط یک رشته خالی نشون میده. اون رو درست کنید.
اما درمورد کد <"div id="onvan-matlab> هم نباید مشکلی باشه. چون این کد html هست و طبیعتاً وجودش توی فایل template.htm ایرادی نداره. اینکه توی کد PHP اون رو آوردم هم فقط برای این بوده که محل شروع درج مطالب توی فایل قالب رو بتونیم پیدا کنیم و توی blog_start$ ذخیره کنیم و دیگه قرار نیست اون رو تغییر بدیم! بنابراین، وجود این کد توی PHP هم مشکلی نداره چون اصلاً قرار نیست کسانی که قالب رو طراحی میکنن، اون رو ببینن. شما فقط بهشون میگین که ساختار قالب رو در زمان طراحی، درست ایجاد کنن و عنوان مطالب رو توی تگ div با "id="onvan-matlab و خود مطالب رو هم در تگ div با "id="matlab بگذارن.
قبلش هم از <-- start blogs --!> و بعدش از <-- end blogs --!> استفاده کنند. حتی سرویسهای بزرگ وبلاگدهی مثل BlogFa و... هم از چنین مواردی استفاده میکنند. بالأخره موتور قالب باید یکجوری بفهمه شروع درج مطالب کجا و پایانش کجاست!
موفق باشید.

----------


## ravand

ببخشيد كه من اين همه سوال مي پرسم  :لبخند گشاده!: 
آخه من كم تجربه ام 
يعني شما از <"div id="onvan-matlab> به عنوان تگ استفاده كرديد؟ درست فهميدم؟

----------


## MMSHFE

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

----------


## ravand

الان به اين كدها نگاه كنيد:
<?php
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = '';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
	$template = str_replace('<-BlogAndPosttozih->',$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br>';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
        $blogs_text .= $blogtemp;
    }
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>
توي اين كد به اين خط دقت كنيد:
$matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
من نياز دارم براي كدهام اين فايل id.php رو بسازم.
من قبلا يه نمونه براي كدهام ساخته بودم البته اونايي كه من ساختم ديگه توي اين كدها كه از تگ استفاده شده كاربردي نداره. 
كار اين فايل هم اينه كه وقتي من در قسمت منوها روي يكي از عنوان ها كليك ميكنم يه صفحه با همون عنوان كليك شده و متنش باز ميشه.
ممنون ميشم كمكم كنيد.

----------


## ravand

يه اشتباهي كه كردم اين بود كه بايد تاريخ ميلادي رو در ديتابيس ثبت ميكردم كه نكردم بعد از اين كار بايد تاريخ ميلادي رو به شمسي تبديل ميكردم . توي خيلي از سايت ها ديدم كه به جاي id از تاريخ استفاده كردن . چون مي بينم ديگه اين روش كارايي خودش رو از دست داده . حدااقل اينجا كه من ميخوام با تگ كار كنم.
'<a href="id.php?id='.$record['id'].'">'.$record['title'].'

----------


## ravand

من قبلاً كدهاي فايل id.php رو اينطوري ساخته بودم ولي در اين روش استفاده از تگ نميدونم واقعا چيكار كنم!
ممنون ميشم راهنماييم كنيد.
<?php
$id= $_GET['id'];
$servername="localhost";
$dbname="cms2";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
// انتخاب دیتابیس
mysql_query("SET CHARACTER SET  utf8",$dblink);
$dbresult=mysql_query("SELECT * FROM  jadval where id=$id",$dblink);
// انتخاب آی دی یا شماره ی عکس از جدول
while($record=mysql_fetch_assoc($dbresult))

{
echo "<div id='onvan-matlab'>";
echo ('<a href="id.php?id='.$record['id'].'"> '.$record['title'].'</a><br>');
echo "</div>";
echo "<br>";
echo "<div id=matlab>";
print ($record["msg"]);
echo "<br>";
echo ($record['date']);
echo "</div>";
echo "</div>";
}
mysql_close($dblink);
?>

----------


## ravand

خيلي ممنون آقاي شهركي بالاخره نشستم روش كار كردم و تونستم اين مشكل رو هم حل كنم:
<?php
$id= $_GET['id'];
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = '';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
	$template = str_replace('<-BlogAndPosttozih->',$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
    $dbresult = mysql_query("SELECT * FROM  jadval where id=$id");
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br>';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
    }
	 $blogs_text .= $blogtemp;
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>

----------


## MMSHFE

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

----------


## ravand

يه چيز ديگه هم فهميدم.
الگوريتم اين كاري كه من ميخوام بكنم اينه. الان من يه هدر براي سايت ميخوام با منو و قسمت ارسال مطلب.
من بايد با select يه limit يك بدم به هدر چون ما يه هدر بيشتر براي سايت نميخوايم بعد مثلا با select منو رو هم انتخاب كنم و يه limit 5 بهش بدم يعني پنج تا لينك در قسمت منو باشه . بعد براي قسمت عنوان مطلب و خود مطلب هم به همين شكل. اينطوري ديگه مثل همون اول كه قالبم رو بهتون نشون دادم مثلا عنوان سايت چند بار تكرار نميشه چون من يه محدوديت يك بهش دادم يعني يه بار تكرار شه
نظر شما چيه؟

----------


## ravand

اين روشي كه گفتم كار نكرد. مشكل اينجاست كه من فقط كدهاي شما رو كپي كردم ولي در واقع نفهميدم شما چيكار كردي؟!
مثلا اين توابع براي چي استفاده شدن؟
strpos و substr.

----------


## ravand

سلام
اين فايل id.php رو كه تغيير دادم مشكل اصليش حل شده ولي الان كه مي بينم در قسمت منوها وقتي روي يك منو كليك ميكنم بعد كه اون پست فقط باز ميشه منوي همون پست هم كنارش باز ميشه به جاي اينكه تمام منوها باشه فقط يكي هست.
به تصوير نگاه كنيد بخصوص منوها :
id.jpg
يه لينك منو بيشتر نيست .
هر كاريش كردم نشد.

----------


## djsaeedkhan

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

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

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="fa">
</head>

<?php
    $servername = 'localhost';
    $dbname = 'data';
    $user = 'root';
    $pass = '';
    $title = 'وبلاگ من';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
//----------------------------------------------------------------------------------------
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');




//----------------------------------------------------------------------------------------
    if(!isset($_GET["id"])){
    	$dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    	
    }
    else
    {
	    $iid=$_GET["id"];
    	$sql="SELECT * FROM `jadval` where id={$iid}";
    	$dbresult = mysql_query($sql);
    }
   	 while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br/>';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
        $blogs_text .= $blogtemp;
    }
    $template = str_replace('<-BlogAndMenu->', $menu, $template);

    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>

----------


## ravand

داداش ايني كه شما نوشتي مشكل ما رو حل نكرد . كدهايي كه من گذاشتم كار ميكرد فقط
من ميخواستم منوها در فايل id.php يكي نباشه چند تا باشه. ايني هم كه شما نوشتي برعكس قبلي توضيحات سايت رو هم چاپ نميكنه. 
من ميدونم بايد چه اتفاقي بيوفده كه مشكل حل شه ولي نميدونم چجوري كدنويسيش رو انجام بدم. من بايد كد هايي رو كه براي قسمت زير نوشته شده و مخصوص  منوها و در واقع عنوان مطالب هست رو از عنوان مطلب و خود مطلب جدا كنم و مثلا limit 5 در يك select بهش بدم. 
$template = str_replace('<-BlogAndMenu->', $menu, $template);
هر كاري كردم نشد. ديگه دارم قاطي ميكنم  :لبخند گشاده!:

----------


## djsaeedkhan

خوب یه کاری کن
شما یه کوری نوشتی و هرچی بوده توی صفحت مقدار دهی شده
بیا یه کاری کن
یه کوری بنویس و یه سری رو مقدار بده
و یه کوری دیگه بذار و بقیه رو مقدار بده

شما اومدی هر چی بوده پشت سر یه کوری مقدار دهی کردی.
     while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
        $blogs_text .= $blogtemp;


بشین درستش کن اگر مشکلت حل نشد بگو فردا روش کار کنم.

----------


## امیـرحسین

جناب Ravand عزیز،‌ شما اون اندازه‌ای که برای این کار نیازه، دانش داری و این کاری که میخوای انجام بدی اصلا چیز پیچیده‌ای نیست که بخواد اینقدر اذیتت کنه.
بهترین و سریعترین راهی که برای حل مشکلت پیشنهاد کنم استفاده از کاغذ و خودکاره! بشین اول خوب فکر کن ببین سر و ته سیستم کجاست و چطور باید باشه.
برای نمونه، مشکلی که تو پست اول تاپیک داشتی دقیقا برای همین بود! شما قالب رو توی Loop گذاشته بودی و تکرار میشد و کافی بود یکم بهش دقت میکردی و متوجه میشدی که داری راه رو غلط میری.

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

----------


## ravand

من دلم ميخواست يه نفر پيدا شه بياد كمكم كنه نه اينكه شروع كنه به نصيحت كردن  :لبخند گشاده!: 
من خودم به الگوريتمش فكر كردم و چندين بار كدهاش رو تغيير دادم ولي به نتيجه اي نرسيدم. اگه اون كاغذهايي كه سياه كردم نشونت بدم ديگه اين حرف رو نميزني. من فعلا توي موتور قالب اين مشكل رو دارم .شما خودتون شخصا همچين چيزي طراحي كرديد؟ اگه كرديد بديد ما هم يه نگاهي بندازيم!

----------


## MMSHFE

```
<?php
    $id = $_GET['id'];
    $servername = 'localhost';
    $dbname = 'data';
    $user = 'root';
    $pass = '';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
    $template = str_replace('<-BlogAndPosttozih->',$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br/>';
        $matlab = $record['msg'];
    }
    $id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
    $dbresult = mysql_fetch_assoc(mysql_query("SELECT * FROM `jadval` WHERE (`id`='{$id}')"));
    $template = str_replace('<-BlogAndTitleMatlab->', $dbresult['title'], $template);
    $template = str_replace('<-BlogAndPostmatlab->', $dbresult['msg'], $template);
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    echo $template;
?>
```

بعضی جاها صبر جواب نمیده  :چشمک:

----------


## djsaeedkhan

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

----------


## ravand

مشكل من با اين كد حل شد ، اگه ديديد كه تمام عناوين و پست ها چاپ نشده براي اينه كه ما خودمون اينو خواستيم. شما اگه سايت ها و وبلاگ ها رو هم ديده باشيد همينطوريه. ما براي اين كار يه قسمت آرشيو براي قالب ميسازيم كه فرد بتونه توي اون قسمت بقيه ي مطالب رو بخونه.
خط زير باعث ميشه كه فقط 5 تا پست توي صفحه ي اصلي باشه.
$dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
اگه شما نمي خواي اينطوري باشه به اين شكل بنويس:
$dbresult = mysql_query('SELECT * FROM `jadval`');
بازم از شما دوست عزير و آقاي شهركي كه در حل اين مشكل به من كمك كردن متشكرم.

----------


## djsaeedkhan

با سلام
اینم یه Template Engine ممکنه کار کسی رو راه بندازه

----------


## ravand

من امدم فايل id.php رو به اين صورت تغييرش دادم تا براي هر پست يك قسمت نطر دهيد بذارم .  مثلاً پست يك نظر مختص خودش رو نداره ، و نظر دو هم در پست يك و هم پست دو ديده ميشه. خيلي تلاش كردم حلش كنم نشد:
<?php
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = '';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
	 $naz=mysql_query("SELECT * FROM nazar WHERE showpost='1'");
	while($sabt = mysql_fetch_assoc($naz)) {
	$nazar='<a href="id.php?id='.$sabt['id'].'"> '.$sabt['id'].'</a><br>'
	.$sabt['name'].'<br>'.$sabt['email'].'<br>'.$sabt['web'].'<br>'.$sabt['msg'].'
		 <form action="http://localhost/cms/nicEdit/nazar/get.php" method="post">
نام:<input type="text" name="name"><br>
وب:<input type="text" name="web"><br>
ايميل:<input type="text" name="email"><br>
<textarea height="100" name="msg"  cols="50" ></textarea><br>
<input type="submit" value="ارسال">
</form>';
	}
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
    $template = str_replace('<-BlogAndPosttozih->',$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br/>';
        $matlab = $record['msg'];
    }
    $id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
    $dbresult = mysql_fetch_assoc(mysql_query("SELECT * FROM `jadval` WHERE (`id`='{$id}')"));
    $template = str_replace('<-BlogAndTitleMatlab->', $dbresult['title'], $template);
    $template = str_replace('<-BlogAndPostmatlab->', $dbresult['msg'], $template);
	
	$template = str_replace('<-BlogAndnazar->', $nazar, $template);
	
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    echo $template;
?>


تصوير رو ببينيد: نظر با آي دي 2 در پست يك هست:
id.jpg
متشكرم.

----------


## MMSHFE

Template جدید رو هم میشه بگذارین؟ فکر کنم اون هم تغییر کرده.

----------


## ravand

اين فايل template.htm هست:


```
<!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" />
	<link rel="alternate" type="application/rss+xml"  href="test.php" />
<style type="text/css">
    a {
        text-decoration: none;
    }
    #asli {
        border: solid 2px #b013f1;
        width: 580px;
    }
    #mokaab {
        width: 570px;
    }
    #header {
        background-color: #cc99ff;
        border: solid 3px #29c60a;
        color: blue;
        font-family: tahoma;
        font-size: 8pt;
        height: 60px;
        line-height: 1em;
        margin-top: 5px;
        padding-top: 18px;
        text-align: center;
        width: 565px;
    }
    #chap {
        border: 0px;
        float: left;
        margin-top: 10px;
        width: 485px;
    }
    #onvan-matlab {
        border: solid 2px #0a54ea;
        float: left;
        text-align: right;
        width: 477px;
    }
    #matlab {
        border: solid 2px #ea0a2f;
        float: left;
        margin-bottom: 10px;
        text-align: right;
        width: 477px;
		direction:rtl;
    }
    #menu {
        border: solid 2px #0a54ea;
        float: right;
        margin-top: 10px;
        text-align: center;
        width: 70px;
    }
    #title {
        border: solid 2px #0a54ea;
        font-family: Tahoma;
        font-size: 8pt;
        text-align: center;
        width: 67px;
    }
	
	#mbody {padding: 15px 16px 5px 6px; line-height: 150%}
	
</style>
<title><-BlogAndPostTitle-></title>
</head>
<body>
<div align="center">
<div id="asli">
<div id="header">
<-BlogAndPostTitle->
<br>
<-BlogAndPosttozih->
</div>
<div align="center">
<div id="mokaab">
<div id="menu">
<div id="title">
موضوعات
</div>
<-BlogAndMenu->
<a href="http://localhost/test.php">rss</a>
</div>
<div id="chap">
<!-- start blogs -->
<div id="onvan-matlab">
<-BlogAndTitleMatlab->
</div>
<div id="matlab">
<div id="mbody">
<-BlogAndPostmatlab-><br>
<-BlogAndnazar->
</div>
</div>
<!-- end blogs -->
</div>
<div style="clear: both;font-size: 2pt">
</div>
</div>
</div>
</div>
</div>
</body>
</html>
```

فقط <-BlogAndnazar-> رو اضافه كردم.

----------


## MMSHFE

خوب این فکر میکنم اشتباه باشه چون نظرات فقط توی id.php ظاهر میشه. درسته؟

----------


## ravand

بله درسته فقط توي همين فايل id.php قرارش دادم.
يعني مشكل من چيه؟

----------


## MMSHFE

این کد رو امتحان کنید:

<?php
    $id = $_GET['id'];
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = 'barnamenevis';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
    $template = str_replace('<-BlogAndPosttozih->',$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br/>';
        $matlab = $record['msg'];
    }
    $id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
    $dbresult = mysql_fetch_assoc(mysql_query("SELECT * FROM `jadval` WHERE (`id`='{$id}')"));
    $nazar = '';
    $comments = mysql_query("SELECT * FROM `nazar` WHERE (`post_id`='{$id}' AND `showpost`='1')");
    if($comments && mysql_num_rows($comments) > 0) {
        while($comment = mysql_fetch_assoc($comments)) {
            $nazar .= $comment['id'].'<br/>';
            $nazar .= $comment['name'].'<br/>';
            $nazar .= $comment['email'].'<br/>';
            $nazar .= '<a href="'.$comment.'" target="_blank">'.$comment['web'].'</a><br/>';
            $nazar .= $comment['msg'].'<br/><hr/>'.PHP_EOL;
        }
        $nazar .= '<form action="nazar/get.php" method="post">';
        $nazar .= 'نام:<input type="text" name="name"/><br/>';
        $nazar .= 'وب:<input type="text" name="web"/><br/>';
        $nazar .= 'ايميل:<input type="text" name="email"/><br/>';
        $nazar .= '<textarea height="100" name="msg"  cols="50"></textarea><br/>';
        $nazar .= '<input type="submit" value="ارسال"/>';
        $nazar .= '</form>';
    }
    $template = str_replace('<-BlogAndTitleMatlab->', $dbresult['title'], $template);
    $template = str_replace('<-BlogAndPostmatlab->', $dbresult['msg'], $template);
    $template = str_replace('<-BlogAndNazar->', $nazar, $template);
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    echo $template;
?>

همونطور که میبینید، از فیلد post_id برای استخراج نظرات مرتبط با مطلب استفاده شده. اگه اسم فیلد شما فرق میکنه، کد رو متناسب با اون تغییر بدین. موفق باشید.

----------


## ravand

چيزي كه من فهميدم اينه كه id جدول نظرات رو با id جدول ارسال مطلب مساوي كنم مثل خط زير:
SELECT * FROM `nazar` WHERE (`post_id`='{$id}'
من توي جدولم به جاي post_id از id استفاده كردم با اينكه جايگزينش كردم مشكل حل نشد.

----------


## ravand

من امروز دوباره نشستم و كد رو بررسي كرد و ديدم وقتي روي لينك با آي دي 2 كليك ميكنم صفحه باز ميشه ولي وقتي روي لينك با آي دي يك كليك ميكنم ديگه صفحه ي يك نمياد براي اينك لينك با آي دي يك يا در واقع صفحه ي يك بياد بايد دكمه ي بك مرورگر رو كليك كنم به صفحه ي اصلي برم و بعد روي اين لينك يك كليك كنم. تا باز بشه.

----------


## MMSHFE

کد کاملتون رو با یک export از دیتابیس میگذارین؟

----------


## ravand

در فايل id.php اين خط رو تغيير دادم :
    $comments = mysql_query("SELECT * FROM `nazar` WHERE (`id`='{$id}' AND `showpost`='1')");
اينم صفحه اصلي : tag.php
<?php
    $servername = 'localhost';
    $dbname = 'cms2';
    $user = 'root';
    $pass = '';
    $menu = '';
    mysql_connect($servername, $user, $pass) or die('Connection error');
    mysql_select_db($dbname) or die('DB error');
    mysql_query('SET NAMES \'utf8\'');
    $header = mysql_fetch_assoc(mysql_query('SELECT * FROM `header`'));
    $title = $header['onvan'];
    $tozih = $header['tozih'];
	 $naz=mysql_query('SELECT * FROM nazar');
	while($sabt = mysql_fetch_assoc($naz)) {
	$nazar='<a href="id.php?id='.$sabt['id'].'"> '.link.'</a>';
	}
    $template = file_get_contents('template.htm');
    $template = str_replace('<-BlogAndPostTitle->', $title, $template);
	$template = str_replace('<-BlogAndPosttozih->',$tozih, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    $blogs_text = '';
    $dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
    while($record = mysql_fetch_assoc($dbresult)) {
        $matlabtitle = '<a href="id.php?id='.$record['id'].'">'.$record['title'].'</a>';
        $menu .= $matlabtitle.'<br>';
        $matlab = $record['msg'];
        $blogtemp = substr($template, $blog_start, $blog_end - $blog_start);
        $blogtemp = str_replace('<-BlogAndTitleMatlab->', $record['title'], $blogtemp);
        $blogtemp = str_replace('<-BlogAndPostmatlab->', $record['msg'], $blogtemp);
		
		$blogtemp = str_replace('<-BlogAndnazar->', $nazar, $blogtemp);
		
        $blogs_text .= $blogtemp;
    }
    $template = str_replace('<-BlogAndMenu->', $menu, $template);
    $blog_start = strpos($template, '<!-- start blogs -->');
    $blog_start = strpos($template, '<div id="onvan-matlab">', $blog_start);
    $blog_end = strpos($template, '<!-- end blogs -->');
    echo substr($template, 0, $blog_start);
    echo $blogs_text;
    echo substr($template, $blog_end);
?>
اينم ديتابيس :
cms2.sql.zip
متشكرم.

----------


## ravand

ببخشيد مهندس.
يعني اين كدي كه شما نوشتيد الان داره براتون كار ميكنه؟ من يه بار ديگه مشكلم رو ميگم چون فكر ميكنم شما منظور منو متوجه نشديد.
اين خط رو نگاه كنيد:
$comments = mysql_query("SELECT * FROM `nazar` WHERE (`id`='{$id}' AND `showpost`='1')");
من مقدار id جدول jadval رو داخل متغيير $id قرار دادم و اين متغيير رو برابر id جدول nazar قرار دادم .
حالا برخي از افراد بهم ميگن كه من بايد يك فيلد براي جدول nazar بسازم و مقدار id جدول jadval رو براي اين فيلد ارسال كنم.
متشكرم.

----------

