[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не верно написан код
Unona
Здравствуйте smile.gif

Пожалуйста, подскажите:

по php новичок, к тому же давно не писала. Решила вспомнить - результат:

PHP
<html>

    <head>
        <title>Тест на знание астрономии</title>
    </head>

    <body topmargin="0" leftmargin="0" bottommargin="0" rightmargin="0" 
      marginwidth
="0" marginheight="0">
            
        
<table width='100%' cellspacing='0' cellpadding='0' border='0'>
            <tr>
                <td>В данном тесте необходимо ответить на 15 вопросов,
 по окончании теста Вы узнаете степень своих знаний по астрономии smile.gif</td>
            </tr>
            <tr>
                <td><form action='' method='post'></td>
            </tr>
            <tr>
                <td><input type='hidden' name='action' value='post'></td>
            </tr>
            <tr>
                <td><u><b>Впорос 1:</b></u><br>Сколько планет в известно в Солнечной системе на данный момент?<br>
                    <input type='radio' name='v1' value='s1'>7<br>
                    <input type='radio' name='v1' value='s2'>8<br>
                    <input type='radio' name='v1' value='s3'>9<br>
                    <input type='radio' name='v1' value='s4'>Земля<br>
                    <input type='radio' name='v4' value='other'>Другое<br><br>
            </tr>
            <tr>
                <td width="100%" height="1" bgcolor="#000000"></td>
            </tr>
            <tr>
                <td><br><u><b>Впорос 2:</b></u><br>Что такое Солнце?<br>
                    <input type='radio' name='v2' value='zvezda'>Звезда<br>
                    <input type='radio' name='v2' value='kamen'>Камень<br>
                    <input type='radio' name='v2' value='ogon'>Огонь<br>
                    <input type='radio' name='v2' value='other'>Другое<br><br>
            </tr>
            <tr>
                <td width="100%" height="1" bgcolor="#000000"></td>
            </tr>
            <tr>
                <td><br><u><b>Впорос 3:</b></u><br>В каком созвездии находится Региль?<br>
                    <input type='radio' name='v3' value='betel'>Бетельгейзе<br>
                    <input type='radio' name='v3' value='orion'>Орион<br>
                    <input type='radio' name='v3' value='volver'>Волосы Вероники<br>
                    <input type='radio' name='v3' value='other'>Другое<br><br>
            </tr>
            <tr>
                <td width="100%" height="1" bgcolor="#000000"></td>
            </tr>
            <tr>
                <td><br><u><b>Впорос 4:</b></u><br>Назовити ярчайшую звезду, видимою на нашем небе?<br>
                    <input type='radio' name='v4' value='sir'>Сириус<br>
                    <input type='radio' name='v4' value='vega'>Вега<br>
                    <input type='radio' name='v4' value='other'>Другое<br><br>
            </tr>
            <tr>
                <td width="100%" height="1" bgcolor="#000000"></td>
            </tr>
            <tr>
                <td><br><u><b>Впорос 5:</b></u><br>Сколько созвездий зарегистрировано на нашем небе в данный момент?<br>
                    <input type='radio' name='v5' value='87'>87<br>
                    <input type='radio' name='v5' value='88'>88<br>
                    <input type='radio' name='v5' value='other'>Другое<br><br>
            </tr>
            <tr>
                <td width="100%" height="1" bgcolor="#000000"></td>
            </tr>
            <tr>
                <td><input type='submit' name='rezult' value='Узнать результат'>
            </tr>
            <tr>
                <td></form></td>
            </tr>

        </table>
            
    
</body>

</
html>
<?
php
    $i
=0;
    $v1=isset ($_POST['v1']) ? $_POST ['v1'] : '';
    switch ($v1)
        {
            case 's1': $i=$i+0; break;
            case 's2': $i++; break;
            case 's3': $i=$i+0; break;
            case 's4': $i=$i+0; break;
            case 'other': $i=$i+0; break;
            default: echo "Вы не ответили не вопрос №1";
        }

    $v2=isset($_POST['v2']) ? $_POST['v2'] : '';
    switch ($v2)
        {
            case 'zvezda': $i=$i+1; break;
            case 'kamen': $i++; break;
            case 'ogon': $i=$i+0; break;
            case 'other': $i=$i+0; break;
            default: echo "Вы не ответили не вопрос №2";
        }
    $v3=isset($_POST['v3']) ? $_POST['v3'] : '';
    switch ($v3)
        {
            case 'betel': $i=$i+0; break;
            case 'orion': $i++; break;
            case 'volver': $i=$i+0; break;
            case 'other': $i=$i+0; break;
            default: echo "Вы не ответили не вопрос №3";
        }
    $v4=isset($_POST['v4']) ? $_POST['v4'] : '';
    switch ($v4)
        {
            case 'sir': $i=$i+0; break;
            case 'bega': $i=$i+0; break;
            case 'other':  $i++; break;
            default: echo "Вы не ответили не вопрос №4";
        }
    $v5=isset($_POST['v5']) ? $_POST['v5'] : '';
    switch ($v5)
        {
            case '87':  $i=$i+0; break;
            case '88': $i++; break;
            case 'other': $i=$i+0; break;
            default: echo "Вы не ответили не вопрос №5";
        }
    switch ($i)
        {
            case '5': echo 'Вы ответили верно на все вопросы.'; break;
            case '4': echo 'Ваши знания по астрономии желают лучшего.'; break;
            case '3': echo 'Ваши знания по астрономии необходимо улучшить.'; break;
            case '2': echo 'Ваши знания по астрономии необходимо улучшить.'; break;
            case '1': echo 'Ваши знания по астрономии необходимо улучшить.'; break;
            default: echo 'Вы знаете только азы астрономии.';
        }


Если ответить не верно на вопрос № 4, выдает:

Вы не ответили не вопрос №4Ваши знания по астрономии необходимо улучшить.

В принципе, запись "Вы не ответили не вопрос №4" я потом уберу, но в данный момент есть ошибка, а в чем...


PS: в тесте много эстетических недочетов как в коде, так и в оформлении - не обращайте на них внимание, это только заготовка, еще даже не все вопросы написаны.



Спустя 13 минут, 1 секунда (20.10.2009 - 09:42) jetistyum написал(а):
проверьте что содержится в переменной $v4 перед switch
var_dump например ..
возможно ошибка что Вы выбираете vega, которого у вас нет в списке switch wink.gif

Спустя 3 минуты, 40 секунд (20.10.2009 - 09:45) Unona написал(а):
Нашла, спасибо smile.gif

Как всегда - опечатка:

Вопрос № 4:
PHP
<input type='radio' name='v4' value='vega'>Вега<br>

vega

Обработка:

PHP
case 'bega'$i=$i+0; break;

bega


Спустя 4 минуты (20.10.2009 - 09:49) Unona написал(а):
Попробовала сократить

PHP
case '3': echo 'Ваши знания по астрономии необходимо улучшить.'; break;
            case 
'2': echo 'Ваши знания по астрономии необходимо улучшить.'; break;
            case 
'1': echo 'Ваши знания по астрономии необходимо улучшить.'; break;


на

PHP
case '<3' or '>1': echo 'Ваши знания по астрономии необходимо улучшить.'; break;


вроде работает...

Спустя 4 минуты, 13 секунд (20.10.2009 - 09:54) glock18 написал(а):
Цитата
вроде работает...

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

так должно работать
PHP
case '1':
case 
'2':
case 
'3':
  echo 
'Ваши знания по астрономии необходимо улучшить.';
  break;


Спустя 30 секунд (20.10.2009 - 09:54) jetistyum написал(а):
а еще можно сократить тем, что не прибавлять к $i ноль )

