2017-08-19 6 views
0

Ich versuchte, meine Datenbank mit meinem PHP-Code zu verbinden und es wurde abgeschlossen, aber versucht, Informationen zu senden zu meiner Datenbank, aber es gibt den folgenden Fehler zurück Ich versuchte es durch Erstellen eines Objekts und Aufruf der Methode der Klasse, aber es gab mir den Fehler in der Zeile Ich denke, es gibt ein Problem beim Aufruf der Funktion, konnte aber den Fehler nicht verstehen und sogar versuchte googeln konnte aber das ProblemSchwerwiegender Fehler: Uncaught Fehler: Aufruf einer Memberfunktion connect() auf Null in C: xampp htdocs oophp Home.php

Fatal error: Uncaught Error: Call to a member function connect() on null in C:\xampp\htdocs\oophp\Home.php:15 Stack trace: #0 C:\xampp\htdocs\oophp\Home.php(47): Home->__construct('example', 'example123', '[email protected]') #1 {main} thrown in C:\xampp\htdocs\oophp\Home.php on line 15

und den Code in connect.php ist

<?php 
class Connect 
{ 

protected $connection; 

public function __construct() 
{ 

} 
public function connect(){ 
    try 
    { 
     $this->connection = new 
PDO('mysql:host=localhost;dbname=oo;charset=utf8mb4','root',''); 
     echo "connected sucessfully"; 
     return $this->connection; 
    } 
    catch(PDOException $e) 
    { 
     echo "connection failed : " . $e->getMessage(); 
    } 
} 
} 
?> 
nicht lösen

und Code in home.php ist

<?php 
require_once __DIR__ . '\Connect.php'; 
class Home extends Connect{ 
protected $user = array(); 
protected $var0; 
protected $response = array(); 
protected $username; 
protected $password; 
protected $email; 
protected $var1; 

public function __construct($username , $password ,$email) 
{ 
    $var0 = new Connect(); 
    $var1 = $this->var0->connect(); 
    $this->username = $username; 
    $this->password = $password; 
    $this->email = $email; 
} 
public function Insert() 
{ 
    try 
    { 
     global $var1; 
     $insert = $this->var1->prepare("INSERT INTO person 
     (username,password,email) VALUES (:username,:password,:email)"); 
     $insert->bindParam(':username',$this->username); 
     $insert->bindParam(':password',$this->password); 
     $insert->bindParam(':email',$this->email); 
     $insert->execute(); 
    } 
    catch(PDOException $e) 
    { 
     echo $e; 
    } 
     if(row_Count($insert)>0) 
     { 
      $this->response["status"] = 1; 
      echo "Sucessfully inserted to database"; 
     } 
     else 
     { 
      $this->response["status"] = 0; 
      echo "there is a error in inserting"; 
} 
} 
} 
$dfg = new Home("example","example123","[email protected]"); 
$dfg->Insert(); 
?> 

ich das Problem nicht finden können, aber ich denke, es ist ein Fehler bei connect() Funktion, Dank für jede Hilfe

+0

Sie definieren '$ this-> var0 'nie, bevor Sie versuchen, es zu verwenden. Ändern Sie '$ var0 = new Connect();' zu '$ this-> var0 = new Connect();'. Tun Sie dasselbe für '$ var1' in Ihrem Konstruktor und entfernen Sie das' global $ var1' in Ihrer 'Insert()' - Methode –

+0

Vorschlag, machen Sie Ihre Eigenschaft und Variablennamen beschreibend. Benutze keine generischen Namen wie '$ var0',' $ var1' etc. Du wirst mir später danken. –

Antwort

1

Änderung Ihrer __construct und entfernen global $var1;

public function __construct($username , $password ,$email) 
{ 
    $this->var0 = new Connect(); 
    $this->var1 = $this->var0->connect(); 
    $this->username = $username; 
    $this->password = $password; 
    $this->email = $email; 
} 
+0

aber ich denke, ist es notwendig, die Variablen an den Konstruktor übergeben? –

+0

Keine Notwendigkeit, Variable im Konstruktor übergeben, wenn nicht erforderlich –

+0

Ich versuchte die obige Antwort von Magnus Eriksson und bekam Antwort danke für die Antwort –

Verwandte Themen