PDA

View Full Version : سوال: ساخت نظرسنجی مثل 1abzar



ravand
یک شنبه 16 تیر 1392, 09:25 صبح
سلام این ابزار رو نگاه کنید:
http://www.1abzar.com/abzar/nazarsanji.php#1abzar
وقتی روی دکمه ی افزودن گزینه http://www.1abzar.com/files/add2.jpg کلیک میکنیم. مثلا 5 بار کلیک کردیم و 5 تا تکست ایجاد شد. من موندم این برنامه نویسش چطوری این برنامه رو نوشته که به صورت خودکار یک فیلد در mysql ایجاد میشه؟ شایدم کار دیگه ای کرده. در هر صورت من میخوام یه همچین چیزی بنویسم . سمت کلاینتش رو که میدونم چطوری کاری بکنم که تکست اضافه بشه ولی سمت سرور رو نمیدونم چیکار بکنم که اگر کاربر مثلا 50 تا تکست ساخت 50 تا فیلد ساخته بشه.
متشکرم.

spiderman200700
یک شنبه 16 تیر 1392, 10:18 صبح
کاری نداره. در سمت سرور هر گزینه در یک رکورد جدول در دیتابیس ذخیره میشه. یعنی اسم گزینه و تعداد نظراتش مثلا.
خب حالا اصلا 100 تا گزینه واسه سرور میفرستی ، هر گزینه ها رو به عنوان رکورد جدید در جدول ذخیره میکنه. البته در اینجا حتما فیلد های دیگه ای هم در جدول وجود داره که مشخص بشه این سطر مربوط به کدوم کاربر هست.

ravand
یک شنبه 16 تیر 1392, 10:44 صبح
بله درسته من حواسم نبود که کار من با radio button هست نه text . که اگر radio button نبود کارم سخت تر میشد الان میتونم به هر کدومش یک value با عدد بدم.
متشکرم.

ravand
یک شنبه 16 تیر 1392, 11:07 صبح
یه چیزی رو که میخواستم بپرسم این بود:
این یکی از کدهایی هست که با اون برنامه ساخته شده:

<!-- Nazar Sanji by www.1abzar.com --->
<script src="http://1abzar.ir/abzar/tools/poll/index.php?
c=333333&w=200&h=200&n=4&bg=CAA7E2&tc=333333&tbg=E3FFF1
&kc=BB3006&kadr=0&soal=نظر شما در مورد این سایت چیست؟&
id=m4ha4t8ofa34ea7b85rj&j1=عالی&j2=خوب&j3=متوسط&j4=ضعیف">
</script>
<!-- Nazar Sanji by www.1abzar.com --->
با این فیلد ها نگاه کنید:

j1=عالی&j2=خوب&j3=متوسط&j4=ضعیف"
اینا باعث شدن که چهار تا گزینه ی عالی ، خب و متوسط ،و ضعیف با چهار تا رادیو باتن نمایش داده بشه. ما که از قبل چهار تا $_GET ننوشته بودیم که این فیلد های j1,j2,j3,j4 رو بگیریم تا گزینه ها رو باهاش نمایش بدیم. پس چطوری امده این کار رو کرده؟

Veteran
یک شنبه 16 تیر 1392, 16:47 عصر
من موندم این برنامه نویسش چطوری این برنامه رو نوشته که به صورت خودکار یک فیلد در mysql ایجاد میشه؟ شایدم کار دیگه ای کرده. در هر صورت من میخوام یه همچین چیزی بنویسم . سمت کلاینتش رو که میدونم چطوری کاری بکنم که تکست اضافه بشه ولی سمت سرور رو نمیدونم چیکار بکنم که اگر کاربر مثلا 50 تا تکست ساخت 50 تا فیلد ساخته بشه.
بیا داداش واست نوشتم.
نمیدونم چرا اپلود نمیشه ! اما خب . اینجا میزارم واست
توی این سیستم 2 فایل داریم
Config.php


<?php

// database
// info
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'amar');

function connectToDB() {
if(!mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD))
echo 'Can not Connect : ' . mysql_error();
mysql_select_db(DB_DATABASE) or die('Can not Connect : ' . mysql_error());
mysql_query("SET NAMES UTF8");
}
connectToDB();
?>

اطلاعات مربوط به دیتبایس توی این فایل هست.شما یک دیتابیس خالی بدون جدول بساز بعد اسم دیتابیس رو بیار بزار توی این فایل
======
index.php


