我很抱歉发布这个问题..我已经被这段代码卡住了很长一段时间,突然开始显示Trying to get property of non-object
通知..我添加了$email = !empty($email) ? "'$email'" : "NULL";
这一行到我的代码输入null值到我的数据库当没有数据输入在电子邮件列..这是原因m得到这个通知..因为这个查询
$check = $this->db->query($sql) ;
$count_row = $check->num_rows;
是失败的,用户可以注册用户名或电子邮件已经用来注册..我已经把函数作为公共和更改include_once为require_once..但还是没用,请帮帮我。我附上整个代码..请看看
注释:请不要将其标记为重复,因为我已经阅读了所有可能的相关问题,但发现没有用处。
class.user.php
<?php
include "db_config.php";
class User{
public $db;
public function __construct(){
$this->db = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
if(mysqli_connect_errno()) {
echo "Error: Could not connect to database.";
exit;
}
}
/*** for registration process ***/
public function reg_user($firstname,$lastname,$bloodgroup,$dob,$country,$state,$district,$city,$phonenumber,$secondnumber,$email,$username,$password,$activity){
//$password = crypt($password);
$password = md5($password);
$email = !empty($email) ? "'$email'" : "NULL";
$sql="SELECT * FROM users WHERE username='$username' OR email='$email'";
//checking if the username or email is available in db
$check = $this->db->query($sql) ;
$count_row = $check->num_rows;
//if the username is not in db then insert to the table
if ($count_row == 0){
$sql1="INSERT INTO users SET firstname='$firstname',lastname='$lastname',bloodgroup='$bloodgroup',dob='$dob',
country='$country',state='$state',district='$district',city='$city',phonenumber='$phonenumber',secondnumber='$secondnumber',
email=$email,username='$username', password='$password',activity='$activity'";
$result = mysqli_query($this->db,$sql1) or die(mysqli_connect_errno()."Data cannot inserted");
return $result;
}
else { return false;}
}
?>
register.php
<?php
require_once 'include/class.user.php';
$user = new User();
// Checking for user logged in or not
/*if (!$user->get_session())
{
header("location:index.php");
}*/
if (isset($_REQUEST['submit'])){
extract($_REQUEST);
//$email = !empty($email) ? "'$email'" : "NULL";
$register = $user->reg_user($firstname,$lastname,$bloodgroup,$dob,$country,$state,$district,$city,$phonenumber,$secondnumber,$email,$username,$password,$activity);
if ($register) {
// Registration Success
echo 'Registration successful <a href="login.php">Click here</a> to login';
} else {
//registration failed
echo' registration failed,username or email already exists';
}
}
?>
错误是Trying to get property of non-object in D:'wamp'www'blood'include'class.user.php on line 29
第29行是class.user.php中的$count_row = $check->num_rows;
编辑件我已经删除了双'
, dave
告诉下面…这导致空值成功进入Db,但当我试图输入一个电子邮件值..它说数据不能插入..即。,在register.php
sql1
失败时的错误你有这个:
$email = !empty($email) ? "'$email'" : "NULL";
$sql="SELECT * FROM users WHERE username='$username' OR email='$email'";
那么我们假设$email = "something@gmail.com"; $username = "whatever"
所以你有
$email = !empty("something@gmail.com") ? "'something@gmail.com'" : "NULL";
然后是
$sql="SELECT * FROM users WHERE username='whatever' OR email=''something@gmail.com''";
所以,你的查询是
SELECT * FROM users WHERE username='whatever' OR email=''something@gmail.com''
双'
使其成为无效查询,因此当您运行query($sql)
false
$count_row = (false)->num_rows;
显然会抛出错误。
我会把它改成:
public function reg_user($firstname,$lastname,$bloodgroup,$dob,$country,$state,$district,$city,$phonenumber,$secondnumber,$email,$username,$password,$activity){
$password = md5($password);
$email = $email ?: null;
$sql="SELECT * FROM users WHERE username=? OR email=?";
//checking if the username or email is available in db
$stmt = $this->db->prepare($sql);
$stmt->bind_param('ss', $username, $email);
$stmt->execute();
//if the username is not in db then insert to the table
if ($stmt->num_rows == 0) {
$ref = new ReflectionMethod($this, 'reg_user');
$columns = [];
foreach($ref->getParameters() as $param) {
$name = $param->name;
$columns[$name] = &$$name;
}
$sql= "INSERT INTO users
(" . implode(",", array_keys($columns)) . ")
VALUES
(" . str_repeat("?,", count($columns)) . ")";
$stmt = $this->db->prepare($sql);
call_user_func_array(array($stmt, "bind_param"), $columns);
return $stmt->execute();
}