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

PHP新手按表单输入创建文件夹文件时出现报错求助

错误原因&修复方案

1. 两个报错的直接诱因

  • Warning: A non-numeric value encountered:PHP的字符串拼接运算符是.不是+,你代码中所有拼接字符串的位置都错误使用了+(比如$nameidf = $username + $userid、fopen('/usersaccounts/ids/' + $username + $email + '.txt' , 'w')),+在PHP中仅用于数值加法,传入字符串就会触发非数值警告。
  • Notice: Undefined variable: progress6:PHP变量大小写敏感,你定义进度变量时用的是大写开头的$Progresso3`$Progresso8`,后续判断的时候写的是小写开头的`$progresso3`$progresso8,所以系统提示变量未定义。

2. 其他隐藏错误

  • 表单未正确提交:你直接用<a href="?run">跳转,不会携带input中用户输入的内容,所有$_GET获取的参数都是空值,需要给表单套<form>标签设置提交方式。
  • 变量判断逻辑错误:if ($username = null)是赋值操作,会直接把$username设为null,判断变量是否为空要使用if ($username == null)或者empty()函数。
  • 随机ID校验逻辑错误:
    1. $tokens = $randger把单数值赋值给$tokens后又执行foreach ($tokens as $token),会直接报错
    2. 校验逻辑顺序错误,应该先循环校验所有文件确认随机ID无重复,再写入ID文件,你现在是每读取一行文件就写一次ID文件,逻辑完全混乱
  • 变量名写错:代码中使用了未定义的$email变量,你实际定义的存储邮箱的变量是$usermail
  • 路径&函数参数错误:
    1. 路径拼接多处错误,绝对路径和相对路径混用
    2. mkdir()缺少权限参数和递归创建参数,会导致文件夹创建失败
    3. 生成$nameidf的时候如果用户名和ID为空,会导致路径非法

完整修复后的代码
<?php
if (isset($_GET['run'])){
    run();
}
function run(){
    // 校验所有必填参数是否存在
    $requiredFields = ['usernamesave','userxp','userid','userlevel','usermail','userprog1','userprog2','userprog3','userprog4','userprog5','userprog6','userprog7','userprog8','proceed'];
    foreach ($requiredFields as $field) {
        if (!isset($_GET[$field]) || empty($_GET[$field])) {
            echo "<script>alert('字段 ".htmlspecialchars($field)." 不能为空');</script>";
            return;
        }
    }
    // 接收参数 统一变量名小写
    $username = $_GET['usernamesave'];
    $userxp = $_GET['userxp'];
    $userid = $_GET['userid'];
    $userlevel = $_GET['userlevel'];
    $usermail = $_GET['usermail'];
    $progresso1 = $_GET['userprog1'];
    $progresso2 = $_GET['userprog2'];
    $progresso3 = $_GET['userprog3'];
    $progresso4 = $_GET['userprog4'];
    $progresso5 = $_GET['userprog5'];
    $progresso6 = $_GET['userprog6'];
    $progresso7 = $_GET['userprog7'];
    $progresso8 = $_GET['userprog8'];
    $proceed = $_GET['proceed'];
    
    // 拼接文件夹名 用.不是+
    $nameidf = $username . $userid;
    $idsDir = __DIR__ . '/usersaccounts/ids/';
    $userDir = __DIR__ . '/usersaccounts/' . $nameidf . '/';
    
    // 生成唯一4位随机ID
    do {
        $randger = rand(1000, 9999); // 直接生成1000-9999的随机数更简单
        $idExists = false;
        // 遍历所有ID文件校验重复
        foreach (glob($idsDir . '*.txt') as $file) {
            $content = file_get_contents($file);
            if (strpos($content, (string)$randger) !== false) {
                $idExists = true;
                break;
            }
        }
    } while ($idExists);
    
    // 写入ID文件
    if (!is_dir($idsDir)) {
        mkdir($idsDir, 0777, true);
    }
    $idFile = $idsDir . $username . $usermail . '.txt';
    file_put_contents($idFile, $randger);
    
    // 创建用户文件夹
    if (!is_dir($userDir)) {
        mkdir($userDir, 0777, true);
    }
    
    // 写入用户各个文件
    file_put_contents($userDir . 'username.txt', $username);
    file_put_contents($userDir . 'xp.txt', $userxp);
    file_put_contents($userDir . 'id.txt', $userid);
    file_put_contents($userDir . 'level.txt', $userlevel);
    file_put_contents($userDir . 'email.txt', $usermail);
    file_put_contents($userDir . 'progresso1.txt', $progresso1);
    file_put_contents($userDir . 'progresso2.txt', $progresso2);
    file_put_contents($userDir . 'progresso3.txt', $progresso3);
    file_put_contents($userDir . 'progresso4.txt', $progresso4);
    file_put_contents($userDir . 'progresso5.txt', $progresso5);
    file_put_contents($userDir . 'progresso6.txt', $progresso6);
    file_put_contents($userDir . 'progresso7.txt', $progresso7);
    file_put_contents($userDir . 'progresso8.txt', $progresso8);
    
    echo "<script>alert('数据保存成功');</script>";
}
?>

<div class="container">
    <div class="row">
        <!-- 加form标签 提交参数 -->
        <form method="get" action="">
            <label for="usernamesave">Nome de usuario:</label>
            <input id="usernamesave" name="usernamesave" type="text"><hr>
            <label for="userxp">Minha Experiêcia:</label>
            <input id="userxp" name="userxp" type="text"><hr>
            <label for="userid">Meu TagID User:</label>
            <input id="userid" name="userid" type="text"><hr>
            <label for="userlevel">Level da Minha Conta:</label>
            <input id="userlevel" name="userlevel" type="text"><hr>
            <label for="usermail">Meu email pessoal:</label>
            <input id="usermail" name="usermail" type="text"><hr>
            <label for="userprog1">Meu uso Progress01:</label>
            <input id="userprog1" name="userprog1" type="text"><hr>
            <label for="userprog2">Meu uso Progress02:</label>
            <input id="userprog2" name="userprog2" type="text"><hr>
            <label for="userprog3">Meu uso Progress03:</label>
            <input id="userprog3" name="userprog3" type="text"><hr>
            <label for="userprog4">Meu uso Progress04:</label>
            <input id="userprog4" name="userprog4" type="text"><hr>
            <label for="userprog5">Meu uso Progress05:</label>
            <input id="userprog5" name="userprog5" type="text"><hr>
            <label for="userprog6">Meu uso Progress06:</label>
            <input id="userprog6" name="userprog6" type="text"><hr>
            <label for="userprog7">Meu uso Progress07:</label>
            <input id="userprog7" name="userprog7" type="text"><hr>
            <label for="userprog8">Meu uso Progress08:</label>
            <input id="userprog8" name="userprog8" type="text"><hr>
            <label for="proceed">Proseeguir pra sav</label>
            <input id="proceed" name="proceed" type="text"><hr>
            <button type="submit" name="run" value="1">Run</button>
        </form>
    </div>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:04