Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Неизвестное число переменных
Форумы портала PHP.SU » » Вопросы новичков » Неизвестное число переменных

Страниц (1): [1]
 

1. Khristina - 21 Июля, 2011 - 17:50:06 - перейти к сообщению
Всем привет. У меня вопрос следующего характера. Пишу программу где пользователь вводит
шаг1 - количество учеников и кол-во предметов
шаг2- имена учеников и предметов
шаг 3 - оценки всех учеников по всем предметамб
шаг 4- хочу каким-то образом вывести рейтинг. но вот в чем проблемма, я не знаю сколько предметов введет пользователь, не знаю как суммировать все оценки одного ученика по нескольким предметам. так как не знаю сколько там массивов будет.
2. DeepVarvar - 21 Июля, 2011 - 18:06:40 - перейти к сообщению
Khristina пишет:
рейтинг

Относительно кого и чего?
3. Khristina - 21 Июля, 2011 - 18:11:49 - перейти к сообщению
Смотрите код.

CODE (htmlphp):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3.   <title></title>
  4. </head>
  5. <body>
  6. <?php
  7.  
  8. if (isset($_POST['post1'])and $_POST['stud-number']>1 and $_POST['stud-number']<=200 )
  9. {
  10. echo "<form method='POST' action='rate.php'><input type='hidden' name='post2'>
  11. <p><b><u>Введите фамилии, имя учеников</u></b></p><table>";
  12. for ($i =1;$i <= $_POST['stud-number'];$i++)
  13. {echo "<tr><td><input type='text' name='studname[]'></td></tr>";}
  14. echo "</table><p><b><u>Введите названия предметов</u></b></p><table>";
  15. for ($i=1;$i<=$_POST['subject-number'];$i++)
  16. {echo "<tr><td><input type='text' name='subjectname[]'></td></tr>";}
  17. echo "</tr><table>";
  18. echo "<p><input type='submit' value='следующий шаг >>>'></p>";
  19. }
  20.  
  21. elseif (isset($_POST['post2']))
  22. {
  23. echo "<form method='POST' action='rate.php'><input type='hidden' name='post3'>";
  24. $n=count($_POST['studname']);
  25. echo "<form method='POST' action='rate.php'><input type='text' name='n' value='$n'>";
  26. for ($i=0;$i<$n;$i++)
  27. {
  28. echo "<p>Введите оценки с предмета ". $_POST[subjectname][$i]."</p>";
  29. $r=$_POST['studname'];
  30. while (list(,$name)=each($r))
  31. {echo "$name: -";
  32. echo"<select name='marks[]'>";
  33. $marks =array (1,2,3,4,5);
  34. foreach ($marks as $a=>$b)
  35. {echo "<option>$b</option>";}
  36. echo "</select><br><input type='hidden' name='stud[]' value='$name'></td>";
  37. }
  38. }
  39. echo "<input type='submit' value='следующий шаг >>>'></form>";
  40. }
  41.  
  42. elseif (isset($_POST['post3']))
  43. {echo "Вот тут я хочу видеть рейтинг начиная с самого успешного ученика, то есть того, у которого сумма всех оценок - самое большое число и так далее.";}
  44.  
  45. else
  46. {
  47. if (isset($_POST['post1']) and $_POST['stud-number']<=1 or $_POST['stud-number']>200) {echo "Введите число учащихся в цифровом формате больше
  48. одного и меньше двухсот!<form method='POST' action='rate.php'><br><input type='submit' value='вернуться >>>'>
  49. <input type='hidden' name='stud-number' value='2'>
  50. </form>";}
  51. else {?>
  52. <p><b><u>Здравствуйте, Вас приветствует программа составления рейтинга учащихся</u></b></p>
  53. <form method='POST' action='rate.php'>
  54. <input type='hidden' name='post1'>
  55. <p>Введите кол-во учащихся для которых будет составлен рейтинг</p>
  56. <input type='text' name='stud-number'>
  57. <p>Введите кол-во предметов по которым будет составлен рейтинг</p>
  58. <input type='text' name='subject-number'><br><br>
  59. <input type='submit' value='следующий шаг >>>'>
  60. </form>
  61. <?}}?>
  62.  
  63. </body>
  64.  
  65. </html>
4. grefon - 21 Июля, 2011 - 20:23:16 - перейти к сообщению
Вместо этого:
PHP:
скопировать код в буфер обмена
  1. echo "Вот тут я хочу видеть рейтинг начиная с самого успешного ученика, то есть того, у которого сумма всех оценок - самое большое число и так далее.";


Поставьте это:
PHP:
скопировать код в буфер обмена
  1.  
  2. $temp = array();
  3. for($i=0; $i<count($_POST['stud']); $i++) {
  4.         if(isset($temp[$_POST['stud'][$i]])) {
  5.                 $temp[$_POST['stud'][$i]] = $temp[$_POST['stud'][$i]] + $_POST['marks'][$i];
  6.         } else {
  7.                 $temp[$_POST['stud'][$i]] = $_POST['marks'][$i];
  8.         }
  9. }
  10. arsort($temp);
  11.  
  12. foreach ($temp as $key => $val)
  13. echo $key.' - '.$val.'<br />';
  14.  
5. Khristina - 22 Июля, 2011 - 16:31:14 - перейти к сообщению
Спасибо большое. До этого я уже тоже догадалась. Хотелось бы еще как-то выводить не только фамилии и общую сумму оценок а отдельно оценки по предметам.

 

Powered by ExBB FM 1.0 RC1