Спустя 3 минуты, 40 секунд (20.10.2009 - 09:58) Unona написал(а):
jetistyum, спасибо - сокращу.

glock18 в тесте будет 15 вопросов и 3-4 результата. Просто слишком много придется писать case. А что делать, если вопросов 20?

Спустя 1 минута, 52 секунды (20.10.2009 - 10:00) jetistyum написал(а):
case '<3' or '>1': echo 'Ваши знания по астрономии необходимо улучшить.'; break;

такая конструкция не будет работать, т.к. происходит сравнивание

if ($i=='<3')
тоесть сравнивание со строкой.
в данном случае glock18 предложил вариант корректнее.
еще вариант

if($i==5)
echo '...';
elseif($i==4)
echo '...';
elseif($i>0)
echo '...';
else
echo 'Loooser';

Это не лучше, не хуже, это просто еще один вариант

Спустя 8 минут, 49 секунд (20.10.2009 - 10:08) Unona написал(а):
jetistyum, понятно. Хотя проверила - вроде работает... Но если код изначально некорректен - исправлю.

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

PHP
if($i=5)


, а не равенства if($i==5)

Спустя 30 минут, 39 секунд (20.10.2009 - 10:39) Kuliev написал(а):
Unona
А здесь так задумано или это опечатка ?
HTML
<td><u><b>Впорос 1:</b></u><br>Сколько планет в известно в Солнечной системе на данный момент?<br>
<input type='radio' name='v1' value='s1'>7<br>
<input type='radio' name='v1' value='s2'>8<br>
<input type='radio' name='v1' value='s3'>9<br>
<input type='radio' name='v1' value='s4'>Земля<br>
<!-- Вот эта строчка name='v4' -->
<input type='radio' name='v4' value='other'>Другое<br><br>

