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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: проблема с обработкой...
 
 автор: Егор (Solar)   (03.12.2007 в 23:10)   письмо автору
 
 

Добрый вечер.
Буду рад если кто поможет )) продолжаю тему тестов...

Есть проблема со сравнением данных. По тесту у меня 10 вопросов и у каждого вопроса 5 вариантов ответа. В зависимости от того на какой из 5ти вариантов человек будит больше кликать он получит результат. Максимально за тест 10 балов, если кто-то набирает более 5ти балов получает результат соответствующий... Но вот в чем проблема... Если он не добирает этих 5 не по какому из вариантов, я ему хочу выдать другой ответ, как мне это сделать? пробовал просто добавлять else но тогда выходит если человек набирает более 5, но при это какието данные равны, он им выдает и тот и другой ответ... в общем запутался я... Кому не в тягость обьясните...



$psy1 = $r[1];
$psy2 = $r[2];
$psy3 = $r[3];
$psy4 = $r[4];
$psy5 = $r[5];

//сравниваем и выдаем результат

if ($psy1 > 5)
{
echo "</br></br>$resulttest1";
}

if ($psy2 > 5)
{
echo "</br></br>$resulttest2";
}

if ($psy3 > 5)
{
echo "</br></br>$resulttest3";
}

if ($psy4 > 5)
{
echo "</br></br>$resulttest4";
}

if ($psy5 > 5)
{
echo "</br></br>$resulttest5";
}

   
 
 автор: Drago   (03.12.2007 в 23:32)   письмо автору
 
   для: Егор (Solar)   (03.12.2007 в 23:10)
 


<?
if ($psy1 5

echo 
"</br></br>$resulttest1"


elseif (
$psy2 5

echo 
"</br></br>$resulttest2"


elseif (
$psy3 5

echo 
"</br></br>$resulttest3"


elseif (
$psy4 5

echo 
"</br></br>$resulttest4"


elseif (
$psy5 5

echo 
"</br></br>$resulttest5"
}
else
{
echo 
"</br></br>$resulttestother"
}
?>

При этом, если два варианта будут равны 5, выдаст "другой" ответ

   
 
 автор: Егор (Solar)   (03.12.2007 в 23:36)   письмо автору
 
   для: Drago   (03.12.2007 в 23:32)
 

спасибо большое, вроде все правильно теперь)
Как то я раньше с elseif не практиковал... пошел читать об этом

   
 
 автор: exp   (04.12.2007 в 00:00)   письмо автору
 
   для: Егор (Solar)   (03.12.2007 в 23:10)
 

если предположить что $r это массив значений соответствующих ответам на пять вопросов,
а $resulttest* это сообщения выдаваемые в случаях когда значения $r[] > 5,,

то что тогда должно.быть в случаях когда $r[]<5 ?

или нужно какое.то действие когда хоть одно из $r[] < 5 ?




// слишком долго сочинял :)

   
 
 автор: Егор (Solar)   (04.12.2007 в 00:10)   письмо автору
 
   для: exp   (04.12.2007 в 00:00)
 

>если предположить что $r это массив значений соответствующих ответам на пять вопросов,
Да это масив :

$array = array ($testq1, $testq2, $testq3, $testq4, $testq5, $testq6, $testq7, $testq8, $testq9, $testq10);

$r = array_count_values ($array);


>а $resulttest* это сообщения выдаваемые в случаях когда значения $r[] > 5,,
совершенно верно)

>то что тогда должно.быть в случаях когда $r[]<5 ?

эта задумка самого теста, нужно набрать больше 5 точных в определенном направлении ответов, что бы получить итог.
А для менее 5 есть свой ответ, один...

>или нужно какое.то действие когда хоть одно из $r[] < 5 ?
нет не нужно, просто моя задача была если значения меньше 5 вывести соответствующий результат... в принципе этого добились... Благо есть этот чудесный форум) Да и лишний раз убедился, что мне еще учиццо и учиццо...

   
 
 автор: exp   (04.12.2007 в 00:35)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 00:10)
 

