آموزش - آموزش ساخت انجمن ساز ساده با php - انجمن PHP


ارسال پاسخ 
آموزش آموزش ساخت انجمن ساز ساده با php
۸-۷-۱۳۹۲, ۱۱:۳۱ بعدازظهر (آخرین ویرایش در این ارسال: ۱۱-۹-۱۳۹۲ ۰۴:۰۶ بعدازظهر، توسط حسن قاسمی نیا.)
ارسال: #1
آموزش ساخت انجمن ساز ساده با php
با سلام خدمت هم دوستان در این آموزش نیاز به فایل های :
1. create_topic.php
 2. add_topic.php
 3. main_forum.php
 4. view_topic.php
 5. add_answer.php
6. config.php

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


پیش نیاز این آموزش مطالعه کردن آموزش ارسال اطلاعات به دیتابیس در php می باشد .

برنامه xampp را اجرا کنید و گزینه های apach , mysql را start کنید .

یک دیتابیس با نام furom بسازید و کوئری زیر را در آن اجرا کنید : ( آموزش اجرای کوئری )

CREATE TABLE `forum_question` (
`id` int(4) NOT NULL auto_increment,
`topic` varchar(255) NOT NULL default '',
`detail` longtext NOT NULL,
`name` varchar(65) NOT NULL default '',
`email` varchar(65) NOT NULL default '',
`datetime` varchar(25) NOT NULL default '',
`view` int(4) NOT NULL default '0',
`reply` int(4) NOT NULL default '0',
PRIMARY KEY (`id`)
)  AUTO_INCREMENT=1 ;




CREATE TABLE `forum_answer` (
`question_id` int(4) NOT NULL default '0',
`a_id` int(4) NOT NULL default '0',
`a_name` varchar(65) NOT NULL default '',
`a_email` varchar(65) NOT NULL default '',
`a_answer` longtext NOT NULL,
`a_datetime` varchar(25) NOT NULL default '',
KEY `a_id` (`a_id`)
) ;


کد هر تیبل را جدا ایجاد کنید من بینشون فاصله گذاشتم که متوجه بشید . کد بالا برای راحتی کار شما و کوتاه شدن آموزش هست و ربطی به php نداره بنابر این آموزشی در رابطه باهاش داده نمیشه و میریم به مرحله بعد . بعد از اجرای کوئری بالا :

به C:\xampp\htdocs درون سیستم شما رفته و یک فولدر با نام furom بسازید .
یک فایل با نام create_topic.php کد زیر را درون آن قرار دهید و صفحه را سیو کنید :

<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
 <form id="form1" name="form1" method="post" action="add_topic.php">
 <td>
  <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
   <tr>
    <td colspan="3" bgcolor="#E6E6E6"><strong>Create New Topic</strong> </td>
   </tr>
   <tr>
    <td width="14%"><strong>Topic</strong></td>
    <td width="2%">:</td>
    <td width="84%"><input name="topic" type="text" id="topic" size="50" /></td>
   </tr>
   <tr>
    <td valign="top"><strong>Detail</strong></td>
    <td valign="top">:</td>
    <td><textarea name="detail" cols="50" rows="3" id="detail"></textarea></td>
   </tr>
   <tr>
    <td><strong>Name</strong></td>
    <td>:</td>
    <td><input name="name" type="text" id="name" size="50" /></td>
   </tr>
   <tr>
    <td><strong>Email</strong></td>
    <td>:</td>
    <td><input name="email" type="text" id="email" size="50" /></td>
   </tr>
   <tr>
    <td> </td>
    <td> </td>

    <td><input type="submit" name="Submit" value="Submit" />
 <input type="reset" name="Submit2" value="Reset" /></td>
   </tr>
 </table>
 </td>
 </form>
</tr>
</table>


این کد html هست با این حال نمیخوام سر سری ردش کنم یک توضیح کوتاه میدم :

در خط اول که تگ تیبل هست برای ساخت جدول استفاده میشه در خط دوم که تگ تی آر هست برای ساخت ستون افقی استفاده میشه در خط سوم تگ فرم هست که در اصل برای نوشتن فرم مشخصات هست ولی در اینجا برای ارسال نوشته ها به php استفاده شده در خط سوم که تی دی هست برای ساخت ستون عمودی (دیگه بعقیه تکراریه ) در خط 12 هم از تگ input برای نوشتن کارکتر یا همون متن استفاده شده تا انتها که 7 خط مونده به آخر از input استفاده شده با type که مقدارش submit هست که برای ارسال کل اطلاعات به پی اچ پی استفاده میشه . متد فرم هم post هستش . در ادامه همین 7 خط مانده به آخر از یک ایمپوت دیگر با تایپ reser استفاده شده که برای پاک کردن فرم استفاده میشه و کل اطلاعات وارد شده رو حذف میکنه . البته فقط از فرم از دیتابیس نه .

