0
私はPHPでoopsの概念を学んでいます。 PHP PDOを使ってLogin/Signup/dbconfigページを作成しました。 DBconfig.phpは正常に動作していますが、サインアップページに以下のエラーが表示されます。サインアップページはpdo phpを使って作成されました。エラー
Fatal error: Uncaught Error: Call to undefined method dBase::prepare() in D:\xampp\htdocs\phpoops\signup.php:26 Stack trace: #0 D:\xampp\htdocs\phpoops\signup.php(20): signUp->register() #1 D:\xampp\htdocs\phpoops\index.php(7): signUp->__construct(Object(dBase)) #2 {main} thrown in D:\xampp\htdocs\phpoops\signup.php on line 26
手続き的に同じコードを作成しましたが、うまく機能します。どうすればこの問題を解決できますか?ここで
は私のコードです:
<?php
class dBase
{
protected $uname;
protected $upass;
protected $host;
protected $dbname;
private $dbcon;
function __construct()
{
$this->dbcon = false;
$this->dbname = "oopsdb";
$this->uname = "root";
$this->upass = "";
$this->host = "localhost";
//$this->connect();
if(!$this->dbcon){
try{
$this->dbcon = new PDO('mysql:host='.$this->host.';dbname='.$this->dbname.'',$this->uname,$this->upass);
$this->dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e){
echo $e->getMessage();
die();
}
}
return $this->dbcon;
}
}
dbconfig.php
のindex.php
<?php
require("dbconfig.php");
$db = new dBase();
if(isset($_POST['submit'])){
require_once("signup.php");
$reg = new signUp($db);
$reg->register();
}
?>
<form action="" method="post">
<div class="top-row">
<div class="field-wrap">
<label>
First Name<span class="req">*</span>
</label>
<input type="text" name="ufname" required autocomplete="off" />
</div>
<div class="field-wrap">
<label>
Last Name<span class="req">*</span>
</label>
<input type="text" name="ulname" required autocomplete="off"/>
</div>
</div>
<div class="field-wrap">
<label>
Email Address<span class="req">*</span>
</label>
<input type="email" name="uemail" required autocomplete="off"/>
</div>
<div class="field-wrap">
<label>
Set A Password<span class="req">*</span>
</label>
<input type="password" name="upass" required autocomplete="off"/>
</div>
<button type="submit" name="submit" class="button button-block"/>Get Started</button>
</form>
Signup.php
<?php
class signUp
{
private $fname;
private $lname;
private $email;
private $pass;
private $db;
function __construct($db)
{
$this->fname = htmlspecialchars($_POST['ufname']);
$this->lname = htmlspecialchars($_POST['ulname']);
$this->email = htmlspecialchars($_POST['uemail']);
$this->pass = htmlspecialchars($_POST['upass']);
$this->db = $db;
$this->register();
}
function register(){
if($_SERVER["REQUEST_METHOD"] == "POST"){
$sql = "INSERT INTO user(`fname`,`lname`,`email`,`pass`,`usr_update`) VALUES (:fname,:lname,:email,:pass,NOW())";
$stmt = $this->db->prepare($sql);
$stmt->bindParam(':fname',$this->fname);
$stmt->bindParam(':lname',$this->lname);
$stmt->bindParam(':email',$this->email);
$stmt->bindParam(':pass',$this->pass);
$stmt->execute();
if($stmt == true){
echo "<script>alert('Successfully Inserted');</script>";
}else{
echo "<script>alert('Not Inserted...please check logic once');</script>";
}
}
}
}
はdBaseのクラスを取り除くと生PDOで行くを取得されたとして、残りを保ちます。すべてがOKになります –
'$ this-> db-> prepare($ sql);'は 'prepare 'というメソッドを持たないクラス' dBase'を呼び出しています。エラーメッセージにすべてが表示されます。 –
あなたのdBaseクラスは '$ stmt = $ this-> db-> prepare($ sql);でそれを呼び出すとprepare()を持たない; –