php - 我如何得到这个 PHP 错误,我找不到错误?
问题描述
我是 PHP 新手,在尝试创建注册页面时出现此错误。
注意:未定义索引:第 34 行 C:\xampp\htdocs\index\PHP\loginsystem\signup.php 中的注册
这是sign..php的代码
<?php
require 'header.php';
?>
<main>
<div class="container">
<h1>Sign up</h1>
<?php
if(isset($_GET['error'])){
if($_GET['error'] == "emptyfields"){
echo "<p style='color:coral;'>fill in all fields!</p>";
}
else if($_GET['error'] == "invaliedemail&username"){
echo "<p style='color:coral;'>invalied email and username</p>";
}
else if($_GET['error'] == "invaliedemail"){
echo "<p style='color:coral;'>invalied email</p>";
}
else if($_GET['error'] == "invaliedid"){
echo "<p style='color:coral;'>invalied username</p>";
}
else if($_GET['error'] == "passwordcheck"){
echo "<p style='color:coral;'>invalied password</p>";
}
}
else if($_GET['signup'] == "success"){ //error HERE
echo "<p style='color:green;'>sign successful</p>";
}
?>
<form action="signup.inc.php" method="POST" class="form-inline my-2 my-lg-0">
<input class="form-control mx-sm-2" type="text" name = "username" placeholder="User Name">
<input class="form-control mx-sm-2" type="text" name = "email" placeholder="Email">
<input class="form-control mx-sm-2" type="password" name = "pass" placeholder="Password">
<input class="form-control mx-sm-2" type="password" name = "pass-repeat" placeholder="repeat-Password">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit" name = "signup-submit">Sign up</button>
</form>
</div>
</main>
<?php
require 'footer.php';
?>
这是代码 signup.inc.php
<?php
if(isset($_POST['signup-submit'])){
require 'db.inc.php';
$username = mysqli_real_escape_string($conn,$_POST['username']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$pass = mysqli_real_escape_string($conn, $_POST['pass']);
$pass_repeat = $_POST['pass-repeat'];
if( empty($username) || empty($email) || empty($pass) || empty($pass_repeat) ){
header("location:signup.php?error=emptyfields&username=".$username."&email=".$email);
exit();
}
else if (!filter_var($email,FILTER_VALIDATE_EMAIL) && !preg_match('/^[a-zA-Z\s]+$/',$username) ){
header("location:signup.php?error=invaliedemail&username");
exit();
}
else if (!filter_var($email,FILTER_VALIDATE_EMAIL)){
header("location:signup.php?error=invaliedemail&username=".$username);
exit();
}
else if (!preg_match('/^[a-zA-Z\s]+$/',$username)){
header("location:signup.php?error=invaliedid&mail=".$email);
exit();
}
else if ($pass !== $pass_repeat){
header("location:signup.php?error=passwordcheck&username=".$username."&email=".$email);
exit();
}
else{
$sql = "SELECT username FROM users WHERE username =?";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt,$sql)){
header("location: signup.php?error=sqlerror");
exit();
} else {
mysqli_stmt_bind_param($stmt,"s",$username);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultcheck = mysqli_stmt_num_rows($stmt);
if ($resultcheck >0){
header("location:signup.php?error=usertaken");
exit();
} else {
$sql = "INSERT INTO users (username,email,pass) VALUES (?,?,?)";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt,$sql)){
header("location: signup.php?error=sqlerror");
exit();
}
else{
$hashpass = password_hash($pass,PASSWORD_DEFAULT);
mysqli_stmt_bind_param($stmt,"sss",$username,$email,$hashpass);
mysqli_stmt_execute($stmt);
header("location: signup.php?signup=success");
exit();
}
}
}
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
}
else{
header("location: signup.php");
exit();
}
一切运行正常,但在注册页面界面中弹出错误消息。如何删除它或者我的代码有问题?
解决方案
在您的 sign.php 中,将您的 if 语句包装在另一个 if 语句中,如下所示:
if(isset($_GET['signup'])){
// then check for signup success
}
现在您正在直接访问 $_GET 全局数组的注册元素,但在您提交表单之前,它没有设置,这就是您收到未定义通知的原因。
推荐阅读
- php - PHP中的Base64到PDF - 获取损坏的文件
- pandas - 在同一行的数据框中对齐值
- python - 如何对具有任意嵌套的两个形状相同的列表执行逐元素算术运算(例如加、减、乘)
- opencv - WebAssembly:编译 OpenCV C++ 代码时未定义的符号 _ZN2cv12VideoCaptureC1Ev
- excel - Excel 未正确找到最后一行
- flutter - 在 Flutter 中使 GridView 中的列可点击
- python - 用日期跨多列插值
- c# - YamlDotNet - 序列化私有属性
- php - 查找 ISO8601 格式日期时间之间的天数
- ruby - 除了第一个键/值对之外,如何从哈希中返回所有元素