PHP Warning: Invalid argument supplied for foreach() in

314
06 марта 2017, 13:22
<?php
$messages = $form_options['messages'];
foreach ( $messages as $key => $message ):
    $elid = str_replace( '-', '_', $key );
    $content = apply_filters( 'wpmtst_l10n', $message['text'], wpmtst_get_l10n_context( 'form-messages' ), $key . ' : text' );
    ?>
    <tr>
        <th scope="row">
            <label for="<?php echo $elid; ?>">
                <?php _ex( $message['description'], 'description', 'strong-testimonials' ); ?>
            </label>
            <input type="hidden" name="wpmtst_form_options[messages][<?php echo $key; ?>][description]"
                   value="<?php esc_attr_e( $message['description'] ); ?>"/>
        </th>
        <td>
            <?php if ( 'submission_success' == $elid ): ?>
                <?php
                $settings = array(
                    'textarea_name' => "wpmtst_form_options[messages][$key][text]",
                    'textarea_rows' => 10,
                );
                wp_editor( $content, $elid, $settings );
                ?>
            <?php else: ?>
                <input type="text" id="<?php echo $elid; ?>"
                       name="wpmtst_form_options[messages][<?php echo $key; ?>][text]"
                       value="<?php echo esc_attr( $content ); ?>" required />
            <?php endif; ?>
        </td>
        <td class="actions">
            <input type="button" class="button secondary restore-default-message"
                   value="<?php _ex( 'restore default', 'singular', 'strong-testimonials' ); ?>"
                   data-target-id="<?php echo $elid; ?>"/>
        </td>
    </tr>
<?php endforeach; ?>

Помогите решить проблему. В начале есть цикл foreach. И вроде в новой версии PHP нужно его завернуть в if ( is_array( $messages) ) { код }. Но что-то не получается. Во-первых, для foreach нет скобочек, есть двоеточие и я не пойму как именно "завернуть" этот код.

Answer 1

Так же само как и с foreach используйте альтернативный синтаксис if endif, получится должно в итоге вот так:

    <?php
    if (is_array($form_options['messages'])):
    $messages = $form_options['messages'];
    foreach ( $messages as $key => $message ):
        $elid = str_replace( '-', '_', $key );
        $content = apply_filters( 'wpmtst_l10n', $message['text'], wpmtst_get_l10n_context( 'form-messages' ), $key . ' : text' );
        ?>
        <tr>
            <th scope="row">
                <label for="<?php echo $elid; ?>">
                    <?php _ex( $message['description'], 'description', 'strong-testimonials' ); ?>
                </label>
                <input type="hidden" name="wpmtst_form_options[messages][<?php echo $key; ?>][description]"
                       value="<?php esc_attr_e( $message['description'] ); ?>"/>
            </th>
            <td>
                <?php if ( 'submission_success' == $elid ): ?>
                    <?php
                    $settings = array(
                        'textarea_name' => "wpmtst_form_options[messages][$key][text]",
                        'textarea_rows' => 10,
                    );
                    wp_editor( $content, $elid, $settings );
                    ?>
                <?php else: ?>
                    <input type="text" id="<?php echo $elid; ?>"
                           name="wpmtst_form_options[messages][<?php echo $key; ?>][text]"
                           value="<?php echo esc_attr( $content ); ?>" required />
                <?php endif; ?>
            </td>
            <td class="actions">
                <input type="button" class="button secondary restore-default-message"
                       value="<?php _ex( 'restore default', 'singular', 'strong-testimonials' ); ?>"
                       data-target-id="<?php echo $elid; ?>"/>
            </td>
        </tr>
    <?php 
      endforeach;
      endif; 
    ?>

Так же можете ознакомиться подробней с синтаксисом на официальном сайте PHP

Answer 2

Как это нет скобочек для foreach?

<?php
$messages = $form_options['messages'];
if ( is_array($messages) ) {
    foreach ( $messages as $key => $message ) {
        $elid = str_replace( '-', '_', $key );
        $content = apply_filters( 'wpmtst_l10n', $message['text'], wpmtst_get_l10n_context( 'form-messages' ), $key . ' : text' );
        ?>
        <tr>
            <th scope="row">
                <label for="<?php echo $elid; ?>">
                    <?php _ex( $message['description'], 'description', 'strong-testimonials' ); ?>
                </label>
                <input type="hidden" name="wpmtst_form_options[messages][<?php echo $key; ?>][description]"
                       value="<?php esc_attr_e( $message['description'] ); ?>"/>
            </th>
            <td>
                <?php if ( 'submission_success' == $elid ): ?>
                    <?php
                    $settings = array(
                        'textarea_name' => "wpmtst_form_options[messages][$key][text]",
                        'textarea_rows' => 10,
                    );
                    wp_editor( $content, $elid, $settings );
                    ?>
                <?php else: ?>
                    <input type="text" id="<?php echo $elid; ?>"
                           name="wpmtst_form_options[messages][<?php echo $key; ?>][text]"
                           value="<?php echo esc_attr( $content ); ?>" required />
                <?php endif; ?>
            </td>
            <td class="actions">
                <input type="button" class="button secondary restore-default-message"
                       value="<?php _ex( 'restore default', 'singular', 'strong-testimonials' ); ?>"
                       data-target-id="<?php echo $elid; ?>"/>
            </td>
        </tr>
    <?php
    }
}
?>
READ ALSO
Is not allowed to connect to this MariaDB server

Is not allowed to connect to this MariaDB server

Fatal error: Uncaught exception 'PDOException' with message

435
Как с PHP привести все даты к одному формату?

Как с PHP привести все даты к одному формату?

Есть база данных в которой порядка 600 записей у записей есть дата публикации которую кто только не вводил как попалоВ результате в одной колонке...

370
Как получить ответ от сервера к множественным формы ввода через ajax

Как получить ответ от сервера к множественным формы ввода через ajax

Здравствуйте! Пожалуйста, помогите с AJAX в связке с PHP

234
Почему не загружаться подпункты меню joomla! 3?

Почему не загружаться подпункты меню joomla! 3?

Меню ведет себя аномальноДочерние подпункты второго уровня видны только при переходе по ссылке на родительский элемент первого уровня

294