Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   помогите с аяксом (https://forum.antichat.xyz/showthread.php?t=70950)

-=M@N=- 20.05.2008 20:19

помогите с аяксом
 
Надо выбрать данные из цикла...подробнее...

Есть файл viewthread.php который выбирает из БД опросы если таковые имеются(имеется в виду опросы привязанные к теме форума), там выводит опросы в зависимости голосовал пользователь или нет(тоесть если юзер голосовал то выводит результаты, если неголосовал то выводит варианты ответа...), я приведу только кусок нужного кода

Цитата:

$res_array = dbarray(dbquery("SELECT poll_id FROM ".$db_prefix."forum_thread_polls WHERE thread_id='$thread_id'"));

$result = dbquery("SELECT * FROM ".$db_prefix."forum_polls WHERE poll_index= 'F' AND poll_id= '".$res_array['poll_id']."'");
if (dbrows($result) != 0) {
$data = dbarray($result);
$poll_title = $data['poll_title'];
for ($i=0; $i<=9; $i++) {
if ($data["poll_opt_".$i]) $poll_option[$i] = $data["poll_opt_".$i];
}
if (iMEMBER) $result2 = dbquery("SELECT * FROM ".$db_prefix."forum_poll_votes WHERE vote_user='".$userdata['user_id']."' AND poll_id='".$data['poll_id']."'");
if ( (!iMEMBER || !dbrows($result2)) && $data['poll_ended'] == 0) {
if (!iMEMBER) {
$poll = ""; $i = 0; $num_opts = count($poll_option);
$forum_poll_votes = dbcount("(vote_opt)", "forum_poll_votes", "poll_id='".$data['poll_id']."'");

while ($i < $num_opts) {
$num_votes = dbcount("(vote_opt)", "forum_poll_votes", "vote_opt='$i' AND poll_id='".$data['poll_id']."'");
$opt_votes = ($forum_poll_votes ? number_format(100 / $forum_poll_votes * $num_votes) : 0);
$poll .= "<table width='98%' valign='top' align='center'> <tr>
<td width='30%'>".$poll_option[$i]."</td>
<td width='10%'>[ <b>".$num_votes."</b> ]</td>
<td width='60%'><img src='".FORUM."images/bar_left.gif' height='12'><img src='".FORUM."images/bar.gif' alt='".$poll_option[$i]."' width='$opt_votes' height='12'><img src='".FORUM."images/bar_right.gif' height='12'> [".$opt_votes."%]</td>
</tr></table><br>\n";
$i++;
}

} else {
$poll = ""; $i = 0; $num_opts = count($poll_option);
while ($i < $num_opts) {
$poll .= "<input type='radio' name='voteoption' value='$i'> $poll_option[$i]<br><br>\n";
$i++;
}
}
forumsidex($poll_title);
echo"<div id='all'>";

echo "<table width='98%' align='center'><tr><td><form name='voteform' method='post'>";
echo "$poll<center><input type='hidden' name='poll_id' value='".$data['poll_id']."'>\n";
if (iMEMBER) {
echo "<hr><input type='button' onClick=\"sendRequestPoll('poll','voteform','".$da ta['poll_id']."','$thread_id','".$_REQUEST['voteoption']."')\" value='".$locale['101']."' class='button'></center>\n";
}
echo "</form></td></tr></table>\n";
echo"</div>";

closeforum();
} else {

$poll = ""; $i = 0; $num_opts = count($poll_option);
$forum_poll_votes = dbcount("(vote_opt)", "forum_poll_votes", "poll_id='".$data['poll_id']."'");
forumsidex($poll_title);
echo"<div id='all'>";

echo "<table width='98%' valign='top' align='center'><tr><td>";
while ($i < $num_opts) {
$num_votes = dbcount("(vote_opt)", "forum_poll_votes", "vote_opt='$i' AND poll_id='".$data['poll_id']."'");
$opt_votes = ($forum_poll_votes ? number_format(100 / $forum_poll_votes * $num_votes) : 0);
$poll .= "<table width='98%' valign='top' align='center'> <tr>
<td width='30%'><b>".$poll_option[$i]."</b></td>
<td width='10%'>[ <b>".$num_votes."</b> ]</td>
<td width='60%' valign='center'><img src='".FORUM."images/bar_left.gif' height='12'><img src='".FORUM."images/bar.gif' alt='".$poll_option[$i]."' width='$opt_votes' height='12'><img src='".FORUM."images/bar_right.gif' height='12'> [".$opt_votes."%]</td>
</tr></table><br>\n";
$i++;
}
echo "$poll\n</td></tr></table>";
echo"</div>";


closeforum();
}
}


Кнопка для голосования передает данные скрипту


Код:

function createRequestObject() {
        var req;
        if(window.XMLHttpRequest){
                // Firefox, Safari, Opera...
                req = new XMLHttpRequest();
        } else if(window.ActiveXObject) {
                // Internet Explorer 5+
                req = new ActiveXObject("Microsoft.XMLHTTP");
        } else {
                // There is an error creating the object,
                // just as an old browser is being used.
                alert('Problem creating the XMLHttpRequest object');
        }
        return req;

}
var http = createRequestObject();
function post() {
        var textOut = http.responseText;
        document.getElementById('all').innerHTML = textOut;
}

function useHttpResponse() {
  if (http.readyState == 4) {
        setTimeout("post()",1000);
  }
}

function sendRequestPoll(act,inputform,poll_id,thread_id,vote_opt) {
        var newLoad = "<div class='wait'><center>Подождите, идет загрузка...<br><img src='loading.gif'></b></center></div><br>";
        document.getElementById('all').innerHTML = newLoad;       
        http.open('post', 'ajax-nav.php?nav=poll&poll_id='+poll_id+'&thread_id='+thread_id+'&vote_opt='+vote_opt, true);
        http.onreadystatechange = useHttpResponse;
        http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        http.send('poll_id='+poll_id+'&thread_id='+thread_id+'&vote_opt='+vote_opt);
}


а скрипт в свою очередь передает полученные данные на страничку ajax-nav.php?nav=poll с нужными данными(которые он получил при нажатии на кнопку)


а вот функция nav=poll файла ajax-nav.php, она обновляет БД и выводит результаты...

Цитата:

if ($nav == "poll") {
$res_array = dbarray(dbquery("SELECT poll_id FROM ".$db_prefix."forum_thread_polls WHERE thread_id='".$thread_id."'"));
$result = dbquery("INSERT INTO ".$db_prefix."forum_poll_votes VALUES('', '".$userdata['user_id']."', '$vote_opt', '".$poll_id."')");
$result = dbquery("SELECT * FROM ".$db_prefix."forum_polls WHERE poll_index= 'F' AND poll_id= '".$res_array['poll_id']."'");
if (dbrows($result) != 0) {
$data = dbarray($result);
$poll_title = $data['poll_title'];
for ($i=0; $i<=9; $i++) {
if ($data["poll_opt_".$i]) $poll_option[$i] = $data["poll_opt_".$i];
}
if (iMEMBER) $result2 = dbquery("SELECT * FROM ".$db_prefix."forum_poll_votes WHERE vote_user='".$userdata['user_id']."' AND poll_id='".$data['poll_id']."'");
if ( (!iMEMBER || !dbrows($result2)) && $data['poll_ended'] == 0) {
if (!iMEMBER) {
$poll = ""; $i = 0; $num_opts = count($poll_option);
$forum_poll_votes = dbcount("(vote_opt)", "forum_poll_votes", "poll_id='".$data['poll_id']."'");
while ($i < $num_opts) {
$num_votes = dbcount("(vote_opt)", "forum_poll_votes", "vote_opt='$i' AND poll_id='".$data['poll_id']."'");
$opt_votes = ($forum_poll_votes ? number_format(100 / $forum_poll_votes * $num_votes) : 0);
$poll .= "<table width='98%' valign='top' align='center'> <tr>
<td width='30%'>".$poll_option[$i]."</td>
<td width='10%'>[ <b>".$num_votes."</b> ]</td>
<td width='60%'><img src='".FORUM."images/bar_left.gif' height='12'><img src='".FORUM."images/bar.gif' alt='".$poll_option[$i]."' width='$opt_votes' height='12'><img src='".FORUM."images/bar_right.gif' height='12'> [".$opt_votes."%]</td>
</tr></table><br>\n";
$i++;
}
} else {
$poll = ""; $i = 0; $num_opts = count($poll_option);
while ($i < $num_opts) {
$poll .= "<input type='radio' name='voteoption' value='$i'> $poll_option[$i]<br><br>\n";
$i++;
}
}
echo "<table width='98%' align='center'><tr><td><form name='voteform' method='post' action='".FUSION_SELF.(FUSION_QUERY ? "?".FUSION_QUERY : "")."'>";
echo "$poll<center><input type='hidden' name='poll_id' value='".$data['poll_id']."'>\n";
if (iMEMBER) {
echo "<hr><input type='button' onClick=\"sendRequestPoll('poll','".$_REQUEST['voteform']."','".$data['poll_id']."','$thread_id','$voteoption')\" name='cast_vote' value='".$locale['101']."' class='button'></center>\n";
}
echo "</form></td></tr></table>\n";
} else {
$poll = ""; $i = 0; $num_opts = count($poll_option);
$forum_poll_votes = dbcount("(vote_opt)", "forum_poll_votes", "poll_id='".$data['poll_id']."'");
echo "<table width='98%' valign='top' align='center'><tr><td>";
while ($i < $num_opts) {
$num_votes = dbcount("(vote_opt)", "forum_poll_votes", "vote_opt='$i' AND poll_id='".$data['poll_id']."'");
$opt_votes = ($forum_poll_votes ? number_format(100 / $forum_poll_votes * $num_votes) : 0);
$poll .= "<table width='98%' valign='top' align='center'> <tr>
<td width='30%'><b>".$poll_option[$i]."</b></td>
<td width='10%'>[ <b>".$num_votes."</b> ]</td>
<td width='60%' valign='center'><img src='".FORUM."images/bar_left.gif' height='12'><img src='".FORUM."images/bar.gif' alt='".$poll_option[$i]."' width='$opt_votes' height='12'><img src='".FORUM."images/bar_right.gif' height='12'> [".$opt_votes."%]</td>
</tr></table><br>\n";
$i++;
}
echo "$poll\n</td></tr></table>";
}
}
}
(впринципе она похожа с той, которая выводит голосование в файле viewthread.php)

все бы хорошо, но почемуто я немогу перехватить id варианта ответа из цикла()выделено оранжевым

крысным выделено то что должно записыватся в БД при голосовании....помогите разобратся в чем трабл, сам уже незнаю что делать

зы: все остальные данные передаются и записываются в БД верно

astrologer 20.05.2008 20:38

Много ненужного плохо форматированного кода, который непосредственно к проблеме не относится. Ничего выделенного синим не нашёл.

-=M@N=- 20.05.2008 20:44

синий я исправил на оранжевый, а код буду оптимизировать когда он заработает как надо=)

astrologer 20.05.2008 21:00

PHP код:

echo "<hr><input type='button' onClick=\"sendRequestPoll('poll','voteform','"
.$data['poll_id']."','$thread_id','"

/* Если я правильно понял, что запрос отправляется на другой файл (ajax-nav.php),
то здесь (viewthread.php) $_REQUEST['voteoption'] будет неопределён. */
.$_REQUEST['voteoption'].

"')\" value='"
.$locale['101']."' class='button'></center>\n"


-=M@N=- 20.05.2008 21:04

а как монжно определить? может скриптом каким-нить?

astrologer 20.05.2008 21:37

Посмотреть на получившийся Html

-=M@N=- 21.05.2008 12:31

решил проблему сам добавлением одного скрипта, тему можно закрыть=)


Время: 05:20