PDA

View Full Version : سوال: مشكل تكرار شدن كل قالب



ravand
شنبه 03 دی 1390, 17:05 عصر
سلام
كدهاي زير رو كه مي بينيد باعث ميشه كل قالب من چند بار تكرار بشه در صورتي كه من ميخوام فقط عنوان مطلب و خود مطلب به همراه همديگه تكرار بشن.
اين كدهاي 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
یک شنبه 04 دی 1390, 10:10 صبح
نشستم فكرام رو كردم ديدم اگه توي همون حلقه از div استفاده كنم و بخشي از كدهاي قالبم رو اونجا بنويسيم مشكلم حل ميشه ولي چه فايده؟ من ميخواستم از تگ در كدهاي قالبم استفاده كنم كه طراح قالب مجبور نباشه توي همه ي كدهاي سايت دست ببره.
كسي راه حل بهتري سراغ نداره؟

MMSHFE
یک شنبه 04 دی 1390, 11:20 صبح
با سلام، یک راه دیگه هم دارین: کل مطلب رو (شامل عنوان و متن و...) داخل یک تگ سفارشی دیگه بگذارین و بعد، موقع خوندن قالب، اون تگ رو با کمک حلقه تکرار کنید. برای مثال:
کد 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 = 'ncis';
$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
یک شنبه 04 دی 1390, 14:21 عصر
متشكر داداش.
من كد شما رو امتحان كردم ولي جواب نميده.
علتشم اينه كه فايل template.htm براي همه ي اين تگ ها فراخواني ميشه . و من بايد براي هر كدوم از اين تگ ها يه فايلي مثل همين فايل template.htm جداگانه بسازم و حتي تغييرش بدم. ولي من نميخوام اين كار رو بكنم . چون اگه اين كار رو بكنم ديگه استفاده از تگ هم معنايي نداره.
خروجي كدهاي شما به اين شكلي كه در تصوير هست درآمد.
يعني راهي براي حل اين مشكل نيست؟ :ناراحت: فكر كنم يه هفته اي هست دارم روش كار ميكنم :لبخند:
79683

MMSHFE
یک شنبه 04 دی 1390, 15:03 عصر
با سلام مجدد، اون خطای Warning بخاطر حذف نکردن دستور mysql_close هست که ضروری نیست و بهتره حذفش کنید چون اتصالها به MySQL بطور خودکار با پایان یافتن اسکریپت، قطع میشه.
اما درمورد کد، من دقیقاً تستش کردم:
79691
البته چون به دیتابیس شما دسترسی نداشتم، خودم دو سطر رو دستی ساختم. درصورت تمایل برای تطبیق کد با ساختار شما، یک 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
یک شنبه 04 دی 1390, 15:19 عصر
كد شما رو امتحان كردم و اين شكلي شد.
79692


-- 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
یک شنبه 04 دی 1390, 16:35 عصر
با سلام، این کد رو تست کنید:
قالب صفحه:


<!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
یک شنبه 04 دی 1390, 18:05 عصر
خيلي ممنون داداش.
مشكلم حل شد. ولي يه مشكلي هست اونم چاپ عنوان قالب هست.
الان شما يه متغيير $title رو نوشتيد و يه متني به صورت رشته بهش داديد.
ولي من اگه بخوام يه متني رو براي قالب ارسال كنم چجوري بايد اين كار رو بكنم؟
الان اين كدهاي عنوان هست:

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

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

ravand
یک شنبه 04 دی 1390, 18:26 عصر
يعني بايد يك كد چاپ مطلب ديگه براش بذارم؟ من هر وقت خواستم يه مطلبي رو چاپ كنم از همين روش كه شما براي اين كدها گذاشتيذ استفاده كردم. كه وقتي مطلبي بخواد چاپ شه داخل حلقه قرار بگيره.

