【发布时间】:2017-10-28 11:01:00
【问题描述】:
我在 php 中遇到了一些 OOP 问题,因为这是我第一次使用它。我正在尝试在没有框架的情况下编写自己的身份验证系统,只是为了了解注册/登录/注销系统的基础知识。所以到目前为止我已经做了这个,文件connect.php:
<?php
class Dbconnect {
private $servername;
private $username;
private $password;
private $dbname;
protected function connect() {
$this->servername = "localhost";
$this->username = "root";
$this->password = "root";
$this->dbname = "example";
$conn = new mysqli($this->servername,$this->username,$this->password,$this->dbname);
return $conn;
}
}
看起来不错,对吧?但是现在我不明白我的 register.php 文件应该是什么样子,我写了一个程序版本,不知道如何修改它成为 OOP 这里是:
<?php
include 'connect.php';
$Err = $emailErr = $usernameErr = "";
//registration
if(isset($_POST['register'])) {
$username = mysqli_real_escape_string($conn,$_POST['username']);
$email = mysqli_real_escape_string($conn,$_POST['email']);
$password = mysqli_real_escape_string($conn,$_POST['password']);
if(empty($username) || empty($email) || empty($password)) {
$Err = "Empty field(s)";
}
if(!preg_match("/^[a-zA-z ]+$/", $username)){
$usernameErr = "Use letters for user";
} elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Wrong email format";
}
}
if ($Err == "" && $emailErr == "" && $usernameErr == "") {
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, email, password)
VALUES('$username','$email','$hashed_password')";
$result = $conn->query($sql);
if($result) {
header('location: http://' . $_SERVER['HTTP_HOST'] . '/test/success.php');
exit();
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
?>
谁能解释我应该如何修改这个文件。谢谢。
【问题讨论】:
-
尝试学习 php 中的面向对象编程教程。这将有助于建立正确的学习基础。
-
您的 mysqli 连接无法建立。使用 mysqli 连接函数作为“__construct”方法。
-
@NandhiKumar,我为什么要这样做? localhost 参数是私有的,永远不会改变,为什么要使用构造?
-
什么时候调用connect方法?
-
从遵循良好的结构化过程编程原则开始。然后,寻找具有相同参数或全局变量的函数。这些是抽象成类的候选对象,共享变量成为对象的状态,函数成为方法。