Спустя 15 минут, 14 секунд (20.10.2009 - 10:54) Unona написал(а):
Kuliev, это тоже опечатка, спасибо!

Строчка создалась в четвертом вопросе, в остальные просто копировалась. Значит не везде исправила.

Спустя 7 минут, 42 секунды (20.10.2009 - 11:02) glock18 написал(а):
В солнечной системе на данный момент 10 планет smile.gif Ведут споры является ли планетой Плутон правда. Так же на краю системы нашли порядка 7 лет назад блуждающую планеты Прозерпина. Она движется по определенной орбите вокруг солнца, что, несмотря на ее небольшие размеры, является признаком планеты.

ЗЫ: никогда не любил тесты... в них приходится ориентироваться на проверяющих, и они подразумевают, что проверяемый должен знать небольше, чем проверяющий.

Спустя 6 минут, 52 секунды (20.10.2009 - 11:09) Unona написал(а):
glock18, официально - 8. Плутон больше не планета. Он относится к разряду "малых планет". К ним же отнесли Цереру - ранее самый большой астероид и Эриду - собственно из-за нее все и началось. Так и назвали smile.gif

Спустя 5 минут, 56 секунд (20.10.2009 - 11:15) glock18 написал(а):
Unona
уже официально значит smile.gif окей, если так, то этот тест мне нравится smile.gif обычно, к сожалению, когда видишь такой вопрос, то ответ будет как из букваря... вы меня приятно удивили smile.gif а что можете сказать про Прозерпину? Ее таки тоже отнесли к разряду планетоидов?

Спустя 23 минуты, 23 секунды (20.10.2009 - 11:38) Unona написал(а):
glock18, я говорю только официальные данные. И доверяю только им. Остальное - теория. smile.gif

Тест действительно с подобными "подводными камнями".

Спустя 3 часа, 24 минуты, 39 секунд (20.10.2009 - 15:03) Kuliev написал(а):
Unona
Делать было нечего и я решил немного оптимизировать Ваш код, так сказать придать немного динамизма Вашему скрипту.