MMSHFE
دوشنبه 05 دی 1390, 07:49 صبح
نه قرار نیست کد جداگانه ای بنویسید. توی دیتابیس یک جدول دیگه برای تنظیمات وبلاگ درست کنید و مواردی مثل عنوان وبلاگ و... رو توی اون ذخیره کنید. مثلاً جدول مربوطه میتونه به اسم 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
دوشنبه 05 دی 1390, 10:28 صبح
راستش رو بخوايد من از كدهاي شما سر در نياوردم. و نميدونم چجوري بايد اين كدها رو داخل كدهاي خودم قرار بدم تا عنوان سايت چاپ بشه.
بهتره اينطوري بگم. من يه جدول ساختم با عنوان header و با دو فيلد به نام هاي onvan كه براي عنوان سايت هست و tozih براي توضيحات سايت كه اين توضيح زياد مهم نيست. حالا چجوري بايد اين كدهايي كه شما گذاشتيد رو داخل كدهاي قبلي بذارم با اين مقادير ديتابيس؟
من از اين مقاديري كه نوشتيد چيزي سر در نياوردم:
مثلا اين : `value`و , 0, 0
متشكرم.

MMSHFE
دوشنبه 05 دی 1390, 14:20 عصر
با سلام، هرچند ساختار جدولی که برای تنظیمات گذاشتین، بهینه نیست ولی در کل، طبق ساختار جدول شما، این کد رو امتحان کنید:


<?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
دوشنبه 05 دی 1390, 14:36 عصر
متشكر
نميدونم چرا اخطار ميده سعي كردم حلش كنم ولي نتونستم.
براي اين خطر ارور ميده :

$title = $header['onvan'];
از اين ارور هاي STRING

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

ravand
سه شنبه 06 دی 1390, 10:05 صبح
ببخشيد من ديروز اصلاً فراموش كردم اينو بگم.
من اول تاپيك نوشته بودم ميخوام اگه بشه از كدهاي قالب توي اين كدهاي php استفاده نكنم. چون ميخوام يه نفر كه قالب رو تغيير ميده كدهاش رو فقط توي پوشه ي temp.htm بذاره و توي كدهاي php نذاره. مثلاً الان توي كدهايي كه شما نوشتيد اين خط نوشته شده كه من ميخوام فقط توي كدهاي html باشه.

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

MMSHFE
سه شنبه 06 دی 1390, 10:43 صبح
با سلام، کدی که گذاشتم که درست نشون میده:
79773
دقت کنید که این ادیتور جدید و (معذرت میخوام) مزخرف سایت برنامه نویس باعث میشه تگ 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
سه شنبه 06 دی 1390, 11:34 صبح
ببخشيد كه من اين همه سوال مي پرسم :لبخند:
آخه من كم تجربه ام
يعني شما از <"div id="onvan-matlab> به عنوان تگ استفاده كرديد؟ درست فهميدم؟

MMSHFE
سه شنبه 06 دی 1390, 19:31 عصر
بعنوان تگ نه چون خودش تگ هست. توی کد PHP از اون برای پیدا کردن محل شروع حلقه جهت نوشتن مطالب وبلاگ، استفاده کردم.

ravand
پنج شنبه 08 دی 1390, 20:00 عصر
الان به اين كدها نگاه كنيد:

<?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
شنبه 10 دی 1390, 11:28 صبح
يه اشتباهي كه كردم اين بود كه بايد تاريخ ميلادي رو در ديتابيس ثبت ميكردم كه نكردم بعد از اين كار بايد تاريخ ميلادي رو به شمسي تبديل ميكردم . توي خيلي از سايت ها ديدم كه به جاي id از تاريخ استفاده كردن . چون مي بينم ديگه اين روش كارايي خودش رو از دست داده . حدااقل اينجا كه من ميخوام با تگ كار كنم.

'<a href="id.php?id='.$record['id'].'">'.$record['title'].'

ravand
پنج شنبه 15 دی 1390, 19:38 عصر
من قبلاً كدهاي فايل 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
چهارشنبه 21 دی 1390, 14:21 عصر
خيلي ممنون آقاي شهركي بالاخره نشستم روش كار كردم و تونستم اين مشكل رو هم حل كنم:

