我的注册系统突然崩溃了。最初它只需要三个数据 - 用户名,密码和电子邮件 - 但我现在已经包含了由脚本生成的验证码,我不知道是什么打破了它。我遇到了麻烦,没有错误出现。它说的只是“错误”,如果数据库插入不起作用,这就是我告诉它输出的文本。
有什么想法吗?
register.php
require 'core/init.php';
require 'lib/password.php';
$user = $_POST['user'];
$pass = password_hash($_POST['pass'], PASSWORD_DEFAULT);
error_reporting(E_ALL);
ini_set('display_errors', 1);
$randomString = substr(md5(rand()),0,7);
$query = $db->prepare("INSERT INTO users (user, pass, email, ver) VALUES (:user, :pass, :email, :ver)");
$query->bindParam(':user', $user);
$query->bindParam(':pass', $pass);
$query->bindParam(':email', $email);
$query->bindParam(':ver', $randomString);
if($query->execute()) {
$_SESSION['reqact'] = 1;
header('Location: index.php');
}
else {
echo "Error.";
}
芯/的init.php
<?php
session_start();
$db = new PDO('logindataisfine');
if(isset($_SESSION['id'])) {
$i = $_SESSION['id'];
}
else if($_SESSION['reqact'] == 1) {
echo "Please <a href='activate.php'>verify your account.</a>";
}
else {
echo "Please <a href='login.php'>log in.</a>";
$guest = True;
}
答案 0 :(得分:5)
您有$user = $_POST['user'];
$pass = password_hash($_POST['pass'], PASSWORD_DEFAULT);
但没有$email= $_POST['email'];
没有该变量会破坏您的查询。
正如Marcel(Korpel)在下面的评论中指出的那样(谢谢Marcel ),您可以检查是否有任何变量设置或为空。
例如:
if(isset($_POST['variable'])){ // do or show something }
或
if(empty($_POST['variable'])){ // do or show something }
答案 1 :(得分:0)
你的sql语句中可能出现错误(是实际的列名吗?)
要获取sql错误,您回显“错误”字符串的地方也会抛出: 的print_r($查询 - &GT; errorInfo中());
if($query->execute()) {
$_SESSION['reqact'] = 1;
header('Location: index.php');
}
else {
echo "Error.";
print_r($query->errorInfo()); //<- print sql error
}
一旦你确切知道错误是什么,你就可以更容易地修复它。