Вызов $ index, созданного в функции другого файла php - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь вызвать переменную с именем $ index, которая подсчитывает номер итерации foreach внутри функции. В этой же функции я вызываю другую функцию, которая должна получить значение $ index в конце foreach.

       <?php

$index = 0;

function edit_profile_form() {

    global $index;
    $current_user_id = get_current_user_id();
    $data = get_user_meta ($current_user_id);

    if (isset($_POST['button2'])) {
        delete_user_meta($current_user_id, 'experiences');
    }

    if(isset($_POST['button1'])) {
        save_extra_profile_fields($current_user_id, $index);
    };

    $experiences = get_user_meta($current_user_id, 'experiences', true);

?>

[...SOME CODE HERE...]

Далее в файле (но всегда в функции) я вызываю это:

if (!empty($experiences)) {
        foreach ($experiences as $key) {
        ?>
            <div class="past_experience">
                <div class="experience_header">
                    <div>
                        <label for="team">Nom de l'équipe</label>
                            <input class="team" name="team_<?= $index ?>" value="<?= $key['new_experience_team'];?>"/>
                    </div>
                    <div>
                        <label for="role">Rôle dans l'équipe</label>
                            <input class="role" name="role_<?= $index ?>" value="<?= $key['new_experience_role'];?>"/>
                    </div>
                </div>

                <div class="experience_textarea">
                    <label for="description">Description du rôle</label>
                    <textarea class="description" name="description_<?= $index ?>"><?= $key['new_experience_description']; ?></textarea>

                    <label for="palmares">Palmarés avec l'équipe</label>
                    <textarea class="palmares" name="palmares_<?= $index ?>"><?= $key['new_experience_palmares']; ?></textarea>
                </div>
            </div>  
        <?php
        $index++;
        } 

    } else {
    ?>
    <div><p>Vous n'avez encore rentré aucune expérience</p></div>

И вот теперь функция, вызываемая в начале файла, но помещенная в другой файл:

function save_extra_profile_fields($user_id, $index) {

if (!empty($_POST['experiences'])) {
    $experiences[] = $_POST['experiences'];
    for ($i = 0; $i < $index; $i++) {
        $experience_{$i}['new_experience_team'] = $_POST["team_{$i}"];
        $experience_{$i}['new_experience_role'] = $_POST["role_{$i}"];
        $experience_{$i}['new_experience_description'] = $_POST["description_{$i}"];
        $experience_{$i}['new_experience_palmares'] = $_POST["palmares_{$i}"];
        $experiences[] = $experience_{$i};
    }
    update_usermeta($user_id, 'experiences', $experiences);
}

}

Это не работает, потому что в этой функции $ index фактически не определен.

Спасибо всем

1 Ответ

0 голосов
/ 23 апреля 2020

Попробуйте

Измените function edit_profile_form()

на

function edit_profile_form() use ($index)

Затем удалите ключевое слово global внутри.

Global way

Чтобы он был доступен для всех функций, вы можете использовать $GLOBALS['index'] вместо везде вместо $index.

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