reg.tool funktioniert nicht mehr

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

  • reg.tool funktioniert nicht mehr

    hallo
    ich benutze ein anmeldetool für die erfassung verschiedener user.
    jetzt habe ich die datenbank erweitert und entsprechende php-dateien und siehe da, das tool funktioniert nicht mehr richtig.
    ich kann zwar neue user anlegen, die auch perfekt in die datenbank eingetragen werden aber der login funktioniert nicht mehr.
    da ich in php nicht sonderlich bewander bin, also hier meine bitte um hilfe, da ich nicht genau erörtern kann an was es liegt. ich hoffe es findet sich einer der das ganze hier mal durchsieht.

    die datenbank sieht folgendermassen aus:

    Code:
    CREATE TABLE `teilnehmer` (
      `id` int(4) NOT NULL auto_increment,
      `vname` varchar(50) collate latin1_german1_ci default NULL,
      `nname` varchar(50) collate latin1_german1_ci default NULL,
      `str` varchar(50) collate latin1_german1_ci default NULL,
      `hnr` varchar(4) collate latin1_german1_ci default NULL,
      `plz` varchar(5) collate latin1_german1_ci default NULL,
      `ort` varchar(50) collate latin1_german1_ci default NULL,
      `geb` date default '0000-00-00',
      `************` enum('','Herr','Frau') collate latin1_german1_ci default NULL,
      `tlauf` enum('Ja','Nein') collate latin1_german1_ci default NULL,
      `start` enum('','8','9','10','11','12','13','14','15','16','17','18') collate latin1_german1_ci default NULL,
      `nlauf` enum('Ja','Nein') collate latin1_german1_ci default NULL,
      `tshirt` enum('','S','M','L','XL','XXL') collate latin1_german1_ci default NULL,
      `mail` varchar(50) collate latin1_german1_ci default NULL,
      `user` varchar(10) collate latin1_german1_ci default NULL,
      `password` varchar(10) collate latin1_german1_ci default NULL,
      `gruppe` varchar(100) collate latin1_german1_ci default NULL,
      `gruppe1` varchar(100) collate latin1_german1_ci default NULL,
      `km` decimal(5,0) default NULL,
      `bem` text collate latin1_german1_ci,
      `rechte` tinytext collate latin1_german1_ci,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `username` (`user`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=18 ;
    ist daran etwas auzusetzen? ich schätze bzw hoffe mal nicht.

    jetzt die loginseite, die bisher immer funktionierte, nur der php-teil:

    PHP-Code:
    <?php
    // $Id: php_01_f.php 20 2005-07-25 19:05:10Z wshbg $ 
    include ('../php/z_sessionclass.php');
    $Session = new SessionClass();
    include (
    '../php/z_globals.php');
    include (
    '../php/z_userdbclass.php');
    $message 'Melden Sie sich an:';
    $pmessage '';

        if ( (
    $Session->getLoginState() <= 0) && isset($_POST['submitLogin'])) { 
        
    $User = new User;
            
    $User->setUsername ((isset($_POST['inputUsername'])  ? $_POST['inputUsername'] : ''));
        if (isset (
    $_POST['inputPassword'])) { $User->setPassword($_POST['inputPassword']); }
        if (
    $Session->login($User->getUsername(),$User->getPassword(), DBSERVERDBNAMEDBUSERDBPASSWORD)){ 
                
    $message "Hallo, ".$Session->USER->getFullname();
        } else { 
                
    $message "Sie haben keine Berechtigung";
            }   
        }
        if ((
    $Session->getLoginState() == 1) && isset($_POST['submitLogout'])) {
            
    $message="Sie sind nun ausgeloggt. Auf Wiedersehen!, ".$Session->USER->getFullname();$Session->logout();}
        if (
    $Session->getLoginState() == 1) {
                
    $message $Session->USER->getFullname().", sie sind nun eingeloggt und k&ouml;nnen ihre 
    pers&ouml;nlichen Daten &auml;ndern."
    ;}

        
        
        if ((
    $Session->getLoginState()<=0)&& isset($_POST['forgotPassword'])){
            
    $mail = isset($_POST['Mail']) ? $_POST['Mail']:'';        
            
    $muster "/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)[a-zA-Z]{2,3}$/";
            if (
    $mail != '' && preg_match($muster,$mail)) {
                
    $abfrage = new UserDbMapper(DBSERVER,DBNAME,DBUSER,DBPASSWORD);
                
    $user $abfrage->checkMail($mail);
                if (
    $user->existUsername()) {
                    
    $random zufall();
                    if (
    $abfrage->changePassword($user->id,$random)){
                        
    $adressat $user->getMail();
                        
    $betreff "Laufanmeldung für Zweibrücken - eine Stadt läuft für ihre Kinder";
                        
    $nachricht  "Hallo lieber Sportfreund, ";
                        . . .                    
    $header "From: [email]laufanmeldung@zweibrueckenlaeuft.de[/email]\r\n";
                        
    mail($adressat$betreff$nachricht$header);            
                        
    $pmessage "Sie erhalten eine Mail";
                    } else {
                        
    $pmessage "Es ist ein Fehler aufgetreten";
                    }
                } else {
                    
    $pmessage "Sie sind nicht registriert";
                }
            } else {
                
    $pmessage "Mailadresse ung&uuml;ltig?";
            }    
        }
        


    ?>
    als fehlermeldung kommt immer, dass ich plötzlich keine berechtigung hätte, was auf einen fehler in dieser zeile wohl aufmerksam macht:

    PHP-Code:
    if ($Session->login($User->getUsername(),$User->getPassword(), DBSERVERDBNAMEDBUSERDBPASSWORD)){ 
                
    $message "Hallo, ".$Session->USER->getFullname();
        } else { 
                
    $message "Sie haben keine Berechtigung"
    da ich in dieser zeile nichts geändert habe, vermute ich, dass der fehler entweder in der session-datei liegt die ich include, die aber auch nicht verändert wurde, oder viel eher in der userdbclass


    ich hoffe es kann mir jemand helfen, das problem zu finden. ich sitze schon seit tagen drüber und bekomme das ding nicht wieder zum laufen. ohne login bringt mir das skript net viel.
    vielen dank schon mal!!!!!
    Zuletzt geändert von Nurion; 09.01.2006, 00:01.

  • #2
    achja, noch als nachtrag die userclass und userdbclass:


    PHP-Code:
    <?php

    if (!defined('Z_USERDBCLASSPHP')) {
        
    define ('Z_USERDBCLASSPHP''Z_USERDBCLASSPHP');

        include (
    'z_basedbclass.php');
        include (
    'z_userclass.php');
        include (
    'z_inc.php');

        class 
    UserDbMapper extends BaseDbMapper {

            function 
    UserDbMapper ($server="",$database="",$login="",$password=""){
                
    $this->BaseDbMapper($server,$database,$login,$password);
            }
                    
            function 
    readUser ($user,$password) {
                
    $returnvalue null;
                
    $sql  "select * from teilnehmer ";
                
    $sql .= " where user =".quote_smart($user)." && password(".quote_smart($password).") = password";
                if (
    $result mysql_query($sql$this->handle)) {
                    if (
    mysql_num_rows($result) == 1) {
                        
    $row mysql_fetch_array($resultMYSQL_ASSOC);
                        
    $returnvalue = new User ($row['id'],$row['vname'],$row['nname'],$row['ort'],$row['user'],
    $row['password'],$row['mail'],$row['str'],$row['hnr'],$row['plz'],$row['geb'],
    $row['************'],$row['tlauf'],$row['nlauf'],$row['start'],$row['tshirt'],
    $row['gruppe'],$row['gruppe1'],$row['bem'],$row['km'],$row['rechte']);
                    } else {
                        
    //Benutzer nicht gefunden
                        
    $returnvalue = new User;
                    }
                } else {
                    echo 
    "Fehler readUser";
                }
            return 
    $returnvalue;
            }
            
            function 
    getUser ($id) {
                
    $returnvalue null;
                
    $sql  "select * from teilnehmer ";
                
    $sql .= " where id = $id";
                if (
    $result mysql_query($sql$this->handle)) {
                    if (
    mysql_num_rows($result) == 1) {
                        
    $row mysql_fetch_array($resultMYSQL_ASSOC);
                        
    $returnvalue = new User ($row['id'],$row['vname'],$row['nname'],$row['ort'],$row['user'],
    $row['password'],$row['mail'],$row['str'],$row['hnr'],$row['plz'],
    $row['geb'],$row['************'],$row['tlauf'],$row['nlauf'],$row['start'],
    $row['tshirt'],$row['gruppe'],$row['gruppe1'],$row['bem'],$row['km'],
    $row['rechte']);
                    } else {
                        
    //Benutzer nicht gefunden
                        
    $returnvalue = new User;
                    }
                } else {
                    echo 
    "Fehler getUser";
                }
            return 
    $returnvalue;
            }        
                    
            function 
    checkUser ($user) {
                
    $returnvalue null;
                
    $sql  "select * from teilnehmer ";
                
    $sql .= "where user =".quote_smart($user);
                if (
    $result mysql_query($sql$this->handle)) {
                    if (
    mysql_num_rows($result) == 1) {
                        
    $row mysql_fetch_array($resultMYSQL_ASSOC);
                        
    $returnvalue = new User ($row['id'],$row['vname'],$row['nname'],$row['ort'],$row['user'],
    $row['password'],$row['mail'],$row['str'],$row['hnr'],$row['plz'],
    $row['geb'],$row['************'],$row['tlauf'],$row['nlauf'],$row['start'],
    $row['tshirt'],$row['gruppe'],$row['gruppe1'],$row['bem'],$row['km'],
    $row['rechte']);
                    } else {
                        
    //Benutzer nicht gefunden
                        
    $returnvalue = new User;
                    }
                } else {
                    echo 
    "Fehler checkUser";
                }
                return 
    $returnvalue;
            }

            function 
    checkMail ($mail) {
                
    $returnvalue null;
                
    $sql  "select * from teilnehmer ";
                
    $sql .= "where mail =".quote_smart($mail);
                if (
    $result mysql_query($sql$this->handle)) {
                    if (
    mysql_num_rows($result) == 1) {
                        
    $row mysql_fetch_array($resultMYSQL_ASSOC);
                        
    $returnvalue = new User ($row['id'],$row['vname'],$row['nname'],$row['ort'],$row['user'],
    $row['password'],$row['mail'],$row['str'],$row['hnr'],$row['plz'],
    $row['geb'],$row['************'],$row['tlauf'],$row['nlauf'],$row['start'],
    $row['tshirt'],$row['gruppe'],$row['gruppe1'],$row['bem'],$row['km'],
    $row['rechte']);
                    } else {
                        
    //Benutzer nicht gefunden
                        
    $returnvalue = new User;
                    }
                } else {
                    echo 
    "Fehler checkMail";
                }
                return 
    $returnvalue;
            }        
                    
            function 
    newUser($u) {
                
    $sql  "insert into teilnehmer ";
                
    $sql .= " (user, mail, vname, nname, str, 
    hnr, plz, ort, geb, ************, tlauf, nlauf, start, tshirt, gruppe, gruppe1, bem, 
    km, password) values ( "
    ;
                
    $sql .= quote_smart($u->user).", ".quote_smart($u->mail).", ".quote_smart($u->vname).", 
    "
    .quote_smart($u->nname).", ".quote_smart($u->str).", ".quote_smart($u->hnr).", 
    "
    .quote_smart($u->plz).", ".quote_smart($u->ort).", ".quote_smart($u->geb).", 
    "
    .quote_smart($u->************).", ".quote_smart($u->tlauf).", ".quote_smart($u->nlauf).", 
    "
    .quote_smart($u->start).", ".quote_smart($u->tshirt).", ".quote_smart($u->gruppe).", 
    "
    .quote_smart($u->gruppe1).", ".quote_smart($u->bem).", ".quote_smart($u->km).", 
    password ('"
    .$u->password."')) ";
                
    $result mysql_query($sql$this->handle);
                if (!
    $result) echo "Fehler newUser";
                return 
    $result;
            }
            
            function 
    updateUser($u) {
                
    $sql  "update teilnehmer set ";
                
    $sql .= " vname = ".quote_smart($u->vname).", nname = ".quote_smart($u->nname).", 
    ort = "
    .quote_smart($u->ort).", ";
                
    $sql .= " str = ".quote_smart($u->str).", hnr = ".quote_smart($u->hnr).", 
    plz = "
    .quote_smart($u->plz).", ";
                
    $sql .= " geb = ".quote_smart($u->geb).", ************ = ".quote_smart($u->************).", 
    tlauf = "
    .quote_smart($u->tlauf).", ";
                
    $sql .= " nlauf = ".quote_smart($u->nlauf).", start = ".quote_smart($u->start).", 
    tshirt = "
    .quote_smart($u->tshirt).", ";
                
    $sql .= " gruppe = ".quote_smart($u->gruppe).", gruppe1 = ".quote_smart($u->gruppe1).", 
    bem = "
    .quote_smart($u->bem).", ";
                
    $sql .= " km = ".quote_smart($u->km).", mail = ".quote_smart($u->mail).", 
    password = password("
    .quote_smart($u->password).") ";
                
    $sql .= " where id = $u->id ";
                
    $result mysql_query($sql$this->handle);
                if (!
    $result) echo "Fehler updateUser";
                return 
    $result;
            }
            
        }
    }
    ?>
    ich hab die dateien schon paar mal durchgesucht und mit den originalen vergleich aber der fehler fällt mir net auf. es muss entweder etwas and er db sein, in der userdbclass oder meinetwegen auch in der userclass, weil ich nur dort was geändert hab. die userclass meinetwegen auch noch:

    PHP-Code:
    <?php
    if (!defined('Z_USERCLASSPHP')) {
        
    define ('Z_USERCLASSPHP''Z_USERCLASSPHP');
        
    class 
    User {
        var 
    $id "";
        var 
    $vname "";
        var 
    $nname "";
        var 
    $ort "";
        var 
    $str "";
        var 
    $hnr "";
        var 
    $plz "";
        var 
    $geb "";
        var 
    $user "";
        var $************ = 
    "";
        var 
    $tlauf "";
        var 
    $nlauf "";
        var 
    $start "";
        var 
    $tshirt "";
        var 
    $password "";
        var 
    $mail "";
        var 
    $gruppe "";
        var 
    $gruppe1 "";
        var 
    $bem "";
        var 
    $km "";
        var 
    $rechte "";

        
            function 
    User ($id='',$vname='',$nname='',$ort='',$str='',$hnr='',$plz='',$geb='',$************='',$tlauf='',
    $nlauf='',$start='',$tshirt='',$user='',$password='',$mail='',$gruppe='',$gruppe1='',
    $bem='',$km='',$rechte=null) {
                
    $this->id $id;
                
    $this->vname $vname;
                
    $this->nname $nname;
                
    $this->ort $ort;
                
    $this->str $str;
                
    $this->hnr $hnr;
                
    $this->plz $plz;
                
    $this->geb $geb;
                
    $this->************ = $************;
                
    $this->tlauf $tlauf;
                
    $this->nlauf $nlauf;
                
    $this->start $start;
                
    $this->tshirt $tshirt;
                
    $this->user $user;
                
    $this->password $password;
                
    $this->mail $mail;
                
    $this->gruppe $gruppe;
                
    $this->gruppe1 $gruppe1;
                
    $this->bem $bem;
                
    $this->km $km;
                
    $this->rechte =$rechte;
                if (
    $rechte != null) {
                    
    $r explode("-",$rechte);
                    foreach (
    $r as $key => $val){
                        
    $this->{$val} = true;
                    }            
                }
            }    
            
        }
    }
    ?>
    Zuletzt geändert von Nurion; 08.01.2006, 23:59.

    Kommentar


    • #3
      Brich deinen Code um, so daß man nicht mehr nach rechts scrollen muß!

      Außerdem darfst du ihn gern aufs Nötigste reduzieren ... kein Mensch braucht die kompletten Klassen ... die für den Login fraglichen Methoden würden genügen.

      Dann wird das vielleicht auch jemand durchlesen ... ich dann vielleicht auch. Bis dahin empfehle ich dir, alle SQL-Queries zu überprüfen und ggf. ans veränderte DB-Layout anzupassen.

      Kommentar


      • #4
        Re: reg.tool funktioniert nicht mehr

        Original geschrieben von Nurion
        jetzt habe ich die datenbank erweitert und entsprechende php-dateien und siehe da
        Wenn du uns noch sagen würdest, was genau du in der DB hinzugefügt und im Code geändert hast, wäre das sicher sehr hilfreich, da ich bezweifel das hier jemand den Originalcode kennt und auch ncoh im Kopf hat.
        mfg - sagg

        Kommentar


        • #5
          Code:
          CREATE TABLE `z_demo_login` (
            `id` int(11) NOT NULL auto_increment,
            `nname` varchar(50) default NULL,
            `vname` varchar(50) default NULL,
            `user` varchar(50) default NULL,
            `mail` varchar(50) default NULL,
            `password` varchar(50) default NULL,
            `rechte` tinytext,
            PRIMARY KEY  (`id`)
          ) TYPE=MyISAM;
          so sah die ursprüngliche db aus...etwas kleiner, klar


          ich hab dann überall dort, wo dieses veriablen vorkamen, den quelltext um meine variablen erweitert. in der userclass.php und in der userdbclass.php

          class User
          function User
          function read/get/check/new/update User, sowie checkMail

          ich muss dazu sagen, dass ich erstmal testweise das feld ort hinzugefügt hatte. soweit sogut. als ich dann die restlichen felder eingefügt hatte klappte der login nicht mehr. kann es an der struktur liegen, sprich müssen die variablen durchgehend in der reihenfolge implementiert werden wie in der db?

          Kommentar


          • #6
            hat keiner ne idee bzw ne antwort auf die frage ob struktur der db und reihenfolge der variablen identisch sein müssen?!?

            Kommentar


            • #7
              Original geschrieben von Nurion
              hat keiner ne idee bzw ne antwort auf die frage ob struktur der db und reihenfolge der variablen identisch sein müssen?!?
              Immer mit der Ruhe.

              Original geschrieben von Nurion
              ich muss dazu sagen, dass ich erstmal testweise das feld ort hinzugefügt hatte. soweit sogut. als ich dann die restlichen felder eingefügt hatte klappte der login nicht mehr.
              Dann fange bei deinem ersten neuen Feld an es in den Klassen hinzuzufügen, und mache bei erfolgreichem Login mit dem nächsten weiter. Somit weisst du letztendlich wo dein Fehler liegt.
              mfg - sagg

              Kommentar


              • #8
                ok, werd mal versuchen das ganze schrit für schritt und feld für feld nochmal neu aufzubauen...bin mal gespannt
                danke jedenfalls

                Kommentar


                • #9
                  konnte mir das leidige suchen ersparen
                  fehler wurde gefunden
                  lag daran dass dsa pw-feld irgendwie plötzlich nur 10 felder lang war, anstatt 50, 100 oder wie auch immer
                  dadurch konnte das pw verschlüsselt nicht richtig umgesetzt werden.
                  das einfach ändern der zahl 10 auf 50 hat abhilfe geschafft.
                  trotzdem danke für eure mühen


                  eine frage hätte ich jedoch noch schnell:
                  wenn man einen wert wie männlich/weiblich oder ne tshirt-grösse über ein formular in der datenbank hinterlegt, kann man dann beim login das ganze auch über einen value-session befehl anzeigen lassen???

                  gruß und schönen abend noch
                  nurion

                  Kommentar


                  • #10
                    ok, dnan fomulier ich das ganze anders:

                    per drop down - auswahl oder radio buttons werden verscheidene werte in einer db hinterlegt. soweit so gut...werde gespeichert.
                    beim einloggen jetzt: wie schaffe ich es, dass jetzt genau die eingetragenen werte angezeigt werden und nicht die standardwerte? kann mann das mittels 'Value' in so ein formular eintragen und dann mittels session den entsprechend ausgewählten wert anzeigen lassen?
                    wenn ja, wie würde der aussehen weil das funktinoiert nicht:

                    PHP-Code:
                    <tr>
                            <td>T-Shirt</td>
                            <td><select name="tshirt" value="<? echo $Session->USER->tshirt; ?>">
                              <option value="">keine Auswahl</option>
                              <option>S</option>
                              <option>M</option>
                              <option>L</option>
                              <option>XL</option>
                              <option>XXL</option>
                            </select></td>
                          </tr>
                    als ich es als value-wert in die erste option eingetragen hab, aht es nämlich auch nicht funktioniert

                    Kommentar

                    Lädt...
                    X