خب فایل کانفیگ هم بسازیم که برای نوشتن اطلاعات هاست هستش . یک فایل  با نام config.php بسازید و اطلاعات زیر را درون آن قرار دهید سپس فایل را سیو کنید :

<?php
$host="localhost";
$username="root";
$password="";
$db_name="furom";
?>


فایلی با نام add_topic.php ایجاد کنید کد زیر را درون آن قرار دهید :

<?php
include("config.php");
$tbl_name="forum_question";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$topic=$_POST['topic'];
$detail=$_POST['detail'];
$name=$_POST['name'];
$email=$_POST['email'];

$datetime=date("d/m/y h:i:s");

$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$result=mysql_query($sql);

if($result){
echo "ok<BR>";
echo "<a href=main_forum.php>View topic</a>";
}
else {
echo "ERROR";
}
mysql_close();
?>


در خط دوم از تابع اینکلود استفاده شده . با اینکلود کردن یک فایل php درون یک فایل دیگر اطلاعات فایلی که اینکلود میشود در فایل دوم که تابع در آن قرار دارد قابل استفاده است .

در خط دوم که یک متغیر ساده هستش که نام تیبل را براش در نظر گرفتیم

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

در خط ششم که دیتابیس رو انتخواب کردیم ( همچنین )

در خط هشتم تا خط یازدهم که مقدار های فرم اچ تی ام ال که در فایل کریت تاپیک قرار دایم رو توسط post دریافت میکنیم

در خط 13 که از تابع date استفاده شده که آموزشش ره به زودی در تنجمن قرار میدم ( آموزش کامل کار با این تابع منظورم هست )

در خط 15 که sql قرار داده شده که گفته شده تیبل forum_question و ولیو های (topic, detail, name, email, datetime) انتخواب بشه ( اینا در اون کوئر که در دیتابیس اجرا کردید وجود داشت ) و بر اساس متغیر هاییی که اطلاعات را توسط post دریافت کرده بودن ب هرکدام مقدار داده بشه .

در خط 16 هم این کوئری در متغیر result اجرا میشه

در خط 18 گفته شده که اگه متغیر result عملکردش برقرار بود یعنی موئری به درستی اجرا شد اطلاعات نشون داده بشه

در خط 19 و 20 که دو کد اکو قرار داده شده که یکی شما را به view topic هدایت میکند و دیگر ok را نشان میدهد

در خط 21 این شرط بسته شده و در خط 22 الس قرار گرفته که در صورت برقرار نبودن result یعنی درست عمل نکردن در خط 23 error نمایش داده بشه

فایلی با نام main_forum.php ایجاد کنید کد های زیر را درون آن ریخته و ذخیره کنید :

<?php
include("config.php");
$tbl_name="forum_question";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name ORDER BY id DESC";
$result=mysql_query($sql);
?>

<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
  <td width="6%" align="center" bgcolor="#E6E6E6"><strong>#</strong></td>
  <td width="53%" align="center" bgcolor="#E6E6E6"><strong>Topic</strong></td>
  <td width="15%" align="center" bgcolor="#E6E6E6"><strong>Views</strong></td>
  <td width="13%" align="center" bgcolor="#E6E6E6"><strong>Replies</strong></td>
  <td width="13%" align="center" bgcolor="#E6E6E6"><strong>Date/Time</strong></td>
</tr>

<?php while($rows=mysql_fetch_array($result)){ ?>
<tr>
  <td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td>

  <td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo
$rows['id']; ?>"><? echo $rows['topic'];
?></a><BR></td>
  <td align="center" bgcolor="#FFFFFF"><? echo $rows['view']; ?></td>
  <td align="center" bgcolor="#FFFFFF"><? echo $rows['reply']; ?></td>
  <td align="center" bgcolor="#FFFFFF"><? echo $rows['datetime']; ?></td>
</tr>

<?php }
mysql_close();
?>


از خط یک تا 6 که مثل آموزش قبلی هستش .

خط 8 کوئری قرار داده شده به این صورت که جدول forum_question انتخواب بشه و محتویاتش بر اساس آی دی ها نشون داده بشن . یعنی به ترتیب آی دی ها ( آیدی تو خود جدول اضافه شده به هر تاپیک آیدی خواصی داده میشه )

