موضوع: آموزش ساخت تریبون آزاد برای سایت

ahmadflasher

New Member
با سلام خدمت شما دوستان عزیز در این تاپیک قصد دارم سورسی رو براتون بذارم که خیلی جالبه.
اسم این برنامه رو میشه یه جورایی تریبون آزاد گذاشت .و در واقع شما می تونید اونو در گوشه سایت خود بذارید.
و افراد بیان تو سایتتون و نظر یا هر چیز نوشتنی رو بنویسند و همه افرار می توننن او نو ببینن.
تمامی توضیحات لازم رو در سورس آوردم.شما دوستان می تونید اونو طبق سلیقه خودتون توسعه هم بدید. مثلاً میتونید شکلکهای یاهو رو هم به اون اضافه کنید و....
huh.gif
embarrassed.gif
kiss.gif
cool.gif



خوب اول از همه باید دیتا بیس(جدول) مونو طراحی کنیم.من به طور آزمایشی یک رکورد رو تو اون ذخیره کردم .به صورت زیر:
کد:
CREATE TABLE `free_talking` (
  `name` varchar(25) NOT NULL,
  `email` varchar(50) NOT NULL,
  `comment` varchar(250) NOT NULL,
  `DATE` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `free_talking` (`name`, `email`, `comment`, `DATE`) VALUES 
('ahmadflasher', '[email protected]', 'salam dostan aziz. in yek azmayesh mibash.\r\nBa tashakor', '2007-11-25');
نوبت به نوشتن کد اصلی میرسه . اول ازهمه باید یک فرم با اچ تی ام ال طراحی کنیم و بعد پویا سازی را با پی اچ پی کامل کنیم. به صورت زیر:(تمامی توضیحات لازم در متن سورس به صورت کاملا واضح داده شده است) سپس فایل را با یک نام ذخیره و اجرا نمایید

کد:
<?php
##############################################################
// Copy Right Free_talking By Ahmad Najafpour 2007 All reserved
// This is persent to you (Users=my freinds) in majidonline.com
 
// My temporary website's:www.devilboys.ir , www.ahmaflasher.tk
// See my Flash clips www.devilboys.ir/www/clip.php
// Contact me by: [email protected]
// Using this source And enjoy it
##############################################################
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>تریبون آزاد</title>
<style type="text/css">
<!--
body,td,th {
    font-family: tahoma;
    font-size: 11px;
}
body {
    background-color: #B5C3DE;
}
a:link {
    text-decoration: none;
}
a:visited {
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
}
a:active {
    text-decoration: none;
}
-->
</style>
<!--------------------------------------جاوا اسکریپت ------------------------------>
<!----------تابع برای نمایش تعداد کاراکتر باقی مانده برای تایپ پیغام ---------------->
<SCRIPT language=JavaScript>
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit)
field.value = field.value.substring(0, maxlimit);
else
countfield.value = maxlimit - field.value.length;
}
</SCRIPT>
<!------------------------------ پایان جاوا اسکریپت ------------------->
</head> 

<body>
<p>
  <!------------------------------فرم اچ تی ام ال------------------->
</p>
<table width="208" height="200" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#FF0000">
  <tr>
    <td width="204" height="167" align="center" valign="middle" bgcolor="#CECFFF"> 
    <form action="<?php $PHP_SELF ?>" method="post" name="free_talk" id="free_talk">
        <table width="204" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#000000">
          <tr>
            <td width="200" bgcolor="#CCCCFF"><div align="center">
                <label>:نام<br>
                <input name="name" type="text" id="name">
                </label>
            </div></td>
          </tr>
          <tr>
            <td bgcolor="#CECFFF"><div align="center">
                <label>:ایمیل <br>
                <input name="mail" type="text" id="mail">
                </label>
            </div></td>
          </tr>
          <tr>
            <td bgcolor="#CECFFF"><div align="center">
                <div align="center">:پیغام<br>
                    <textarea name="comment" id="comment" onkeydown=textCounter(this.form.comment,this.form.descriptionleft,250); onkeyup=textCounter(this.form.comment,this.form.descriptionleft,250);></textarea>
                    <table width="200" border="0" align="center" cellpadding="0" cellspacing="0">
                      <tr>
                        <td><div align="center">
                            <INPUT style='BORDER-RIGHT: 0px; background-color:#CC99FF BORDER-TOP:0px;BORDER-LEFT:0px; BORDER-BOTTOM:0px;     FONT-SIZE: 10px; COLOR: #000; FONT-FAMILY:tahoma' maxLength=3 name=descriptionleft readOnly size=3 tabIndex=250 value=250>
                            <font face=tahoma style='font-size:9pt'>:</font><font face=tahoma style='font-size:9pt'>کاراکتر باقی مانده</font></div></td>
                      </tr>
                    </table>
                  <label>
                    <input type="reset" name="Submit2" value="پاکن" style="font-family:tahoma; font-size:12px">
                  </label>
                    <input type="submit" style="font-family:tahoma; font-size:12px"  name="Submit" value=" ارسال">
                </div>
            </div></td>
          </tr>
        </table>
      
    </form></td>
  </tr>
  <tr>
    <td bgcolor="#CECFFF">
 <div align="right">