<?php
$field = '';
include 'Config.php';
if(isset($_POST['items'], $_POST['tbl_name']) && !empty($_POST['items']) && !empty($_POST['tbl_name'])) {

$txt_value = $_POST['items'];
$tbl_name = $_POST['tbl_name'];

foreach($txt_value as $item) {
$field .= "`$item` varchar(255) NOT NULL,";
}
if(mysql_query("CREATE TABLE IF NOT EXISTS `$tbl_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
$field
PRIMARY KEY (`id`))
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;")) {
echo 'جدول با موفقیت ساخته شد';
}else echo mysql_error();

}
?>
<html>
<head>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#btn1").click(function(){
$("ol").prepend("<li><input type='text' name='items[]'/></li>");
});
});
</script>
</head>
<body>
<form action="" method="POST">
<ol>
</ol>
<pre>
Table name: <input type="text" name="tbl_name">
<button id="btn1" onclick="return false;">Add item</button>
<button>Creat</button>
</pre>
</form>
</body>
</html>


توی این فایل هم کد های اصلی قرار دارند که چندتا نکته داره

1-فایل جی کوئری رو ما مستقیم از گوگل میخونیم پس موفعه تست سیستم به اینترنت متصل باشی.یا میتونیم فایل جی کوئری رو دانلود و مسیر رو در فایل تغییر بدید که دیگه از گوگل استفاده نکنه
برای اضافه کردن تکست روی دکمه add item کلیک کنید و بعد مقادیر رو درون تکست ها وارد کنید
Table name>>>برای جدول هم یک اسم تعیین کنید
بعد که روی دکمه creat کلیک کردین یک جدول با اسمی که درون تکست Table name وارد کردین همراه با مقادیر N تا تکست که اضافه کردین ساخته میشه
=====

ravand
یک شنبه 16 تیر 1392, 19:38 عصر
از اینکه وقت گذاشتید و این برنامه رو نویشتید خیلی متشکرم.
ولی این برنامه یه اشکال بزرگ داره اونم اینکه دائم جدول ایجاد میکنه.
الان این برنامه ای که شما نوشتید برای ایجاد کد بود . اینطوری که فهمیدم من باید برنامه ای بنویسم که حتی فیلد ایجاد نکنه چه برسه به جدول. (یعنی خودم اینطوری فکر کردم مطمئن نیستم)
من برای قسمت ارسال مقادیر و مشخصات جدول و یه چیزی مثل این آدرس:

<!-- Nazar Sanji by www.1abzar.com --->
<script src="http://1abzar.ir/abzar/tools/poll/index.php?
c=333333&w=200&h=200&n=4&bg=CAA7E2&tc=333333&tbg=E3FFF1
&kc=BB3006&kadr=0&soal=نظر شما در مورد این سایت چیست؟&
id=m4ha4t8ofa34ea7b85rj&j1=عالی&j2=خوب&j3=متوسط&j4=ضعیف">
</script>
<!-- Nazar Sanji by www.1abzar.com --->
امدم یه همچین روشی رو دنبال کردم:

<a href="http://localhost/get.php?name=ali&j1=aali&j2=khob&j3=zayif">link</a>

get.php

<?php
foreach ($_GET as $key => $value) {
echo $key[1]."<br/>";
echo $key."<br/>";
}
?>
تست کنید ببینید چی براتون میاره؟اینطوری روی مقادیر get مدیریت بیشتری هست . باید بیشتر روش فکر کنم . مشکل من همون ایجاد کد هست.

Veteran
یک شنبه 16 تیر 1392, 20:18 عصر
ولی این برنامه یه اشکال بزرگ داره اونم اینکه دائم جدول ایجاد میکنه.
الان این برنامه ای که شما نوشتید برای ایجاد کد بود . اینطوری که فهمیدم من باید برنامه ای بنویسم که حتی فیلد ایجاد نکنه چه برسه به جدول. (یعنی خودم اینطوری فکر کردم مطمئن نیستم)الان دقیقا مشکل چیه ؟ منظورتون چیه از اینکه نباید فیلد بسازه ؟
مگه نمیخواین یک سیستم نظر سنجی ساز بنویسین ؟

چیکار بکنم که اگر کاربر مثلا 50 تا تکست ساخت 50 تا فیلد ساخته بشه. الان داره همین کارو میکنه دیگه ؟
=====
خروجی کدی که دادین
من تست کردم
a
name1
j12
j23
j3
اما منظورتون رو از این کارا نمیفهمم.!
اگر میشه در مورد تجزیه تحلیلی که کردین در باره این سیستم
یکم توضیح بدید که ماهم بدونیم
و بررسی کنیم مسئله رو
من اینطور به مسئله نگاه میکنم.
گه کاربر وقتی میاد توی سایت و نظر سنجی میسازه با همون کدی که نوشتم جدول و و فیلد هارو بسازم و یک شناسه به کاربر بدم برای دسترسی به اون نظر سنجی
و یک جدول دارم که اطلاعات کلی نظر سنجی هارو در خودش داره
مثلا شناسه اسم جدول

