Anfänger frage: array einem Objekt zu weissen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Anfänger frage: array einem Objekt zu weissen

    Hi erst mal,

    ich versuche seit kurzem mit Kassen zu arbeiten, klabt ja auch soweit.

    mein Problem ist nur das ich in der Klasse Date aus einer Datenbank mit mysql_fetch_array auslese.

    wenn ich die daten mit
    PHP-Code:
    $this->id  $result[artikel_id]; 
    zuweise klapt das zugreifen mit $artikel->id; ja auch nur müsste ich dann ca 25 verschiedene daten so zuweissen.

    ich würde es aber viel lieger mit einer abfrage sofort im Objekt $artikel
    $reinschreiben.
    PHP-Code:
    var $artikel = array(); 
    ich bekomme es aber einfach nicht hin.

    ps: gesucht habe ich schon aber nichts gefunden...
    Zuletzt geändert von ; 03.06.2003, 16:11.

  • #2
    warum musst du 25 ZUweiseungen machen?

    geht das denn net einfach so?

    PHP-Code:
    $this->id $result
    wenns net gehen sollte dann würde ich das per schleife machen

    PHP-Code:
    //vorher muss natürlich "var $artikel = array()" definiert sein

    var $artikel = array();

    for (
    $i=0;$i<=count($result);$i++)
    {
    array_push($this->artikel,$result($i));
    }

    // ungestestet 
    dann hast du alle WErte von $result in $this->artikel stehen, als Arrayso in der art sollte es eigentlich funktionieren

    ich hoffe ich konnte helfen

    cya CrazyPIp
    Zuletzt geändert von CrazyPip; 03.06.2003, 16:46.

    Kommentar


    • #3
      danke für die schnelle antwort, oben die sache war nur als beispiel gedacht, das ghanze ist eine function einer Klasse um die Userdaten eines angemeldeten users zu speichern.

      aber leider funktioniert das so nicht ich bekomme immer die meldung
      Code:
      Fatal error: Call to undefined function: array() in D:\www\index\class\class_user.php on line 105
      der code ab sieht so aus :
      PHP-Code:
      function check_user($username,$password) {
              global 
      $sql$p$sid;
              if(isset(
      $username) && isset($password)) {
                  
      $result $sql->query("SELECT * FROM hp_".$p."_user 
      WHERE username='"
      .$username."' AND password='".$password."'");
                  
      $row $sql->fetch_array($result);
                  for (
      $i=0;$i<=count($row);$i++) {
                      
      array_push($this->user,$row($i));
                  }
              }
          } 
      ach ja vie variable var $user = array() ist am anfang des Scripts initalisiert worden.
      Zuletzt geändert von ; 03.06.2003, 18:03.

      Kommentar


      • #4
        ich bin leider net bei mir @home und kanns deswegen nicht genau überprüfen:

        ist die Funktion check_user eine seperate Funktion oder ist die Bestandteil einer KLasse?, denn du benützt einmal die Objektvariable $sql und dann benützt du $this ebenfalls. $this-> wird nur innerhalb einer KLasse benützt und $sql ist ein anderes Objekt (zugewiesen durch $sql = new ...)

        ich bin mir ausserdem nicht sicher ob das mit der for-schleife überhaupt geht. Ich würds evtnl. mal so ausprobieren.

        PHP-Code:
        while ($sql->fetch_array($result))
        {
        array_push($this->user,$row($i));

        Kommentar


        • #5
          also die function ist aus der classe User.php wo sie auch aufgerufen wird.

          die globalen Variablen $sql und $p sowie $sid sind Variabeln aus seperaten klassen. wobei $sid momentan keine rolle spielt weil sie nicht wirklich hier gebraucht wird.

          Kommentar


          • #6
            ich weiss nicht ob das so einfach geht mit den globalen variablen....

            $sql;

            du willst eine Funktion aus dem Klassenobjekt $sql einfach in einer anderen Klasse (user klasse) verwenden indem du $sql einfach global "includest".

            Das geht meines Wissens nicht so einfach. Wenn du eine Funktion einer anderen Klasse benützen willst, dann geht das nur durch vererbung - das könnte auch deine fehlermeldung hervorrufen, da der die funktion fetch_array() nicht kennt, da er nicht auf die andere Klasse so ohne weiteres zugreifen kann.

            daran liegts wahrscheinlich...

            http://www.dynamic-webpages.de/php/keyword.extends.php

            lies dir das mal durch, das wird dir helfen

            cya CrazyPip

            Kommentar


            • #7
              das weis ich eben nicht weil ich noch neuling bin, was Klassen angeht, ich weiss nur das ich ein ergebnis bekomme wenn ich die Daten so aus der user Klasse aufruffe.

              ich kann sie ja mit $this->user_id = $user['user_id']; in der user Klasse verfügbar machen und sie dann auch extern vom hauptscript mit
              echo $user->user_id; am bildschirm ausgeben, darum wudere ich mich ja darüber das ich es nicht anders hinbekomme.

              Naja gelessen hab ich das, nur leider noch nicht so ganz verstanden, oder wo finde ich mal ein konkrete Beispiele wie ich mit extend die andere Klassen einbindet.
              Zuletzt geändert von ; 03.06.2003, 18:06.

              Kommentar


              • #8
                wenn

                PHP-Code:
                var user_id
                gesetzt wurde, dann kannst du dieser variable natürlich einen Wert zuweisen. Und dann hast du auch diesen Wert als $this->user_id innerhalb der aktuellen Klasse und kannst diesen auch in allen Funktionen innerhalb der aktuellen klasse verwenden. Nicht aber in anderen Klassen oder ausserhalb der KLasse.

                Ausserhalb der Klasse geht das nur, indem du ein Objekt erstellst:

                $user = new user;

                jetzt rufst du eine Funktion der Klasse so auf:

                $user->function(1,"irgendwas",...);

                (es gibt zwra noch mehrere Möglichkeiten eine Funktion unabhängig von der KLasse aufzurufen, aber dies sei jetzt mal dahingestellt)

                Cya CrazyPip

                p.s.: lies dir mal den link durch den ich dir gegeben hatte. Dort gibt es ausser extends auch noch alles andere zu OOB in kurzer Fassung.

                Kommentar


                • #9
                  nein , das geht auch ohne var $user_id.

                  das Original script sieht am anfang so aus:
                  PHP-Code:
                  class user {
                      var 
                  $user        = array();
                      var 
                  $error        0;
                      
                      var 
                  $isadmin        0;
                      var 
                  $ismod        0;
                      var 
                  $ismember        0;
                      
                      var 
                  $groupname        "Gäste";
                      var 
                  $permission        0;
                      
                      
                      function 
                  user() {
                          global 
                  $sid;
                          if(!isset(
                  $_SESSION['guest'])){
                              if(isset(
                  $_cookie['username']) && isset($_cookie['password'])) {
                                  if(!isset(
                  $_SESSION['username']) && !isset($_SESSION['password'])) {
                                      
                  $user $user $this->check_user($_cookie['username'],$_cookie['password']);
                                  }
                                  elseif(
                  $_SESSION['username'] != $_cookie['username'] || $_SESSION['password'] != $_cookie['password']) {
                                      
                  $user $this->check_user($_cookie['username'],$_cookie['password']);
                                  } else {
                                      
                  $username $this->pw_crypt("hi div"$_SESSION['username'],"de");
                                      
                  $user $this->check_user($username,$_SESSION['password']);
                                  }    
                              }
                              elseif(isset(
                  $_SESSION['username']) && isset($_SESSION['password'])) {
                                      
                  $username $this->pw_crypt("hi div"$_SESSION['username'],"de");
                                      
                  $user $this->check_user($username,$_SESSION['password']);
                              } else {
                                  
                  $sid->set_var("guest"1);
                              }
                              if (
                  $this->error == 0){
                                  if (
                  $user['group_id'] == 1){
                                      
                  $this->ismember        1;
                                      
                  $this->groupname    "Mitglied";
                                      
                  $this->permission    $user['permission'];    
                                  }
                                  elseif (
                  $user['group_id'] == 2){
                                      
                  $this->ismod        1;
                                      
                  $this->groupname    "Moderator";
                                      
                  $this->permission    $user['permission'];
                                  }
                                  elseif (
                  $user['group_id'] == 3){
                                      
                  $this->isadmin        1;
                                      
                  $this->groupname    "Administrator";
                                      
                  $this->permission    $user['permission'];
                                  }
                                  
                                  
                  $this->user_id        $user['user_id'];
                                  
                  $this->registred    $user['registred'];
                                  
                  $this->username        $user['username'];
                                  
                  $this->password        $user['password'];
                                  
                  $this->vorname        $user['vorname'];
                                  
                  $this->name        $user['name'];
                                  
                  $this->template        $user['usertemplate'];
                                  
                  $this->savecookie    $user['savecookie'];
                                  
                  $this->exptime        $user['exptime'];
                                  
                  $this->news_read    $user['news_read'];
                              }
                                  
                          }
                          return 
                  $user;        
                      } 
                  und so lassen sich auch die Daten abfragen, sogar das einlogen funktioniert einwandfrei. so das ich mir meine Userdaten anzeigen lasse, nur muss ich sie in der function user seperat zu weissen was natürlich den Code aufbläht.

                  hab ich schon gelessen, siehe oben, komme aber nicht so ganz klar damit.

                  was ich ja gar nicht verstehe ist das ich ja einen array() $user habe, aber ihn nicht als diesn nutzen kann.
                  Zuletzt geändert von ; 03.06.2003, 18:15.

                  Kommentar


                  • #10
                    achja und hie mal zum vergleich die Original function check_user()
                    PHP-Code:
                    function check_user($username,$password) {
                            global 
                    $sql$p$sid;
                            if(isset(
                    $username) && isset($password)) {
                                
                    $user $sql->query_first("SELECT * FROM hp_".$p."_user WHERE username='".$username."' AND password='".$password."'");
                                if (
                    $user['user_id'] != 0){
                                    
                    $permission $this->permission($user['permission']);
                                    
                    $this->error 0;
                                } else {
                                    
                    $this->error 2;
                                }
                            } else {
                                
                    $this->error 1;
                            }
                            return 
                    $user;
                        } 

                    Kommentar


                    • #11
                      zwei sachen sind mir unschlüssig:
                      einmal:

                      PHP-Code:
                      } else {
                      $sid->set_var("guest"1);

                      das dürfte die Fehlermeldung verursachen.

                      -
                      und das hier:
                      -

                      die letzte if - else geschichte wo du die ganzen $this->user_id; mit werten fütterst. Meines Wissens sind die Variablen die du am Anfang definierst mit

                      var...
                      var...
                      var...

                      usw

                      global für alle Funktionen innerhalb der Klasse. Diese Variablen spricht man mit $this-> an. Ich weiss nicht welche auswirkung es hat, wenn man nun einfach in einer funktion weitere $this-> Variablen erstellt...ich sehe darin ausserdem auch keinen Sinn - aber das sei nun mal ausser acht gelassen. Wenn du sowieso nur den $user-array zurückgibst, dann bringt doch die Zuweisung $this->user_id = $user['id']; gar nichts...

                      da sollte sich hier mal ein Spezialist ins Sachen OOB mal melden!

                      cya CrazyPIp

                      Kommentar


                      • #12
                        zu 1: alsi diese funktion ist nur die session Variable auf Gast = 1,
                        die function ist schon länger drin und hat keine auswirkungen auf das Script im ganzen wird aber auch nur gesetzt wenn das resultat user = 0 ist.

                        wie Du aber auch leicht festellen kannt wird die session guest am anfang abgeragt, so wird die nächste abfrage schon gleich abgebrochen. früher kann ich sie nicht setzen da es sonst nie bis zu cookie abfrage kommt.

                        zu 2: das ermöglicht mir die userdaten extern anzuzeigen, weil ich ja eben das Problem habe das den $user array() nicht auf die Var $user vererben kann. funktioniert aber auch ohne fehler. Ohne dies $this->.... könnte ich sie wieder nicht aufrufen. der aufruff sieht dan einfach so aus $user->user_id usw.

                        Diese Variablen hatte ich aber für deine ideen eben extra auskomentiert. so das die auch keine auswirkungen haben konnten.
                        Zuletzt geändert von ; 03.06.2003, 18:43.

                        Kommentar


                        • #13
                          *keuch*

                          bei so einer Hitze hier zu denken ist schwer gg - sobald ich zu Hause bin versuche ich mal das alles hier zu rekonstruieren, da ein paar Sachen nicht in mein Kopf wollen...zum Beispiel das mit dem $sid: warum diese Variable, die von aussen kommt(!) eine Funktion zugewiesen bekommt...da tut sich bei mir grad ein echtes logisches Problem auf!

                          aber eins ist mir grad eben noch aufgefallen:

                          du hast am anfang

                          var user;

                          und am ende hast du return $user;

                          sind das beabsichtigt zwei verschiedene Variablen ($user != $this->user ...?

                          Kommentar


                          • #14
                            ausserdem ist mir grad noch was aufgefallen:

                            PHP-Code:
                            <?php
                            /* Keine wird in PHP 4 funktionieren */
                            class Cart
                            {
                                var 
                            $todays_date date("Y-m-d");
                                var 
                            $name $firstname;
                                var 
                            $owner 'Fred ' 'Jones';
                                var 
                            $items = array("VCR""TV");
                            }

                            /* So sollte es gemacht werden */
                            class Cart
                            {
                                var 
                            $todays_date;
                                var 
                            $name;
                                var 
                            $owner;
                                var 
                            $items;

                                function 
                            Cart()
                                {
                                    
                            $this->todays_date date("Y-m-d");
                                    
                            $this->name $GLOBALS['firstname'];
                                    
                            /* etc. . . */
                                
                            }
                            }
                            ?>
                            auszug aus http://www.dynamic-webpages.de/php/language.oop.php


                            also geht das mit dem array() in var $user gar nicht...

                            gleich feierabend *freu* ich mach mich auf den WEg

                            cya CrazyPip

                            Kommentar


                            • #15
                              also zu $sid: $sid ist wieder eine andere Klasse, die aber nur benutzt wird um session zu setzen, das kann man aber auch leicht hier einbauen, wäre also kein grosser ackt, da die funktion ja nur genau 4 mal genutzt wird,

                              1 für den gast auf 1 einzustellen ( also session_register()
                              2 für den session_unset('guest'); wenn das login erfolgreich war und dann zum setzten der Usernamen und Password in sessions.

                              das mit dem return $user; kann egentlich raus weil ja bis auf die (seltsamen) $this->user_id Variablen ... alles andere in den var´s oben gepeichert wird. ist bei mir sogar schon raus.

                              na dann schönen Feieraben, ich muss zum wochenende arbeiten dafür hab ich heute frei.

                              das versteh ich jetzt aber gar nicht, ich hab das in schon einigen scripten gesehen.
                              Zuletzt geändert von ; 03.06.2003, 19:07.

                              Kommentar

                              Lädt...
                              X