Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 24

PHP Array zurückgeben.

  1. #1 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Guten Tag Community.

    Ich habe vor 2 Monaten mit OOP Angefangen. Jetzt versuche ich mich an einem Backend für eine Homepage.
    Jetzt bin ich am Anfang der Programmierung und gleich ein Problem.

    Ich habe eine Klasse namen "mysql" in dieser Klasse habe ich ein paar Funktionen. 2 Davon werde ich hier mal rein Posten (Nur die die Wichtig sind). Einmal, wie ich eine Verbindung aufbaue und einmal wie ich Spalten auslesen will.

    Hier mal mein Code (Klasse):
    PHP-Code:
    class mysql{
        function 
    connect(){
            require_once 
    'system/config/config.php';
            
    $verbindung = @mysqli_connect($server$benutzer$passwort);
                
            if(
    $verbindung){
                
    mysqli_select_db($verbindung$datenbank);
                if(
    mysqli_error($verbindung)){
                    echo 
    "Die Datenbank konnte nicht gefunden werden.<br />";
                     echo 
    'Fehler: ' mysqli_error($verbindung);
                 }
            }else{
                echo 
    "<pre>Verbindung fehgeschlagen. Bitte Prüfen sie die `Config.php`.<br />";
                echo 
    'Verbindungsfehler: ' mysqli_connect_error($verbindung) . "</pre>";
            }
            }
        static function 
    spalten_lesen($sql){
            if(
    mysql::connection()){
                
    $result mysqli_query($verbindung$sql);
                
    $rows = array();
                while (
    $row mysqli_fetch_assoc($result)){
                    
    $rows[] = $row;
                }
                return 
    $rows;
                
    //mysqli_free_result($abfrage);                
            
    }
        } 
    Hier rufe ich die Klasse und die Funktionen auf:

    PHP-Code:
    <h1>Installierte Sprachen</h2>
    <?php
      
    require_once "system/class/includes.php";
      
    $mysql = new mysql;
      
    $mysql->connect();
      
    $result $mysql->spalten_lesen("SELECT * FROM `Language`");
      
    print_r($result['Language']);
      
    print_r($result[]);
    ?>
    Mein Problem ist, das einfach NIX ausgegeben wird. Kein Fehler, kein leeres Array einfach nichts.

    Hoffe jemand kann mit Helfen, das ich auf die einzelnen Elemente des Arrays zugreifen kann(so: print_r($result['Language']);)

    Würde mich über eine Antwort sehr freuen.

    Mit freundlichen Grüßen
    JoKaBo
    JoKaBo ist offline

  2. #2 Zitieren
    Held Avatar von Satans Krümelmonster
    Registriert seit
    Aug 2007
    Beiträge
    5.797
    dann gibt mysql::connection() wohl nicht true zurück.
    Satans Krümelmonster ist offline

  3. #3 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hast Recht. Jetzt kommen nämlich einen Haufen Fehler.:

    Code:
    Warning: mysqli_query() expects at least 2 parameters, 1 given in VERZEICHNISS
    VERZEICHNISS/backend/system/class/mysql.php on line 62 Call Stack: 0.0001 662232 1. {main}() VERZEICHNISS/backend/index.php:0 0.0011 703328 2. mysql::spalten_lesen() 
    VERZEICHNISS/backend/index.php:6 0.0011 703408 3. mysqli_query() VERZEICHNISS/backend/system/class/mysql.php:62 Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in
     VERZEICHNISS/backend/system/class/mysql.php on line 64 Call Stack: 0.0001 662232 1. {main}() VERZEICHNISS/backend/index.php:0 0.0011 703328 2. mysql::spalten_lesen() 
    VERZEICHNISS/backend/index.php:6 0.0011 703800 3. mysqli_fetch_assoc() 
    VERZEICHNISS/backend/system/class/mysql.php:64
    Könntet ihr mir Vielleicht Helfen ?

    MfG
    JoKaBo
    JoKaBo ist offline

  4. #4 Zitieren
    Schwertmeister Avatar von Hisoka999
    Registriert seit
    Jun 2007
    Ort
    Im Norden
    Beiträge
    853
    Dein Problem liegt daran, dass du auf Eigenschaften der Instanz einer Klasse immer mit "$this->" zugreifen musst

    So sieht deine Methode dann aus:

    PHP-Code:
        static function spalten_lesen($sql){ 
            if(
    mysql::connection()){ 
                
    $result mysqli_query($this->verbindung$sql); 
                
    $rows = array(); 
                while (
    $row mysqli_fetch_assoc($result)){ 
                    
    $rows[] = $row
                } 
                return 
    $rows
                
    //mysqli_free_result($abfrage);                 
            

        } 
    Hisoka999 ist offline

  5. #5 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hallo,
    erstmal vielen Dank für die Schnelle Hilfe.
    Dennoch kommt jetzt der Fehler:
    Code:
    Fatal error: Using $this when not in object context in VERZEICHNISS/backend/system/class/mysql.php on line 62 Call Stack: 0.0002 662232 1. {main}() VERZEICHNISS/backend/index.php:0 0.0011 703648 2. mysql::spalten_lesen() VERZEICHNISS/backend/index.php:6
    Hoffe auf erneute Hilfe.

    MfG
    JoKaBo
    JoKaBo ist offline

  6. #6 Zitieren
    Held Avatar von Satans Krümelmonster
    Registriert seit
    Aug 2007
    Beiträge
    5.797
    also:
    1. du speicherst die verbindung nicht. die wird zwar aufgebaut, aber dann fallengelassen.
    2. macht das deklarieren von spalten_lesen als static irgendwie keinen sinn.
    und 3. du kannst $this nicht in einer statischen methode benutzen, weil statische methoden auf die klasse zugreifen und $this das objekt repräsentiert.

    so sollte es funktionieren:
    PHP-Code:
    class mysql {

        protected static 
    $verbindung null;
        
        public function 
    __construct(){
            
    // irgendwas machen, wenn man new mysql() ausführt wird? z.b. mysql::connect() aufrufen?
        
    }

        public function 
    connect(){
            require_once 
    'system/config/config.php';
            
    self::$verbindung = new mysqli($server$benutzer$passwort$datenbank);
            
            if (
    mysqli_connect_error()) {
                echo 
    "<pre>Verbindung fehgeschlagen. Bitte Prüfen sie die `Config.php`.<br />";
                echo 
    'Verbindungsfehler: ' mysqli_connect_error() . "</pre>";
            }
        }
        
        public static function 
    spalten_lesen($sql){
            if(
    $this->verbindung !== null)
                return 
    self::$verbindung->query($verbindung$sql)->fetch_all();              
        }

    hab's aber nicht getestet. könnte sein, dass man self::verbindung statt self::$verbindung schreiben muss, damit das funktioniert.

    allerdings hab das ganze ein paar designschwachstellen:
    - du speicherst immer nur eine verbindung in der klasse. diese ist immer die verbindung, die in der config-datei liegt. also auch immer die gleiche. wieso ist es dann möglich so oft wie man will mysql::connect() aufzurufen? man könnte den verbindugsvorgang in die construct-methode legen. dann wird das ganze nur noch beim initialisieren des objektes ausgeführt. hier sollte man dann vielleicht auch darauf achten, dass man die verbindung nur aufbaut, wenn nicht schon eine da ist (was ja beim erzeugen eines zweiten objektes der fall wäre).
    - spalten_lesen ist static. warum? weil es sowieso nur ein verbindung gibt? wenn ja, warum ist connect nicht static?
    - du benutzt die objektsyntax von php4. das solltest du dir am besten gleich abgewöhnen und direkt die von php5 nehmen (stichwort sichtbarkeit von methoden - natürlich gibt es noch mehr änderungen zwischen der oop-syntax von php4 und php5, aber das ist die wichtigste, wie ich finde). ich hab in meinem beispiel die syntax von php5 benutzt.
    Satans Krümelmonster ist offline

  7. #7 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Guten Abend,
    Erstmal Vielen Vielen Dank. Werde mich auch mal mit php5 Befassen.

    Leider geht der Code nicht.
    Erstmal der Fehler:
    Code:
    Fatal error: Using $this when not in object context in VERZEICHNISSbackend/backend/system/class/mysql.php on line 17 Call Stack: 0.0002 662792 1. {main}() VERZEICHNISSbackend/backend/index.php:0 0.0011 711960 2. mysql::spalten_lesen() VERZEICHNISSbackend/index.php:6
    in Zeile 17 Steht:
    Code:
    if($this->verbindung !== null)
    Könnte mir dort bitte nochmal einer Helfen ?

    MfG
    JoKaBo
    JoKaBo ist offline

  8. #8 Zitieren
    Held Avatar von Satans Krümelmonster
    Registriert seit
    Aug 2007
    Beiträge
    5.797
    stimmt, entschuldige. es ist natürlich self::$verbindung und nicht $this->verbindung.
    Satans Krümelmonster ist offline

  9. #9 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hey, leider hat dies auch nix geändert.

    MfG
    JoKaBo
    JoKaBo ist offline

  10. #10 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hallo,

    Kann mir keiner dabei Helfen ?

    MfG
    JoKaBo
    JoKaBo ist offline

  11. #11 Zitieren
    Krieger Avatar von undefined
    Registriert seit
    May 2009
    Beiträge
    449
    Werden statische Eigenschaften nicht ohne Dollar-Zeichen gesetzt? Mir ist so

    Also mach aus allen:
    Code:
    self::$verbindung
    Einfach das:
    Code:
    self::verbindung
    undefined ist offline

  12. #12 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.426
    Zitat Zitat von undefined Beitrag anzeigen
    Werden statische Eigenschaften nicht ohne Dollar-Zeichen gesetzt? Mir ist so
    Gegen derartige Unklarheiten gibt's praktischerweise schon etwas: http://php.net/manual/de/language.oop5.php
    Es scheint mir ohnehin bei einigen Kommentaren hier angemessen, dass manch einer nochmal in der Sprachreferenz zu PHP nachschlägt.
    Thoronador ist offline

  13. #13 Zitieren
    Krieger Avatar von undefined
    Registriert seit
    May 2009
    Beiträge
    449
    Zitat Zitat von Thoronador Beitrag anzeigen
    Gegen derartige Unklarheiten gibt's praktischerweise schon etwas: http://php.net/manual/de/language.oop5.php
    Es scheint mir ohnehin bei einigen Kommentaren hier angemessen, dass manch einer nochmal in der Sprachreferenz zu PHP nachschlägt.
    Ich sag ja, mir war so ;o Aber gut, ignorieren wir einfach meinen Post ;o
    undefined ist offline

  14. #14 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hallo,

    Ich habe jetzt die ganze Zeit mal rum getüftelt aber leider bin ich noch immer zu keinem Ergebnis gekommen.
    Hoffe jemand kann mir noch Helfen.

    MfG
    JoKaBo
    JoKaBo ist offline

  15. #15 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hallo,

    KP warum es jetzt geht aber jetzt habe ich ein Neues Problem.
    Ist eher eine Anfänger Frage aber ich habe es nochnicht geschafft zu lösen.

    PHP-Code:
     public static function spalten_lesen($sql){ 
            if(
    self::$verbindung !== null
                return 
    self::$verbindung->query($sql)->fetch_all();           
        } 
    hier wird ja per Return ein Array zurück gegeben. Jetzt ist halt die Frage, wie ich es auslesen kann.
    Diesen Code habe ich dann in der index.php

    PHP-Code:
    require_once "{$_SERVER['DOCUMENT_ROOT']}/Backend/includes.php";
    $mysql = new mysql();
    $mysql->connect();
    $row mysql::spalten_lesen("SELECT * FROM `user`");
    print_r$row); 
    Ausgeben tuht er dann das:
    Code:
    Array ( [0] => Array ( [0] => 1 [1] => Kevin ) [1] => Array ( [0] => 2 [1] => Gamesatrt ) )
    Vielleicht kann mir einer sagen, wie ich das Ordendlich ausgeben kann.

    Würde mich sehr über Hilfe freuen.

    MfG
    JoKaBo
    JoKaBo ist offline

  16. #16 Zitieren
    Held Avatar von Satans Krümelmonster
    Registriert seit
    Aug 2007
    Beiträge
    5.797
    warum es das nicht auf deutsch gibt ist mir schleierhaft, aber das sollte helfen: http://php.net/manual/de/language.types.array.php
    Satans Krümelmonster ist offline

  17. #17 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hallo,

    vielen Dank für die Schnelle Antwort. Ich habe schon endliche schleifen probiert: for, while, foreach ..

    Hier nochmal mein Code:
    PHP-Code:
    require_once "{$_SERVER['DOCUMENT_ROOT']}/Backend/includes.php";
    $mysql = new mysql();
    $mysql->connect();
    $row mysql::spalten_lesen("SELECT * FROM `user`");
    $count count($row);
    for (
    $i 0$i $count$i++){
        echo 
    $row[$i];

    Da kommt immer diese Fehler Meldung:
    Code:
    Notice: Array to string conversion in C:\xampp\htdocs\Backend\index.php on line 8
    Array
    Notice: Array to string conversion in C:\xampp\htdocs\Backend\index.php on line 8
    Array
    MfG
    JoKaBo
    JoKaBo ist offline

  18. #18 Zitieren
    Held Avatar von Satans Krümelmonster
    Registriert seit
    Aug 2007
    Beiträge
    5.797
    $row[$i] ist halt auch n array. sollte ja aber eigentlich aus dem rückgabetext von print_r($row) herauskommen... was willst du überhaupt machen? ich hab so das gefühl, dass du nicht so genau weißt, was du mit den daten aus der datenbank machen willst...
    Satans Krümelmonster ist offline

  19. #19 Zitieren
    Provinzheld
    Registriert seit
    Jul 2011
    Beiträge
    248
    Hey,

    Naja, ich habe mit OOP Angefangen, ich wollte mit den Daten nix machen. Einfach ausgeben lasse - Leider habe ich mit OOP noch so meine Probleme....

    Trotzdem Danke

    MfF
    JoKaBo
    JoKaBo ist offline

  20. #20 Zitieren
    Held Avatar von Satans Krümelmonster
    Registriert seit
    Aug 2007
    Beiträge
    5.797
    du solltest dir vielleicht mal die basics anschauen, bevor du dich an objekte ranwagst. wenn du das nicht verstehst, dann macht das ganze keinen sinn.
    Satans Krümelmonster ist offline

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •