در این أموزش , قصد داریم به شما نحوه ساخت اسکریپت نظرسنجی برای امتیاز دهی کاربران توسط php و Ajax نشان بدیم .
در آموزش php قبلی , ما نحوه ساخت امتیازدهی ستاره ای با php و Jquery را دیدیم .
در این مثال فرم نظرسنجی , سه سوال با گزینه های مختلف برای دادن امتیاز کاربر داریم . بعد از ثبت امتیاز نظرسنجی , درصد امتیاز همه گزینه ها برای کاربر نمایش داده خواهد شد.
در این اسکریپت نظرسنجی php , از jQuery AJAX برای ست کردن گزینه های نظرسنجی (Poll) و ذخیره آن در پشت صحنه داخل جداول دیتابیس استفاده می کنیم .
Session id کاربر در ابتدا مشخص می شود و در هنگام ذخیره امتیاز , سیشن id را هم در دیتابیس ذخیره می کنیم . با کلیک بر روی گزینه next , سوالات بعدی نظرسنجی برای کاربر نمایان می شود .
ست کردن گزینه های امتیازدهی
در این بخش از ساخت نطرسنجی با php , ما سوال و جواب های فرم نظرسنجی را از دیتابیس خوانده و به کاربر نمایش میدهیم . من یک درخواست ajax به اسکریپت php برای دریافت سوالاتی که هنوز توسط کاربر پاسخ داده نشده است , ارسال می کنم . این اسکریپت , در پاسخ فرم HTML برای نظرسنجی کاربر را برگشت می دهد .
کد jquery و php فرم نطرسنجی بصورت زیر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function show_poll(){ $.ajax({ type: "POST", url: "show-poll.php", processData : false, beforeSend: function() { $("#overlay").show(); }, success: function(responseHTML){ $("#overlay").hide(); $("#poll-content").html(responseHTML); } }); } |
Show-poll.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php session_start(); $_SESSION["member_id"] = 1; require("dbcontroller.php"); $dbController = new DBController(); $query = "SELECT DISTINCT question_id from tbl_poll WHERE member_id = " . $_SESSION["member_id"]; $result = $dbController->getIds($query); $condition = ""; if(!empty($result)) { $condition = " WHERE id NOT IN (" . implode(",", $result) . ")"; } $query = "SELECT * FROM `tbl_question` " . $condition . " limit 1"; $questions = $dbController->runQuery($query); if(!empty($questions)) { ?> <div class="question"><?php echo $questions[0]["question"]; ?><input type="hidden" name="question" id="question" value="<?php echo $questions[0]["id"]; ?>" ></div> <?php $query = "SELECT * FROM tbl_answer WHERE question_id = " . $questions[0]["id"]; $answers = $dbController->runQuery($query); if(!empty($answers)) { foreach($answers as $k=>$v) { ?> <div class="question"><input type="radio" name="answer" class="radio-input" value="<?php echo $answers[$k]["id"]; ?>" /><?php echo $answers[$k]["answer"]; ?></div> <?php } } ?> <div class="poll-bottom"> <button id="btnSubmit" onClick="addPoll()">Submit</button> </div> <?php } else { ?> <div class='error'>No Questions Found</div> <?php } ?> |
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
ذخیره نظرسنجی با jQuery AJAX
در این بخش , امتیاز کاربر را دریافت و با ارسال به اسکریپت php در دیتابیس مقدار آن را بروزرسانی (UPDATE) می کنیم. به سابمیت کردن فرم نظرسنجی , تابع addPoll()
برای ارسال درخواست آپدیت به php ارسال می شود .
بعد از بروزرسانی جدول نظرات/امتیاز ها , خروجی مورد نظر درصد امتیاز همه گزینه ها را نمایش می دهد .
کد php و ajax بصورت زیر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function addPoll() { if($("input[name='answer']:checked").length != 0){ var answer = $("input[name='answer']:checked").val(); $.ajax({ type: "POST", url: "save-poll.php", data : "question="+$("#question").val()+"&answer="+$("input[name='answer']:checked").val(), processData : false, beforeSend: function() { $("#overlay").show(); }, success: function(responseHTML){ $("#overlay").hide(); $("#poll-content").html(responseHTML); } }); } } |
save-poll.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php session_start(); require("dbcontroller.php"); $dbController = new DBController(); $answer_id = $_POST['answer']; $question_id = $_POST['question']; $query = "INSERT INTO tbl_poll(question_id,answer_id,member_id) VALUES ('" . $question_id ."','" . $answer_id . "','" . $_SESSION["member_id"] . "')"; $insert_id = $dbController->insertQuery($query); if(!empty($insert_id)) { $query = "SELECT * FROM tbl_answer WHERE question_id = " . $question_id; $answer = $dbController->runQuery($query); } if(!empty($answer)) { ?> <div class="poll-heading"> Rating </div> <?php $query = "SELECT count(answer_id) as total_count FROM tbl_poll WHERE question_id = " . $question_id; $total_rating = $dbController->runQuery($query); foreach($answer as $k=>$v) { $query = "SELECT count(answer_id) as answer_count FROM tbl_poll WHERE question_id = " .$question_id . " AND answer_id = " . $answer[$k]["id"]; $answer_rating = $dbController->runQuery($query); $answers_count = 0; if(!empty($answer_rating)) { $answers_count = $answer_rating[0]["answer_count"]; } $percentage = 0; if(!empty($total_rating)) { $percentage = ( $answers_count / $total_rating[0]["total_count"] ) * 100; if(is_float($percentage)) { $percentage = number_format($percentage,2); } } ?> <div class="answer-rating"> <span class="answer-text"><?php echo $answer[$k]["answer"]; ?></span><span class="answer-count"> <?php echo $percentage . "%"; ?></span></div> <?php } } ?> <div class="poll-bottom"> <button class="next-link" onClick="show_poll();">Next</button> </div> |
خروجی ساخت نطرسنجی با php و jquery ajax
اسکرین شات های زیر گزینه ها و امتیاز های نظرسنجی را نشان می دهند.
امیدوارم از آموزش ساخت نطرسنجی با php نهایت استفاده را برده باشید .
برای دانلود سورس کد کامل این آموزش + دیتابیس از باکس دانلود استفاده کنید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید
کاش اطلاعات دیتابیس رو هم میگفتید