<?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
چهارشنبه 21 دی 1390, 16:44 عصر
خیلی خوبه. گاهی اوقات صبر کردن و فرصت دادن به افراد برای کسب نتیجه، بهتر جواب میده :چشمک:

ravand
چهارشنبه 21 دی 1390, 16:56 عصر
يه چيز ديگه هم فهميدم.
الگوريتم اين كاري كه من ميخوام بكنم اينه. الان من يه هدر براي سايت ميخوام با منو و قسمت ارسال مطلب.
من بايد با select يه limit يك بدم به هدر چون ما يه هدر بيشتر براي سايت نميخوايم بعد مثلا با select منو رو هم انتخاب كنم و يه limit 5 بهش بدم يعني پنج تا لينك در قسمت منو باشه . بعد براي قسمت عنوان مطلب و خود مطلب هم به همين شكل. اينطوري ديگه مثل همون اول كه قالبم رو بهتون نشون دادم مثلا عنوان سايت چند بار تكرار نميشه چون من يه محدوديت يك بهش دادم يعني يه بار تكرار شه
نظر شما چيه؟

ravand
چهارشنبه 21 دی 1390, 21:23 عصر
اين روشي كه گفتم كار نكرد. مشكل اينجاست كه من فقط كدهاي شما رو كپي كردم ولي در واقع نفهميدم شما چيكار كردي؟!
مثلا اين توابع براي چي استفاده شدن؟
strpos و substr.

ravand
پنج شنبه 22 دی 1390, 11:24 صبح
سلام
اين فايل id.php رو كه تغيير دادم مشكل اصليش حل شده ولي الان كه مي بينم در قسمت منوها وقتي روي يك منو كليك ميكنم بعد كه اون پست فقط باز ميشه منوي همون پست هم كنارش باز ميشه به جاي اينكه تمام منوها باشه فقط يكي هست.
به تصوير نگاه كنيد بخصوص منوها :
80634
يه لينك منو بيشتر نيست .
هر كاريش كردم نشد.

djsaeedkhan
پنج شنبه 22 دی 1390, 19:16 عصر
با سلام
دوست عزیز روش کار کردم
ولی متاسفانه چون زیاد تمپ کار نکردم نمی تونم جواب درستی بهت بدم
ولی چیزی که مهمه اینه که باید کوری های هر دو قسمت رو از هم جدا کنی
یعنی یه کوری مطلب مورد نظر رو بگیره و یکی هم عناوین سمت راست رو بگیره
اینجوری می تونی حتی چند تا کوری هم یک جا استفاده کنی

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


<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
پنج شنبه 22 دی 1390, 19:26 عصر
داداش ايني كه شما نوشتي مشكل ما رو حل نكرد . كدهايي كه من گذاشتم كار ميكرد فقط
من ميخواستم منوها در فايل id.php يكي نباشه چند تا باشه. ايني هم كه شما نوشتي برعكس قبلي توضيحات سايت رو هم چاپ نميكنه.
من ميدونم بايد چه اتفاقي بيوفده كه مشكل حل شه ولي نميدونم چجوري كدنويسيش رو انجام بدم. من بايد كد هايي رو كه براي قسمت زير نوشته شده و مخصوص منوها و در واقع عنوان مطالب هست رو از عنوان مطلب و خود مطلب جدا كنم و مثلا limit 5 در يك select بهش بدم.

$template = str_replace('<-BlogAndMenu->', $menu, $template);
هر كاري كردم نشد. ديگه دارم قاطي ميكنم :لبخند:

djsaeedkhan
پنج شنبه 22 دی 1390, 19:41 عصر
خوب یه کاری کن
شما یه کوری نوشتی و هرچی بوده توی صفحت مقدار دهی شده
بیا یه کاری کن
یه کوری بنویس و یه سری رو مقدار بده
و یه کوری دیگه بذار و بقیه رو مقدار بده

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

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;


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

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

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

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