<!-- ####################################### END OF HTML ###################################### -->

<?php
###############################################    START PHP SCRIPT #################################
//--------------------------------------- اتصال به بانک اطلاعاتی ------------------------------
$db=mysql_connect("localhost","root") or die("مشکل در اتصال به بانک اطلاعاتی");
mysql_select_db("yor data base name") or die("مشکل در اتصال به بانک اطلاعاتی");
//--------------------------------------------------------------------------------------------
//=============================== اگر دکمه ارسال کلیک شد عملیات زیر انجام شود  ==================

if(isset($_POST['Submit'])){
$name=$_POST['name'];
$mail=$_POST['mail'];
$comment=htmlspecialchars($_POST['comment']); 

//================================ نمایش پیغام خطا در صورت خالی بون فیلد ها ====================

if(empty($name)){
print("لطفا نام خود را بنویسید");
exit();
}
if(empty($comment)){
print("لطفا پیغام خود را بنویسید");
exit();
}
// تاریخ کنونی
$date=date("Y-m-d");
//================================== فیلترینگ کلمات زشت و ناپسند ====================

//-- باید دقت کنید که خط تیره بین کلمات را حذف نکنید . کلمات زشت میتوانند بیش از سه کلمه باشند شما به جای آنها کلمات زشت و یا هر چیزی را که می خواهید فیلتر شود را بنویسید.دقت شود دقیقا همین کلماتی که در متغیر نوشته شده اند فیلتر خواهند شد. حتی فاصله ها هم سنحیده می شود پس شما از هر باید با کلمات بازی کنید. مثلا کلمه "PHP" میتوا ند نوشته شود  "P  H  P" در این صورت خطایابی مشکل می شود.
//---در اینجا به جای کلمه زشت ستاره ذخیره میشود. شما میتوانید به جای این کار یک پیغام خطا به کاربر بدهید مثلاً اینکه نوشتن کلمات زشت بپرهیزید!!!!!
//-------------------------------------------------------------------------------
$badwords="کلمه زشت1-کلمه زشت دو-کلمه زشت سه";
$bws=explode("-",$badwords);
$end=count($bws);
for($x=0; $x<=$end; $x++){

$comment=str_replace($bws[$x],"***",$comment);

}
//====================================== ثبت اطلاعات به بانک اطلاعاتی=========================
if(!mysql_query("INSERT INTO free_talking (name,email,comment,DATE) VALUES ('$name','$mail','$comment','$date')")){
echo("متاسفانه مطلب شما ذخیره نشد . لطفا دوباره تلاش کنید");
}
else{
echo "<SCRIPT>alert('پیغام شما با موفقیت ثبت شد $name')</SCRIPT>";
}
//==========================================================================================
}
//################################### نمایش پیغامها ############################
//-----------------------------------بازیابی لجدو و رکوردها به  --------------------------

// در اینجا ما یاداشت ها بر اساس آخرین تاریخ می بینیم . شما می توانید با اندکی دستکاری آن را به صورت آخرین زمان ببیند . البته برای این کار بابد یک فیلد برای نگهداری زمان ایجاد نمایید.یا می توانید بانک اطلاعاتی خود را به صورت نزولی مرتب نمایید که من این کارو پیشنهاد می کنم.

//----------------------------------------------------------------------------------------
$query="select * from free_talking order by DATE desc";
$result=mysql_query($query);
// تعداد پیغامهای ارسالی بازیابی تعداد سطر های جدول 
$row=mysql_num_rows($result);
if($row<=0){
   echo "هیچ پیعامی تا به حال نوشته نشده است";
 }
