У меня есть эти страницы:

Secondpage.php

<center>
    <a href="fourthpage.php">Go back</a>
    <form action="fourthpage.php" method="POST">
        <select name="what" class="what" required oninvalid="this.setCustomValidity('Please enter what are you paying for ')" oninput="setCustomValidity('')" />
            <option value="" disabled selected>Choose what you are paying for</option>
            <option>Something</option>
            <option>Something</option>
            <option>Something</option>
            <option>Something</option>
        </select>
        <br>
        <button>other...</button>
        <br><br>
        <label for="price">Type the price</label>
        <br>
        <input id="amount" name="price" placeholder="&#8364" required oninvalid="this.setCustomValidity('Please enter the price ')" oninput="setCustomValidity('')" /   type="number">
        <br><br>
        <label for="payment">Who has to pay for it:</label>
        <br>
        <label for="everybody">Everybody</label>
        <input name="check_list[]" class="everybody" type="checkbox"  value="everybody" onclick="ckChange(this)" required>
        &nbsp&nbsp
        <label for="John">John</label>
        <input name="check_list[]" class="John" type="checkbox"  value="John" required>
        &nbsp&nbsp
        <label for="Peter">Peter</label>
        <input name="check_list[]" class="denis" type="checkbox"  value="Peter" required>
        &nbsp&nbsp
        <label for="Ferrari">Ferrari</label>
        <input name="check_list[]" class="Ferrari" type="checkbox"  value="Ferrari" required>
        <br>
        <input type="submit" name="submit" value="SEND">
    </form>
</center>

4thpage.php

<table>
      <center><h1>John</h1></center>
        <tr><td>WHO </td><td>WHAT </td><td>HOW MUCH</td><td>MY DEBT</td><td>TOTAL DEBT</td></tr>
        <tr><td class="d"><?php if(isset($_POST['submit'])){//to run PHP script on submit
                          if(!empty($_POST['check_list'])){
                         // Loop to store and display values of individual checked checkbox.
                          foreach($_POST['check_list'] as $selected){
                          echo $selected."</br>";
                          }}} ?></td>
           <td class="r"><?php if (isset($_POST['submit'])) { echo $_POST["what"];} ; ?></td>

           <td class="a"><?php if (isset($_POST['submit'])) { echo $_POST["price"];} ; ?></td>

           <td class="debt"><?php  if(isset($_POST['submit'])){//to run PHP script on submit
                          if(!empty($_POST['check_list'])){
                         // Loop to store and display values of individual checked checkbox.
                          foreach($_POST['check_list'] as $selected){
                           if ($selected == 'everybody'){ echo $_POST["price"]/4;}
                           elseif ($selected == 'John' || 'Peter' || 'Ferrari'){ echo $_POST["price"]/2;}
                           elseif ($selected == 'John' && $selected == 'Peter') { echo $_POST["price"]/3;} ;
                          }}}?> </td></tr>
<td class="total"><?php if (isset($_POST['submit'])) { ;} ; ?></td></tr>

</table>
<button onClick="location.reload();location.href='secondpage.php'">ADD</button> <button>PAY</button></center>

И javascript

function ckChange(el) {
  var ckName = document.getElementsByName(el.name);
  if (el.checked) {
    for (var i = 0; i < ckName.length; i++) {
      ckName[i].disabled = ckName[i] !== el;
    }
  } else {
    for (var i = 0; i < ckName.length; i++) {
      ckName[i].disabled = false
    }
  }

}

$(function(){

    var requiredCheckboxes = $(':checkbox[required]');

    requiredCheckboxes.change(function(){

        if(requiredCheckboxes.is(':checked')) {
            requiredCheckboxes.removeAttr('required');
        }

        else {
            requiredCheckboxes.attr('required', 'required');
        }
    });

});

Когда я пытаюсь получить ответ с двумя отмеченными флажками, например

elseif ($selected == 'John' && $selected == 'Peter') { echo $_POST["price"]/3;} 

Это не дает мне правильного ответа. Я не получаю цену, деленную на 3. Например: я выбрал цену 15, и сумма долга должна быть 15/3 = 5. Вместо 5 я получаю 7,5 7,5. Какие-нибудь решения?

2
McCormick 3 Янв 2018 в 00:15

2 ответа

Лучший ответ

Проблема не только в

elseif ($selected == 'Jacopo' && 'Denis' && 'Angus'){ echo $_POST["price"]/2;}

Итак, сначала вы хотите знать, что эта строка должна быть написана так.

elseif ($selected == 'Jacopo' || $selected == 'Denis' || $selected == 'Angus'){ echo $_POST["price"]/2;}

И во-вторых, вы не хотите использовать другой foreach. мы хотим убедиться, что элементы, которые вы ищете, внутри массива check_list, поэтому вы можете использовать in_array().

Это ваш последний код.

<td class="debt"><?php
if(isset($_POST['submit'])){
    if(!empty($_POST['check_list'])){
        if (in_array('everybody', $_POST['check_list'])){ echo $_POST["price"]/4;}
        elseif (in_array('Jacopo', $_POST['check_list']) && in_array('Denis', $_POST['check_list'])) { echo $_POST["price"]/3;}
        elseif (in_array('Jacopo', $_POST['check_list']) || in_array('Denis', $_POST['check_list']) || in_array('Angus', $_POST['check_list'])){ echo $_POST["price"]/2;}
    }
}
?></td>

Надеюсь, все ясно, и надеюсь, что помог вам.

2
Mohammed Alhanafi 2 Янв 2018 в 22:16

Я думаю, вы этого хотите (поправьте меня, если нет):

  • если проверено "все", случай 1
  • если отмечены ВСЕ ТРИ (соответственно ДВА) поля с именами, варианты 2 или 3
  • любая другая комбинация будет проигнорирована

В этом случае вы должны убедиться, что в $ _POST ['check_list'] отмечены все необходимые элементы и ничего более. Рассмотрим следующий пример:

// to play around with...
$_POST['check_list'] = ['everybody', 'Jacopo', 'Denis'];

$case1 = ['everybody'];
$case2 = ['Jacopo', 'Denis', 'Angus'];
$case3 = ['Jacopo', 'Denis'];

$result1 = array_intersect($_POST['check_list'], $case1);
$result2 = array_intersect($_POST['check_list'], $case2);
$result3 = array_intersect($_POST['check_list'], $case3);

if (count($case1) == count($result1)) {
    echo 'case 1';
}
elseif (count($case2) == count($result2)) {
    echo 'case 2';
}
elseif (count($case3) == count($result3)) {
    echo 'case 3';
}

Array_intersect сравнит все массивы, чтобы найти что-то общее. Все, чего нет ни в одном из других массивов, будет удалено. Теория множеств.

Редактировать: исправлены опечатки

0
Lars Stegelitz 2 Янв 2018 в 22:18