2017-01-10 2 views
0

Я учусь концепциям в php. Я создал страницы входа/регистрации/dbconfig, используя PHP PDO. 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

Я создал такой же код в процедурной манере, он хорошо работает. Как я могу решить эту проблему?

Вот мой код:

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> 

dbconfig.php

<?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;  
} 
} 

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. Все будет ОК –

+0

'$ this-> db-> prepare ($ sql);' вызывает ваш класс 'dBase', который не имеет никакого метода под названием' prepare'. В сообщении об ошибке говорится все. –

+0

ваш класс dBase не имеет команды prepare(), когда вы вызываете его с помощью '$ stmt = $ this-> db-> prepare ($ sql);' –

ответ

-1

I am learning oops concepts in php.

Это прекрасно.
Однако ООП не означает создание как можно большего количества классов. Создайте новый класс, только если у вас есть идея, для чего его следует использовать.
На данный момент ваш класс dBase не делает ничего, что не может сделать PDO vanilla. Поэтому просто используйте PDO.

dbconfig.php

<?php 

$dbname = "oopsdb"; 
$uname = "root"; 
$upass = ""; 
$host = "localhost"; 
$charset = "utf8"; 

$db = new PDO("mysql:host=$host;dbname=$dbname;charset=$charset",$uname,$upass); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

затем удалить $db = new dBase(); из индекса и держать остальные как

+0

Thank..it работает. Я не понимаю, в чем моя ошибка. – muraliniceguy97

+0

Класс dBase просто не имеет метода подготовки. –

Смежные вопросы