PHP从$_SESSION获取邮箱失败:解决未定义数组键错误
问题:PHP中$_SESSION邮箱未定义导致PDF存储时无法关联邮箱
我正在学习PHP,尝试搭建一个可将PDF与$_SESSION中存储的邮箱一并存储的网站,但始终出现**"undefined array key error"(未定义数组键错误)**。以下是核心代码:
注册表单
<form action="insert.php" method="post"> <div class="container" style="margin-left: 30%; margin-top: 15%"> <div class="card align-content-center" style="width: 50%; padding-left: 13%"> <div class="form-row mb-2"></div> <div class="form-row mb-2"> <div class="col-2"> <label for="firstName">Nome:</label> </div> <div class="col-3"> <input type="text" name="first_name" id="firstName" required> </div> </div> <div class="form-row mb-2"> <div class="col-2"> <label for="email">Email:</label> </div> <div class="col-3"> <input type="email" name="email" id="email" required> </div> </div> <div class="form-row mb-2"> <div class="col-2"> <label for="Password">Password:</label> </div> <div class="col-3"> <input type="password" name="password" id="Password" required> </div> </div> <div class="form-row mb-2"> <div class="col-2 offset-4"> <input type="submit" value="Invia" class="btn btn-outline-primary" onclick="return verifica();"> </div> </div> </div> </div> </form>
这部分很基础,表单会将数据提交至insert.php页面进行存储。
insert.php代码
<?php include('conn.inc'); $first_name = $_REQUEST['first_name']; $email = $_REQUEST['email']; $password = password_hash($_REQUEST['password'], PASSWORD_DEFAULT); // 表名: ListaUtenti $sql = "INSERT INTO ListaUtenti (first_name, email, password) VALUES ('$first_name','$email','$password')"; if(mysqli_query($conn, $sql)){ echo "<h3>Dati immagazzinati correttamente in SQL.</h3>"; echo nl2br(" $first_name $email $password"); } else{ echo "ERRORE: Qualcosa non è andato come doveva." . mysqli_error($conn); } // 关闭连接 mysqli_close($conn); ?>
登录代码
<?php $_SESSION['connesso'] = false; if (isset($_POST['username']) && isset($_POST['password'])) { $first_name = $_POST['username']; $password = $_POST['password']; $email = $_POST['email']; // 获取表单中的用户名和密码 // 检查用户名和密码是否匹配数据库中的记录 $result = mysqli_query($conn, "SELECT * FROM listautenti WHERE first_name = '$first_name' AND password = '$password'"); if (mysqli_num_rows($result) == 1) { // 将用户名存入会话,标记用户已登录 $_SESSION['username'] = $first_name; $_SESSION['connesso'] = true; header("Location: index.php"); exit; } else { $error = "Nome o password errati."; } } ?>
首页PDF存储代码(邮箱存储功能异常)
<?php $message = "File caricato correttamente."; if(isset($_POST['email'])){ $_SESSION['email'] = $_POST['email']; } // 连接字符串 if (isset($_POST["submit"])) { if (is_uploaded_file($_FILES["file"]["tmp_name"]) && ($_FILES["file"]["type"] == 'application/pdf')) { echo ""; // 文件名添加随机数,避免被覆盖 $pname = rand(1000, 10000) . "-" . $_FILES["file"]["name"]; // 文件临时存储名 $tname = $_FILES["file"]["tmp_name"]; // 上传路径 $uploads_dir = 'img'; // 将文件移动到指定目录 move_uploaded_file($tname, $uploads_dir . '/' . $pname); // 插入数据库的SQL语句 $sql = "INSERT into fileup(pdf, email) VALUES('$pname', '".$_SESSION['email']."')"; if (mysqli_query($conn, $sql)) { echo "<script type='text/javascript'>alert('$message');</script>"; } else { echo "Errore."; } } else { echo "Il file è di tipo errato."; } } ?>
我一直无法理解为何邮箱无法存储,提前感谢解答。
问题解决
我仅在登录部分添加了以下代码:
$row = mysqli_fetch_assoc($result); $_SESSION['email'] = $row['email'];
内容的提问来源于stack exchange,提问作者Gabriele
相关产品推荐
相关产品推荐

