Как сделать значение неопределенным в PHP ложным? - PullRequest
0 голосов
/ 08 ноября 2019

Я работаю с Laravel с удаленным API. У вас есть возможность прикрепить несколько электронных писем. Эти письма имеют переключатели и флажки. Но они не всегда должны быть избраны. Вот почему я получаю эту ошибку. Вот примеры с кодом. Я буду рад, если вы мне поможете.

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

Undefined offset: 1

html

    <div class="form-group">
        <label for="name">E-posta</label>
        <div class="input-group">
            <input type="email" class="form-control email-address" name="email[]" placeholder="E-Posta giriniz">
            <div class="btn-group">
                <label class="btn btn-default">
                    <input class="primary-radio" type="radio" name="primaryEmail" value="0" checked autocomplete="off"> <span class="fas fa-star"></span>
                </label>
                <label class="btn btn-default">
                    <input class="ban-checkbox" type="checkbox" name="optOut[]" value="0" autocomplete="off"> <span class="fas fa-ban"></span>
                </label>
                <label class="btn btn-default">
                    <input class="invalid-checkbox" type="checkbox" name="invalid[]" value="0" autocomplete="off"> <span class="fas fa-exclamation-circle"></span>
                </label>
            </div>
        </div>
    </div>

php

    // Emails
    $emails = $request->input('email');
    $primaryEmail = $request->input('primaryEmail');
    $optOut = $request->input('optOut');
    $invalid = $request->input('invalid');

    $emailAddresses = array();

    $e = 0;
    foreach ($emails as $emailKey => $emailValue) {
        $emailAddresses[$emailKey] = [
            'emailAddress' => $emailValue,
            'invalid' => (intval($invalid[$e]) == $emailKey) ? true : false,
            'lower' => $emailValue,
            'optOut' => (intval($optOut[$e]) == $emailKey) ? true : false,
            'primary' => (intval($primaryEmail) == $emailKey) ? true : false,
        ];
        $e++;
    }

    dd($emailAddresses);

вывод массива

    array:2 [▼
      0 => array:5 [▼
        "emailAddress" => "test@live.com"
        "invalid" => true
        "lower" => "test@live.com"
        "optOut" => true
        "primary" => true
      ]
      1 => array:5 [▼
        "emailAddress" => "hi@test.com"
        "invalid" => true
        "lower" => "hi@test.com"
        "optOut" => true
        "primary" => false
      ]
    ]

1 Ответ

1 голос
/ 08 ноября 2019

В вашем случае, основываясь на вашем HTML, когда у вас есть, например, 3 электронных письма:

Электронная почта 1 <Все поля отмечены </p>

Электронная почта 2 <Установлен только флажок optOut </p>

Электронная почта 3 <Установлены только 2 флажка </p>

Ваш результат будет выглядеть примерно так:

[
    'email' => [
        0 => 'Email1',
        1 => 'Email2', 
        2 => 'Email3'
    ],
    'primaryEmail' => 0,
    'optOut' => [
        0 => 0,
        1 => 0,
        2 => 0
    ],
    'invalid' => [
        0 => 0,
        1 => 0
    ]

]

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

Один из способов исправить это - использовать ключ в своем HTML-коде:

   <div class="form-group">
        <label for="name">E-posta</label>
        <div class="input-group">
            <input type="email" class="form-control email-address" name="email[<SOME KEY HERE>]" placeholder="E-Posta giriniz">
            <div class="btn-group">
                <label class="btn btn-default">
                    <input class="primary-radio" type="radio" name="primaryEmail" value="0" checked autocomplete="off"> <span class="fas fa-star"></span>
                </label>
                <label class="btn btn-default">
                    <input class="ban-checkbox" type="checkbox" name="optOut[<SOME KEY HERE>]" value="0" autocomplete="off"> <span class="fas fa-ban"></span>
                </label>
                <label class="btn btn-default">
                    <input class="invalid-checkbox" type="checkbox" name="invalid[<SOME KEY HERE>]" value="0" autocomplete="off"> <span class="fas fa-exclamation-circle"></span>
                </label>
            </div>
        </div>
    </div>

Где НЕКОТОРЫЙ КЛЮЧ ЗДЕСЬ должен быть одинаковым для всех полей (дажеполе primaryEmail, если вы хотите отслеживать, к какой электронной почте относится основное поле).

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