2017-01-10 5 views
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>"; 
    } 

    } 
    } 
} 
+2

はdBaseのクラスを取り除くと生PDOで行くを取得されたとして、残りを保ちます。すべてがOKになります –

+0

'$ this-> db-> prepare($ sql);'は 'prepare 'というメソッドを持たないクラス' dBase'を呼び出しています。エラーメッセージにすべてが表示されます。 –

+0

あなたのdBaseクラスは '$ stmt = $ this-> db-> prepare($ sql);でそれを呼び出すとprepare()を持たない; –

答えて

関連する問題