ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
308
308
EMPFEHLEN
-
Ich habe die folgenden Klassen
undPHP-Code:<?php
class DB
{
//Datenbankdaten
private $DB=array('database'=>'battle',
'user'=>'root',
'password'=>'****');
protected $dbh;
public function __construct()
{
parent::__construct();
//ConnectString
$con="mysql:dbname=".$this->DB['database'].
";host=localhost";
try
{
//Verbindung herstellen
$dbh=new PDO($con, $this->$DB['user'], $this->$DB['password']);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
}
}
public function __destruct()
{
//Verbindung zerstören
$dbh=null;
}
}
Dazu folgende Datei, wo das aufgerufen wird:PHP-Code:<?php
require 'classes/class_DB.php';
class userManagement extends DB
{
public $dbh;
public function __construct(&$dbh)
{
if(is_object($dbh) && ($dbh instanceof PDO))
$this->dbh=$dbh;
}
public function add($daten)
{
//Daten eintragen
if(!is_array($daten)) return false;
try
{
$sql="INSERT INTO user(u_uname,
u_password,
u_email,
u_vname,
u_nname,
u_plz,
u_ort,
u_strasse,
u_hnr,
u_geb_tag,
u_geb_mon,
u_geb_jahr,
u_code,
u_aktiv)
VALUES(:user,
:password,
:email,
:vname,
:nname,
:plz,
:ort,
:strasse,
:hnr,
:geb_tag,
:geb_mon,
:geb_jahr,
:code,
:aktiv)";
$result=$this->dbh->prepare($sql);
$result->bindParam(':user', $daten['uname'], PDO::PARAM_STR,36);
$result->bindParam(':password', $daten['pw'], PDO::PARAM_STR,32);
$result->bindParam(':email', $daten['email'], PDO::PARAM_STR,60);
$result->bindParam(':vname', $daten['vname'], PDO::PARAM_STR,40);
$result->bindParam(':nname', $daten['nname'], PDO::PARAM_STR,32);
$result->bindParam(':plz', $daten['plz'], PDO::PARAM_STR,6);
$result->bindParam(':ort', $daten['ort'], PDO::PARAM_STR,32);
$result->bindParam(':strasse', $daten['str'], PDO::PARAM_STR,32);
$result->bindParam(':hnr', $daten['hnr'], PDO::PARAM_STR,7);
$result->bindParam(':geb_tag', $daten['geb_tag'], PDO::PARAM_STR,2);
$result->bindParam(':geb_mon', $daten['geb_mon'], PDO::PARAM_STR,2);
$result->bindParam(':geb_jahr', $daten['geb_jahr'], PDO::PARAM_STR,4);
$result->bindParam(':code', md5($daten['email'], time()), PDO::PARAM_STR,32);
$result->bindParam(':aktiv', '0', PDO::PARAM_STR,1);
$result->execute();
if($result->rowCount()==1)
{
print"Datensatz wurde eingetragen";
return true;
}
else
return false;
}
catch (Exception $e)
{
}
}
}
?>
darunter steht nur der HTML Code mit der Tabelle. Wenn ich dort den Button klicke, kommt folgende Ausgabe:PHP-Code:<?php
require 'classes/class_userManagement.php';
$art=new userManagement($dbh);
if(isset($_POST['send']))
{
$art->add(array('uname'=>$_POST['uname'],
'pw'=>$_POST['pw'],
'email'=>$_POST['email'],
'plz'=>$_POST['plz'],
'ort'=>$_POST['ort'],
'strasse'=>$_POST['strasse'],
'hnr'=>$_POST['hnr'],
'geb_tag'=>$_POST['geb_tag'],
'geb_mon'=>$_POST['geb_mon'],
'geb_jahr'=>$_POST['geb_jahr']
));
}
?>
Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\battle_final\classes\class_userManagement.php on line 49
Könnt ihr mir sagen, wo mein Fehler liegt?Geändert von ComFreek (04.02.12 um 17:48 Uhr) Grund: Passwort zensiert.
-
04.02.12 17:20 #2
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
In deinem ersten Code-Schnipsel solltest du das parent::__construct() entfernen, da deine Klasse DB gar keine Elternklasse hat, von der sie erbt. Aber ansonsten sehe ich kein Problem in deinem Skript... oder doch: du übergibst in deinem letzten Beispiel vielleicht kein valides Objekt deinem Konstruktor.
Geändert von einfach nur crack (04.02.12 um 17:22 Uhr)
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
parent::__construct();
ist raus, Fehler besteht aber dennoch - warum übergebe ich kein valides Objekt? Wie meinst du das?
-
Probier es mal damit:
Code PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
require 'classes/class_DB.php'; class userManagement extends DB { public function __construct() { parent::__construct(); // call parent construct } public function add($daten) { //Daten eintragen if(!is_array($daten)) return false; try { $sql="INSERT INTO user(u_uname, u_password, u_email, u_vname, u_nname, u_plz, u_ort, u_strasse, u_hnr, u_geb_tag, u_geb_mon, u_geb_jahr, u_code, u_aktiv) VALUES(:user, :password, :email, :vname, :nname, :plz, :ort, :strasse, :hnr, :geb_tag, :geb_mon, :geb_jahr, :code, :aktiv)"; $result=$this->dbh->prepare($sql); $result->bindParam(':user', $daten['uname'], PDO::PARAM_STR,36); $result->bindParam(':password', $daten['pw'], PDO::PARAM_STR,32); $result->bindParam(':email', $daten['email'], PDO::PARAM_STR,60); $result->bindParam(':vname', $daten['vname'], PDO::PARAM_STR,40); $result->bindParam(':nname', $daten['nname'], PDO::PARAM_STR,32); $result->bindParam(':plz', $daten['plz'], PDO::PARAM_STR,6); $result->bindParam(':ort', $daten['ort'], PDO::PARAM_STR,32); $result->bindParam(':strasse', $daten['str'], PDO::PARAM_STR,32); $result->bindParam(':hnr', $daten['hnr'], PDO::PARAM_STR,7); $result->bindParam(':geb_tag', $daten['geb_tag'], PDO::PARAM_STR,2); $result->bindParam(':geb_mon', $daten['geb_mon'], PDO::PARAM_STR,2); $result->bindParam(':geb_jahr', $daten['geb_jahr'], PDO::PARAM_STR,4); $result->bindParam(':code', md5($daten['email'], time()), PDO::PARAM_STR,32); $result->bindParam(':aktiv', '0', PDO::PARAM_STR,1); $result->execute(); if($result->rowCount()==1) { print"Datensatz wurde eingetragen"; return true; } else return false; } catch ( PDOException $e ) { // TODO: exception output or log? } catch (Exception $e) { // TODO: exception output or log? } } }
Gruß
-
04.02.12 19:57 #5
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Hi,
ich glaub das Problem ist eher, das $dbh null ist, jedenfalls kein Objekt vom Typ PDO. Du kannst mal den Konstruktor von userManagement so umbauen:
Code php:1 2 3 4 5 6
public function __construct(&$dbh) { if(!$dbh instanceof PDO) throw new Exception('$dbh ist kein PDO-Objekt!'); $this->dbh=$dbh; }
Im Übrigen gibts seit PHP 5.3 eine Warnung, wenn man Pass-by-reference macht, da ohnehin immer die Referenz übergeben wird.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Habe es gelöst bekommen
Der Fehler lag im Konstruktor der class_DB
vorher:
jetzt:PHP-Code:try
{
//Verbindung herstellen
$dbh=new PDO($con, $this->$DB['user'], $this->$DB['password']);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
Es fehlte nur das $this->PHP-Code:try
{
$this->dbh=new PDO($connectString, $this->DB['user'],
$this->DB['password']);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
Danke für eure Antworten
-
Ja solche Kleinigkeiten übersieht man gerne mal.

Btw, Du kannst die Attribute auch im Konstruktor von PDO setzen:
Code PHP:1 2 3 4 5 6 7 8
$this->dbh = new PDO( $connectString, $this->DB['user'], $this->DB['password'], array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) );
Gruß
Ähnliche Themen
-
Prepared Statements
Von Kalito im Forum PHPAntworten: 1Letzter Beitrag: 14.01.12, 11:52 -
[C99] MySQL C API mit Prepared Statements
Von Bratkartoffel im Forum C/C++Antworten: 2Letzter Beitrag: 06.12.11, 11:37 -
Problem mit Fetch() bei Prepared Statements
Von PHPFrage im Forum PHPAntworten: 4Letzter Beitrag: 16.11.10, 16:36 -
Prepared Statements - Zeilenanzahl ausgeben, wie?
Von noOx im Forum PHPAntworten: 2Letzter Beitrag: 11.12.09, 00:55 -
PDO - prepared statements & SQL Injections
Von DJLopez im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 09.04.07, 12:30





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren