简体   繁体   English

使用pdo php创建的注册页面会显示错误

[英]signup page created using pdo php it gives error

I am learning oops concepts in php. 我正在用PHP学习oops概念。 I created Login/Signup/dbconfig pages using PHP PDO. 我使用PHP PDO创建了Login / Signup / dbconfig页面。 DBconfig.php is working well but signup page gives below error. DBconfig.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 致命错误:未捕获错误:调用D:\\ xampp \\ htdocs \\ phpoops \\ signup.php:26中未定义的方法dBase :: prepare()堆栈跟踪:#0 D:\\ xampp \\ htdocs \\ phpoops \\ signup.php(20 ):signUp-> register()#1 D:\\ xampp \\ htdocs \\ phpoops \\ index.php(7):signUp-> __ construct(Object(dBase))#2 {main}放在D:\\ xampp \\ htdocs \\第26行的phpoops \\ signup.php

I created same code in procedural manner it works well. 我以程序方式创建了相同的代码,效果很好。 How can I solve this problem? 我怎么解决这个问题?

Here is my code: 这是我的代码:

Index.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>

dbconfig.php 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 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>"; 
    }   

    }
  }
}

I am learning oops concepts in php. 我正在用PHP学习oops概念。

That's fine. 没关系。
However, OOP is not stands for creating as much classes as possible. 但是,OOP并不代表创建尽可能多的类。 Create a new class only if you have an idea what it should be used for. 仅当您知道应该使用的类时,才创建一个新类。
For the moment, your dBase class doesn't do anything that vanilla PDO can't do. 目前,您的dBase类无法执行普通PDO无法执行的任何操作。 So just use PDO instead. 因此,请改用PDO。

dbconfig.php 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);

then remove $db = new dBase(); 然后删除$db = new dBase(); from index and keep the rest as is 从索引保留其余的

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM