Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как отметить только три checkbox'a из пяти? Нужно для опроса

Сообщения:  [1-10]   [11-19] 

 
 автор: major2   (21.05.2007 в 18:11)   письмо автору
 
   для: CNT   (21.05.2007 в 11:47)
 

CNT еще раз благодарю! Код отлично работает!

Спасибо все за помощь!

   
 
 автор: major2   (21.05.2007 в 18:10)   письмо автору
 
   для: ilyaILF   (21.05.2007 в 11:36)
 

Спасибо, проверил на работоспособность ваш код. Но при определенном количестве выбранных галочек (кажется трех) блокируется сама кнопка "Голосовать". Но это уже не важно, так как удачно заработал код предложенный CNT.

Огромное спасибо за добросовестную помощь!

   
 
 автор: CNT   (21.05.2007 в 11:47)   письмо автору
 
   для: major2   (21.05.2007 в 02:41)
 

Сорри, случайно опустил две фигурные скобки в своём варианте (после if (R == 3) следовало их поставить).

Давайте, раз уж тут пошла мода "портянки развешивать", и я дам полный код (у меня он работает в MSIE6, OPERA8.5, FF2):
<html><head><script>
function funcClick ()
{
for (var R = 0, x = document.forms.myForm, j = 0; j < x.elements.length; j++)
   if (x.elements [j].type == 'checkbox' && x.elements [j].checked) R++;
if (R == 3) {for (j = 0; j < x.elements.length; j++)
   if (x.elements [j].type == 'checkbox' && !x.elements [j].checked) x.elements [j].disabled = 1}
else for (j = 0; j < x.elements.length; j++)
   if (x.elements [j].type == 'checkbox') x.elements [j].disabled = 0;
}
</script></head>
<body BGCOLOR="#C1E7E7">
<table cellpadding="0" bgcolor="#C1E7E7">
<form action="/var/write.php" method="post" name="myForm">
<input type="hidden" name="name" value="var">
<colgroup align="right"></colgroup>
<colgroup></colgroup>
<tr>
  <td>
   <pre><font color="#0C5574" style="font-size:9px; font-family:Verdana">
Готовлюсь все отведенное 
время и не успеваю:         <input type="checkbox" name="vote[0]" value="1" onclick="setTimeout (funcClick, 0)">
Успеваю за отведенное время 
подготвиться к экзамену:<input type="checkbox" name="vote[1]" value="1" onclick="setTimeout (funcClick, 0)">
Готовлюсь последние 
один, два дня и сдаю:       <input type="checkbox" name="vote[2]" value="1" onclick="setTimeout (funcClick, 0)">
Готовлюсь последние один,
два дня и проваливаю:     <input type="checkbox" name="vote[3]" value="1" onclick="setTimeout (funcClick, 0)">
Сдаю экзамен за 
дополнительную плату:    <input type="checkbox" name="vote[4]" value="1" onclick="setTimeout (funcClick, 0)">
      </font>     </pre>
   </td>
</tr> 
<tr>
   <td align="center">
     <input type="submit" value="Голосовать">
   </td>
</tr>
</form>
</table>
</body>
</html>

   
 
 автор: ilyaILF   (21.05.2007 в 11:36)   письмо автору
 
   для: major2   (21.05.2007 в 09:10)
 

Я думаю, что править коды PHP смысла нет, тем более, что этот пример был скачан и представляет собой законченный програмный модуль, поэтому с минимальными изменениями оставляем вышеуказанный код javascript:
<script type="text/javascript">
(d=document).onclick=function checkselect(evt)
{
evt=evt||event;
if((checkObj=d.all?evt.srcElement:evt.target).tagName!='INPUT')return;  
  if(checkObj.type!='checkbox')return;
  else{
    for(var i=0,check=d.getElementsByTagName('INPUT'),checksum=0;i<check.length;i++)
        if(check[i].checked)checksum+=1;else check[i].disabled=false;
    if(checksum=='3')for(var i=0;i<check.length;i++)if(!check[i].checked)check[i].disabled=true;
  }
}
</script>
свои же параметры исходных файлов оставляете без изменений в первоначальном виде.

   
 
 автор: major2   (21.05.2007 в 09:10)   письмо автору
 
   для: ilyaILF   (21.05.2007 в 05:12)
 

У меня есть свой php скрипт высчитывающий результат и записывающий в файл:


<?php

# Argon PHP-Voting 0.1 (write.php)
# Copyright 2004 Argon
# http://argon.com.ru/

extract($HTTP_POST_VARS);
extract($HTTP_GET_VARS);

# Не позволять повторно голосовать, в днях
$days=0;

if(isset(
$vote) and $name and !isset($HTTP_COOKIE_VARS['opros-'.$name]))
{

@
$results=file($name.'.txt') or exit('<b>Неверное имя опроса.</b>');
$count=count($results);

for(
$n=0;$n<$count;$n++)
    {
    
$tempexplode('¦',$results[$n]);
    
settype($temp[1],'int'); 
    
$vname[$n]=$temp[0];
    
$vnumb[$n]=$temp[1];
    }

if(
is_array($vote))
    {
    foreach(
$vote as $k=>$v)
        {
        
$vnumb[$k]=$vnumb[$k]+1;
        }
    }
else
    {
    
$vnumb[$vote]=$vnumb[$vote]+1;
    }

$write='';

for(
$n=0;$n<$count;$n++)
    {
    
$write=$write.$vname[$n].'¦'.$vnumb[$n]."\n";
    }

$fp=fopen($name.'.txt','w');
fwrite($fp,$write);
fclose($fp);

setcookie('opros-'.$name,'1',time()+60*60*24*$days);

echo(
'<body bgcolor="#C1E7E7"><b>Ваш голос учтён.<b></body>');

# Чтобы не выводить результаты после голосования, поставьте # перед include...
include('echo.php');

}

