PHP表单文件上传$_FILES报Undefined array key actenaisss错误排查
PHP表单文件上传字段报Undefined array key排查
问题现象
在XAMPP环境开发PHP表单功能时,通过print_r打印表单全量提交数据,验证提交后数据传输是否正常,打印文件上传字段时抛出警告:
Warning: Undefined array key "actenaisss" in C:\xampp\htdocs\BEA1\insertion1.php on line 21
已确认表单配置enctype="multipart/form-data"属性、请求方式为POST、文件字段name值与后端$_FILES读取键名一致,报错仍未解决。
问题相关代码
后端处理逻辑(insertion1.php)
<?php require ("config.php"); if(isset($_POST['suiv'])){ $typeban = $_POST['typeban']; $nom = $_POST['nom']; $prenom = $_POST['prenom']; $nais = $_POST['nais']; $lnais = $_POST['lnais']; $pprenom = $_POST['pprenom']; $mnom = $_POST['mnom']; $mprenom = $_POST['mprenom']; $actenais = $_POST['actenais']; $typepie = $_POST['typepie']; $numpi = $_POST['numpi']; $datedeliv = $_POST['datedeliv']; $delivpar = $_POST['delivpar']; $prof = $_POST['prof']; $numero = $_POST['numero']; $email = $_POST['email']; $actenaisss = $_FILES['actenaisss']; $piec = $_FILES['piec']; $resid = $_FILES['resid']; print_r($typeban); echo "<br>"; print_r($nom); echo "<br>"; print_r($prenom); echo "<br>"; print_r($nais); echo "<br>"; print_r($lnais); echo "<br>"; print_r($pprenom); echo "<br>"; print_r($mnom); echo "<br>"; print_r($mprenom); echo "<br>"; print_r($actenais); echo "<br>"; print_r($typepie); echo "<br>"; print_r($numpi); echo "<br>"; print_r($datedeliv); echo "<br>"; print_r($delivpar); echo "<br>"; print_r($prof); echo "<br>"; print_r($numero); echo "<br>"; print_r($email); echo "<br>"; print_r($actenaisss); echo "<br>"; print_r($piec); echo "<br>"; print_r($resid); } ?>
前端表单代码
<!DOCTYPE html> <html> <head> <title>Formulaire compte depot</title> </head> <body> <form enctype="multipart/form-data" method="post" action="insertion1.php" > <table> <tr> <td><input type="checkbox" name="prsnphysique" value="Je suis une personne physique." required="true">Je suis une personne physique </td> <td> <label>Type de compte bancaire</label> <select name="typeban"> <option>Compte depot</option> <option>Compte CEDAC</option> <option>Compte personnel BEA</option> </select></td></tr> <tr> <td> <label>Nom</label> <input type="text" name="nom" placeholder="Nom" required="true"> </td> <td> <label>Prenom</label> <input type="text" name="prenom" placeholder="Prenom" required="true"> </td> </tr> <tr> <td> <label>Date de naissance</label> <input type="date" name="nais" placeholder="Date de naissance" required="true"> </td> <td> <label>Lieu de naissance</label> <input type="text" name="lnais" placeholder="Lieu de naissance" required="true"> </td> </tr> <tr> <td> <label>Prenom du pere</label> <input type="text" name="pprenom" required="true" placeholder="Prenom du père"> </td> <td> <label>Nom de la mere</label> <input type="text" name="mnom" required="true" placeholder="Nom de la mère"> </td> </tr> <tr> <td> <label>Prenom de la mere</label> <input type="text" name="mprenom" required="true" placeholder="Prenom de la mère"> </td> <td> <label>Numero de l'acte de naissance</label> <input type="number" name="actenais" required="true" placeholder="Numero de l'acte de naissance"> </td> </tr> <tr> <td> <label>Piece d'identite presente</label> <select name="typepie"> <option>Carte d'identite</option> <option>Permis de conduire</option> <option>Passeport</option> </select> </td> <td> <label>Numero de la piece d'identite</label> <input type="number" name="numpi" required="true" placeholder="Numero de la piece d'identite"> </td> </tr> <tr> <td> <label>Delivree le</label> <input type="date" name="datedeliv" required="true" placeholder="Delivree le"> </td> <td> <label>delivree par</label> <input type="text" name="delivpar" required="true" placeholder="Delivree par"> </td> </tr> <tr> <td> <label>Profession</label> <input type="text" name="prof" required="true" placeholder="Profession"> </td> <td> <label>Numero de telephone</label> <input type="number" name="numero" required="true" placeholder="Numero de telephone"> </td> </tr> <tr> <td> <label>E-mail</label> <input type="email" name="email" required="true" placeholder="E-mail"> </td> </tr> <tr> <td> <label>Pieces justificatifs</label><br><br> Acte de naissance <input type="file" name="actenaisss" required="true"><br><br> Piece d'identite <input type="file" name="piec" required="true"><br><br> Certificat de residence/ Facture d'electricite<br>Hebergement/ Contrat location <input type="file" name="resid" required="true"> </td> </tr> </table> <input type="submit" name="suiv" value="Suivant"> </form> </body> </html>
排查解决步骤
按以下优先级逐一排查即可定位问题:
- 检查php.ini上传配置:打开XAMPP对应版本的php.ini文件,确认以下参数配置,修改完成后重启Apache服务生效:
file_uploads = On:必须开启文件上传开关,该选项被关闭时$_FILES数组不会生成任何内容post_max_size:设置值必须大于表单提交的总数据大小(3个上传文件+所有文本字段的总大小),建议设置为20M及以上;注意:如果提交数据总大小超过该值,$_POST和$_FILES会直接为空upload_max_filesize:设置值必须大于单个上传文件的最大体积,建议设置为8M及以上upload_tmp_dir:确认配置指向的临时目录(XAMPP默认路径为C:\xampp\tmp)真实存在,且系统Users组对该目录有读写权限,权限不足会导致上传的文件无法写入临时目录,$_FILES不生成对应字段
- 增加后端字段存在性判断:不要直接读取
$_FILES和$_POST的键,前端的required校验可以被绕过,替换原有直接赋值的写法:$actenaisss = $_FILES['actenaisss'] ?? null; $piec = $_FILES['piec'] ?? null; $resid = $_FILES['resid'] ?? null; - 检查表单DOM结构:确认当前form标签没有被其他form标签嵌套,嵌套表单会被浏览器自动纠正结构,提交时丢弃文件字段数据
- 快速定位调试:在提交判断逻辑的最开头加入以下代码,直接打印全量提交数据,确认
$_FILES是整体为空还是缺少单个字段:echo '<pre>'; var_dump($_POST); var_dump($_FILES); echo '</pre>'; die;
内容的提问来源于stack exchange,提问作者Maria Bekka
相关产品推荐
相关产品推荐