все.равно как.то я непонял.
в том варианте на котором вы отановились как.бы $r[1] имеет наивысший статус , и если то что выше будет больше 5и ,

всё что ниже буде проигнорированно.

но не буду докучать :) просто подумал что если в каждом ответе учитывается , то нужно что.то вроде

for($i=1; $i<=5; $i++)
{
if ($r[$i]<5) echo eval("\$resulttest$i");
else echo 'другое';
}

   
 
 автор: Егор (Solar)   (04.12.2007 в 00:55)   письмо автору
 
   для: exp   (04.12.2007 в 00:35)
 

да вы что, я наоборот всегда открыт воспринимать и понимать идеи и ход мыслей других людей.
Тем более я только учусь... много чего не знаю и не понимаю)

Интересный вы вариант предложили, если не возражаете попробую понять...
Это цикл который будит перебирать значение в массиве которые меньше 5? только вот не знаком я с функцией eval, что она нам тут дает? Сори за вопросы, просто я таки еще дилетант...

   
 
 автор: Trianon   (04.12.2007 в 01:08)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 00:55)
 

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

   
 
 автор: Егор (Solar)   (04.12.2007 в 01:15)   письмо автору
 
   для: Trianon   (04.12.2007 в 01:08)
 

понял...((
Пока у меня похоже одни ошибки...

   
 
 автор: Trianon   (04.12.2007 в 01:23)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 01:15)
 

Я бы помог Вам, да только, честно говоря, не понял ничего в самой постановке задачи. Поэтому что-то созидательное советовать не рискую.

   
 
 автор: Егор (Solar)   (04.12.2007 в 01:37)   письмо автору
 
   для: Trianon   (04.12.2007 в 01:23)
 

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


$array = array ($testq1, $testq2, $testq3, $testq4, $testq5, $testq6, $testq7, $testq8, $testq9, $testq10);

$r = array_count_values ($array);


А теперь вся загвоздка была в том как мне правильно обработать эти значения... мне надо выбрать то которое набрало больше всего и выдать ответ. проходной бал думал сделать 5, тоесть значение которое больше 5ти побеждает так сказать... но остается вариант когда значения могут не дотягивать до 5ти или быть равны между собой и мне надо, чтото выдать пользователю и это собственно 6ой вариант ответа и я не знаю как это сделать...

   
 
 автор: Trianon   (04.12.2007 в 01:40)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 01:37)
 

Так что ответы у этих вопросов не у каждого свои, а одна лишь пятерка на все вопросы?
Что находится в $testq1?
В $testq2? и т.д.?

   
 
 автор: Егор (Solar)   (04.12.2007 в 01:46)   письмо автору
 
   для: Trianon   (04.12.2007 в 01:40)
 

угу... и собственно попытался сделать такую чудо конструкцию...

$potolok = 5
$psy - это переведенные в переменные значения масива...



if ($psy1 > $potolok)
{
echo "</br></br>$resulttest1";
}

if ($psy2 > $potolok)
{
echo "</br></br>$resulttest2";
}

if ($psy3 > $potolok)
{
echo "</br></br>$resulttest3";
}

if ($psy4 > $potolok)
{
echo "</br></br>$resulttest4";
}

if ($psy5 > $potolok)
{
echo "</br></br>$resulttest5";
}

else
{
echo "</br></br>$resulttest6";
}

   
 
 автор: Егор (Solar)   (04.12.2007 в 01:47)   письмо автору
 
   для: Trianon   (04.12.2007 в 01:40)
 

Это то те данные, что передавал из формы в обработчик...


$testq1 = $_POST["testq1"];

   
 
 автор: exp   (04.12.2007 в 01:14)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 00:55)
 

eval в этом случае подставит вместо $i значение которое в $i
http://softtime.ru/forum/read.php?id_forum=1&id_theme=112
не проверял получится.ли в том что я предложил :) но должно,
eval было.бы ненужно если был.бы массив $resulttest

   
 
 автор: Trianon   (04.12.2007 в 01:10)   письмо автору
 
   для: exp   (04.12.2007 в 00:35)
 