elseif(isset(
$HTTP_COOKIE_VARS['opros-'.$name]))echo('<body bgcolor="#C1E7E7"><b>Вы уже отдали свой голос. Чтобы проголосовать снова, приходите через сутки. <a href="http://etph.org.ru/var/echo.php?name=var">Результаты</a></b></body>');

else echo(
'<body bgcolor="#C1E7E7"><b>Вы не проголосовали. Пожалуйста, <a href="http://etph.org.ru/var/var2.php">проголосуйте</a></b></body>');

?> 


Я конечно не профи в php и javascripte, но понимаю, что для этого скрипта требуется различные имена итпутов. Если не прав поправте.

Вобщем, большая просьба написать на javascripte блокиратор больше трех вариант, да так чтобы результат удачно отпралялся и обрабатывался именно на этом php-скприпте.
Еще раз спасибо!

   
 
 автор: ilyaILF   (21.05.2007 в 05:12)   письмо автору
 
   для: major2   (21.05.2007 в 02:36)
 

Рабочий вариант вашей задачи:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript">
(d=document).onclick=function checkselect(evt)
{
evt=evt||event;
if((checkObj=d.all?evt.srcElement:evt.target).tagName!='INPUT')return;  
  if(checkObj.name!='vote[]')return;
  else{
    for(var i=0,check=d.getElementsByName(checkObj.name),checksum=0;i<check.length;i++)
        if(check[i].checked)checksum+=1;else check[i].disabled=false;
    if(checksum=='3')for(var i=0;i<check.length;i++)if(!check[i].checked)check[i].disabled=true;
  }
}
</script>
</head>
<body BGCOLOR="#C1E7E7"> 
<form method="POST" action="var/write.php"> 
<input type="hidden" name="name" value="var" /> 
<input type="checkbox" name="vote[]" value="1" />&nbsp;Готовлюсь все отведенное время и не успеваю.<br />
<input type="checkbox" name="vote[]" value="2" />&nbsp;Успеваю за отведенное время подготовиться к экзамену.<br />
<input type="checkbox" name="vote[]" value="3" />&nbsp;Готовлюсь последние один, два дня и сдаю.<br /> 
<input type="checkbox" name="vote[]" value="4" />&nbsp;Готовлюсь последние один, два дня и проваливаю.<br /> 
<input type="checkbox" name="vote[]" value="5" />&nbsp;Сдаю экзамен за дополнительную плату.<br /> 
<input type="submit" value="Голосовать" /> 
</body> 
</html>
файл PHP должен располагаться во вложенной папке var/write.php:
<?
$variant
=array("Готовлюсь все отведенное время и не успеваю.","Успеваю за отведенное время подготовиться к экзамену.","Готовлюсь последние один, два дня и сдаю.","Готовлюсь последние один, два дня и проваливаю.","Сдаю экзамен за дополнительную плату.");
$votes=$_POST["vote"];
for(
$i=0;$i<count($votes);$i++){
echo 
$variant[$votes[$i]-1]."<br />";
}
?>
P.S. Как раз имена элементов и могут быть одинаковыми, потому как все-равно в результате получается индексированный массив значений, а вот значения (value) должны быть разными, иначе задача выбора разных результирующих величин теряет всяческий смысл.
У нас всегда все функционирует, и даже PHP! :-)

   
 
 автор: major2   (21.05.2007 в 02:41)   письмо автору
 
   для: CNT   (20.05.2007 в 17:35)
 

CNT, спасибо Вам за помощь. Но предложенный код ни как не функционирует.

   
 
 автор: major2   (21.05.2007 в 02:36)   письмо автору
 
   для: ilyaILF   (20.05.2007 в 20:32)
 

ilyaILF , ваш код отлично сработал на блокирование больше трех ответов. А вот с отправкой трех ответов не справился. Так как при отправке голосов очень важно имя инпута для правильной обработки php скрипта на сервере, а вы им почему-то пренебрегли. Поэтому отправляется только один голос. Я пробывал чтоб все имена были разными, как того требует php скрипт, то есть name="vote[0]" , name="vote[1]" и тд . Но блокировки вариантов больше трех не оказалось.

Прошу еще раз помочь. Огромное списибо за помощь.

   
 
 автор: major2   (21.05.2007 в 02:17)   письмо автору
 
   для: sim5   (21.05.2007 в 02:13)
 

Спокойного сна...

P.s.: А я вот еще долго не усну. Коды ведь нормально не работают, а сам не черта не соображаю в JS.

   
 
 автор: sim5   (21.05.2007 в 02:13)   письмо автору
 
   для: major2   (21.05.2007 в 02:06)
 

Достаточно, если учесть ваши дополнения в скобках, тогда это возможно, а вот изюминку учителя физики мне не осилить... зато я усну.))

   

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования