这是一个PHP登录脚本,这部分是寄存器部分。我编码了一个用户类,那里有$user->check()函数,它控制的表单元素是空的还是其他的。但我是PDO和OOP的新手,我想我做错了什么,所以不幸的是,它给我显示了两个错误。。
其中之一是:
注意:第56行上C:''wamp''www''eva''userclass.php中的未定义变量:DB_con
另一个是:
致命错误:在的第56行,对C:''wamp''www''eva''userclass.php中的非对象调用成员函数prepare()
userclass.php第56行:
$stmt = $DB_con->prepare("SELECT user_name,user_email FROM users WHERE user_name=:uname OR user_email=:umail");
我做错了什么?这是我所有的文件,谢谢大家。
dbconfig.php
<?php
session_start();
$DB_host = "localhost";
$DB_name = "dbeva";
$DB_user = "root";
$DB_pass = "";
try {
$DB_con = new PDO("mysql:host={$DB_host};dbname={$DB_name}",$DB_user,$DB_pass);
$DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<div class='bildirim'>- Veritabanına Bağlandı !</div>";
}
catch(PDOException $e) {
echo $e->getMessage();
echo "<div class='bildirim'>- Veritabanı Bağlantısı Başarısız !</div>";
}
include_once 'userclass.php';
$user = new user($DB_con);
?>
userclass.php
<?php
class user {
private $db;
function __construct($DB_con) {
$this->db = $DB_con;
echo "<div class='bildirim'>- Constructor Çalıştı !</div>";
} // Constructor Function
public function check($cuname,$cumail,$cupass) {
if ($cuname == "") {
echo "<div class='bildirim'>Kullanıcı adı boş bırakılamaz.</div>";
} // if $cuname == ""
else if (strlen($cuname) < 6 && strlen($cuname) > 15) {
echo "<div class='bildirim'>Kullanıcı adı 6 ile 15 karakter arasında olmalıdır.</div>";
} // else if 6 <= $cuname <= 15
else if ($cumail == "") {
echo "<div class='bildirim'>Email boş bırakılamaz.</div>";
} // else if $cumail == ""
else if (!filter_var($cumail, FILTER_VALIDATE_EMAIL)) {
echo "<div class='bildirim'>Lütfen geçerli bir mail adresi girin.</div>";
} // else if validate email
else if ($cupass == "") {
echo "<div class='bildirim'>Şifre boş bırakılamaz.</div>";
} //else if $cupass == ""
else if (strlen($cupass) < 6) {
echo "<div class='bildirim'>Şifre en az 6 karakter olmalıdır.</div>";
} // else if $upass < 6
else {
try {
$stmt = $DB_con->prepare("SELECT user_name,user_email FROM users WHERE user_name=:uname OR user_email=:umail");
$stmt->execute(array(':uname'=>$cuname, ':umail'=>$cumail));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row['user_name'] == $cuname) {
echo "<div class='bildirim'>Üzgünüz, kullanıcı adı çoktan alınmış.</div>";
} // if user_name exist
else if($row['user_email'] == $cumail) {
echo "<div class='bildirim'>Üzgünüz, sitemizde bu mail adresi ile kayıtlı bir üye zaten var.</div>";
} // else if user_email exist
else {
try {
$new_pass = password_hash($cupass, PASSWORD_DEFAULT);
$stmt = $this->db->prepare("INSERT INTO users(user_name,user_email,user_pass)
VALUES(:uname,:umail,:upass)");
$stmt->bindparam(":uname", $cuname);
$stmt->bindparam(":umail", $cumail);
$stmt->bindparam(":upass", $new_pass);
$stmt->execute();
return $stmt;
echo "<div class='bildirim'>- Kayıt İşlemi Başarılı !</div>";
} // try register
catch(PDOException $e) {
echo $e->getMessage();
echo "<div class='bildirim'>- Kayıt İşlemi Başarısız !</div>";
} // catch register
} // else
} // try check
catch (PDOException $e) {
echo $e->getMessage();
} // catch check
} // else
} // Function Check
} // User Class
?>
index.php
<?php
require_once "dbconfig.php";
if (isset($_POST['btn_signup'])) {
$r_uname = trim($_POST['r_uname']);
$r_uname = strip_tags($r_uname);
$r_umail = trim($_POST['r_umail']);
$r_umail = strip_tags($r_umail);
$r_upass = trim($_POST['r_upass']);
$r_upass = strip_tags($r_upass);
$user->check($r_uname,$r_umail,$r_upass);
} // if isset btn_signup
if (isset($_POST['btn_login'])) {
//$user->login();
} // if isset btn_signup
?>
<html>
<head>
<head>
<title>Eva Login System</title>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="style.css"/>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:' rel='stylesheet' type='text/css'>
</head>
</head>
<body>
<div class="formwrapper">
<h2>Giriş Yap !</h2>
<form method="post" action="">
<input class="inputa" type="text" name="l_umail" placeholder="Email">
<input class="inputa" type="password" name="l_upass" placeholder="Şifre">
<input class="inputb" type="submit" name="btn_login" value="Giriş Yap">
</form>
</div>
<div class="formwrapper">
<h2>Bize Katıl !</h2>
<form method="post" action="">
<input class="inputa" type="text" name="r_uname" placeholder="Kullanıcı Adı">
<input class="inputa" type="text" name="r_umail" placeholder="Email">
<input class="inputa" type="text" name="r_upass" placeholder="Şifre">
<input class="inputb" type="submit" name="btn_signup" value="Hesap Aç">
</form>
</div>
</body>
</html>
C:'wamp'www'eva'userclass.php
中的$DB_con
替换为$this->db
(第56行)。
编辑类中错误的部分
$stmt = $DB_con->prepare("SELECT user_name,user_email FROM users WHERE user_name=:uname OR user_email=:umail");
至
$stmt = $this->db->prepare("SELECT user_name,user_email FROM users WHERE user_name=:uname OR user_email=:umail");
完整类
class user {
private $db;
function __construct($DB_con) {
$this->db = $DB_con;
echo "<div class='bildirim'>- Constructor Çalıştı !</div>";
} // Constructor Function
public function check($cuname,$cumail,$cupass) {
$error = false;
if (empty($cuname)) {
echo "<div class='bildirim'>Kullanıcı adı boş bırakılamaz.</div>";
$error = true;
}
if (strlen($cuname) < 6 || strlen($cuname) > 15) {
echo "<div class='bildirim'>Kullanıcı adı 6 ile 15 karakter arasında olmalıdır.</div>";
$error = true;
}
if (empty($cumail)) {
echo "<div class='bildirim'>Email boş bırakılamaz.</div>";
$error = true;
}
if (!filter_var($cumail, FILTER_VALIDATE_EMAIL)) {
echo "<div class='bildirim'>Lütfen geçerli bir mail adresi girin.</div>";
$error = true;
}
if (empty($cupass)) {
echo "<div class='bildirim'>Şifre boş bırakılamaz.</div>";
$error = true;
}
if (strlen($cupass) < 6) {
echo "<div class='bildirim'>Şifre en az 6 karakter olmalıdır.</div>";
$error = true;
}
if($error==false) {
try {
$stmt = $DB_con->prepare("SELECT user_name,user_email FROM users WHERE user_name=:uname OR user_email=:umail");
$stmt->execute(array(':uname'=>$cuname, ':umail'=>$cumail));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row['user_name'] == $cuname) {
echo "<div class='bildirim'>Üzgünüz, kullanıcı adı çoktan alınmış.</div>";
$error = true;
}
if($row['user_email'] == $cumail) {
echo "<div class='bildirim'>Üzgünüz, sitemizde bu mail adresi ile kayıtlı bir üye zaten var.</div>";
$error = true;
}
if($error==false) {
try {
$new_pass = password_hash($cupass, PASSWORD_DEFAULT);
$stmt = $this->db->prepare("INSERT INTO users(user_name,user_email,user_pass)
VALUES(:uname,:umail,:upass)");
$stmt->bindparam(":uname", $cuname);
$stmt->bindparam(":umail", $cumail);
$stmt->bindparam(":upass", $new_pass);
$stmt->execute();
return $stmt;
echo "<div class='bildirim'>- Kayıt İşlemi Başarılı !</div>";
} // try register
catch(PDOException $e) {
echo $e->getMessage();
echo "<div class='bildirim'>- Kayıt İşlemi Başarısız !</div>";
} // catch register
}
} // try check
catch (PDOException $e) {
echo $e->getMessage();
} // catch check
}
} // Function Check
} // User Class
转到php.ini
文件并找到;extension=php_pdo_mysql.dll
语句。
然后删除;
并保存文件。
然后重新启动Apache服务器。