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

  • Aichi
    hat ein Thema erstellt probleme mit xml + objekten.

    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!

  • Destruction
    antwortet
    Zitat von nikosch Beitrag anzeigen
    [WIKI]Viola[/WIKI]
    *g*... falls der das gemeint hat

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    [WIKI]Viola[/WIKI]

    Einen Kommentar schreiben:


  • Destruction
    antwortet
    Zitat von MasterD Beitrag anzeigen
    E viola
    uiuiuiiuiui so viele Fehler in 2 Wörtern
    Da sollte jemand noch mal franz.-Nachhilfe nehmen *g*

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Aichi
    antwortet
    hab den fehler gefunden!

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

    danke

    Einen Kommentar schreiben:


  • MasterD
    antwortet
    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.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    startWorkin'

    Einen Kommentar schreiben:


  • Aichi
    antwortet
    ok ich WEIß dass userList leer bleibt... zufrieden?

    stop trollin'

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:


  • Aichi
    antwortet
    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....

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X