else{
print ("<center><font color=red>$row :تعداد کل یاداشتها </font><br><hr color='#000000'></center>");
//--------------------------- نمایش پیغام ها به صورت اسکرول ----------------------
// روشهای مختلف برای نمایش یادداشت ها وجود دارد که من روش اسکرول را انتخاب کردم. شما می توانید یه صفحه جدا بسازید و محتویات برنامه ی( نمایش پیغامها)  در آن کپی کرده و ذخیره نمایید و در صفحه اصلی آن را به صورت iframe لود نمایید.
//--------------------------------------------------------------------------------
echo "<marquee align='top' scrolldelay='200' direction='up' height='100' width='200'  
onMouseOver='this.stop()' onMouseOut='this.start()' >";

//-------------------------------------------------------------------------------
// حقله ای برای خواندن فیلدهای تمامی رکوردها . این حلقه به اندازه تعداد تمامی ارسالی ها که قبلا بازیابی کردیم تکرار می شود. این  در ادامه یعنی اگر تعداد رکورها زیاد شوند شاید باعث کندی روند سرعت سایت شما شود . پس شما می توانید به جای $row  در شرط  حلقه یک عدد بگذارید .که این عدد در واقع نمایش تعداد رکوردها از آخر.مثلا 20 ؛ 20 ارسال آخر را نمایش می دهد!!!!
//-------------------------------------------------------------------------------
for($i=1; $i<=$row; $i++){
// بازیابی فیلدها و قرار دادن در متغیرها
$show=mysql_fetch_object($result);
$sname=$show->name;
$smail=$show->email;
$message=$show->comment;
$sdate=$show->DATE;
///-------------------------------  نمایش پایانی --------------------------
echo "<rtl><br><a href='mailto:$smail' title=':ارسال ایمیل به \n $sname'>$sname</a><b>:نام</b>";
echo "<br><b>پیغام:</b><br>$message";
echo "<font color='#990000'><br><br>$sdate :تاریخ نگارش</font>";
echo "<hr></hr>";
//------------------------------------- پایان حلقه ------------------------

//====================================== پایان نمایش =======================
}
echo "</marquee>";
}
// پایان کد نویسی یکشنبه 5 آذر 1386  ساعت 02:00 بامداد - مازندران - شهرستان نکا
##################################### END OF PHP #########################################
?>    
</div></td>
</tr>
</table>
<p align="center">Design by<a href="mailto:[email protected]"> Ahmad Najafpour</a></p>
</body>
</html>
:oops::oops::oops::oops::lol:
یا حق
 
آخرین ویرایش:

Goroop.ir

Member
احمد جان شما در قسمت فیلترینگ کلمات یک اشتباهی کرده اید . دوست عزیز شما از if استفاده کردید و در پرانتز هم از
$comment==trim($bws[$x])
استفاده کردید . دوست عزیز این == یعنی مساوی بودن دو کلمه با هم .
مثلا شما کلمه ی ali را در فیلتر گزاشتید و کاربری اومد و کلمه ی ali va mohamad را در فیلد نوشت و این باعث میشود تا از جلمه به سلامت از فیلترینگ رد بشه . ولی اگر کاربر فقط کلمه ی ali را تنها وارد کرد فیلترینگ ان را شناسایی میکند و ان را به صورت *** نمایش میدهد پس شما نبایسی از if استفاده میکردید در ضمن ()trim برای حذف کردن فضا های خالی میباشد .

امید وارم که متوجه شده باشی .


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

PHP:
// در جایی که نوشته شده کلمات مورد نظر شما باید کلمه های زشت را بنویسید و با "," از هم جدا کنید مثلا :
// namard,bad,bitarbiat,ashghal
 
$badwords="کلمات مورد نظر";
$bws=explode(",",$badwords);
$end=count($bws);
for($x=0; $x<=$end; $x++){
$comment=str_replace($bws[$x],"***",$comment);
}
 
آخرین ویرایش:

ahmadflasher

New Member
مرسی از نظرتون.
در مورد == حق با شماست . البته حق با من هم هست چون دیر وقت برنامه رو می نوشتم . یه چشمم تو خواب بود یه چشوم تو کامپیوتر . یه اشتباه دیگه هم کردم البته تو کامنت ها که ب جایه 1386 نوشتم 1356 .
اما در مورد trim من برای این trim رو گذاشتم تا فضای خالی دو طرف کلمه زشت رو بگیره و فقط کلمه رشت رو حذف کنه.
بازم اگه مشکلی داره بهم اطلاع بدید خوشحال میشم :)
 

ahmadflasher

New Member
دوستان مشکل حذف کلمات زشت از تریبون با راهنمایی Goroop.ir درست و ویرایش شد . دیگه فکر نکنم مشکلی باشه:)
 

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

بالا