MMSHFE
شنبه 24 دی 1390, 15:30 عصر
<?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
شنبه 24 دی 1390, 16:44 عصر
سلام
نمی دونم کد بالا مشکل آقای ravand رو راه انداخت یا نه
ولی من تست کردم قسمت کناری رو کامل نمایش میده ولی در صفحه اصلی نتایج رو نمایش نمی ده. یعنی قراره در صفحه اصلی اسم و متن همه پست ها قرار داشته باشه قرار نداره

ravand
شنبه 24 دی 1390, 16:48 عصر
مشكل من با اين كد حل شد ، اگه ديديد كه تمام عناوين و پست ها چاپ نشده براي اينه كه ما خودمون اينو خواستيم. شما اگه سايت ها و وبلاگ ها رو هم ديده باشيد همينطوريه. ما براي اين كار يه قسمت آرشيو براي قالب ميسازيم كه فرد بتونه توي اون قسمت بقيه ي مطالب رو بخونه.
خط زير باعث ميشه كه فقط 5 تا پست توي صفحه ي اصلي باشه.

$dbresult = mysql_query('SELECT * FROM `jadval` ORDER BY `id` DESC LIMIT 5');
اگه شما نمي خواي اينطوري باشه به اين شكل بنويس:

$dbresult = mysql_query('SELECT * FROM `jadval`');
بازم از شما دوست عزير و آقاي شهركي كه در حل اين مشكل به من كمك كردن متشكرم.

djsaeedkhan
شنبه 24 دی 1390, 16:57 عصر
با سلام
اینم یه Template Engine ممکنه کار کسی رو راه بندازه

ravand
دوشنبه 08 اسفند 1390, 22:19 عصر
من امدم فايل 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 در پست يك هست:
83403
متشكرم.

MMSHFE
دوشنبه 08 اسفند 1390, 22:31 عصر
Template جدید رو هم میشه بگذارین؟ فکر کنم اون هم تغییر کرده.

ravand
سه شنبه 09 اسفند 1390, 09:05 صبح
اين فايل 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
سه شنبه 09 اسفند 1390, 15:26 عصر
خوب این فکر میکنم اشتباه باشه چون نظرات فقط توی id.php ظاهر میشه. درسته؟

ravand
سه شنبه 09 اسفند 1390, 15:28 عصر
بله درسته فقط توي همين فايل id.php قرارش دادم.
يعني مشكل من چيه؟

MMSHFE
سه شنبه 09 اسفند 1390, 15:46 عصر
این کد رو امتحان کنید:


<?php
$id = $_GET['id'];
$servername = 'localhost';
$dbname = 'cms2';
$user = 'root';
$pass = 'ncis';
$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
سه شنبه 09 اسفند 1390, 16:12 عصر
چيزي كه من فهميدم اينه كه id جدول نظرات رو با id جدول ارسال مطلب مساوي كنم مثل خط زير:

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

ravand
چهارشنبه 10 اسفند 1390, 19:40 عصر
من امروز دوباره نشستم و كد رو بررسي كرد و ديدم وقتي روي لينك با آي دي 2 كليك ميكنم صفحه باز ميشه ولي وقتي روي لينك با آي دي يك كليك ميكنم ديگه صفحه ي يك نمياد براي اينك لينك با آي دي يك يا در واقع صفحه ي يك بياد بايد دكمه ي بك مرورگر رو كليك كنم به صفحه ي اصلي برم و بعد روي اين لينك يك كليك كنم. تا باز بشه.

MMSHFE
چهارشنبه 10 اسفند 1390, 19:54 عصر
کد کاملتون رو با یک export از دیتابیس میگذارین؟

ravand
چهارشنبه 10 اسفند 1390, 20:00 عصر
در فايل 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);
?>
اينم ديتابيس :
83503
متشكرم.

ravand
یک شنبه 14 اسفند 1390, 09:10 صبح
ببخشيد مهندس.
يعني اين كدي كه شما نوشتيد الان داره براتون كار ميكنه؟ من يه بار ديگه مشكلم رو ميگم چون فكر ميكنم شما منظور منو متوجه نشديد.
اين خط رو نگاه كنيد:

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