Submit knoppen resulteren in verkeerde actie...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark moes

mark moes

26/03/2009 16:33:00
Quote Anchor link
Hoi,

Ik wil in mijn script op 2 verschillende momenten een submit kunnen doen. Dit werkt alleen niet.
Het moet zo ongeveer gaan:
Aanmelden -> submit
Check door gebruiker -> submit
Verwerk gegevens -> message...

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
    function registerUser()
    {

        try
        {    
            $oForm = new Formulier('Aanmelden');
            $oForm->add( new Text('Gebruikersnaam:', 'naam', 40), 'isText' );
            $oForm->add( new Text('Email:', 'email', 255), 'isEmail' );
            $oForm->add( new Text('Postcode:', 'postcode', 6), 'isPostcode');
            $oForm->add( new Password('Wachtwoord:', 'wachtwoord', 40), array('minLengte', 5));
            $oForm->add( new Password('Herhaal wachtwoord:', 'retypewachtwoord', 40), array('minLengte', 5));
            $oForm->add( new Radio('Geslacht:', 'geslacht', array('Man', 'Vrouw') ), 'verplicht' );
            $oForm->add( new Checkbox('<b>Ja</b> ik ga akkoord met de voorwaarden.', 'voorwaarden', '1'), 'verplicht' );
            $oForm->add( new Submit('aanmelden', 'Aanmelden') );
            $oForm->add( new Reset('wis', 'Wis velden') );
            
            $html = $oForm;
            
            if ($_SERVER['REQUEST_METHOD'] == 'POST')
            {

                if( $oForm->controleerVelden() )
                {

                    if($_POST['wachtwoord'] !== $_POST['retypewachtwoord'])
                       {

                        $html.= 'De wachtwoorden komen niet overeen.';
                    }

                    else
                    {
                          //Session maken van de posts
                        $_SESSION['input']['username'] = $_POST['naam'];
                        $_SESSION['input']['password'] = $_POST['wachtwoord'];
                        $_SESSION['input']['pass_md5'] = md5($_POST['wachtwoord']);
                        $_SESSION['input']['email']    = $_POST['email'];
                        $_SESSION['input']['postcode'] = $_POST['postcode'];
                        $_SESSION['input']['geslacht'] = $_POST['geslacht'];
                        
                        $this->sUsername     = $_SESSION['input']['username'];
                        $this->sPassword     = $_SESSION['input']['password'];
                        $this->sPass_MD5     = $_SESSION['input']['pass_md5'];
                        $this->sEmail         = $_SESSION['input']['email'];
                        $this->sPostcode     = $_SESSION['input']['postcode'];
                        $this->sGeslacht     = $_SESSION['input']['geslacht'];
                        
                        //unset($_SESSION['input']);
                        
                    }
                    if(isset($_POST['aanmelden']))
                    {

                        $html = clsLogin::checkRegister();    
                    }

                    else
                    {
                        if(isset($_POST['Doorgaan']))
                        {

                               $html = clsLogin::verwerkRegister();
                        }
                    }
                }
            }

            return $html;
        }

        catch( Exception $e )
        {

            return '<pre>'.$e->getMessage().'</pre>';
        }
    }

    
    //user check user input
    function checkRegister()
    {
    
        $html = 'Dit is het resultaat van de door u ingevulde gegevens.<br /><br />';
        $html.= 'Naam: '.$this->sUsername.'<br />';
        $html.= 'Email: '.$this->sEmail.'<br />';
        $html.= 'Postcode: '.$this->sPostcode.'<br />';
        $html.= 'Wachtwoord: '.$this->sPassword.'<br />';
        $html.= 'Geslacht: '.$this->sGeslacht.'<br />';
        
            $oForm = new Formulier('Check');
            $oForm->add( new Submit('doorgaan', 'Doorgaan') );
            $html.= $oForm;    

    return $html;
    }
    
    function
