[PHP] Problem mit Klassen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Atkaz, 12. März 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 12. März 2010
    Problem mit Klassen

    Hallo Leute,

    ich hab ein "kleines" Problem mit den oop.

    Das Problem liegt darin, dass ich keine Daten aus auslesen bzw überprüfen kann. Es ist so, dass es egal ist was ich in das Formulareingebe. Es erscheint weder eine fehlermeldung noch erscheint eine Ausgabe wenn korrekte Daten eingegeben werden.

    Klassen.php
    PHP:
    <? php

    class  haupt  {
    var 
    $passt ;
    var 
    $problem ;

    function 
    haupt (){
    $this -> passt  true ;
    }

    function 
    ungueltigeEingabe ( $feld ) {
    $this -> passt  false ;
    $this -> $problem  = $feld ;
    }

    function 
    namensCheck ( $name ) {
                
    // Ist der neue Name ein nichtleerer String?
                // der mit einem Buchstaben anfängt und ansonsten
                // nur aus Buchstaben, Bindestrichen,
                // Leerzeichen und Apostrophen besteht?
                
    return  preg_match ( "/^[^\W\d_]([^\W\d_]|[\-\'\s\.])*$/" ,
                                  
    stripslashes ( $name ));


    }

    }
    class 
    register  extends  haupt  {

    function 
    register  ( $username  ,
                         
    $vorname  ,
                         
    $nachname  ,
                         
    $strasse ,
                         
    $ort  ,
                         
    $plz =,
                         
    $passwort ,
                         
    $passwortb ,
                         
    $email ) {

    $this -> username  $username ;
    $this -> vorname  $vorname ;
    $this -> nachname  $nachname ;
    $this -> strasse  $strasse ;
    $this -> ort  $ort ;
    $this -> plz  $plz ;
    $this -> passwort  $passwort ;
    $this -> passwort2  $passwortb ;
    $this -> email  $email ;

    }

    function 
    __set ( $eigenschaft , $wert ) {
    switch (
    $eigenschaft ) {

    case
        
    "username"
                   
                     if ( 
    preg_match ( '~\A\S{3,30}\z~' , $wert )) {
                     
    $this -> fUser  $wert ;
                    
                    }
                     else
                     {
                     
    $this ->  ungueltigeEingabe [ "Username" ];
                     }
                     break;
    case 
        
    "vorname" :
                  if(
    $this -> $wert  != "" ) {
                  
                 if( 
    $this -> namensCheck ( $wert )) {
                  
    $this -> fVorname  = $wert ;
                  }
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Vorname" ];
                  }
                break;
    case 
        
    "nachname" :
                  if(
    $this -> $wert  != "" ) {
                  if( 
    $this -> namensCheck ( $wert )) {
                  
    $this -> fVorname  = $wert ;
                  }
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Nachname" ];
                  }
                break;
    case 
        
    "strasse" :
                  if(
    $this -> $wert  != "" ) {
                 
                  
    $this -> fStrasse  = $wert ;
                  }
                  
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Strasse" ];
                  }
                break;
    case 
        
    "plz" :
                  if(
    $this -> $wert  != "" ) {
                 if (
    preg_match ( "/^[\d+]{5}$/" , $wert )) {
                  
    $this -> fPlz  = $wert ;
                  }
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Plz" ];
                  }
                  
                break;
                
    case 
        
    "passwort" :
                  if(
    $this -> $wert  != "" ) {
                  
    $this -> fPasswort  = $wert ;
                  
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Passwort" ];
                  }
                break;
    case 
        
    "passwort2" :
                  if(
    $this -> $wert  != "" ) {
                  
    $this -> fPasswort2  = $wert ;
                  
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Passwort2" ];
                  }
                break;            
    case 
        
    "email" :
                  if(
    $this -> $wert  != "" ) {
    if(
    preg_match ( "/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$/" $wert )){
                  
    $this -> fEmail  = $wert ;
                  }
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Email" ];
                  }
                break;
        

    }
    }
    function 
    __get ( $eigenschaft ) {
    switch(
    $eigenschaft ) {
    case 
    "username" : return  $this -> fUser ;
    case 
    "vorname" : return  $this -> fVorname ;
    case 
    "nachaname" : return  $this -> fNachname ;
    case 
    "strasse" : return  $this -> fStrasse ;
    case 
    "ort" : return  $this -> fOrt ;
    case 
    "plz" : return  $this -> fPlz ;
    case 
    "passwort" : return  $this -> fPasswort ;
    case 
    "passwort2" : return  $this -> fPasswort2 ;
    case 
    "email" : return  $this -> fEmail ;
    }
    }
    }
    register.php
    PHP:
    <? php

    if (!isset( $_POST [ 'username' ],  $_POST [ 'vorname' ], $_POST [ 'nachname' ],  $_POST [ 'strasse' ],  $_POST [ 'ort' ],  $_POST [ 'plz' ],  $_POST [ 'passwort' ],  $_POST [ 'passwortb' ], $_POST [ 'email' ]))
       {
    echo 
    "Bitte benutzen Sie das dafür vorgesehene Formular" ;
     exit;
      }
    include 
    "Klassen.php" ;

    $username  $_POST [ "username" ];
    $vorname  $_POST [ "vorname" ];
    $nachname  $_POST [ "nachname" ];
    $strasse  $_POST [ "strasse" ];
    $ort  $_POST [ "ort" ];
    $plz  $_POST [ "plz" ];
    $passwort  $_POST [ "passwort" ];
    $passwort2  $_POST [ "passwortb" ];
    $email $_POST [ "email" ];

    $user  = new  register ( $username ,
                         
    $vorname ,
                         
    $nachname ,
                         
    $strasse ,
                         
    $ort ,
                         
    $plz ,
                         
    $passwort ,
                         
    $passwort2 ,
                         
    $email );

    echo  
    $user -> fVorname ;
    ?>
    Registerformular.php
    [
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Unbenanntes Dokument</title>
    </head>
    
    <body>
    <div align="center" style="background-color:#F1F1F1" >
    <form action="index.php?seite=register" method="post">
    <table width="341" border="0" align="center">
     <tr>
     <th width="187" scope="col"><p align="left">Username*</p></th>
     *
     <th width="144" scope="col"> <div align="left">
     <input type="text" name="username"; /> 
     </div></th>
     </tr>
     <tr>
     <th scope="col"><p align="left">Vorname</p></th>
     *
     <th scope="col"> <div align="left">
     <input type="text" name="vorname"; /> 
     </div></th>
     </tr>
     <tr>
     <th scope="col"><p align="left">Nachname *</p></th>
     *
     <th scope="col"> <div align="left">
     <input type="text" name="nachname"; /> 
     </div></th>
     </tr>
     <tr>
     <th scope="col"><p align="left">Straße *</p></th>
     *
     <th scope="col"> <div align="left">
     <input type="text" name="strasse"; /> 
     </div></th>
     </tr>
     <tr>
     <th ><p align="left">Ort *</p></th>
     *
     <th scope="col"> <div align="left">
     <input type="text" name="ort"; /> 
     </div></th>
     </tr>
     <tr>
     <td><p align="left">Plz*</p></td> *
     *
     <td> <div align="left">
     <input type="text" name="plz" /> 
     </div></td>
     </tr>
     <tr>
     <td><p align="left">Passwort *</p></td> 
     *
     <td> <div align="left">
     <input type="password" name="passwort" /> 
     </div></td>
     <tr>
     <td><p align="left">Passwort wiederholen*</p></td> 
     *
     <td> <div align="left">
     <input type="password" name="passwortb" /> 
     </div></td>
     </tr>
     
     <tr>
     <td><p align="left">Email*</p></td>
     <td> <div align="left">
     <input type="text" name="email"/> 
     </div></td>
     </tr>
     <tr>
     <td></td>
     <td><div align="right">
     <input type="submit" name="formaction" value="Registrieren"/>
     </div></td>
     </tr>
    </table>
    </form>
    </div>
    </body>
    </html>
    
    ich würde mcih freuen wenn ihr euchden code mal angucken könntet, ich bin mittlerweile echt verzweifelt.?(
     
  2. 12. März 2010
    AW: Problem mit Klassen

    $user->fVorname;

    gibt es nicht, du hast in der klasse

    $this->vorname

    stehen. ist das vieilleicht ein tippfehler

    // edit
    ah habs gefunden.
    aber du gibst fVorname keinen wert.
     
  3. 12. März 2010
    AW: Problem mit Klassen

    ich hab doch

    PHP:
    case 
        
    "vorname" :
                  if(
    $this -> $wert  != "" ) {
                  
                 if( 
    $this -> namensCheck ( $wert )) {
                  
    $this -> fVorname  = $wert ;
                  }
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Vorname" ];
                  }
                break; 
    $this->fVorname =$wert;

    Tst das dann nicht die Variable die den Wert enthält??

    Ich bin da noch nicht so mit vertraut, deswegen sorry, wenn ich komische fragen stelle.
     
  4. 12. März 2010
    AW: Problem mit Klassen

    wie übergebe ich den der fVorname den wert??

    ich dachte dass ichdas mit:
    PHP:
    case 
        
    "vorname" :
                  if(
    $this -> $wert  != "" ) {
                  
                 if( 
    $this -> namensCheck ( $wert )) {
                  
    $this -> fVorname  = $wert ;
                  }
                  }
                  else
                  {
                  
    $this ->  ungueltigeEingabe [ "Vorname" ];
                  }
                break;  
    bereits gemacht habe?
     
  5. 13. März 2010
    AW: Problem mit Klassen

    PHP:
    function  ungueltigeEingabe ( $feld ) {
    $this -> passt  false ;
    $this -> $problem  = $feld ;
    }
    muss auf jeden Fall

    PHP:
    function  ungueltigeEingabe ( $feld ) {
    $this -> passt  false ;
    $this -> problem  = $feld ;
    }
    heißen, sonst sprichst du nicht das Attribut der Klasse haupt an.

    Hier

    PHP:
    case
        
    "username"
                   
                     if ( 
    preg_match ( '~\A\S{3,30}\z~' , $wert )) {
                     
    $this -> fUser  $wert ;
                    
                    }
                     else
                     {
                     
    $this ->  ungueltigeEingabe [ "Username" ];
                     }
                     break;
    nach dem $this ist ein Leerzeichen, das sollte man besser auch entfernen. Auch bei den andern Fällen das gleiche.

    Du übergibst hier

    PHP:
    $user  = new  register ( $username ,
                         
    $vorname ,
                         
    $nachname ,
                         
    $strasse ,
                         
    $ort ,
                         
    $plz ,
                         
    $passwort ,
                         
    $passwort2 ,
                         
    $email );
    dem Konstruktor die Werte, aber so wie deine Klasse aufgebaut ist hast du 1. keinen Konstruktor und erwartest 2. wohl eher bei der Methode register die Werte. Also musst du entweder einen Konstruktor schreiben

    PHP:
    class  register  extends  haupt
    {
        public function 
    __construct ( $var1 $var2 $var3  ...)
        {
            
    // dein Code
        
    }
    }
    oder erst die Instanz erstellen und dann der Methode register die Werte übergeben

    PHP:
    $register  = new  register ();
    $register -> register ( $werte );
    Du solltest dir vielleicht noch mal genauer die objektorientierte Programmierung anschauen, ich glaube das hast du noch nicht so ganz verstanden! Ich hab grad nicht so viel Zeit, vielleicht hilft es dir aber erstmal weiter, ansonsten helfe ich später gerne noch mal
     
  6. 13. März 2010
    AW: Problem mit Klassen

    nee, wenn man class blub { function blub($$$) } dann ist blub der konstruktor. also die funktion die genauso heißt wie die klasse. zumindest bei seinem "alten" oop stil^^
     
  7. 13. März 2010
    AW: Problem mit Klassen

    Ja das stimmt, aber ich dachte, das wäre in PHP nicht so. Ich mache es immer mit __construct()
     
  8. 13. März 2010
    AW: Problem mit Klassen

    Die Methode von Telefonzelle wird in PHP4 verwendet. PHP5 hat dann die Magic Functions eingeführt, u.A. eben auch __construct. Dennoch funktionieren beide Methoden in PHP5, sind beide vorhanden, wird __construct bevorzugt.
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.