提交其他表单后如何保留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
相关产品推荐
相关产品推荐