در خط 9 باز کوئری در متغیر result اجرا شده

در ادامه تا خط 20 که یک تیبل با چند استایل ساده هست

در خط 21 از حلقه while برای نمایش استفاده شده ( در این حلقه از تابع mysql_fetch_array استفاده شده که با توجه به ولیو که بهش داده میشه هر ولیو درون هاست را یک قسمتی حساب میکنه و مثل اگه 5 تا تاپیک ارسال شده باشه حلقه را تا 5 بار تکرار میکنه )

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



فایلی با نام view_topic.php ایجاد کرده کد زیر را درون آن قرار دهید :

<?php

include("config.php");
$tbl_name="forum_question";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$id=$_GET['id'];

$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

$rows=mysql_fetch_array($result);
?>

<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bordercolor="1" bgcolor="#FFFFFF">
<tr>
<td bgcolor="#F8F7F1"><strong><? echo $rows['topic']; ?></strong></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><? echo $rows['detail']; ?></td>
</tr>

<tr>
<td
 bgcolor="#F8F7F1"><strong>By :</strong> <? echo
$rows['name']; ?> <strong>Email : </strong><? echo
$rows['email'];?></td>
</tr>

<tr>
<td bgcolor="#F8F7F1"><strong>Date/time : </strong><? echo $rows['datetime']; ?></td>
</tr>
</table></td>
</tr>
</table>
<BR>

<?php

$tbl_name2="forum_answer";

$sq2="SELECT * FROM $tbl_name2 WHERE question_id='$id'";
$result2=mysql_query($sq2);

while($rows=mysql_fetch_array($result2)){
?>

<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td bgcolor="#F8F7F1"><strong>ID</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_id']; ?></td>
</tr>
<tr>
<td width="18%" bgcolor="#F8F7F1"><strong>Name</strong></td>
<td width="5%" bgcolor="#F8F7F1">:</td>
<td width="77%" bgcolor="#F8F7F1"><? echo $rows['a_name']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Email</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_email']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Answer</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_answer']; ?></td>
</tr>
<tr>
<td bgcolor="#F8F7F1"><strong>Date/Time</strong></td>
<td bgcolor="#F8F7F1">:</td>
<td bgcolor="#F8F7F1"><? echo $rows['a_datetime']; ?></td>
</tr>
</table></td>
</tr>
</table><br>



<?php }

$sq3="SELECT view FROM $tbl_name WHERE id='$id'";
$result3=mysql_query($sq3);

$rows=mysql_fetch_array($result3);
$view=$rows['view'];

if(empty($view)){
$view=1;
$sq4="INSERT INTO $tbl_name(view) VALUES('$view') WHERE id='$id'";
$result4=mysql_query($sq4);
}

$addview=$view+1;
$sq5="update $tbl_name set view='$addview' WHERE id='$id'";
$result5=mysql_query($sq5);

mysql_close();
?>
<BR>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="add_answer.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td width="18%"><strong>Name</strong></td>
<td width="3%">:</td>
<td width="79%"><input name="a_name" type="text" id="a_name" size="45"></td>
</tr>
<tr>
<td><strong>Email</strong></td>
<td>:</td>
<td><input name="a_email" type="text" id="a_email" size="45"></td>
</tr>
<tr>
<td valign="top"><strong>Answer</strong></td>
<td valign="top">:</td>
<td><textarea name="a_answer" cols="45" rows="3" id="a_answer"></textarea></td>
</tr>
<tr>
<td> </td>
<td><input name="id" type="hidden" value="<? echo $id; ?>"></td>
<td><input
 type="submit" name="Submit" value="Submit"> <input type="reset"
name="Submit2" value="Reset"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>


از خط 1 تا 7 که مانند آموزش های قبلی هست

در خط 9 توسط get مقدار id های هر ارسال گرفته شده

در خط 11 کوئری درون متغیر sql1 قرار داده شده به این صورت که تیبل forum_question انتخواب شود اینجا توسط WHERE یک شرط قرار داده شده که آی دی ها باید با آیدی فرخوانی شده از دیتا برابر باشد .

در خط بعد این کوئری در متغیر result اجرا شده

در خط 14 از تابع mysql_fetch_array استفاده شده برای نمایش زیر مجمه های متغیر result که sql1 توست تابع mysql_query در آن اجرا شده بود

تا خط 41 که در صفحات قبل توضیح داده شد در خط 42 تیبل دوم خوانده شده که نام آن forum_answer میباشد .

