PHP: Как мне суммировать значения массива в соответствии с параметрами, выбранными пользователем в HTML-форме? - PullRequest
0 голосов
/ 16 октября 2011

Я пытаюсь суммировать значения формы, заполненной пользователем.Я только изучаю PHP, прошу прощения за этот вопрос n00b:)

Вот краткий пример того, как моя HTML-форма:

...
What´s your favourite month?
<input type ="checkbox" name="month[]" value="march">March<br>
<input type ="checkbox" name="month[]" value="april">April

What´s your favourite day of the week?
<select name="day[]">
<option value="monday">Monday</option>
<option value="friday">Friday</option>
</select>

Итак, внутри моего php-файлаЯ положил:

/*Declare the variables here*/
$month = $_POST["month"];
$day = $_POST["day"];

/*Assign a value to each variable*/
$month = array (
"march" => 10,
"april" => 20);

$day = array (
"monday" => 1,
"friday" => 2);

$number = array_sum($month + $day);

print "<br>Your magic Number is... <b>".$total."</b>.<br>"

Я не могу заставить это работать, потому что массив просто суммирует все значения, а не только те, которые пользователь выбрал внутри формы.Я могу себе представить, что я говорю именно это с array_sum ().Так как я могу сказать сценарию суммировать только те значения, которые выбрал пользователь?

Спасибо за ваш совет!

Розамунда

Ответы [ 3 ]

2 голосов
/ 16 октября 2011

Вы создаете эту проблему для себя, потому что вы присваиваете значение $ month дате POST из формы, но затем вы назначаете ту же переменную $ month, что и массив.

Чтобы получить значение из массива, вам не нужна функция array_sum (). Также вы не назначаете переменной $ total какое-либо значение, вы называете ее $ number.

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

//Get actual values chosen by the user in a form
$user_month = $_POST["month"];
$user_day = $_POST["day"];

//Define the values for each possible answer
$month = array (
"march" => 10,
"april" => 20);

$day = array (
"monday" => 1,
"friday" => 2);

//Get the value of both added together if that is what you want
$number = $month[$user_month] + $day[$user_day];

print "<br>Your magic Number is... <b>".$number."</b>.<br>"

Чтобы получить несколько значений, которые вы делаете в первом примере («Каковы ВСЕ ваши любимые месяцы?»), Вам нужно будет выполнить цикл по массиву результатов, $ user_month в приведенном выше примере, и добавить каждое значение до тех пор, пока вы не доберетесь до конца массива $ user_month, затем сделайте то же самое для массива $ user_day.

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

1 голос
/ 16 октября 2011

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

<select name="day">
  <option value="monday">Monday</option>
  <option value="friday">Friday</option>
</select>

Для PHP

$total = 0; 

/*Assign a value to each variable*/
$month = array (
"march" => 10,
"april" => 20);

$day = array (
"monday" => 1,
"friday" => 2);

foreach( $_POST['month'] as $k => $v )
{
   if( isset($month[ $v ]) )
       $total += $month[ $v ]; 
} 

if( isset($day[ $_POST['day'] ]) 
    $total += $day[ $_POST['day'] ];      

print "<br>Your magic Number is... <b>".$total."</b>.<br>"
0 голосов
/ 16 октября 2011

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

Итак, после долгих попыток (и из-за моего отсутствия или информации, потому что я все еще читаю руководство У. Джейсона Гилмора «Руководство по PHP и MySQL»), я получил общую сумму и хотел опубликуйте это здесь на тот случай, если кому-то понадобится что-то вроде этого:

Вместо:

$number = array_sum($selected_months + $selected_days);
print "<br>Your magic Number is... <b>".$number."</b>.<br>"

Я сделал:

$number1 = array_sum($selected_months);
$number2 = array_sum($selected_days);

$total = $number2 + $number2;
echo $total;

Весьма вероятно, что это ужасный код, и есть более хороший способ сделать это, но он работает. Спасибо вам, ребята!!! Я не смог бы получить это без вашей помощи! :) Поскольку я новичок, опубликовать это - единственный способ, которым я могу здесь внести свой вклад.

Rosamunda

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...