verwerkRegister()
    {

         $this->sActcode = clsCode::Randpass(15);
         
         $dConnector = new DbConnect('mark moes');
        $dConnector->DbConnector();
        $dConnector->MySQLquery("INSERT INTO users (
                                        id,
                                        username,
                                        password,
                                        email,
                                        postcode,
                                        city,
                                        country,
                                        geslacht,
                                        activation,
                                        rank,
                                        activation_date,
                                        times_online,
                                        last_online
                                    ) VALUES (
                                        '',
                                        '"
.mysql_real_escape_string($this->sUsername)."',
                                        '"
.mysql_real_escape_string($this->sPass_MD5)."',
                                        '"
.mysql_real_escape_string($this->sEmail)."',
                                        '"
.mysql_real_escape_string($this->sPostcode)."',
                                        'Haulerwijk',
                                        'NL',
                                        '"
.mysql_real_escape_string($this->sGeslacht)."',
                                        '"
.$this->sActcode."',
                                        '00',
                                        NOW(),
                                        '2',
                                        NOW()
                                    )"
); //Insertquery
                                
                 //mail activatiecode, gebruikersnaam en wachtwoord

                $sMsgSub = 'Activatie'.$this->sRoot.'!';
                
                $sMsg = 'Gefeliciteerd!\n\n';
                $sMsg.= 'Uw activatie op '.$this->sRoot.' kan succesvol worden afgerond!\n\n';
                $sMsg.= 'U bent geregistreerd met de volgende gegevens:\n';
                $sMsg.= 'Gebruikersnaam: '.$this->sUsername.'.';
                $sMsg.= 'Wachtwoord: '.$this->sPassword.'.\n';
                $sMsg.= 'Bewaar deze gegevens goed! Ze zijn uniek.\n\n';
                $sMsg.= 'Het enige wat nog moet gebeuren is het activeren van uw account.';
                $sMsg.= 'Dit kan door te klikken op de onderstaande link, waarna u meteen gebruik kunt maken van '.$this->sRoot.'!\n\n';
                $sMsg.= 'http://www.'.$this->sRoot.'?activation='.$this->sActcode.'&&user='.$this->sUsername.'\n\n';
                $sMsg.= 'Veel succes, en tot WWW!\n\n';
                $sMsg.= 'Met vriendelijke groet,\n';
                $sMsg.= 'de webmaster van '.$this->sRoot.'.';
                    
                $mail = new mailer();
                $mail->addReceiver($this->sEmail);
                $mail->setSender();
                $mail->setSubject($sMsgSub);
                $mail->setMessage($sMsg);
                
                $html = $sMsg;
                
                return $html;
    }

?>

Het registreren gaat goed. Velden worden door script gecontroleerd, anders overnieuw invullen.
Vervolgens wordt het resultaat geechoed, gebruiker moet dit checken, en vervolgens doorgaan. Dit gaat ook goed, alleen als de gebruiker klikt op doorgaan, krijg ik het aanmeld formulier weer, met 2 meldingen dat ik 2 velden niet heb ingevoerd. dat gaat dus niet goed, het form moet verzonden worden, en een msg op het scherm komen.

Ter informatie:
Er staat inderdaad session_start() bovenin mijn script, en error reporting staat ook op schreeuwen.

Weet iemand de oplossing?

<b>edit:</b> vraagteken vergeten, lijkt zo onvriendelijk... ;-)
Gewijzigd op 01/01/1970 01:00:00 door Mark moes
 
PHP hulp

PHP hulp

29/03/2024 14:14:15
 
Flip --

Flip --

28/03/2009 19:09:00
Quote Anchor link
ik heb niet naar je code gekeken maar ik kan je zo zeggen hoe je de verschillen tussen verschillende forms kan bepalen (en dit moet dan uiteindelijk naar je oplossing leiden).

Je kan kijken naar wat voor data is gevuld. Dit raad ik niet aan omdat de gebruiker dan wel die velden ingevuld moet hebben.

Je kan kijken naar de waarde van de submit button. name="submit" value="Login" en bij form 2: name="submit" value="Registreer". Dit werkt meestal goed genoeg.

In het geval dat je geen submit button hebt (ja het is mogelijk om dat toch te submitten) kan je een form een hidden value meegeven dat aangeeft welk form gesubmit heeft.

Ga er trouwens vanuit dat de gebruiker (niet de doorsnee gebruiker) je form kan aanpassen en submitten wat hij/zij maar wil.
 
Mark moes

mark moes

28/03/2009 19:32:00
Quote Anchor link
@Flip,
wat je zegt, klopt, en werkt ook hier... Maar waar t om gaat is dat er dus wel gesubmit word, alleen naar de verkeerde locatie. Ik snap niet hoe ik weer terug kom bij het eerste form.
 
Flip --

Flip --

28/03/2009 19:59:00
Quote Anchor link
ik moet er zo vandoor, dus ik kijk/type zo lang ik kan

wat ik vreemd vind is regel 17, regel 25
$html is een object en in regel 25 ga je een object aan een string plakken?

is het object Formulier is dat je zelf hebt gemaakt of ergens vandaan hebt gehaald?

staat deze code weer in een ander object? ik neem aan van wel regel 37 gebruik van $this

regel 51 & regel 53: je kan elseif gebruiken hier denk ik

ik denk dat de locatie waarnaar je formulier wordt gesubmit bepaald wordt in het object Formulier. Althans als (vanaf regel 6) dit het formulier is wat je bedoelt.

Zou handig zijn als je:
* het hele object zou laten zien (ik refereer aan regel 37)
* het object Formulier zou laten zien
* de pagina waar deze objecten worden aangemaakt (dus een nieuwe copy van de class)

... kan posten

