Suche PHP OOP MYSQL Hilfe

07/14/2015 20:55 Givemoney#1
Alle Frage, wurde gelöst!!! Danke an alle.

Alte Frage



Altee Frage
07/14/2015 21:00 KoKsPfLaNzE#2
hallo, die connection sollte eigentlich stimmen, bist dir sicher das der port 3307 ist und nicht 3306?

Btw auch wenn du klassen und methoden nutzt bedeutet es nicht das es sinvoll ist den code so aufzubauen=), aber zum lernen besser als nix=)
07/14/2015 21:02 Givemoney#3
Ja 3307 habe mehrere Instanzen also Ports freigegeben.

Naja Für meine Sache ist oop schwachsinn, jedoch wollte ich es mal ausprobieren.

Soweit bekomm ich auch alles hin.. Aber er erbt die Verbindung nicht..



// habe eine Warenwirschaft mit PHP erstellt für eine Firma als Projekt, das ganze soll ich nun mit OOP strukturieren. So soll ich lernen mit OOP umzugehen, um dann auch Plugins usw für cms einfach zu entwickeln bzw. anzupassen^^

// bin IT-Systemkaufmann interessiere mich aber für entwicklungen und deswgen das Projekt. Nartülich bin ich nicht der beste aber ich bekomme webseiten hin das auch ganz gut aber oop ist für mich neu und deswgen die fragen..^^ bin ja kein Anwedungsentwickler.
07/14/2015 21:12 iProModzZ#4
Warum arbeitest du mit mysql? wenn dann schon mit mysqli oder PDO...
07/14/2015 21:25 algernong#5
Wo genau gibt es den Fehler? Verwende mysql_error(), um mehr Informationen zu bekommen. Dein Problem hat aber nichts mit OOP zu tun.
07/14/2015 21:31 Givemoney#6
Naja noch geht mysql aber nartülich hast du recht habe PDO auf meiner andere Datei, wechsel ich dann aus^^ aber das löst ja nicht das Problem.

Naja der Fehler ist das "class Eingabe" keine DB verbindung hat. Meine frage ist warum.
Habe ich irgendwas vergessen?.

Hm Aber der Connect geht ja bei der ersten Class nur nicht bei dem 2 obwohl ich extends drine habe^^


@Danke an alle die sich die Zeit nehmen.^^
07/14/2015 22:23 Warnuk3r#7
Vielleicht das?

PHP Code:
class Eingabe extends Rechnung {
     public function 
__construct() {
          
parent::__construct();
     }

07/14/2015 22:27 algernong#8
Quote:
Originally Posted by Givemoney View Post
Naja noch geht mysql aber nartülich hast du recht habe PDO auf meiner andere Datei, wechsel ich dann aus^^ aber das löst ja nicht das Problem.

Naja der Fehler ist das "class Eingabe" keine DB verbindung hat. Meine frage ist warum.
Habe ich irgendwas vergessen?.

Hm Aber der Connect geht ja bei der ersten Class nur nicht bei dem 2 obwohl ich extends drine habe^^


@Danke an alle die sich die Zeit nehmen.^^
Wo genau kommt der Fehler? Schlägt mysql_connect() fehl? Schlägt mysql_query() fehl? Fehlermeldung?
Der MySQL Kram in deinem Code hat nichts mit OOP / Vererbung zu tun.

Quote:
Originally Posted by Warnuk3r View Post
PHP Code:
class Eingabe extends Rechnung {
     function 
__construct() {
          
parent::__construct();
     }

Ändert nichts, denn Eingabe hat keinen Konstruktor, also wird ohnehin der von Rechnung verwendet. In mysql_query() wird aber auch gar kein Handle übergeben, also nutzt PHP ohnehin die zuletzt aufgebaut Verbindung. Und eine Verbindung wird sogar zweimal aufgebaut:
PHP Code:
$db1 = new Rechnung();
$db2 = new Eingabe(); 
07/14/2015 22:31 Givemoney#9
@algerong

Ich schaue morgen früh mal und baue msql error ein und poste das ergebnis dann hier.

Finde es schonmal Klasse das du dir die Zeit nimmst:)
07/14/2015 23:58 NotEnoughForYou#10
Nunja, wie soll er denn auch $db erben? Ist ja nur ne lokale Variable (in deiner Variante). Daher wird $db nicht vererbt.

Eigentlich sollte die mysql_query etc. die letzte geöffnete Verbindung nutzen (wie algernong bereits gesagt hat), aber auch bei meinem Test war das nicht der Fall.

Folgendes funktioniert (absichtlich mysql_* genutzt, da du es ja auch noch nutzt):

PHP Code:
<?php
abstract class DBHandler {
    protected 
$db;

    public function 
__construct() {
        
$this->db mysql_connect("localhost""root""pw"); // veraltet sollte nicht mehr genutzt werden
        
mysql_select_db("db"$this->db) or die(mysql_error());
    }

}

class 
MyClass extends DBHandler {

    
/*
    hier kann $this->db genutzt werden, ressource wurde von parent geerbt
     */
    
    /**
     * Nur eine Testfunktion
     * @return [array] [portfolio infos]
     */
    
public function testConnection() {
        return 
mysql_fetch_assoc(mysql_query("SELECT * FROM portfolio"));
    }
}

$myClass = new MyClass();

var_dump($myClass->testConnection());

?>
Dennoch lege ich dir nahe (wie auch die anderen) auf PDO oder mysqli umzusteigen (vorzugsweise PDO).

Ein Beispiel für eine Datenbankklasse basierend auf PDO wäre z.B. [Only registered and activated users can see links. Click Here To Register...]

Auch würde ich die Datenbankverbindung nicht in eine "andere" Klasse implementieren.

Wenn du jetzt Beispielsweise eine weitere Klasse Userverwaltung hättest die auch die Datenbank benötigt, müsstest du dort entweder auch die DB-Connection implementieren oder (in deinem Beispiel) von Rechnung erben (was semantisch keinen Sinn macht).

Daher würde ich dir empfehlen eine extra Datenbankklasse zu schreiben (wie bereits von mir angedeutet) und dort 2 statische Methoden (ähnlich meinem Beispiel auf Github) zu implementieren.

Dabei kannst du nun zu Beginn deines Scripts (wenn du ein Includesystem nutzt, also am Anfang der Index) einfach (bei dem GitHub-Beispiel)

PHP Code:
DB:initDB(); 
aufrufen und dann fortan in der Klasse die du nutzt, einfach per

PHP Code:
DB::getDB(); 
auf die Datenbankverbindung zugreifen und einfach Querys absetzen.

PHP Code:
class MyTool {
  public function 
doXY() {
      
DB::getDB()->query("XYZ");
  }

Das ist zumindest mein Ansatz für die Datenbankabstraktion. Natürlich gibt es da unterschiedliche Ansätze, aber es schadet nicht sich da ein paar Gedanken zu zumachen.
Mfg
07/15/2015 12:59 Givemoney#11
Ich bedanke mich, das war die Lösung.

Kann ich "Eigenschaften" inkludieren? Sprich das ich public $host = "localhost:3307"; in einer inc ode txt datein mache und dies, dann aufrufe leider kommt immer der Fehler das ich das nur in der Funktion selber mache kann.. gibt eine andere möglichkeit die Login daten nicht direkt in der PHP datei zuhaben?.
07/15/2015 13:22 NotEnoughForYou#12
Entweder eine konstante Definieren (define) oder per Klassen konstanten / oder sonstige setter setzen.

Du kannst es auch in normale variablen schreiben und die dann beim erzeugen des Objekts übergeben.

Alternativ (nicht empfehlenswert) könntest du die variablen auch global setzen dann müsstest du sie nicht übergeben.

Ich nutze meistens die Variante mit define.

Mfg
07/15/2015 14:33 Givemoney#13
Mir geht es darum das ich die Connect daten "Host" "PW" "USEr" nicht öffentlich preisgeben möchte, sondern die in einer externe .Txt oder .inc datei haben möchte und diese möchte ich dann ikludieren.

Leider Spuckt er mit immer wieder einen Fehler aus, das ich bei eigenschaften der Klasse nicht inkludieren kann, obwohl ja dort die Variable gesetzt werden..

Er sagt immer das ich das In der Funktionsebene inkludieren muss, dies hilft mir aber leider nicht weiter.


Konstante definieren bzw klassen konstante definieren bringt mir doch bei der Sache nichts oder? das sind ja Variablen die einfach Konstant sind aber trotzdem sichtbar in der Datei.
07/15/2015 15:20 Devsome#14
Quote:
Originally Posted by Givemoney View Post
Mir geht es darum das ich die Connect daten "Host" "PW" "USEr" nicht öffentlich preisgeben möchte, sondern die in einer externe .Txt oder .inc datei haben möchte und diese möchte ich dann ikludieren.

Leider Spuckt er mit immer wieder einen Fehler aus, das ich bei eigenschaften der Klasse nicht inkludieren kann, obwohl ja dort die Variable gesetzt werden..

Er sagt immer das ich das In der Funktionsebene inkludieren muss, dies hilft mir aber leider nicht weiter.


Konstante definieren bzw klassen konstante definieren bringt mir doch bei der Sache nichts oder? das sind ja Variablen die einfach Konstant sind aber trotzdem sichtbar in der Datei.
Sie in einer *txt zuspeichern ist das schlimmste was man machen kann.
Da könnte man sich irgendwie bekommen & runterladen.
In einem PHP Tag kommt keiner an die Sachen dran.
07/15/2015 15:25 Givemoney#15
soweit ich weis hat fast jede PHP Seite eine Config.inc datei^^