You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

提交其他表单后如何保留PHP数组中的数据?

问题:提交更新表单后丢失已添加的用户数据

我正在完成一项PHP练习,要求将表单收集的多组数据存储在数组中,不能使用session、数据库、文件或localStorage。目前已实现新增用户功能(当NID未在数组中时可添加多个用户),但在数据更新环节遇到问题:提交用于选择待修改用户NID的#getNidForm表单时,$agenda变量中已添加的用户数据会被清空,调试一周仍未解决,怀疑问题出在isset()判断上。

代码展示

index.php

<?php
require_once './controllers/modules.php';

if(!isset($_POST['hiddenInputUpdate'])) {
    $newAgenda = [];
} else {
    $newAgenda = decodeData();
    updateData($newAgenda);
}

if(!isset($_POST['hiddenInputReg'])) {
    $agenda = [];
} else {
    $agenda = decodeData();
    addData($agenda);
}

print('<pre>'.print_r($agenda, true).'</pre>');

?>
    <div class="container-panel">
        <main>
            <div id="add-contact" class="section-content">
                <div class="top">
                    <div class="left">
                        <h1>Añadir contactos</h1>
                        <div class="date">
                            <input type="date" name="date" id="date">
                        </div>
                    </div>
                    <div class="right">
                        <div class="theme-toggler">
                            <span class="material-icons-sharp active">light_mode</span>
                            <span class="material-icons-sharp">dark_mode</span>
                        </div>
                    </div>
                </div>
                <div>
                    <form action='' method="POST" class="w-75 form-register" id="regForm">
                        <div class="form-floating mb-4">
                            <input type="text" class="form-control form-control-lg" name="regNid" required/>
                            <label for="regNid">DNI</label>
                        </div>
                        <div class="form-floating mb-4">
                            <input type="text" class="form-control form-control-lg" name="regName" required/>
                            <label for="regName">Nombre</label>
                        </div>
                        <div class="form-floating mb-4">
                            <input type="text" class="form-control form-control-lg" name="regSurname" required/>
                            <label for="regSurname">Apellidos</label>
                        </div>
                        <div class="form-floating mb-4">
                            <input type="email" class="form-control form-control-lg" name="regEmail" required/>
                            <label for="regEmail">Email</label>
                        </div>
                        <div class="form-floating mb-4">
                            <input type="tel" class="form-control form-control-lg" name="regTel" required/>
                            <label for="regTel">Teléfono</label>
                        </div>
                        <div class="form-floating mb-4">
                            <input type="date" class="form-control form-control-lg" name="regBirth" required/>
                            <label for="regBirth">Fecha de nacimiento</label>
                        </div>

                        <div class="d-flex justify-content-center">
                            <input type="hidden" name="hiddenInputReg" value='<?php echo encodeData($agenda); ?>'>
                            <button type="submit" name="regSubmit" class="btn btn-success btn-block btn-lg gradient-custom-4 text-body">Registrar</button>
                        </div>
                    </form>
                </div>
            </div>
            <div id="update-contact" class="section-content">
                <div class="top">
                    <div class="left">
                        <h1>Actualizar contactos</h1>
                        <div class="date">
                            <input type="date" name="date" id="date">
                        </div>
                    </div>
                    <div class="right">
                        <div class="theme-toggler">
                            <span class="material-icons-sharp active">light_mode</span>
                            <span class="material-icons-sharp">dark_mode</span>
                        </div>
                    </div>
                </div>
                <div>
                    <form class="w-25 my-5" action="" method="POST" id="getNidForm">
                        <select class="form-select form-select-lg mb-3" aria-label=".form-select-lg example" name="getNid">
                            <?php
                            if(isset($agenda)){
                                echo '
                                    <option value="noSel" selected>Selecciona un DNI</option>
                                ';
                                foreach($agenda as $key => $value) {
                                    echo '
                                        <option value='.$key.'>'.$key.'</option>
                                    ';
                                }
                            } else {
                                echo '
                                    <option value="noSel" selected>No hay DNIs</option>
                                ';
                            }
                            ?>
                        </select>
                        <button type="submit" name="getNidSubmit" class="btn btn-success btn-block btn-lg gradient-custom-4 text-body">Seleccionar</button>
                    </form>
                    <?php
                    if(isset($_POST['getNid']) && !empty($_POST['getNid'])) {
                        if($_POST['getNid'] !== 'noSel') {
                            echo '
                            <form class="my-5" action="" method="POST" id="updForm">
                                <div class="form-group">
                                    <h2 class="heading">Registrar</h2>
                                    <div class="form-floating mb-4">
                                        <input type="text" class="form-control form-control-lg" name="updateNid" value="'.$_POST['getNid'].'">
                                        <label for="updateNid">DNI</label>
                                    </div>
                                    <div class="form-floating mb-4">
                                        <input type="text" class="form-control form-control-lg" name="updateName">
                                        <label for="updateName">Nombre</label>
                                    </div>
                                    <div class="form-floating mb-4">
                                        <input type="text" class="form-control form-control-lg" name="updateSurname">
                                        <label for="updateSurname">Apellidos</label>
                                    </div>
                                    <div class="form-floating mb-4">
                                        <input type="email" class="form-control form-control-lg" name="updateEmail">
                                        <label for="updateEmail">Email</label>
                                    </div>       
                                    <div class="form-floating mb-4">
                                        <input type="tel" class="form-control form-control-lg" name="updatePhone">
                                        <label for="updatePhone">Phone</label>
                                    </div>
                                    <div class="form-floating mb-4">
                                        <input type="text" class="form-control form-control-lg" name="updateBirth"/>
                                        <label for="updateBirth">Fecha de nacimiento</label>
                                    </div>
                                    <div class="mb-4" style="width: 22rem;">
                                        <label for="registerPic">Selecciona una foto<span class="text-danger">*</span></label>
                                        <input type="file" class="form-control form-control-lg" name="updateFile" />
                                    </div>
                                </div>
                                <div class="form-group">
                                    <div class="grid">
                                    <button type="submit" class="btn btn-primary" name="sub-update" value="update">Actualizar</button>
                                    <input type="hidden" name="hiddenInputUpdate" value='.encodeData($newAgenda).'>
                                    </div>  
                                </div>
                            </form>
                            ';
                        }
                    }
                    ?>
                </div>
            </div>
        </main>
    </div>

modules.php

<?php

function getLocalTime() {
    date_default_timezone_set('Atlantic/Canary');
    return date("d-m-Y H:i:s a");
}

function encodeData($data) {
    return json_encode($data);
}

function decodeData() {
    return json_decode($_POST['hiddenInputReg'], true);
}

function cleanData($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

function addData(&$data) {
    $date = getLocalTime();
    if(!in_array($_POST['regNid'], $data) || empty($data)) {
        $data[$_POST['regNid']]['nombre'] = cleanData($_POST['regName']);
        $data[$_POST['regNid']]['apellidos'] = cleanData($_POST['regSurname']);
        $data[$_POST['regNid']]['correo'] = cleanData($_POST['regEmail']);
        $data[$_POST['regNid']]['telefono'] = cleanData($_POST['regTel']);
        $data[$_POST['regNid']]['fechaNacimiento'] = cleanData($_POST['regBirth']);
        $data[$_POST['regNid']]['fechaInsercion'] = $date;
        $data[$_POST['regNid']]['bloqueado'] = false;
        $data[$_POST['regNid']]['ficheros'] = [];
        return;
    }
    return;
}

function updateData(&$data) {
    if(!in_array($_POST['regNid'], $data) || empty($data)) {
        $data[$_POST['regNid']]['nombre'] = cleanData($_POST['regName']);
        $data[$_POST['regNid']]['apellidos'] = cleanData($_POST['regSurname']);
        $data[$_POST['regNid']]['correo'] = cleanData($_POST['regEmail']);
        $data[$_POST['regNid']]['telefono'] = cleanData($_POST['regTel']);
        $data[$_POST['regNid']]['fechaNacimiento'] = cleanData($_POST['regBirth']);
        $data[$_POST['regNid']]['ficheros'] = $_FILES['updateFile']['name'];
        return;
    }
    return;
}

?>

注:updateData()函数尚未使用,暂先附上。

需求

提交#getNidForm或#updForm表单后,仍能保留#regForm表单添加的用户数据。

内容的提问来源于stack exchange,提问作者ilos28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:10:34