Для косвенной адресации в языках высокого уровня традиционно применяются массивы.
Реже - ссылки.
Очень редко - в php - символические ссылки, т.е. конструкции $$varname .
То, что предложили Вы - в лучшем случае дурной тон. В худшем - подстава.

   
 
 автор: Егор (Solar)   (04.12.2007 в 01:21)   письмо автору
 
   для: Trianon   (04.12.2007 в 01:10)
 

Здраствуйте
Скажите, а какие еще есть варианты решения моей задачи? А то я тут запутался... первый раз мне предложили конструкцию элсиф, теперь цикл и ивэл... и в чем может быть подстава с ивэл, если не затруднит не могли бы вы обьяснить...

   
 
 автор: exp   (04.12.2007 в 01:27)   письмо автору
 
   для: Trianon   (04.12.2007 в 01:10)
 

в моём случае это просто попытка понять :)
пару раз мне никак не удалось обойтись без eval,
в данном примере я ещё многое делал.бы не так ,
в часности массив начинался.бы не $r[1], а $r[0]

   
 
 автор: Егор (Solar)   (04.12.2007 в 01:42)   письмо автору
 
   для: exp   (04.12.2007 в 01:27)
 

И спасибо вам за понимание и вариант)

А масив мне не трудно сделать и с 0... а что бы вы еще делали не так, скажите, должен же я учится...)

   
 
 автор: exp   (04.12.2007 в 02:32)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 01:42)
 

телефон разконнектило неожиданно

я если честно так и не понял что вы хотите сделать :)
наверное это обработчик данных из формы , причём не самих данных а подменянных идентификаторов ответов на идентификаторы их значений взятые откуда.то

например если в форме было.бы на каждый вопрос возможно выбрать только один ответ,я сделал-бы
один массив например такие инпуты <input type=radio name=answer[] value=1>...........
ответы на все вопросы пришли-бы в виде простого массива

если возможны несколько ответов на один вопрос можно сделать двухмерный массив данных
<input type=checkbox name=answer[0][] value=1>........<input type=checkbox name=answer[10][] value=1>
, а можно дать разные имена ответам на разные вопросы, типа answer0[]

непонятно откуда потом берутся $r значения оценок ответов на вопросы (1.....10) которые инужны потом при обработке
и что должен сгенирировать этот обработчик в итоге


//

понял только после того как добавил что <input type=radio name=answer[] value=1>...........
придётся тоже давать разные имена или делать двухмерный массив

   
 
 автор: Егор (Solar)   (04.12.2007 в 08:58)   письмо автору
 
   для: exp   (04.12.2007 в 02:32)
 

>телефон разконнектило неожиданно
диэлап это зло...

>я если честно так и не понял что вы хотите сделать :)
объясним))

есть форма в которой можно выбирать варианты ответов вот одна из них


<form action=q2.php method=post>
     <p align=center>$vopros1</p>
     <p align=center><input type=radio name=testq1 checked value=1> $punkt11</p>
     <p align=center><input type=radio name=testq1 value=2> $punkt12</p>
     <p align=center><input type=radio name=testq1 value=3> $punkt13</p>
     <p align=center><input type=radio name=testq1 value=4> $punkt14</p>
     <p align=center><input type=radio name=testq1 value=5> $punkt15</p>
     <p align=center><input type=submit value=Отправить></p>
     </form>


Эти данные передаются в обработчик и переводятся в переменные


$testq1 = $_POST["testq1"];


Потом формирую масив и считаю значения


$array = array ($testq1, $testq2, $testq3, $testq4, $testq5, $testq6, $testq7, $testq8, $testq9, $testq10);

$r = array_count_values ($array); 


Отсюда собственно $r, ну и после перевожу каждое значение в переменную... Выходит получаю сколько раз был выбран каждый пункт.

$psy1 = $r[1];
$psy2 = $r[2];
$psy3 = $r[3];
$psy4 = $r[4];
$psy5 = $r[5];

И после пытаюсь работать в направлении того, что если значение набирает по какому то из предложеных 5ти вариант больше 5ти то выдается один из 5ти вариантов ответа. Но мне надо было еще сделать 6ой ответ который бы выдавался в случаи если значения меньше или равны между собой. в этом и проблема...

