PHP,检查用户数据注册时的奇怪行为

时间:2015-03-26 20:04:12

标签: php mysql database mysqli

我正在处理一个非常原始的代码问题。 代码目的是在未使用电子邮件和用户名的情况下将用户插入数据库。否则,显示发生的错误。 问题:如果我输入已经存在的电子邮件或用户名,我可以看到正确的错误,但只有当检查的数据位于表格的第一行时才会看到。

奇怪的是?确实,如果检查发生的是另一行不是第一行,我就看不到错误,但是用户也不会插入数据库中,这很好。

这是我的代码:

if(isset($_POST['r-r-email']) && isset($_POST['r-r-username']) && isset($_POST['r-r-password'])) {
  $r_email = $_POST['r-r-email'];
  $r_username = $_POST['r-r-username'];
  $r_password = $_POST['r-r-password'];

  // Interact
  $check = 'select * from table_name';
  if($stmt = $database->run_query($check)) {
    $row = $stmt->fetch_assoc();
    // Check if e-mail exists
    if($row['user_mail'] == $r_email) {
      print 'E-mail exists.';
    } else if($row['user_name'] == $r_username) {
      // Check if username exists
      print 'Username exists.';
    } else if(preg_match('/\s/', $r_username)) {
      // Detect spaces
      print 'Spaces detected.';
    } else {
      // Proceed
      $insert = 'insert into table_name (user_name, user_password, user_mail) values ("'.$r_username.'", "'.$r_password.'", "'.$r_email.'")';
      $database->run_query($insert);
      $email = '';
      $username = '';
      $password = '';
      print 'User inserted.';
    }
    $stmt->close();
  }
}

这是粗鲁的数据库类:

class database {
  private $connection;

  public function __construct() {
    self::connect('localhost', 'root', '', 'database');
  }

  private function connect($host, $dir, $psw, $db) {
    $this->connection = mysqli_connect($host, $dir, $psw, $db);
  }

  public function run_query($query) {
    return $this->connection->query($query);
  }

  public function disconnect() {
    mysqli_close($this->connection);
  }
}

提交发生在同一页面,正如您所期望的那样。 谢谢你们! 费德里科

0 个答案:

没有答案