بعد یک فایل اصلی دارم مثلا
www.site.com/show.php?id=4 (http://www.site.com/show.php?id=4)
میگم نظر سنجی با ایدی 4 رو بیار
بعد میام توی جدول دنبال نظر سنجی با ایدی 4 میگردم
صفحه لود میشه اطلاعات مربوط به نظر سنجی 4 رو نمایش میدیم و عنوان های فیلد ها که همون گزینه های ما هست به کاربر در قالب radio button نمایش میدیم.
و بعد از انتخاب و دکمه ثبت باز ما این اطلاعات درون همون جدول که مربوط به شناسه 4 هست دخیره میکنیم !
===
این چیزی هست که من تحلیل کردم
حالا مشکلاتی هم داره.
که میخوایم با کمک هم اونرو درست کنیم

ravand
یک شنبه 16 تیر 1392, 20:55 عصر
ببینید شما حسابش رو بکنید مثل دست کم هزار نفر میان و در این نظرسنجی ثبت نام میکنن! یعنی شما برای هزار تفر هزار تا جدول میخوای بسازی؟ دیگه اینطوری حساب کن ببین چه اتفاقی می افته. من حتی با ساخت هزار تا فیلد هم مخالفم. من قبلا یه نظرسنجی ساده نوشته بودم که کاربر میاد و شماره ی هر نظر رو در فیلد ثبت میکنه بعد دستوری می نوشتیم که انتخاب کن تعداد همه ی رکوردهایی که مساوی مثلا دوباشن . این نظر سنجی هم باید یه چیزی توی همین مایه ها باشه.

Veteran
یک شنبه 16 تیر 1392, 21:39 عصر
الان راه حل خودتون چیه؟

qartalonline
یک شنبه 16 تیر 1392, 22:05 عصر
بهتره از این شیوه برای ساخت نظرسنجی استفاده نکنید.

تئوری ساخت نظرسنجی:

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

جدول نظرسنجی شامل فیلدهای : شماره نظرسنجی، سوال نظرسنجی ، ..
جدول گزینه ها : شماره گزینه، شماره نظرسنجی، متن گزینه، تعداد رای

اینطوری با هربار رای دادن به فیلد "رای" گزینه یک واحد اضافه کنید.

ravand
یک شنبه 16 تیر 1392, 22:14 عصر
بهتره از این شیوه برای ساخت نظرسنجی استفاده نکنید.

تئوری ساخت نظرسنجی:

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

جدول نظرسنجی شامل فیلدهای : شماره نظرسنجی، سوال نظرسنجی ، ..
جدول گزینه ها : شماره گزینه، شماره نظرسنجی، متن گزینه، تعداد رای

اینطوری با هربار رای دادن به فیلد "رای" گزینه یک واحد اضافه کنید.

یعنی شما میگید یه فیلد بسازیم که با هر رای عدد یک به قبلی اضافه بشه و همینطوری 2 و 3 بره بالا ؟
مشکل اینجاست که کاربری که برای نظرسنجی ثبت نام میکنه میاد خودش تعداد فیلد ها رو تعیین میکنه یعنی از قبل تعداد فیلد ها ثابت نیستن که براشون از قبل توی دیتابیس یک فیلد اختصاص بدیم.

qartalonline
یک شنبه 16 تیر 1392, 22:18 عصر
شما برای هر گزینه یک رکورد ایجاد کنید. در اینصورت تعداد گزینه ها مطرح نیست.

نمونه نظرسنجی که به این روش ساخته شده:
http://tools.qartalonline.com/poll/2/

ravand
یک شنبه 16 تیر 1392, 22:22 عصر
بله درسته دوستان هم بیشتر نظرشون همین بود. بعد باید همه ی فیلد ها رو بذارم توی یه حلقه ی while که پشت سر هم همه رو نمایش بده. روش کار بکنم نتیجه اش رو اینجا به صورت خلاصه میگم متشکرم.

spiderman200700
یک شنبه 16 تیر 1392, 22:32 عصر
ما کلا برای همه نظر سنجی ها یه جدول نیاز داریم.
ساختارشم این میتونه باشه.
id
option
click
user_id
poll_number

با این جدول میتونیم بی نهایت کاربر داشته باشیم که هر کاربر هم میتونه بی نهایت نظر سنجی ایجاد کنه.
البته این جدول فقط مربوط به نگهداری اطلاعات نظر سنجی هست. واضحه که برای نگهداری اطلاعات کاربر و سایر و موارد به جداول دیگه ای هم نیاز هست.

ravand
دوشنبه 17 تیر 1392, 19:04 عصر
من الان در ایجاد کد نظرسنجی دچار مشکل شدم.
ببینید ما باید اول یه همچین کدی بسازیم:

<!-- Nazar Sanji by www.1abzar.com --->
<script src="http://1abzar.ir/abzar/tools/poll/index.php?
c=333333&w=200&h=200&n=4&bg=CAA7E2&tc=333333&tbg=E3FFF1
&kc=BB3006&kadr=0&soal=نظر شما در مورد این سایت چیست؟&
id=m4ha4t8ofa34ea7b85rj&j1=عالی&j2=خوب&j3=متوسط&j4=ضعیف">
</script>
<!-- Nazar Sanji by www.1abzar.com --->
الان مشکلی که برای من پیش امده ساخت این قسمت هست:

&j1=عالی&j2=خوب&j3=متوسط&j4=ضعیف"

این صفحه ی ارسال:

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$('document').ready(function(){
var i = $('li').size() + 1;
$('#add').click(function(){
$("<li>" + i + "<input type='text' name='items[]'/></li>").appendTo('ol');
i++;
});

$('#remove').click(function() {
$('li:last').remove();
i--;
});
});
</script>
</head>
<body>
<form dir="rtl" action="test.php" method="post">
سوال: <input type="text" name="soal"><br/>
<ol>
<li>1<input type='text' name='items[]'/></li>
</ol>
<input type="button" value="افزودن" id="add" />
<input type="button" value="کم" id="remove" /><br/>
<input type="submit" value="ارسال" />
</form>
</body>
</html>
اینم دریافت:

<?php
//print_r($_POST);
foreach ($_POST['items'] as $key => $value) {
echo "&j".$key.'='.$value;
}
?>
مشکل اینه که اگه بخوام خط زیر رو از حلقه خارج کنم و بدمش به کد که استفاده کنم خط من کامل نیست چون متغییر ما از حلقه خارج شده:

echo "&j".$key.'='.$value;
الان این خط بالا را از حلقه خارج کنید منظور منو متوجه می شید. که دیگه برنامه همچین خروجی بهمون نمیده:

&j0=عالی&j1=خوب&j2=متوسط&j3=ضعیف
و به جاش اینو میده:

&j3=ضعیف
برای حل این مشکل باید چیکار کرد؟
متشکرم.

qartalonline
دوشنبه 17 تیر 1392, 19:39 عصر
از کد زیر استفاده کنید:

foreach ($_POST as $key => $value) {
if (preg_match('/^j*([0-9]+?)$/', $key)) {
echo $key.'='.$value;
}
}

ravand
دوشنبه 17 تیر 1392, 19:56 عصر
این کدی که دادید با برنامه ی من فرقی نداشت . نگاه کنید:

<?php
foreach ($_POST['items'] as $key => $value) {
if (preg_match('/^j*([0-9]+?)$/', $key)) {
}
}
echo $key.'='.$value;
?>
الان من این خط رو از حلقه خارج کردو به همین علت نمیتونم ازش استفاده کنم:

echo $key.'='.$value;
من مجبورم به خاطر اینکه مقادیر رو استفاده کنم از حلقه خارج کنم برای اینکه اگز داخل حلقه باشه کدهای دیگه ی من هم تکرار میشه.

qartalonline
دوشنبه 17 تیر 1392, 20:00 عصر
شما از کد من استفاده نکردید فقط کد خوتون رو تغییر داید. مقدار $_POST['items'] رو تغییر نداید.

ravand
دوشنبه 17 تیر 1392, 20:11 عصر
این شکلی وارد میکنم هیچی برام چاپ نمیکنه:

<?php
foreach ($_POST as $key => $value) {
if (preg_match('/^j*([0-9]+?)$/', $key)) {
echo $key.'='.$value;
}
}
?>

qartalonline
دوشنبه 17 تیر 1392, 20:30 عصر
صفحه ارسال شما مشکل داره نام همه input یکیه، باید متفاوت باشه.


<input type='text' name='j1'>
<input type='text' name='j2'>
..

ravand
دوشنبه 17 تیر 1392, 20:37 عصر
پس منظورتون اینه که در این قسمت بیام با متغییر i مقدار name رو در هر بار ایجاد تغییر بدم؟

$("<li>" + i + "<input type='text' name='items'/></li>").appendTo('ol');

qartalonline
دوشنبه 17 تیر 1392, 20:40 عصر
بله دقیقا. مثل کد زیر:
$("<li>" + i + "<input type='text' name='j"+i+"'/></li>").appendTo('ol');

ravand
دوشنبه 17 تیر 1392, 21:26 عصر
کدهای من این شد. ولی اون چیزی نیست که من میخواستم نمیدونم شاید منظور منو متوجه نشدید:

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$('document').ready(function(){
var i = $('li').size() + 1;
$('#add').click(function(){
$("<li>" + i + "<input type='text' name='j"+i+"'/></li>").appendTo('ol');
i++;
});

$('#remove').click(function() {
$('li:last').remove();
i--;
});
});
</script>
</head>
<body>
<form dir="rtl" action="test.php" method="post">
سوال: <input type="text" name="soal"><br/>
<ol>
<li>1<input type='text' name='items'/></li>
</ol>
<input type="button" value="افزودن" id="add" />
<input type="button" value="کم" id="remove" /><br/>
<input type="submit" value="ارسال" />
</form>
</body>
</html>
<?php
foreach ($_POST as $key => $value) {
if (preg_match('/^j*([0-9]+?)$/', $key)) {
echo $key.'='.$value;
}
}

?>
الان اینو از حلقه خارج میکنم:

echo $key.'='.$value;

<?php
foreach ($_POST as $key => $value) {
if (preg_match('/^j*([0-9]+?)$/', $key)) {

}
}
echo $key.'='.$value;
?>
قبل از خارج کردن از حلقه این شکلی بود:

j2=خوبj3=متوسطj4=ضعیف
ولی وقتی از حلقه خارج کردم این شکلی شد:

j4=ضعیف

qartalonline
دوشنبه 17 تیر 1392, 21:35 عصر
شما هدفتون چیه ؟ مگه هدفتون ثبت گزینه ها در پایگاه داده نیست؟

Veteran
دوشنبه 17 تیر 1392, 21:42 عصر
$keys='';
foreach ($_POST as $key => $value) {
if (preg_match('/^j*([0-9]+?)$/', $key)) {
$keys.= "$key=$value";
}
}
echo $keys

ravand
دوشنبه 17 تیر 1392, 22:07 عصر
از همتون متشکرم. اینطوری به نظرم بهتره چون مدیریت بیشتری میشه روی قسمت ها داشت. مثلا میشه فیلد soal رو از j0 به بالا جدا کرد:

<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$('document').ready(function(){
var i = $('li').size() + 1;
$('#add').click(function(){
$("<li>" + i + "<input type='text' name='items[]'/></li>").appendTo('ol');
i++;
});

$('#remove').click(function() {
$('li:last').remove();
i--;
});
});
</script>
</head>
<body>
<form dir="rtl" action="test.php" method="post">
سوال: <input type="text" name="soal"><br/>
<ol>
<li>1<input type='text' name='items[]'/></li>
</ol>
<input type="button" value="افزودن" id="add" />
<input type="button" value="کم" id="remove" /><br/>
<input type="submit" value="ارسال" />
</form>
</body>
</html>
<?php
$soal=$_POST['soal'];
foreach ($_POST['items'] as $key => $value) {
$mo.="j".$key.'='.$value;
}
echo $mo."&soal=".$soal;
?>
یه همچین خروجی بهمون میده:

j0=عالیj1=خوبj2=متوسطj3=ضعیف&soal=نظرتان چیست؟

H:Shojaei
سه شنبه 18 تیر 1392, 00:10 صبح
سلام این ابزار رو نگاه کنید:
http://www.1abzar.com/abzar/nazarsanji.php#1abzar
وقتی روی دکمه ی افزودن گزینه http://www.1abzar.com/files/add2.jpg کلیک میکنیم. مثلا 5 بار کلیک کردیم و 5 تا تکست ایجاد شد. من موندم این برنامه نویسش چطوری این برنامه رو نوشته که به صورت خودکار یک فیلد در mysql ایجاد میشه؟ شایدم کار دیگه ای کرده. در هر صورت من میخوام یه همچین چیزی بنویسم . سمت کلاینتش رو که میدونم چطوری کاری بکنم که تکست اضافه بشه ولی سمت سرور رو نمیدونم چیکار بکنم که اگر کاربر مثلا 50 تا تکست ساخت 50 تا فیلد ساخته بشه.
متشکرم.
دوستان سلام
من يه نظر درباره ي جدول گذاري اين نظر سنجي داشتم گفتم بيان كنم ببينم نظر شما چيه؟
ما كلا 2 تا جدول داريم.
يكي براي سوال و گزينه هاش و يه آي دي منحصر به فرد كه auto_increment هم ميتونه باشه.(tbl-soal)
و ديگري براي شمارش نظر ها براي هر گزينه و يه آي دي كه اين هم ميتونه auto_increment باشه.(tbl-nazar)
خب حالا روش كار:
اولين بار يه كاربر مياد و يه نظر سنجي ميسازه كه 10 تا گزينه داره يه ركورد جديد به هر يك از جدول ها اضافه ميشه.
خب حالا ما در جدول tbl-soal يه فيلد براي آي دي يكي براي سوال و 10 تا هم براي گزينه ها داريم كه متن گزينه ها درش قرار دارن.
و در جدول tbl-nazar هم يه آي دي با 10 تا فيلد براي شمارش نظر درباره ي هر گزينه داريم.
اگر كاربر ديگري بياد و يه نظر سنجي 20 گزينه اي ايجاد كنه:
اول به هر جدول 10 تا فيلد ديگه اضافه ميكنيم و بعد اطلاعات نظر سنجي اون رو در يك ركورد جديد قرار ميديم.
نحوه ي خوندن اطلاعات رو هم كا فكر نكنم توضيحي بخواد.
نميدونم ميشه يا نه ولي اون طوري كه من فكر كردم اگه روش فكر بشه خوب چيزي ميشه چون كلا 2 تا جدول داريم كه از پيش ساخته شده و فقط فيلد ها اضافه ميشن و اطلاعات هر كاربر هم در يهرديف خاص قرار ميگيره.
راستي يه چيز ديگه اين جداول بايد آيدي كاربرو شماره نظر سنجي هر كاربر و... رو هم تشخيص بدن كه تو اينجا نگفتم و به اصل موضوع اشاره كردم.

ravand
چهارشنبه 19 تیر 1392, 12:05 عصر
در ادامه ی کار با برنامه با یه مشکل جدید برخورد کردم:
الان این برنامه ی ما است که در صفحه ی safe.php قرار گرفته:

<html>
<head>
<title>عنوان</title>
</head>
<body>
<p align="center">صفحه ی سایت</p>
<!-- Nazar Sanji by www.pachenar.ir --->
<script src="http://localhost/nazar-sanji/show.php?eco=000000&wa=200&ha=200&kc=3D84FF&kadr=1&onvan=نظر شما در مورد این سایت چیست؟&ecbg=D9FFF7&ecmatn=000000&ecbgc=85FF95&ha=200&id=14&&j0=عالی&j1=خوب&j2=متوسط&j3=ضعیف&n=3">
</script>
<!-- Nazar Sanji by www.pachenar.ir --->
</html>
اینم show.php

<?php
$jn=$_GET['n'];
for ($i=0; $i<=$jn; $i++)
{
$mo.='&j'.$i.'=\'.$_GET[\'j'.$i.'\'].\'';
}

$iframe='<iframe src="http://localhost/nazar-sanji/nama.php?eco='.$_GET['eco'].'&wa='.$_GET['wa'].'&ha='.$_GET['ha'].'&kc='.$_GET['kc'].'&kadr='.$_GET['kadr'].'&onvan='.$_GET['onvan'].'&ecbg='.$_GET['ecbg'].'&ecmatn='.$_GET['ecmatn'].'&ecbgc='.$_GET['ecbgc'].'&ha='.$_GET['ha'].'&id='.$_GET['id'].$mo'" scrolling="no" frameborder="0" hspace="0" align="center" width="170" height="200"></iframe>';
header('content-type: text/html; charset=utf-8');
echo 'document.write(\''.$iframe.'\');';
?>
به این حلقه نگاه کنید:

$jn=$_GET['n'];
for ($i=0; $i<=$jn; $i++)
{
$mo.='&j'.$i.'=\'.$_GET[\'j'.$i.'\'].\'';
}
با استفاده از این حلقه امدم. یه همچین چیزی درست کنم:

&j0='.$_GET['j0'].'&j1='.$_GET['j1'].'&j2='.$_GET['j2'].'&j3='.$_GET['j3'].'&j4='.$_GET['j4'].'
برای اینکه بدمش به آخر این آدرس در فایل show.php

http://localhost/nazar-sanji/nama.php?eco='.$_GET['eco'].'&wa='.$_GET['wa'].'&ha='.$_GET['ha'].'&kc='.$_GET['kc'].'&kadr='.$_GET['kadr'].'&onvan='.$_GET['onvan'].'&ecbg='.$_GET['ecbg'].'&ecmatn='.$_GET['ecmatn'].'&ecbgc='.$_GET['ecbgc'].'&ha='.$_GET['ha'].'&id='.$_GET['id'].$mo'
اگه بهش دقت کنید آخرش متغییر $mo هست که این مقادیر به آخرش اضافه میشه.
بعد امدم برای امتحان کردن یه همچین چیزی گذاشتم:

<?php
echo $_GET['eco'];
echo $_GET['wa'];
echo $_GET['ha'];
echo $_GET['kc'];
echo $_GET['kadr'];
echo $_GET['onvan'];
echo $_GET['ecbg'];
echo $_GET['ecmatn'];
echo $_GET['ecbgc'];
echo $_GET['ha'];
echo $_GET['id'];

foreach ($_GET as $key => $value) {
$mo.="&".$key.'='.$value;
}
echo $mo;
?>

بعد فایل safe.php رو اجرا میکنم ولی چیزی رو نشون نمیده.

Veteran
چهارشنبه 19 تیر 1392, 13:21 عصر
پروژه رو میشه کامل بزاری ؟ تست کنیم ؟

ravand
چهارشنبه 19 تیر 1392, 13:35 عصر
مشکل رو تا اینجا هم حلش کردم :لبخند:
صفحه ی show.php

<?php
foreach ($_GET as $key => $value) {
$moo.='&'.$key.'='.$value;
}
$iframe='<iframe src="http://localhost/nazar-sanji/nama.php?ha='.$moo.'" scrolling="no" frameborder="0" hspace="0" align="center" width="170" height="200"></iframe>';
header('content-type: text/html; charset=utf-8');
echo 'document.write(\''.$iframe.'\');';
?>
اینم فایل nama.php

<?php
$jn=$_GET['n'];
for ($i=0; $i<=$jn; $i++)
{
$mo.=$_GET['j'.$i.'']."<input type='radio'><br/>";
}
echo $mo;
?>

پروژه رو میشه کامل بزاری ؟ تست کنیم ؟
پروژه ام فعلاً همه اش همینه. و کامل نشده.
اگه بازم مشکلی پیش امد اطلاع میدم متشکرم که جواب میدید.

MMSHFE
چهارشنبه 19 تیر 1392, 13:51 عصر
دوست گرامی، شما 1 جدول دارین برای نگهداری اطلاعات نظرسنجیها:


poll :
id
question
active

و یک جدول هم برای نگهداری اطلاعات پاسخها :


results :
id
pid
answer
votes
active

با فیلد pid میتونید مشخص کنید هر پاسخ مربوط به کدوم نظرسنجیه. حالا موقعی که یک نفر میخواد نظرسنجی ایجاد کنه، اول باید بیاد توی سایت شما، اطلاعات نظرسنجی (سؤال و گزینه ها و...) رو ثبت کنه و شما یک کد بهش بدین که توی تگ اسکریپت JS، براتون بفرسته و ازطریق اون، اطلاعات نظرسنجی رو نشونش بدین. این روش که سؤال و گزینه ها و... رو از اسکریپت بگیریم، روش خوبی نیست چون اگه به درستی مدیریت نشه، هربار یک سؤال دیگه ایجاد میشه و یا اینکه هر سایتی که سؤال و گزینه ها رو مثل یک سایت دیگه بده، به اطلاعات نظرسنجی اون یکی هم دسترسی پیدا میکنه. مگه اینکه واقعاً روشی پیدا کنید که کلاینتهای مختلف رو از هم متمایز کنه اما این روش هم کارآیی خوبی نداره چون ممکنه یکی بخواد دوباره یک نظرسنجی با همون سؤال و گزینه های قبلی ایجاد کنه ولی نتایج از اول شمارش بشه. ضمناً توی ساختار دیتابیسی که گفتم، برای هر نظرسنجی و جوابهای اون، یک رکورد اضافه میشه نه یک فیلد و با هر بار انتخاب یک گزینه، فیلد votes افزایش پیدا میکنه.

ravand
پنج شنبه 20 تیر 1392, 22:04 عصر
من توضیحات آقای شهرکی رو درست متوجه نشدم ولی خودم به یه چیزایی فکر کردم که:
نظر سنجی ما به صورت پویا به این شکل در میاد:

<input type="radio" name="ja" value="1">
<input type="radio" name="ja" value="2">
<input type="radio" name="ja" value="3">
<input type="radio" name="ja" value="4">
بعد با انتخاب هر گزینه عدد هر گزینه رو وارد جدول میکنه.
مثلا چهار تا کاربر میان گزینه ی دو رو انتخاب میکنن و اینطوری چهار تا عدد دو در فیلد ja در جدول ثبت میشه.
و سه تا کاربر هم میان گزینه ی چهار رو انتخاب میکنن که سه تا عدد چهار در فیلد ja ثبت میشه
بعد میخوام سلکت کنم به جدول و بگم هر کدوم یک از این اعداد چند بار ثبت شدند؟

به زبان ساده تر:
من چند تا رکورد در دیتابیس دارم
میخوام هر کدوم شبیه به هم هستند رو نمایش بده
و بگه چند تا هستند؟
مثلا من سه تا رکورد دارم که عدد دو داخلش هست
چهار تا هم هست که عدد سه داخلش هست
میخوام در خروجی یه همچین چیزی برام نمایش بده
فکر میکنم دستورش یه چیزی توی مایه های این دستور در میاد:

SELECT DISTINCT COUNT(ja) FROM `sabto-nazar`
ولی این اشتباهه و بدرد کار من نمیاد.
ما باید اون اعدادی که شبیه بهم هستند رو تعدادشون رو بگیریم و نمایش بدیم.

engmmrj
پنج شنبه 20 تیر 1392, 22:23 عصر
http://www.w3schools.com/php/php_ajax_poll.asp

H:Shojaei
پنج شنبه 20 تیر 1392, 22:41 عصر
خب مقادير كه هميشه 1و2و3و4و... هستن ديگه كاري نداره كه يه حلقه ميخواد كه هر بار يكي از اين اعداد رو چك كنه و تعدادشون رو بدست بياره و هر بار كه ميخواي عدد جديد رو وارد كوئري كنيد تهداد سطر هايي كه وجود داره رو تست ميكنيم اگه بزرگتر از صفر بود يعني هنوز هم گزينه داريم وگر نه گزينه ها تموم شده.

ravand
جمعه 21 تیر 1392, 08:16 صبح
خب مقادير كه هميشه 1و2و3و4و... هستن ديگه كاري نداره كه يه حلقه ميخواد كه هر بار يكي از اين اعداد رو چك كنه و تعدادشون رو بدست بياره و هر بار كه ميخواي عدد جديد رو وارد كوئري كنيد تهداد سطر هايي كه وجود داره رو تست ميكنيم اگه بزرگتر از صفر بود يعني هنوز هم گزينه داريم وگر نه گزينه ها تموم شده.


http://www.w3schools.com/php/php_ajax_poll.asp
من فکر میکنم شما سوال منو درست نخوندید!
در یک جمله ی خلاصه میگم : نمایش تعداد رکوردهایی که شبیه بهم هستند .

Veteran
جمعه 21 تیر 1392, 11:34 صبح
SELECT * FROM `sabto-nazar` WHERE ja like '%2%'

این رکورد هایی که عدد 2 در اونها هست رو لیست میکنه
حالا اگر تعداد بخوایم بگیریم باید COunt استفاده کنیم
SELECT count(ja) FROM `sabto-nazar` WHERE ja like '%2%'

ravand
جمعه 21 تیر 1392, 12:39 عصر
نه منظورم رو متوجه نشدی. یکی از دوستان کمک کرد و تونستم مشکلش رو حل کنم. مثالش رو میذارم متوجه بشی.

<?php
include("conn.php");
$sql="SELECT COUNT(*)as `Tedad` , `ja` FROM `sabto-nazar` GROUP BY `ja`";
mysql_query("SET CHARACTER SET utf8",$handle);
$result=mysql_query($sql,$handle)or die(mysql_error());
while ($row=mysql_fetch_array($result)){
echo $row['ja'] . " | " . $row['Tedad'];
echo "<br>";
}
mysql_close($handle);
?>
اینم sql:

CREATE TABLE `sabto-nazar` (
`id` int(11) NOT NULL auto_increment,
`ipop` varchar(20) collate utf8_persian_ci NOT NULL,
`ja` int(5) NOT NULL,
`karbar` int(50) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=8 ;

--
-- Dumping data for table `sabto-nazar`
--

INSERT INTO `sabto-nazar` (`id`, `ipop`, `ja`, `karbar`, `date`) VALUES
(1, '127.0.0.1', 3, 19, '2013-07-11 18:56:30'),
(2, '127.0.0.1', 3, 19, '2013-07-11 18:56:33'),
(3, '127.0.0.1', 3, 19, '2013-07-11 18:56:35'),
(4, '127.0.0.1', 2, 19, '2013-07-11 18:56:36'),
(5, '127.0.0.1', 2, 19, '2013-07-11 18:56:37'),
(6, '127.0.0.1', 1, 19, '2013-07-12 11:07:18'),
(7, '127.0.0.1', 2, 19, '2013-07-12 11:08:04');
الان خروجی برنامه این شکلی میشه:

1 | 1
2 | 3
3 | 3
حالا عدد دو رو وارد فیلد ja کن می بینی در خروجی این شکلی میشه:

1 | 1
2 | 4
3 | 3
ردیف سمت چپ خود مقادیر هستند و سمت راستی تعداد مقادیر .
اگه متوجه منظورم نشدی بگو بیشتر برات توضیح بدم.

Veteran
جمعه 21 تیر 1392, 12:48 عصر
مشکلی نداره.من اضافه کردم و اطلاعات رو به درستی نمایش داده شد :لبخند:
اول این بود

1 | 1 2 | 3 3 | 3بعد که اضاف کردم شد این

1 | 1 2 | 4 3 | 3

نه منظورم رو متوجه نشدی.
اره چون


مثلا من سه تا رکورد دارم که عدد دو داخلش هست
چهار تا هم هست که عدد سه داخلش هست
میخوام در خروجی یه همچین چیزی برام نمایش بده
خروجی نذاشته بودی :لبخند:

H:Shojaei
جمعه 21 تیر 1392, 14:07 عصر
به نظر شما با اين كد همون اتفاق نميافته:؟
select count (tedad) where id=1;
مشگه هرجا آي دي برابر 1 داشت تعدادشو بهمون بده

MMSHFE
جمعه 21 تیر 1392, 14:21 عصر
اینهم میشه ولی باید یکی یکی بنویسیم درحالی که با GROUP BY یکجا برای همه تعداد رو شمارش میکنه.