0
    <?php
class RegisterUser{
  var $email;
  var $password;
  var $password_hash;
  var $roleid;
  public function __construct($email, $password, $roleid){
    $this->email = $email;
    $this->password = $password;
    $this->roleid = $roleid;
    $this->addUsertoDB();
  }

  public function addUsertoDB(){
    $this->password_hash = md5($this->password);
    $checkemail = mysql_query("SELECT * FROM users WHERE (email ='" . mysql_real_escape_string($this->email) . "')");
    if(mysql_num_rows($checkemail) == 1){
      echo '<script type="text/javascript"> alert ("Email already used!");</script>';
    }
    else{
      $register = "INSERT INTO users(email, password, roleid) VALUES('$this->email', '$this->password_hash', '$this->$roleid')";
      if($query_run = mysql_query($register)){
        echo('<scrip type="text/javascript"> alert("Registration complete!"); location.replace("login")</script>');
      }
      else{
        die('<script type="text/javascript"> alert("Error inserting data!");</script>');
      }
    }
  }
}

$connect = new RegisterUser('carloadap@htomail.com', 123, 1);
?>

这是我的代码,我一直收到错误,我不知道如何弄清楚。我希望你们做到了。

这是错误。

警告:mysql_num_rows() 期望参数 1 是资源,布尔值在第 17 行的 C:\xampp\htdocs\myPHPWebsite\include\classRegister.php 中给出

可捕获的致命错误:RegisterUser 类的对象无法在第 21 行的 C:\xampp\htdocs\myPHPWebsite\include\classRegister.php 中转换为字符串

更新

    <?php
require 'connectDB.php';
class RegisterUser{
  var $email;
  var $password;
  var $password_hash;
  var $roleid;
  public function __construct($email, $password, $roleid){
    $this->email = $email;
    $this->password = $password;
    $this->roleid = $roleid;
    $this->addUsertoDB();
  }

  public function addUsertoDB(){
    $this->password_hash = md5($this->password);
    $checkemail = mysql_query("SELECT * FROM users WHERE (email ='" . mysql_real_escape_string($this->email) . "')");
    if(mysql_num_rows($checkemail) == 1){
      echo '<script type="text/javascript"> alert ("Email already used!");</script>';
    }
    else{
      $register = "INSERT INTO users(email, password, roleid) VALUES('$this->email', '$this->password_hash', '$this->$roleid')";
      if($query_run = mysql_query($register)){
        echo('<scrip type="text/javascript"> alert("Registration complete!"); location.replace("login")</script>');
      }
      else{
        die('<script type="text/javascript"> alert("Error inserting data!");</script>');
      }
    }
  }
}

$connect = new RegisterUser('carloadap@htomail.com', 123, 1);
?>

这是我得到的错误

连接到数据库!可捕获的致命错误:RegisterUser 类的对象无法在第 22 行的 C:\xampp\htdocs\myPHPWebsite\include\classRegister.php 中转换为字符串

4

2 回答 2

0

形成您给我们的错误

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
C:\xampp\htdocs\myPHPWebsite\include\classRegister.php on line 17

似乎$checkmail值不是有效的mysql_num_rows()结果。检查您的查询,并尝试在您的数据库控制台上运行它(如果您使用的是 phpmyadmin)。

public function addUsertoDB(){
    ...
    $query = "SELECT * FROM users WHERE (email ='" . mysql_real_escape_string($this->email) . "')";
    checkemail = mysql_query($query) or die(mysql_errno() . " : " . mysql_error() . " : " . $query);
    ...
于 2013-03-07T02:29:56.587 回答
0

第一个错误是由您的 MySQL 中的某些错误引起的。尝试在
if($e = mysql_error()) die("MySQL error: ".$e);查询后添加。

除此之外,您可捕获的致命错误是由错误$this->roleid地写入引起的$this->$roleid。另请注意,您未能在该行上转义字符串,因此您很容易受到注入。仅保护第一个查询是不够的,您必须每次都这样做;)

于 2013-03-07T02:08:04.620 回答