Ankündigung

Einklappen
Keine Ankündigung bisher.

probleme mit xml + objekten

Einklappen

Neue Werbung 2019

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

  • probleme mit xml + objekten

    Hallo!

    Hab grad ein kleines Registrierungssystem auf objektorientierung umgebaut und seither funktioniert es nicht mehr ( ja ich weiß es gibt fertige reg-systeme, aber ich muss das für die uni selbst machen *g* )
    das problem liegt darin dass $userList nach dem befüllen in userLoad() leer bleibt ( scheint zumindest so ) kann mir da jemand helfen?


    hier die userverwaltung:

    PHP-Code:
    <?php


    define
    ("FILENAME","users.xml");

    function 
    createParser() {
        
    $parser xml_parser_create();
        
    xml_parser_set_option($parserXML_OPTION_CASE_FOLDING0);
        
    xml_set_element_handler($parser"startElement""endElement");
        
    xml_set_character_data_handler($parser"characterData");

        return 
    $parser;
    }
    function 
    startElement($parser$element$attributes) {
        

        global 
    $currentElement;
        global 
    $users;
        global 
    $newUser;
        
    $newUser $users->getuserList(); 
        
    $currentElement $element;

        switch (
    $currentElement) {
            case 
    "userlist":
                
    $newUser = array();
                break;
            case 
    "user":
                
    $newUser[] = array();
                break;
            case 
    "timestamp":
                
    $newUser[sizeof($newUser) - 1][] = $attributes["date"];
                
    $newUser[sizeof($newUser) - 1][] = $attributes["time"];
                break;
        }
        
    $users->setuserList($newUser);
        
        
    }


    function 
    endElement($parser$element) {
        
    global 
    $currentElement;

        
    $currentElement "";
    }

    function 
    characterData($parser$data) {
        global 
    $currentElement;
        global 
    $newUser;
        global 
    $users;
            
    $newUser $users->getuserList();
        switch (
    $currentElement) {
            
            case 
    "name":
            case 
    "password":
            case 
    "email":
            case 
    "time":
                
    $newUser[sizeof($newUser) - 1][] = $data;
                break;
        }
        
    $users->setuserList($newUser);
    }
    class 
    users{
        private 
    $userList;
        
        
        
        
    function 
    AddUser($user$email$password) { //User hinzufügen
        
    $this->userLoad();
        
    $timestamp time();
        
    $date date("d.m.Y",$timestamp);
        
    $time date("H:i:s",$timestamp);
        
    $length sizeof($this->userList);

        
    $this->userList[$length][0] = $user;
        
    $this->userList[$length][1] = $email;
        
    $this->userList[$length][2] = sha1($password."hmp");
        
    $this->userList[$length][3] = $date;
        
    $this->userList[$length][4] = $time;
    $this->userSave();

    }


    function 
    userSave() { //User speichern
        
    $writer xmlwriter_open_memory();
        
    xmlwriter_set_indent($writertrue);
        
    xmlwriter_start_document($writer"1.0""UTF-8");
        
    xmlwriter_write_dtd($writer"userlist"NULL"http://www.coding-monkey.net/ue05/userlist.dtd");

        
    xmlwriter_start_element($writer"userlist");
        foreach (
    $this->userList as $eintrag) {
            
    xmlwriter_start_element($writer"user");
            
    xmlwriter_write_element($writer"name"$eintrag[0]);
            
    xmlwriter_write_element($writer"email"$eintrag[1]);
            
    xmlwriter_write_element($writer"password"$eintrag[2]);
            
    xmlwriter_start_element($writer"timestamp");
            
    xmlwriter_write_attribute($writer"date"$eintrag[3]);
            
    xmlwriter_write_attribute($writer"time"$eintrag[4]);
            
    xmlwriter_end_element($writer);
            
    xmlwriter_end_element($writer);
        }
        
    xmlwriter_end_element($writer);
        
        
    xmlwriter_end_document($writer);
        
    $xmlContent xmlwriter_output_memory($writer);
        
        if (!
    file_exists(FILENAME)) {
            
    $fp fopen(FILENAME"w");
        }
        else {
            
    $fp fopen(FILENAME"r+");
        }
        
        
    $lock flock($fpLOCK_EX);
        if (
    $lock) {
            
    ftruncate($fp0);
            
    fwrite($fp$xmlContent);
            
    flock($fpLOCK_UN);
        }
        else {
            print(
    "An error occurred writing to the XML file!");
        }
        
    fclose($fp);
        
    }




    function 
    existsalready($useru,$mail){ // berpr fen ob user/mail bereits registriert sind

     
    for($i 0$i sizeof($this->userList); $i++ ){

        if(
    strcmp($this->userlist[$i][0], $useru) == 0){
         return 
    true;
        }
         if(
    strcmp($this->userlist[$i][1], $mail) == 0){
         return 
    true;
         }
     }
     return 
    false;

    }







    function 
    userLoad() {

        if (
    file_exists(FILENAME)) {
            
    $fp fopen(FILENAME"r");
            
    $lock flock($fpLOCK_SH);
            if (
    $lock) {
            
                
    $parser createParser();
                while (
    $data fread($fp4096)) {
                    if (!
    xml_parse($parser$datafeof($fp))) {
                        
    $this->newUser = array();
                    }
                }
                
    flock($fpLOCK_UN);
                
    xml_parser_free($parser);
            }
            else {
                
    $this->newUser = array();
            }
        }
        else {
            
    $this->newUser = array();
        }

     
    $this->userList $this->newUser;

    }

        public function 
    setuserList($userlist) {
        
    $this->userList $userList;
        
        
    }

    public function 
    __construct() {
        
                
    $this->userList = array();
                
        
    }

    public function 
    getuserList() {
        return 
    $this->userList;
        
        
    }
    }




    ?>

    und hier die registierungs.php

    PHP-Code:
    <?php
    session_start
    ();

    include(
    "users.php");

    define("FORWARD_CONTENT","Location: index.php?" SID);
    define("PASSWD2","passwd2");
    define("PASSWD","passwd");
    define("EMAIL","email");
    define("USER","user");
    define("TOKEN""_token");



    global 
    $users;

    $users = new users(); 

    function 
    sanitizeFilter($str) {
        return 
    htmlspecialchars($str,ENT_QUOTES,'UTF-8');
    }


    function 
    printXHTMLHeader($pageTitle) {
        echo 
    '<?xml version="1.0" encoding="utf-8"?>';
    ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title><?php echo $pageTitle?></title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        </head>
        <body>
    <?php
    }


    function 
    printXHTMLFooter() {
    ?>
        </body>
    </html>
    <?php
    }

    function 
    printForm() {
        echo 
    "<h3>Register</h3>";
        
    printErrMsg();
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']?>" enctype="multipart/form-data" method="post">
           <p> <input type ="hidden" name ="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>" /></p> <!-- Um Sessions ohne Cookies zu ermöglichen  -->
            <table>
                <tr>
                    <td>Username:</td>
                    <td><input type="text" size="50" name="<?php echo USER ?>" value="<?php echo param(USER?>" /></td>
                </tr>
                <tr>
                    <td>EMail:</td>
                    <td><input type="text" size="50" name="<?php echo EMAIL ?>" value="<?php echo param(EMAIL?>" /></td>
                </tr>
                <tr>
                    <td>Passwort:</td>
                    <td><input type="password" size="50" name="<?php echo PASSWD ?>" value="<?php echo param(PASSWD?>" /></td>
                
                </tr>
                <tr>
                    <td>Passwort erneut:</td>
                        <td><input type="password" size="50" name="<?php echo PASSWD2 ?>" value="<?php echo param(PASSWD2?>" /></td>
                </tr>
                <tr>
                    <td><?php printToken(); ?></td>
                    <td><input type="submit" name="submit" value="Registrieren" /></td>
                </tr>
            </table>
        </form>
           <p> <a href="login.php">Zum Login</a></p>
    <?php
      printXHTMLFooter
    ();
    }

    function 
    param($name) {
        return isset(
    $_POST[$name]) ? sanitizeFilter($_POST[$name]):"";
    }


    function 
    printToken() {
        
    $tokensession_id() . time() . mt_rand();
        
    $_SESSION[TOKEN] = $token;
        echo 
    "<input type=\"hidden\" name=\"".TOKEN."\" value=\"".$token."\" />\n";
    }


    function 
    printErrMsg() {
        global 
    $errMsg;

        if (isset(
    $errMsg)) {
            echo 
    "<p>Bitte folgende Fehler korrigieren:</p>\n";
            echo 
    "<ul>\n";
            foreach (
    $errMsg as $e) {
                echo 
    "<li>$e</li>\n";
            }
            echo 
    "</ul>\n";
        }
    }







    function 
    isTokenValid() {
        return((
    strlen(trim($_POST[TOKEN])) > 0) &&
            isset(
    $_SESSION[TOKEN]) &&
            (
    strcmp($_POST[TOKEN], $_SESSION[TOKEN]) == 0));
    }


    function 
    invalidateToken() {
        unset(
    $_SESSION[TOKEN]);
    }


    function 
    isEmpty($name) {
        return (
    strlen(trim($_POST[$name])) == 0);
    }


    function 
    isValidForm() {
        global 
    $errMsg;
        global 
    $users;
        global 
    $userList;

        if (
    isEmpty(USER)) {
            
    $errMsg[USER]= "User eingeben!";
        }
        if (
    isEmpty(PASSWD)) {
            
    $errMsg[PASSWD]= "PASSWORT eingeben!";
        }
        if (
    isEmpty(PASSWD2)) {
            
    $errMsg[PASSWD2]= "PASSWORT erneut eingeben!";
        }
        if(
    param(PASSWD) != param(PASSWD2)){
            
    $errMsg["PASSWD_dont_match"]= "PASSWORT stimmt nicht überein!";
        }
        if(
    strpos(param(EMAIL),"@") ==false){
        
    $errMsg[EMAIL]= "EMail nicht gueltig!";
         }
         if(
    $users->existsalready(param(USER),param(EMAIL))){
             
    $errMsg["exist"]= "User oder EMAIL bereits vorhanden!";
         }

        
        return !isset(
    $errMsg);
    }




    function 
    isFormSubmission() {
        return (
    $_SERVER['REQUEST_METHOD']=='POST');
    }



    function 
    normForm() {

    // auf HTTPS weiterleiten
    if(!isset($_SERVER["HTTPS"]) || strcmp($_SERVER["HTTPS"], "off") == 0) {
    header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]);
    }
        
        global 
    $users;
        global 
    $userList;
        
        if (
    isFormSubmission()) {
            if (
    isValidForm()) {
                if(
    isTokenValid()) {
                
    $users->userLoad();
                
    $users->AddUser(param(USER),param(EMAIL),param(PASSWD));
                
                
    $_SESSION[USER] = param(USER);
                
    //header(FORWARD_CONTENT);
                
    }
                 
    printXHTMLHeader("Registrierung");    
                
    printForm();
            } else {
                 
    printXHTMLHeader("Registrierung");    
                
    printForm();
            }
        } else {
             
    printXHTMLHeader("Registrierung");    
            
    printForm();
        }
    }

    normform();
    ?>


    danke!

  • #2
    Zitat von Aichi Beitrag anzeigen
    das problem liegt darin dass $userList nach dem befüllen in userLoad() leer bleibt ( scheint zumindest so )
    „Scheint zumindest so“ taugt bei der Fehleranalyse gar nichts.
    Überprüfen statt Vermuten ist angesagt.

    Das error_reporting hast du doch hoffentlich auf E_ALL (und display_errors auf on) stehen?

    kann mir da jemand helfen?
    Ich persönlich habe keine Lust, mich in so gut wie gar nicht kommentierten Fremdcode reinzudenken.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Das Ganze hat auch nicht sehr viel mit OOP zu tun (außer dass es „draußen dran steht“):
      PHP-Code:
          $this->userList[$length][0] = $user;
          
      $this->userList[$length][1] = $email;
          
      $this->userList[$length][2] = sha1($password."hmp");
          
      $this->userList[$length][3] = $date;
          
      $this->userList[$length][4] = $time
      wäre bspw. ein klassischer Anwendungsfall für ein weiteres Objekt und Komposition.

      PHP-Code:
      $newUser[sizeof($newUser) - 1][] = $data
      Sowas ist auch arg veraltet und das:
      PHP-Code:
      function endElement($parser$element) {
          
      global 
      $currentElement;

          
      $currentElement "";
      }

      function 
      characterData($parser$data) {
          global 
      $currentElement;
          global 
      $newUser;
          global 
      $users
      geht gar nicht.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        ich werds meinem professor ausrichten dass genau die codestellen die von ihm vorgegeben wurden mist sind

        @ChrisB

        damit wollt ich eig. nur sagen dass ich mich auch irren kann....

        Kommentar


        • #5
          Zitat von Aichi Beitrag anzeigen
          ich werds meinem professor ausrichten dass genau die codestellen die von ihm vorgegeben wurden mist sind
          Wenn du schon dabei bist, dann richte ihm doch bitte auch noch aus, dass er in seine Vorlesung auch mal ein Kapitel einbauen sollte, wie man grundlegendes Debugging betreibt.
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            ok ich WEIß dass userList leer bleibt... zufrieden?

            stop trollin'

            Kommentar


            • #7
              startWorkin'
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Hmm, komsich, warum das leerbleibt, schaun wir uns die Betreffende Fkt, genau an.
                PHP-Code:
                function userLoad() {

                    if (
                file_exists(FILENAME)) {
                        
                $fp fopen(FILENAME"r");
                        
                $lock flock($fpLOCK_SH);
                        if (
                $lock) {
                        
                            
                $parser createParser();
                            while (
                $data fread($fp4096)) {
                                if (!
                xml_parse($parser$datafeof($fp))) {
                                    
                $this->newUser = array();
                                }
                            }
                            
                flock($fpLOCK_UN);
                            
                xml_parser_free($parser);
                        }
                        else {
                            
                $this->newUser = array();
                        }
                    }
                    else {
                        
                $this->newUser = array();
                    }

                 
                $this->userList $this->newUser;


                Wo wird denn hier irgendwas in $this->newUser geschrieben??
                Überall wird dort nur ein neues, leeres Array angelegt und dies wird dann 1zu1 in $this->userList übertragen. Logisch, dass das Array dann leer ist.

                EDIT: Es scheint daran zu liegen, dass der Parser durchrennt und vll auf funktioniert, jedoch wird dann am schluss $this->userList mit einer eventuell nicht definierten Variable überschrieben. Schalt mal deine Intrumente ein und schau was die sagen.

                Mfg

                Falls ich tomaten auf den Augen haben sollte, entschuldige ich mich vielmals.

                Kommentar


                • #9
                  hab den fehler gefunden!

                  ich depp hab beim parser die daten auf userList geschrieben und nachm parsen userList mit newUser überschrieben...

                  danke

                  Kommentar


                  • #10
                    E viola
                    Code so alnge anschaun, bis er mit dem Fehler rausrückt, hilft

                    Kommentar


                    • #11
                      Zitat von MasterD Beitrag anzeigen
                      E viola
                      uiuiuiiuiui so viele Fehler in 2 Wörtern
                      Da sollte jemand noch mal franz.-Nachhilfe nehmen *g*
                      "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                      Kommentar


                      • #12
                        [WIKI]Viola[/WIKI]
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        Kommentar


                        • #13
                          Zitat von nikosch Beitrag anzeigen
                          [WIKI]Viola[/WIKI]
                          *g*... falls der das gemeint hat
                          "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                          Kommentar

                          Lädt...
                          X