Как вы видели выше, так я пытался поступить с этим всем

$potolok = 5


if ($psy1 > $potolok)
{
echo "</br></br>$resulttest1";
}

elseif ($psy2 > $potolok)
{
echo "</br></br>$resulttest2";
}

elseif ($psy3 > $potolok)
{
echo "</br></br>$resulttest3";
}

elseif ($psy4 > $potolok)
{
echo "</br></br>$resulttest4";
}

elseif ($psy5 > $potolok)
{
echo "</br></br>$resulttest5";
}
else
{
echo "</br></br>$resulttest6";
}

   
 
 автор: sim5   (04.12.2007 в 10:03)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 08:58)
 

А что означет - если значение набирает по какому то из предложеных 5ти вариант больше 5ти ? Выбор значений от 1 до 5, стоит выбрать из вариантов 4 первых, и один любой отличный от первого, то уже всегда будет больше пяти, если говорить о сумме значений. Что вы хотите учитывать - варианты или их значения?

   
 
 автор: Егор (Solar)   (04.12.2007 в 17:15)   письмо автору
 
   для: sim5   (04.12.2007 в 10:03)
 

Здраствуйте
Я написал уже подробно о том, что хотел сделать. Что бы получить один из главных 5ти результатов, человек должен набрать больше 5 балов по одному из 5 вариантов. Всего вопросов 10. Но мне надо еще выдать человеку 6-ой вариант, в том случаи если ответы не добирают или равны между собой.... и я не знаю как это коректно записать

   
 
 автор: sim5   (04.12.2007 в 17:42)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 17:15)
 

А если есть более пяти, но есть и равные и ... не важно, лишь бы в одном из 10 было более 5? А если есть 2 по 6, это к чему отнести?

   
 
 автор: Егор (Solar)   (04.12.2007 в 17:59)   письмо автору
 
   для: sim5   (04.12.2007 в 17:42)
 

>А если есть 2 по 6, это к чему отнести?
Это как? тогда нужно 12 вопросов а их 10 ))

Хотел сделать, что бы все было строго, если какой то из значений больше 5 то выдать соответствующий ответ. Если меньше или все равны выдавать отдельный 6ой вариант ответа...

   
 
 автор: sim5   (04.12.2007 в 18:41)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 17:59)
 

Чтобы решить функцию, надо найти ее неизвестные. Ваших неизвестных неизвестно. Ну вы условия можете четко описать? Например, есть ли совпадения, узнать достаточно просто - удалить повторяющиеся значения из массива, например. Но правильно ли будет по условию - если повторяющиеся значения, это 6 баллов? К чему такой случай приравнять - к шестому как вы пишите? У вас в ваших if кроме как >5 ничего более нет, а узнать вы хотите массу, а масса серая и расплывчатая какая-то...

   
 
 автор: Егор (Solar)   (04.12.2007 в 18:55)   письмо автору
 
   для: sim5   (04.12.2007 в 18:41)
 

ок... Если забыть о >5 как еще мне можно перебрать или обработать эти результаты после подсчета значения массива?

$psy1 = $r[1];
$psy2 = $r[2];
$psy3 = $r[3];
$psy4 = $r[4];
$psy5 = $r[5];

я просто уже запутался...

   
 
 автор: sim5   (04.12.2007 в 19:02)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 18:55)
 

Не знаю, вы уже всех запутали :) Наверное сперва четко определить все условия - если так, то... а если так..., но если так... exp пытался вас понять, видимо не понял, или вернее не получил ответа на вопрос, я тоже самое.

   
 
 автор: Егор (Solar)   (04.12.2007 в 21:00)   письмо автору
 
   для: sim5   (04.12.2007 в 19:02)
 

ладно, лучше все же попробовать додуматься самому.
Спасиб вам за затраченное время и усилия =)
В следующий раз буду обращаться с лучше сформулированным запросом)

   
 
 автор: exp   (04.12.2007 в 22:26)   письмо автору
 
   для: Егор (Solar)   (04.12.2007 в 21:00)
 

