PDA

View Full Version : سوال: درخواست آموزش ساخت نظر خواهی



soroush.r70
سه شنبه 18 بهمن 1390, 18:33 عصر
کسی از دوستان می تونه بگه چطوری من می تونم یه سیستم نظر خواهی مثل نظر خواهی سایت نارنجی درست کنم البته با کلاس نباشه من خودم تو این مورد زیاد وارد نیستم پروژه منم هستش ممنون این لطف رو به من بکنین

البته به این صورت

که یه موضوعی باشه و وقتی کاربر رو اون موضوع رو زد بره به صفحه ثبت نظر و نظر ثبت کنه و فقط نظرات مربوط به اون نظر نشون داده بشه

MMSHFE
سه شنبه 18 بهمن 1390, 19:12 عصر
از اونجا که هر موضوع، یک id داره، میتونید لینک نظرسنجی هر مطلب رو مشابه زیر ایجاد کنید:


<a href="poll.php?aid=5">نظرسنجی</a>

که در مثال فوق، 5 شماره id مقاله مربوطه هست. حالا توی فایل poll.php کد زیر رو بگذارین (بعنوان نمونه) :


<?php
$aid = 0;
if(isset($_GET['aid']) && is_numeric($_GET['aid'])) {
$aid = (int) $_GET['aid'];
}
?>
<!doctype html>
<html dir="rtl">
<head>
<title>نظرسنجي</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
if(isset($_POST['submitted']) && isset($_POST['vote']) && isset($_POST['aid'])) {
$aid = is_numeric($_POST['aid']) ? (int) $_POST['aid'] : 0;
$vote = 3;
switch($_POST['vote']) {
case 'great':
$vote = 5;
break;
case 'good':
$vote = 4;
break;
case 'average':
$vote = 3;
break;
case 'weak':
$vote = 2;
break;
case 'bad':
$vote = 1;
break;
}
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_query("INSERT INTO `votes` (`aid`,`vote`) VALUES ('{$aid}','{$vote}')");
if(mysql_affected_rows() > 0) {
echo 'نظر شما با موفقيت ثبت شد.<br/>'."\n";
echo '<a href="article.php?id='.$aid.'">بازگشت به موضوع</a>'."\n";
}
else {
echo 'نظر شما ثبت نشد.<br/>'."\n";
echo '<a href="poll.php?aid='.$aid.'">سعي مجدد</a>'."\n";
}
}
else {
?>
<form action="" method="post">
<input name="aid" type="hidden" value="<?php echo $aid; ?>"/>
نظر شما درباره اين مطلب چيست؟<br/>
<input id="great" name="vote" type="radio" value="great"/><label for="great">عالي</label><br/>
<input id="good" name="vote" type="radio" value="good"/><label for="good">خوب</label><br/>
<input id="average" name="vote" type="radio" value="average"/><label for="average">متوسط</label><br/>
<input id="weak" name="vote" type="radio" value="weak"/><label for="weak">ضعيف</label><br/>
<input id="bad" name="vote" type="radio" value="bad"/><label for="bad">بد</label><br/>
<input name="submitted" type="submit" value="ثبت"/>
</form>
<?php
}
?>
</body>
</html>

شرمنده توی تگ HTML گذاشتم که کد درست نشون داده بشه. همونطور که توی کد فوق مشخصه، میشه به هر مطلب امتیازی بین 1 تا 5 داد. نظرات همه مطالب هم توی جدول votes ذخیره میشه که حاوی فیلدهای id (کلید اصلی و Auto Increment) و aid (شماره مطلب) و vote (امتیاز/رأی) هست.
اگه جایی ابهام یا سؤالی بود در خدمتم. موفق باشید.

soroush.r70
پنج شنبه 20 بهمن 1390, 12:37 عصر
آقا من برای ثبت نظر می خوام فکر کنم منظورم رو بد رسوندم شرمنده اینو می شه به همین صورت که فیلد متنی داشته باشه نوشت یا باید تغییر کنه

MMSHFE
پنج شنبه 20 بهمن 1390, 13:20 عصر
بله، به جای تگ input از نوع radio از تگ textarea استفاده کنید و توی دیتابیس هم بجای فیلد vote عددی، از فیلد comment متنی استفاده کنید. Query رو متناسب با تغییرات، اصلاح کنید. تنها نکته موجود، روش مرتبط کردن هر نظر با مطلب مربوطه هست که فکر کنم تونسته باشم منظور رو برسونم. موفق باشید.

soroush.r70
پنج شنبه 20 بهمن 1390, 13:47 عصر
یه توضیح در مورد این قست که باید به چه شکل باشه یه توضیح بدین ممنون می شم


if(isset($_POST['submitted']) && isset($_POST['vote']) && isset($_POST['aid'])) {
$aid = is_numeric($_POST['aid']) ? (int) $_POST['aid'] : 0;
$vote = 3;
switch($_POST['vote']) {
case 'great':
$vote = 5;
break;
case 'good':
$vote = 4;
break;
case 'average':
$vote = 3;
break;
case 'weak':
$vote = 2;
break;
case 'bad':
$vote = 1;
break;
}

MMSHFE
پنج شنبه 20 بهمن 1390, 13:57 عصر
برای درج نظر متنی اینطوری تغییرش بدین:
لینک:

<a href="comment.php?aid=5">درج نظر</a>
کد صفحه comment.php :


<?php
$aid = 0;
if(isset($_GET['aid']) && is_numeric($_GET['aid'])) {
$aid = (int) $_GET['aid'];
}
?>
<!doctype html>
<html dir="rtl">
<head>
<title>نظرسنجي</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
if(isset($_POST['submitted']) && isset($_POST['comment']) && trim($_POST['comment']) != '' && isset($_POST['aid'])) {
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$aid = is_numeric($_POST['aid']) ? (int) $_POST['aid'] : 0;
$comment = mysql_real_escape_string($_POST['comment']);
mysql_query("INSERT INTO `comments` (`aid`,`comment`) VALUES ('{$aid}','{$comment}')");
if(mysql_affected_rows() > 0) {
echo 'نظر شما با موفقيت ثبت شد.<br/>'."\n";
echo '<a href="article.php?id='.$aid.'">بازگشت به موضوع</a>'."\n";
}
else {
echo 'نظر شما ثبت نشد.<br/>'."\n";
echo '<a href="comment.php?aid='.$aid.'">سعي مجدد</a>'."\n";
}
}
else {
?>
<form action="" method="post">
<input name="aid" type="hidden" value="<?php echo $aid; ?>"/>
نظر شما درباره اين مطلب چيست؟<br/>
<textarea name="comment"></textarea><br/>
<input name="submitted" type="submit" value="ثبت"/>
</form>
<?php
}
?>
</body>
</html>

موفق باشید.

soroush.r70
پنج شنبه 20 بهمن 1390, 14:47 عصر
خوب محمد خان تا اینجا که ثبت می کنه حالا باید داخل همون صفحه نظرات مربوط به هر موضوع رو نمایش بده در واقع باید به چه صورت select کنه

soroush.r70
پنج شنبه 20 بهمن 1390, 15:46 عصر
آقا من درست کردم ولی نظراتی که باید مربوط به هر موضوع باشه رو نشون بده نشون نمی ده آقا این اسکریپت رو یه نگاه بنداز

من فایل ها رو اینجا می ذارم البته این به صورت ایجکسه یه چند هفته ای هست منو مشغول کرده لطف می کنین یه کاریش بکنین

MMSHFE
پنج شنبه 20 بهمن 1390, 19:22 عصر
...تا اینجا که ثبت می کنه حالا باید داخل همون صفحه نظرات مربوط به هر موضوع رو نمایش بده در واقع باید به چه صورت select کنه
با این دستور برای هر مقاله، نظرات رو استخراج کنید:

$query = mysql_query("SELECT * FROM `comment` WHERE (`aid`='{$id}')");
که توی دستور فوق، id$ شماره مقاله ای هست که دارین نشونش میدین. اگه باز هم درست نشد، بفرمایید تا کدتون رو اصلاح کنم چون تأکید اصلی من بر اینه که حتی الأمکان خودتون کار رو انجام بدین. موفق باشید.

soroush.r70
شنبه 22 بهمن 1390, 13:55 عصر
درسته آقا منم دو سه هفته ای روی این درگیر بودم که حتما خودم انجام بدم ولی خوب یه خورده گیج شدم گفتم از یه کاربلد کمک بگیرم تا یه جاهایی پیش رفتم حالا امکانش هست یه نگاهی به کد ما بندازین ببینین به چه صورت جواب می ده با تشکر از شما

MMSHFE
یک شنبه 23 بهمن 1390, 06:39 صبح
راستش کدتون رو نگاه کردم ولی حقیقتش (شرمنده) خیلی ازش سر در نیاوردم. یه جورایی شلوغ بود. روش کار رو فکر میکنم خوب توضیح دادم و متوجه شدین. ببینید خودتون نمیتونید اصلاحش کنید؟

soroush.r70
دوشنبه 24 بهمن 1390, 09:37 صبح
برای درج نظر متنی اینطوری تغییرش بدین:
لینک:

<a href="comment.php?aid=5">درج نظر</a>
کد صفحه comment.php :


<?php
$aid = 0;
if(isset($_GET['aid']) && is_numeric($_GET['aid'])) {
$aid = (int) $_GET['aid'];
}
?>
<!doctype html>
<html dir="rtl">
<head>
<title>نظرسنجي</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
if(isset($_POST['submitted']) && isset($_POST['comment']) && trim($_POST['comment']) != '' && isset($_POST['aid'])) {
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$aid = is_numeric($_POST['aid']) ? (int) $_POST['aid'] : 0;
$comment = mysql_real_escape_string($_POST['comment']);
mysql_query("INSERT INTO `comments` (`aid`,`comment`) VALUES ('{$aid}','{$comment}')");
if(mysql_affected_rows() > 0) {
echo 'نظر شما با موفقيت ثبت شد.<br/>'."\n";
echo '<a href="article.php?id='.$aid.'">بازگشت به موضوع</a>'."\n";
}
else {
echo 'نظر شما ثبت نشد.<br/>'."\n";
echo '<a href="comment.php?aid='.$aid.'">سعي مجدد</a>'."\n";
}
}
else {
?>
<form action="" method="post">
<input name="aid" type="hidden" value="<?php echo $aid; ?>"/>
نظر شما درباره اين مطلب چيست؟<br/>
<textarea name="comment"></textarea><br/>
<input name="submitted" type="submit" value="ثبت"/>
</form>
<?php
}
?>
</body>
</html>

موفق باشید.


آقا من از این کد شما استفاده کردم یه مشکل داره مشکلشم اینه که هر بار برای هر موضوع فقط یه نظر ثبت می شه اگه مثلا 100 تا کاربر بخوان برای این موضوع نظر بدن باید چی کار کنن

MMSHFE
دوشنبه 24 بهمن 1390, 12:10 عصر
عزیز کد مشکل نداره و همه میتونن نظر بدن، فقط باید فیلد aid رو کلید اصلی نگذارین، بلکه یک فیلد دیگه مثل id رو کلید اصلی کرده و Auto Increment کنید. موفق باشید.