mijn tijd is nu op, hopelijk heb je hier wat aan
 
Mark moes

mark moes

30/03/2009 22:04:00
Quote Anchor link
Ik heb dat object inderdaad expres in een string staan, zodat ik dat allemaal in een keer kan returnen. Die tweede html op regel 25 is een foutmelding, zoals je wel hebt gezien waarschijnlijk :P. Je kunt toch niet 2 dingen returnen? anders maak ik er van: return $oForm en return $html.

Gezien die $this op regel 37, ik heb de variabelen boven aan de class gezet, en dan moet je toch this gebruiken om de variabelen ook in verschillende functies te gebruiken?

Nou ja, ik laat je de hele class zien:

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
<?php

class clsLogin
{
     static public
        $sRoot,
        $sUsername,
        $sPassword,
        $sPass_MD5,
        $sEmail,
        $sPostcode,
        $sGeslacht;
    
    public function getSettings()
    {

        //settings ophalen uit SystemComponent
        $aSettings = SystemComponent::getSettings();
        $this->sRoot = $aSettings['root'];        
    }

    
     
     //Registreren nieuwe gebruikers
     //Outputs $html
     //Needs: !! session_start() !!

    function registerUser()
    {

        try
        {    
            $oForm = new Formulier('Aanmelden');
            $oForm->add( new Text('Gebruikersnaam:', 'naam', 40), 'isText' );
            $oForm->add( new Text('Email:', 'email', 255), 'isEmail' );
            $oForm->add( new Text('Postcode:', 'postcode', 6), 'isPostcode');
            $oForm->add( new Password('Wachtwoord:', 'wachtwoord', 40), array('minLengte', 5));
            $oForm->add( new Password('Herhaal wachtwoord:', 'retypewachtwoord', 40), array('minLengte', 5));
            $oForm->add( new Radio('Geslacht:', 'geslacht', array('Man', 'Vrouw') ), 'verplicht' );
            $oForm->add( new Checkbox('<b>Ja</b> ik ga akkoord met de voorwaarden.', 'voorwaarden', '1'), 'verplicht' );
            $oForm->add( new Submit('aanmelden', 'Aanmelden') );
            $oForm->add( new Reset('wis', 'Wis velden') );
            
            $html = $oForm;
            
            if ($_SERVER['REQUEST_METHOD'] == 'POST')
            {

                if( $oForm->controleerVelden() )
                {

                    if($_POST['wachtwoord'] !== $_POST['retypewachtwoord'])
                       {

                        $html.= 'De wachtwoorden komen niet overeen.';
                    }

                    else
                    {
                          //Session maken van de posts
                        $_SESSION['input']['username'] = $_POST['naam'];
                        $_SESSION['input']['password'] = $_POST['wachtwoord'];
                        $_SESSION['input']['pass_md5'] = md5($_POST['wachtwoord']);
                        $_SESSION['input']['email']    = $_POST['email'];
                        $_SESSION['input']['postcode'] = $_POST['postcode'];
                        $_SESSION['input']['geslacht'] = $_POST['geslacht'];
                        
                        $this->sUsername     = $_SESSION['input']['username'];
                        $this->sPassword     = $_SESSION['input']['password'];
                        $this->sPass_MD5     = $_SESSION['input']['pass_md5'];
                        $this->sEmail         = $_SESSION['input']['email'];
                        $this->sPostcode     = $_SESSION['input']['postcode'];
                        $this->sGeslacht     = $_SESSION['input']['geslacht'];
                        
                        //unset($_SESSION['input']);
                        
                    }
                    if(isset($_POST['aanmelden']))
                    {

                        $html = clsLogin::checkRegister();    
                    }

                    else
                    {
                        if(isset($_POST['Doorgaan']))
                        {

                               $html = clsLogin::verwerkRegister();
                        }
                    }
                }
            }

            return $html;
        }

        catch( Exception $e )
        {

            return '<pre>'.$e->getMessage().'</pre>';
        }
    }

    
    //user check user input
    function checkRegister()
    {
    
        $html = 'Dit is het resultaat van de door u ingevulde gegevens.<br /><br />';
        $html.= 'Naam: '.$this->sUsername.'<br />';
        $html.= 'Email: '.$this->sEmail.'<br />';
        $html.= 'Postcode: '.$this->sPostcode.'<br />';
        $html.= 'Wachtwoord: '.$this->sPassword.'<br />';
        $html.= 'Geslacht: '.$this->sGeslacht.'<br />';
        
            $oForm = new Formulier('Check');
            $oForm->add( new Submit('doorgaan', 'Doorgaan') );
            $html.= $oForm;    

    return $html;
    }
    
    function
verwerkRegister()
    {

         $this->sActcode = clsCode::Randpass(15);
        
         $dConnector = new DbConnect('mark moes');
        $dConnector->DbConnector();
        $dConnector->MySQLquery("INSERT INTO users (
                                        id,
                                        username,
                                        password,
                                        email,
                                        postcode,
                                        city,
                                        country,
                                        geslacht,
                                        activation,
                                        rank,
                                        activation_date,
                                        times_online,
                                        last_online
                                    ) VALUES (
                                        '',
                                        '"
.mysql_real_escape_string($this->sUsername)."',
                                        '"
.mysql_real_escape_string($this->sPass_MD5)."',
                                        '"
.mysql_real_escape_string($this->sEmail)."',
                                        '"
.mysql_real_escape_string($this->sPostcode)."',
                                        'Haulerwijk',
                                        'NL',
                                        '"
.mysql_real_escape_string($this->sGeslacht)."',
                                        '"
.$this->sActcode."',
                                        '00',
                                        NOW(),
                                        '2',
                                        NOW()
                                    )"
); //Insertquery
                                
                 //mail activatiecode, gebruikersnaam en wachtwoord

                $sMsgSub = 'Activatie'.$this->sRoot.'!';
                
                $sMsg = 'Gefeliciteerd!\n\n';
                $sMsg.= 'Uw activatie op '.$this->sRoot.' kan succesvol worden afgerond!\n\n';
                $sMsg.= 'U bent geregistreerd met de volgende gegevens:\n';
                $sMsg.= 'Gebruikersnaam: '.$this->sUsername.'.';
                $sMsg.= 'Wachtwoord: '.$this->sPassword.'.\n';
                $sMsg.= 'Bewaar deze gegevens goed! Ze zijn uniek.\n\n';
                $sMsg.= 'Het enige wat nog moet gebeuren is het activeren van uw account.';
                $sMsg.= 'Dit kan door te klikken op de onderstaande link, waarna u meteen gebruik kunt maken van '.$this->sRoot.'!\n\n';
                $sMsg.= 'http://www.'.$this->sRoot.'?activation='.$this->sActcode.'&&user='.$this->sUsername.'\n\n';
                $sMsg.= 'Veel succes, en tot WWW!\n\n';
                $sMsg.= 'Met vriendelijke groet,\n';
                $sMsg.= 'de webmaster van '.$this->sRoot.'.';
                    
                $mail = new mailer();
                $mail->addReceiver($this->sEmail);
                $mail->setSender();
                $mail->setSubject($sMsgSub);
                $mail->setMessage($sMsg);
                
                $html = $sMsg;
                
                return $html;
    }
    
    //Activeren nieuwe account
    function activationUser()
    {

        if(!empty ($_GET['user']))
        {

            $sUsername = $_GET['user'];
        }

        
        $connector = new DbConnect('mark moes'); //Select the db..
        $connector->DbConnector(); //make connection
        $aRow = $connector->fetchArray($connector->MySQLquery("SELECT actcode FROM users WHERE username = '$sUsername' LIMIT 1")); //Selectquery
        
        if($_GET['activation'] == $aRow['actcode'])
        {

            $connector->MySQLquery("UPDATE users SET actcode = '1' LIMIT 1"); //Updatequery
            
            if($connector->MySQLquery)
            {

                $html = 'De activatie van uw account is voltooid.\n';
                $html.= 'U kunt nu inloggen met de volgende gegevens:\n\n';
                $html.= 'Gebruikersnaam:  <b>'.$sUsername.'</b>\n';
                $html.= 'Wachtwoord:  <b>'.$sPass_noMD5.'</b>\n\n';
                $html.= 'Veel succes!';
            }
        }

        else
        {
            $html = 'De activatiecode komt niet voor in dit systeem of niet in combinatie met uw gebruikersnaam.';    
        }

        return $html;
    }

    
    //Inloggen
    function loginUser()
    {

        try
        {    
            $oForm = new Formulier('Aanmelden');
            $oForm->add( new Text('Gebruikersnaam:', 'gebruikersnaam', 40), 'isAlnum' );
            $oForm->add( new Password('Wachtwoord:', 'wachtwoord', 40), array('minLengte', 5));
            $oForm->add( new Submit('aanmelden', 'Aanmelden') );
            $oForm->add( new Reset('wis', 'Wis velden') );
        }

        catch( Exception $e )
        {

            return '<pre>'.$e->getMessage().'</pre>';
        }

        
        $sUsername = $_POST['gebruikersnaam'];
        
        $connector = new DbConnect('mark moes'); //Select the db..
        $connector->DbConnector(); //make connection
        $aRow = $connector->fetchArray($connector->MySQLquery("SELECT username, password FROM users WHERE username = '$sUsername' LIMIT 1")); //Selectquery
        
        if(md5($_POST['wachtwoord']) !== $aRow['password'])
        {

            return false;
        }
        
    }
}


?>
 



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.