наверное какие-то вот.такие бывают по логике такие опросы )
<?php
if (!empty($_POST)) {

$ocenki = array(=> array(10,4,4,4,4),  => array(7,2,2,2,7),  => array(6,7,7,7,7), 
     
45 => array(7,4,4,4,6),  54 => array(10,0,0,0,2),  65 => array(10,6,2,2,2),  232 => array(10,0,0,0,5), 
     
321 => array(10,4,0,0,5),  545 => array(0,0,0,0,8),  654 => array(5,0,0,6,7));
$ans = array();
function 
checkpost($str$key)

global 
$ocenki$ans;
    
$str = ($str 4) ? -: (int)$str;
    
$key = ($key 1000) ? -: (int)$key;
    if (
$str || $key 0) return;
    
    
$ans[$key] = $ocenki[$key][$str];

    echo 
'Вопрос №' $key ': '
    if (
$ans[$key] >= 5)echo $ans[$key] . ' баллов<hr/>';
    else echo 
'неоценен<hr/>';
}

array_walk_recursive($_POST'checkpost');

print_r($ans);

} else {
?>

<style>
input { margin: 0 20px; }
</style>

<script language="JavaScript">
// вопросы
var vprs = ['почему пароход плавает?',
    'зачем птицы летят на юг?',
    'сколько будет 2*2?',
    'где у електроника кнопка?',
    'кем был Карл Маркс с точки зрения кибернетики?',
    'за что аборигены съели Кука?',
    'для чего на телевидении много рекламы?',
    'чем отличается двухмерное от трёхмерного?',
    'что входит в состав пороха?',
    'почему трава зелёная?'];

// номера вопросов 
var id_v = ['1','5','654','65','54','45','321','232','545','2'];

// варианты ответов
var answrs = [['','по воде','по закону архимеда','по морю ходит а по реке плавает','а где плавает?'],
    ['','за кормами','греться','потомучто они перелётные','чтобы вернуться'],
    ['','четыре с половиной','пять','не много','будет 2*2'],
    ['','в голове','её нигде нет','не знаком с таким устройством','стесняюсь ответить'],
    ['','управляющее реле','датчик','сканер','кибернетик'],
    ['','из уважения','невкусно готовил','не прошёл фейсконтроль','значит было за что'],
    ['','способ заработать на эфир','для информирования населения','для красоты','для исследования её влияния на психику'],
    ['','соразмерностью','размеренностью','размером','углом зрения'],
    ['','тринитротолуол','ацетон','керосин','уголь'],
    ['','из-за содержания хлороформа','из-за потребления углекислого газа','смотря какая трава','потомучто']];
</script>

<script language="JavaScript"> 
function GetField(n) {

var field = document.getElementsByTagName('fieldset')[n];
var txt = '<h2>Вопрос: '+vprs[n]+'</h2>\n';
 for(var i=0; i < answrs[n].length; i++)
 {
    txt += '<input type="radio" name="answer['+id_v[n]+']" value="'+i+'"';
    if ( i == 0) txt += ' checked="checked"/>незнаю или нехочу отвечать<br/>\n';
    else txt += ' />'+answrs[n][i]+'<br/>\n';
    
 }
if ( n == 9) txt += '<input type="submit" value="диагноз"/>\n';
else txt += '<input type="button" value="следующий" onclick="GetField('+(n+1)+')"/>\n';

field.innerHTML = txt;
return 0;
}
</script>

<body onload="GetField(0)">

<b>ответьте на 10 вопросов</b><br/>

<form action="" method="post">
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
<fieldset></fieldset>
</form>
</body>
<?php
}
?>
javascript для экономии места просто

   
 
 автор: Егор (Solar)   (04.12.2007 в 22:39)   письмо автору
 
   для: exp   (04.12.2007 в 22:26)
 

чет я вообще запутался, пошел разбираться ))
Спасибо)

   
 
 автор: Faraon   (04.12.2007 в 09:00)   письмо автору
 
   для: exp   (04.12.2007 в 00:00)
 

-

   
Rambler's Top100
вверх

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