در خط 44 کوئری در متغیر sql2 قرار داده شده که تیبل forum_answer انتخواب شود و شرط به این صورت میباشد که question_id باید برابر با آی دی های موجود درون دیتابیس باشد .

نکته : از خط 40 تا 84 برای نمایش پاسخ ها میباشد و از خط 86 تا آخر برای ارسال پاسخ جدید . قبل از این هم برای نمایش تاپیک بود .

دیگر کد ها در صفحات قبل  توضیح داده شده .

فایلی با نام add_answer.php ساخته کد های زیر را درونش قرار دهدی سپس فایل را سیو کنید :

<?php
include("config.php");
$tbl_name="forum_question";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$id=$_POST['id'];

$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);

if ($rows) {
$Max_id = $rows['Maxa_id']+1;
}
else {
$Max_id = 1;
}

$a_name=$_POST['a_name'];
$a_email=$_POST['a_email'];
$a_answer=$_POST['a_answer'];

$datetime=date("d/m/y H:i:s");


$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
$result2=mysql_query($sql2);

if($result2){
echo "Successful<BR>";
echo "<a href='view_topic.php?id=".$id."'>View your answer</a>";

$tbl_name2="forum_question";
$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
$result3=mysql_query($sql3);

}
else {
echo "ERROR";
}

mysql_close();
?>


تابع max() برای انتخواب بزرگترین میباشد و معمولا هم برای آی دی ها استفاده میشود که بزرگترین آیدی که درواقع آخرین ارسال میشود انتخواب شود و مورد استفاده قرار گیرد . بعدا در مورد این تابع یک تاپیک ایجاد میکنم ! کلا برای همه تابع هایی که باهاشون آشنایی دارم یک تاپیک جدا ایجاد میکنم چه تابع ساده باشه چه پر کاربرد .

از خط 1 تا 7 که مثل صفحات قبل هست که اموزش داده شد .

در خط 9 مقدار id را توسط post دریافت کرده اند و در متغیر id ذخیره کرده اند .

در خط 11 یک کوئری درون متغیر sql قرار داده شده که ماکزیمم یعنی بزرگترین آیدید تیبل forum_answer انتخواب بشه و روی maxa_id ست بشه شرطش هم به این صورت هست که  آیدی باید با آیدی درون دیتا یکی باشه . این نوع شرط ها کاربرد آن چنانی ندارن ولی برای پیشگشیری از مشکلات سرور و یا هک شدن و ... انجام دادنش مناسبه . در کل اصولیه

خط های 12 و 13 هم که چند بار توضیح داده شد در خط 15 شرط قرار داده شده که اگه متغیر rows برقرار بود یعنی تابع درونش به درستی عمل کرد متغیر Max_id مقدارش همون آیدی باشه که درون کوئری مقدارش رو Maxa_id قرار داده بودیم منتها + یک شود در غیر صورت این متغیر برابر 1 باشد .

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



خب به انتهای این آموزش میرسیم امیدوارم که براتون مفید بوده باشه . فایل های آموزش بالا پیوست شده . موفق باشید

 


فایل‌(های) پیوست شده
furom.zip
نوع فایل .zip
دفعات دانلود 31
اندازه 3.32 KB

مشاهده‌ی وب‌سایت کاربر یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ
ارسال پاسخ 


پیام‌های داخل این موضوع
آموزش ساخت انجمن ساز ساده با php - حسن قاسمی نیا - ۸-۷-۱۳۹۲ ۱۱:۳۱ بعدازظهر

موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  آموزش بالا بردن امنیت سایت سجاد 1 5,755 ۸-۳-۱۳۹۴ ۰۹:۳۵ بعدازظهر
آخرین ارسال: شاهین سمیع عادل
  ساخت cms در php رضاعطایی 1 5,145 ۱۲-۸-۱۳۹۳ ۰۱:۰۰ بعدازظهر
آخرین ارسال: رضا
  درخواست آموزش پیدا کردن مسیر فایل های php در هاست برن 1 3,942 ۳۱-۴-۱۳۹۳ ۰۳:۱۰ بعدازظهر
آخرین ارسال: حسن قاسمی نیا
  ساخت صفحه لاگین در php رضاعطایی 0 3,526 ۳-۳-۱۳۹۳ ۰۲:۱۴ بعدازظهر
آخرین ارسال: رضاعطایی
     آموزش    ساخت رکپچای فارسی توسط php حسن قاسمی نیا 0 3,927 ۱۰-۷-۱۳۹۲ ۱۰:۴۸ صبح
آخرین ارسال: حسن قاسمی نیا

پرش به انجمن:


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