Судя из Вашего скрипта Вы не используете БД, не храните данные в файле и т.д.
исходя из это я построил такой вот скриптик для Вас надеюсь что Вы разберетесь! wink.gif
PHP
<?php
if(isset($_POST['rezult']))
{
     
$v1 = !empty($_POST['v1']) ? $_POST['v1'] : null;
     
$v2 = !empty($_POST['v2']) ? $_POST['v2'] : null;
     
$v3 = !empty($_POST['v3']) ? $_POST['v3'] : null;
     
$v4 = !empty($_POST['v4']) ? $_POST['v4'] : null;
     
$v5 = !empty($_POST['v5']) ? $_POST['v5'] : null;

     
$vopros = array($v1,$v2,$v3,$v4,$v5);

     
$otvet = array("s2","kamen","orion","other","88");

     
$j 0;
     for(
$i 0$i count($vopros); $i++)
     {
        if(
$vopros[$i] == $otvet[$i])
        ++
$j;
     }

        
$res $j 100 count($otvet);
        echo 
"Вы ответели на ".round($res,2)."%";
}

$array = array(
                
"Сколько планет известно в Солнечной системе на данный момент?" =>
                 array(
                       
"s1" => "7",
                       
"s2" => "8",
                       
"s3" => "9",
                       
"s4" => "Земля",
                       
"other" => "Другое"
                       
),
                 
"Что такое Солнце?" =>
                 array(
                       
"zvezda" => "Звезда",
                       
"kamen" => "Камень",
                       
"ogon" => "Огонь",
                       
"other" => "Другое"
                       
),
                 
"В каком созвездии находится Региль?" =>
                 array(
                       
"betel" => "Бетельгейзе",
                       
"orion" => "Орион",
                       
"volver" => "Волосы Вероники",
                       
"other" => "Другое"
                       
),
                 
"Назовити ярчайшую звезду, видимою на нашем небе?" =>
                 array(
                       
"sir" => "Сириус",
                       
"vega" => "Вега",
                       
"other" => "Другое"
                       
),
                 
"Сколько созвездий зарегистрировано на нашем небе в данный момент?" =>
                 array(
                       
"87" => "87",
                       
"88" => "88",
                       
"other" => "Другое"
                       
)
                 );

$table "<form method='post'>\n";
$table .= "<table width='100%' cellspacing='0' cellpadding='0' border='0'>\n";
$table .= "<tr>\n";
$table .= "<td>В данном тесте необходимо ответить на 15 вопросов,
 по окончании теста Вы узнаете степень своих знаний по астрономии </td>\n"
;
$table .= "</tr>\n";

$i 0;
foreach (
$array as $key => $value)
{
    
$table .="<tr>\n";
    
$table .="<td><u><b>Впорос ".++$i.":</b></u><br>".$key."<br>\n";

   
    foreach(
$value as $key => $val)
    {
       
$table .= "<input type='radio' name='v".$i."' value='".$key."'>".$val."<br>\n";
    }

    
$table .= "</td>\n";
    
$table .= "</tr>\n";
}

$table .= "<tr>\n";
$table .= "<td><input type='submit' name='rezult' value='Узнать результат'>\n";
$table .= "</tr>\n";
$table .= "</table></form>\n";

echo 
$table;

Спустя 40 минут, 4 секунды (20.10.2009 - 15:43) twin написал(а):
Цитата
Делать было нечего

как я завидую... sad.gif
Его дополнить возможностью выбора и чтения вопросов из файлов... раз базы нету.

Спустя 16 минут, 40 секунд (20.10.2009 - 16:00) Unona написал(а):
Kuliev, большое спасибо!

Правда я массивы почти не помню - будет схема вспомнить smile.gif

Спустя 5 минут, 11 секунд (20.10.2009 - 16:05) Kuliev написал(а):
Цитата (Unona @ 20.10.2009 - 18:00)
Kuliev, большое спасибо!

Правда я массивы почти не помню - будет схема вспомнить smile.gif

Пожалуйста biggrin.gif

Спустя 3 месяца, 3 дня, 6 часов, 37 минут, 39 секунд (23.01.2010 - 23:42) Gector написал(а):
Спасибо большое этой теме. Она выручила меня под конец дня. Целый день бодался с радио кнопками. Если есть кошелек у форума. Сделай не большую благотворительность)

С Уважением
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.