passshift
@passshift
php, js, html5, css

Как показать выбранные поля checked?

Здравствуйте!

Нужна помощь, второй день мучаюсь.

Есть 2 массива, оба из БД:

Доступные способы оплаты:
Array ( 
    [0] => Array ( 
           [id] => 1 
           [name] => WebMoney 
    )
    [1] => Array ( 
           [id] => 2 
           [name] => Яндекс.Деньги
     )
    [2] => Array ( 
           [id] => 3 
           [name] => Qiwi 
    ) 
    [3] => Array (
           [id] => 4 
           [name] => Visa/MasterCard
    )
)


Уже выбранные способы оплаты:
Array ( 
    [0] => Array ( 
          [id] => 1 
          [name] => WebMoney
    ) 
    [1] => Array ( 
          [id] => 2 
          [name] => Яндекс.Деньги
    )
)


При редактировании, показывается форма где все способы из первого массива, НО у меня не получается поставить значение checked уже выбранным ранее.

Пытался делать через foreach:

<?php foreach ($уже_выбранные as $p_m) : ?>
        <?php foreach ($все_доступные as $s_p_m): ?>     

            <input type="checkbox" name="payment_method[]" value="<?php echo $p_m['id']; ?>" <?php echo $p_m['id'] === $s_p_m['id'] ? 'checked' : ''; ?> /> <?php echo $p_m['name']; ?><br>

        <?php endforeach; ?>    
    <?php endforeach; ?>


Получаю следующее:

c3e8db98fdd7405892610dbd61b32825.jpg

Способы дублируются, хотя выбранные отмечаются.

Если делать искать ключи через array_key_exists:

foreach($payment as $key=>$value){
     $c = array_key_exists($key, $cheked) ? 'Выбран' : 'Не выбран';
     echo $value['name'].' '.$c.'<br/>';
}


, то картина следующая (2 варианта):

df61534864f94be7af4c3b184d48af9a.png

, в то время как в БД:

1302540381724e018fd8d61e50ba2c23.png

UPDATE!

с in_array все заработала! Спасибо Рустаму :-)

79bbc2dd6101417e93ea0d183d5b5672.png
  • Вопрос задан
  • 2344 просмотра
Решения вопроса 2
Ну у вас есть 2 массива
1. Способы оплаты
// $payment = array();
Array ( 
    [0] => Array ( 
           [id] => 1 
           [name] => WebMoney 
    )
    [1] => Array ( 
           [id] => 2 
           [name] => Яндекс.Деньги
     )
    [2] => Array ( 
           [id] => 3 
           [name] => Qiwi 
    ) 
    [3] => Array (
           [id] => 4 
           [name] => Visa/MasterCard
    )
)

2. Выбранные способы
// $cheked = array();
Array ( 
    [0] => Array ( 
          [id] => 1 
          [name] => WebMoney
    ) 
    [1] => Array ( 
          [id] => 2 
          [name] => Яндекс.Деньги
    )
)

Вывод способов оплаты
foreach($payment as $key=>$value){
     $c = array_key_exists($key, $cheked) ? 'Выбран' : 'Не выбран';
     echo $value['name'].' '.$c.'<br/>';
}

ИЛИ
foreach($pay as $key=>$value){
     $c = in_array($value, $check) ? 'Выбран' : 'Не выбран';
     echo $value['name'].' '.$c.'<br/>';
}

WebMoney Выбран
Яндекс.Деньги Выбран
Qiwi Не выбран
Visa/MasterCard Не выбран
Ответ написан
Обновил, в связи с комментариями

<?php foreach ($все_доступные as $p_m) : ?>
    <?php 
        $cheked = ''; 
        foreach ($все_чекнутые as $p_m_s) {
            if($p_m_s['id'] == $p_m['id']) {
                $cheked = 'checked'; 
                break;
            }
        }

    ?>
    <input type="checkbox" name="payment_method[]" value="<?php echo $p_m['id']; ?>" <?php echo $cheked;?> /><?php echo $p_m['name']; ?><br>
<?php endforeach; ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Обходите в цикле первый массив, из второго спрашивайте если там есть такой элемент, то проставлять checked.
Ответ написан
Комментировать
BedwaRe
@BedwaRe
Пиши код
Как вариант, при генерации массивов делал бы ключами массива id записи (сейчас в примере они у вас +1).
После чего при выводе способов оплаты
<?
foreach($types as $type) {
    <input type="checkbox" <?=(in_array($type["id"], $checked_types)) ? "checked" : "";?>>
}
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы