Login class geeft geen fout

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SilverWolf NL

SilverWolf NL

09/12/2009 20:07:00
Quote Anchor link
Ik ben bezig met een login class, en op dit moment krijg ik geen fout als ik probeer te installeren (dmv de install functie dan), maar de informatie die ik erin wil zetten, komt niet in de database... Ik denk dat het aan de mysqli ligt, maar ik weet het niet zeker. In de error log staat niets. Zou iemand een tip kunnen geven wat het zou kunnen zijn? Verder is dit mijn eerste class, dus graag ook nog wat tips over wat beter zou kunnen ;)

Als er vragen zijn over het script, omdat iets niet duidelijk is, stel ze gerust!

Ik heb de functies die bij het installeren niet worden gebruikt eruit gehaald.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?PHP
error_reporting(E_ALL);

class UserAuthorization extends MySQLi{
    private $MySQL_HOST="127.0.0.1";
    private $MySQL_USER="root";
    private $MySQL_PASS="";
    private $MySQL_DB  ="cms_db";
    private $ADMIN_MAIL="administrator@emailadress.com";
    //If you want to recieve emails from all the errors, just edit the value below to true (without quotes!)
    private $mail_admin_on_error=false;
    private $instanceName="Website name for error logging (so the admin knows whats site to look at!)";
    ##########################
    private $dbCon;         ##
    private $RemAdr;        ##
    private $cookieData;    ##
    public  $returndata;    ##
    ##########################

    
    public function __construct($todo,$data=""){
        $this->RemAdr=md5($_SERVER['REMOTE_ADDR']);
        $this->cookieData = (isset($_COOKIE[$this->RemAdr])) ? $_COOKIE[$this->RemAdr] : "";
        
        parent::__construct($this->MySQL_HOST, $this->MySQL_USER, $this->MySQL_PASS, $this->MySQL_DB);

        if(mysqli_connect_error()){
            $this->LogWrite("[".date("d-m-Y H:i:s")."] -> 'Connection error (".mysqli_connect_errno().") ".mysqli_connect_error())."\r\n";
        }

        
        $this->$todo($data);
    }

    
    public function getdata(){
        return $this->returndata;
    }

    
    private function LogWrite($data){
        if($this->mail_admin_on_error){
            mail($this->ADMIN_MAIL,"Error at webserver [".$this->instanceName."]",$data);
        }

        $fh=fopen("errorLog.txt","a");
        if(!fwrite($fh,$data)){
            $this->returndata="There went something wrong, a mail has been sent to the Administrator.";
            exit();
        }
else{
            die("There was an error, and the errorlog could not be updated. The server administrator has been mailed.");
        }
    }

    
    private function executeQuery($sql,$type){
        $sql=parent::escape_string($sql);
        if($type==="get"){
            if($res=parent::query($sql)){
                $rows=parent::field_count($res);
                return $rows;
            }
else{
                $this->LogWrite(stripslashes("[".date("d-m-Y H:i:s")."] -> 'Could not execute mysql \"get\" query'\r\n"));
                exit();
                return false;
            }
        }

        
        elseif($type==="send"){
            if($res=parent::query($sql)){
                $this->LogWrite(stripslashes("[".date("d-m-Y H:i:s")."] -> 'Could not execute mysql \"send\" query'\r\n"));
                exit();
                return false;
            }
else{
                return true;
            }
        }
else{
            $this->LogWrite("[".date("d-m-Y H:i:s")."] -> 'Wrong parameter used on executeQuery function'\r\n");
            exit();
            return false;
        }
    }

    
    //...
    
    private function install($data){
        $sql1="INSERT INTO tblUsers VALUES('Administrator','".md5($data)."','0')";
        $sql2="INSERT INTO tblLoggedIn VALUES('".$this->RemAdr."',1,'".date("Y-m-d H:i:s",strtotime("+3 week"))."')";
        if($this->executeQuery($sql1,"send")&&$this->executeQuery($sql2,"send")){
            setcookie($this->RemAdr,true,time()+604800);
            $this->returndata="Installation succesful!";
            return true;
        }
else{
            $this->returndata="Installation failed...";
            return false;
        }
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door SilverWolf NL
 
PHP hulp

PHP hulp

03/12/2021 08:27:54
 
SilverWolf NL

SilverWolf NL

14/12/2009 10:42:00
Quote Anchor link
schopje?
 
TJVB tvb

TJVB tvb

14/12/2009 10:48:00
Quote Anchor link
zet behalve je error_reporting ook even deze regel: ini_set('display_errors',1);
Dan weet je zeker dat het zeker dat de errors ook te zien zijn.
 
SilverWolf NL

SilverWolf NL

14/12/2009 16:31:00
Quote Anchor link
Neen, hij geeft nog steeds helemaal niets...

Edit:
Ik ben er gedeeltelijk uit. Het probleem was dat de methode parent::query(); ook true teruggeeft, als er een fout in de sql zit. parent::error(); werkt niet, en ik heb een omweg gevonden via:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?PHP
if(mysqli_error($this)){
  $a="Error [".mysqli_errno($this)."]: ".mysqli_error($this);
  die($a);
}

?>


Toen bleek dat ik real_escape op de verkeerde plaats had staan (alle quotes van de strings worden nu ook geescaped), dus heb ik die regel gecomment. Toen kreeg ik de echte error: ik was blijkbaar aan het slapen toen ik de code geschreven had, omdat ik een veld te weinig had gedaan in de query :P.

Probleem dus opgelost... (moet wel nog even die errorafhandeling anders maken ;) )
Gewijzigd op 01/01/1970 01:00:00 door SilverWolf NL
 
SilverWolf NL

SilverWolf NL

16/12/2009 18:58:00
Quote Anchor link
Ik zit nu met een ander soort probleem. Als de class alles heeft gedaan, dan wordt de data weggeschreven naar een locale variable. Nu wil ik graag een zo gebruikersvriendelijk mogelijk script schrijven, en mijn idee was om een extra parameter mee te geven, en dan een variable te maken die hij terugstuurt. Hoe moet ik dit aanpakken? Ik kan het (proberen) met globals, maar ik heb gehoord dat die afgeraden worden. Waarom? En hoe zou het dan wel moeten? Ik heb ook iets gehoord uit C++, dat als je $a=&$b doet, dat als je $b dan veranderd, je $a ook veranderd. Hoe zit/werkt dit?

Alvast bedankt voor de hulp ;)
 
Jelmer -

Jelmer -

16/12/2009 19:46:00
Quote Anchor link
Globals zijn niet betrouwbaar omdat alle code in je code (dus ook externe code, libraries die je bijvoorbeeld van anderen gebruikt of ooit wil gebruiken) globals kan uitlezen en aanpassen.

By reference doorgeven kan wel, en is redelijk normaal in PHP (veel functies doen het voor extra informatie)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

function do_something(&$error)
{

    $error = 'Missing question';
}


$message = 24;
echo $message; // 24

do_something($message);
echo $message; //Missing question
?>
 
SilverWolf NL

SilverWolf NL

17/12/2009 08:05:00
Quote Anchor link
Dankje, dat is precies wat ik zocht!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.