login script met if -1 fout

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerhard timmerman

gerhard timmerman

02/04/2012 09:50:49
Quote Anchor link
ik ben bezig met het maken van een login script. IK heb nu de stored procedure werkend maar de output parameter werkt nog niet goed. hij geeft altijd login gelukt aan. terwijl als value relatieid -1 hij dit niet mag doen. ook als ik het comando print relatieid doe krijg ik niks in beeld. wat zou dit kunnen wezen. Verder heb ik ook het probleem dat hij als je geen wachtwoord of gebruikersnaam invoert hem toch nog uitvoerd. Wie kan me hier bij helpen.
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
<?php
error_reporting(-1);
 ini_set('display_errors', 1);
try {
$db = new PDO('mssql:host=localhost\snelstart;dbname=SluisWWW','test','*********');

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
session_start( );
 
$stmt = $db->prepare("EXECUTE spMagInvoeren ?,?,?,?,?,?,?");
    

    if (!$stmt) {
  // Handle errors
        }

        $username = $_POST['username'];
        $wachtwoord = $_POST['wachtwoord'];
        $ip = $_SERVER["REMOTE_ADDR"];
        $computernaam = php_uname('n');
        $sessieid = session_id();
            
    $stmt->bindValue(1 ,$username, PDO::PARAM_STR);
    $stmt->bindValue(2 ,$wachtwoord);
    $stmt->bindValue(3 ,$ip);
    $stmt->bindValue(4 ,$computernaam);
    $stmt->bindValue(5 ,$sessieid);
    $stmt->bindParam(6 ,$poging);
    $stmt->bindParam(7 ,$relatieid, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
if ( $username == "" ) {
    echo "<font color='red'>Vul geldige gebruikersnaam in!</font><br>";
header("refresh:5;url=/login/");
    $db = null;
    }
    
    
if ( $wachtwoord == "" ) {
    echo "<font color='red'>Vul geldig wachtwoord in!</font><br>";
header("refresh:5;url=/login/");
    $db = null;
    }

        $stmt->execute();    
    

if ( $relatieid == "-1" ) {
    echo "inloggen mislukt />";
    $db = null;
    }

echo "<font color='green'>inloggen gelukt</font>";


    
}

catch(PDOException $e)
    {

    echo $e->getMessage();
    }


    setcookie("TestCookie", $username);

    
        
    
?>
 
PHP hulp

PHP hulp

26/04/2024 03:07:46
 
Bart V B

Bart V B

02/04/2012 10:02:12
Quote Anchor link
Je script logica zit een beetje door elkaar. :P
Je voert eerst je query uit en dan ga je wat controles uitvoeren.
En dat is natuurlijk fout.

Logischer is om het zo te doen:
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
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

   // eerst de controlle of alles is ingevult.
      // iets fout error weergeven
   // query uitvoeren
      // als daar wat mis gaat dan ook error weergeven
   // ingelogd, dan session, koekje aanmaken.

   // alles ok, header doorsturen naar beveiligde pagina..


}
?>
 
Gerhard timmerman

gerhard timmerman

02/04/2012 10:15:49
Quote Anchor link
ik snap niet helemaal hoe je dit nu bedoelt. maar de sessie wil ik expres al direct starten waar daar gaat een controle op zo vaak verkeerd ingelogd zeg maar. dat je per sessie maar 5 keer verkeerd in kan loggen.

en dan zit ik nog van dat ik die output parameter nog niet in het script kan krijgen :(
Gewijzigd op 02/04/2012 10:16:59 door gerhard timmerman
 
Bart V B

Bart V B

02/04/2012 10:27:17
Quote Anchor link
Het heeft niets met session te maken. Dat kan gewoon ook helemaal, daar niets mis mee.

Maar je logica zit niet handig in elkaar zoals ik hierboven laat zien, dwing je het af dat alles (user input) eerst word gecontroleerd, en vervolgens kan je die gaan uitvoeren tegen je query. Als de query mislukt dan geef je een errror melding. En daar zet je dan 'het aantal keer proberen' in.

Als het dan allemaal goed gaat, dan pas iets doen met een session token maken die je controleerd op je beveiligde pagina.

Wat jij doet is eerst een query uitvoeren, en vervolgens gaan controleren op user input. Als dat klopt, dan kan je je pas druk maken op de output parameter.


Even een voorzetje gemaakt.
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
<?php
session_start();
$sessieid = session_id();
error_reporting(-1);
ini_set('display_errors', 1);

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

     $username = $_POST['username'];
     $wachtwoord = $_POST['wachtwoord'];
     $ip = $_SERVER["REMOTE_ADDR"];
     $computernaam = php_uname('n');
    
     if(trim($username) == '')
     {

        echo "<font color='red'>Vul geldige gebruikersnaam in!</font><br>";
        header("refresh:5;url=/login/");
     }
    
    
     if(trim($wachtwoord) == '')
     {

        echo "<font color='red'>Vul geldige wachtwoord in!</font><br>";
        header("refresh:5;url=/login/");
     }

    
    
    $db = new PDO('mssql:host=localhost\snelstart;dbname=SluisWWW','test','*********');
    
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $stmt = $db->prepare("EXECUTE spMagInvoeren ?,?,?,?,?,?,?");
    
    $stmt->bindValue(1 ,$username, PDO::PARAM_STR);
    $stmt->bindValue(2 ,$wachtwoord);
    $stmt->bindValue(3 ,$ip);
    $stmt->bindValue(4 ,$computernaam);
    $stmt->bindValue(5 ,$sessieid);
    $stmt->bindParam(6 ,$poging);
    $stmt->bindParam(7 ,$relatieid, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);

    $stmt->execute();
    
    if(!$stmt)
    {

        // hier foutmelding doen..
    }
    else
    {
        setcookie("TestCookie", $username);
        // redirecten
        exit();
    }
    
    
}

?>
Gewijzigd op 02/04/2012 10:43:48 door Bart V B
 
Gerhard timmerman

gerhard timmerman

02/04/2012 10:37:58
Quote Anchor link
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
<?php
error_reporting(-1);
 ini_set('display_errors', 1);
try {
$db = new PDO('mssql:host=localhost\snelstart;dbname=SluisWWW','test','*****');

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
session_start( );

$username = $_POST['username'];
        $wachtwoord = $_POST['wachtwoord'];
        $ip = $_SERVER["REMOTE_ADDR"];
        $computernaam = php_uname('n');
        $sessieid = session_id();


        
    if ( $username == "" ) {
    echo "<font color='red'>Vul geldige gebruikersnaam in!</font><br>";
header("refresh:5;url=/login/");
    $db = null;
    }
    
    
if ( $wachtwoord == "" ) {
    echo "<font color='red'>Vul geldig wachtwoord in!</font><br>";
header("refresh:5;url=/login/");
    $db = null;
    }
    
        
        
        
$stmt = $db->prepare("EXECUTE spMagInvoeren ?,?,?,?,?,?,?");
    



    
            
    $stmt->bindValue(1 ,$username, PDO::PARAM_STR);
    $stmt->bindValue(2 ,$wachtwoord);
    $stmt->bindValue(3 ,$ip);
    $stmt->bindValue(4 ,$computernaam);
    $stmt->bindValue(5 ,$sessieid);
    $stmt->bindParam(6 ,$poging);
    $stmt->bindParam(7 ,$relatieid, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);

        $stmt->execute();    



if ( $relatieid == "-1" ) {
    echo "inloggen mislukt />";
    $db = null;
    }

echo "<font color='green'>inloggen gelukt</font>";


    
}

catch(PDOException $e)
    {

    echo $e->getMessage();
    }


    setcookie("TestCookie", $username);

    
        
    
?>


oke ik heb nu het werkend van de gebruikersnaam en wachtwoord als deze er niet inzitten slaat hij het neit op. nu moet ik alleen nog dat met -1 voor elkaar krijgen met de output parameter dus.
Gewijzigd op 02/04/2012 10:38:26 door gerhard timmerman
 
Bart V B

Bart V B

02/04/2012 10:44:14
Quote Anchor link
Ow kijk even naar mijn opzetje in mijn edit.
 
Gerhard timmerman

gerhard timmerman

02/04/2012 10:51:04
Quote Anchor link
gaat niks fout als ik dit doe het gaat puur denk ik dat ik iets moet doen om die parameter naar buiten toe te krijgen.
Gewijzigd op 02/04/2012 11:07:23 door gerhard timmerman
 
Bart V B

Bart V B

02/04/2012 11:09:20
Quote Anchor link
Ok en als je het zo doet?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ( $relatieid == -1 ) {

}

?>
 
Gerhard timmerman

gerhard timmerman

02/04/2012 11:14:38
Quote Anchor link
met dit is hij altijd goed ook al is die fout

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
    if( $relatieid == -1)
    {
      echo "fout";
    }
    else
    echo "goed";
    {

plus dat ik er net achter kom dat hij ook niks meer in database zet maar dat zal komen omdat je de values na een prepare pas moet aanroepen
Gewijzigd op 02/04/2012 11:25:06 door gerhard timmerman
 
Bart V B

Bart V B

02/04/2012 11:25:42
Quote Anchor link
Volgens mij zit er iets fout op deze regel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$stmt
->bindParam(7 ,$relatieid, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
?>


Op php.net zie ik daar nog een nummer staan achter PDO::PARAM_INPUT_OUTPUT, 12
http://php.net/manual/en/pdostatement.bindparam.php
 
Gerhard timmerman

gerhard timmerman

02/04/2012 11:28:57
Quote Anchor link
ow sorry ik had execute programelijk weg gehaald dus hij vult het wel in de database. ja dat kan kloppen maar dan zou het een veld wezen waar twaalf karakters in mogen en is niet verplicht na mijn weten. maar ik krijg in de database ook nog steeds ak geen wachtwoord invoer wel de foutmelding in php maar in de datbase komt hij ook nog te staan
Gewijzigd op 02/04/2012 11:38:59 door gerhard timmerman
 
Bart V B

Bart V B

02/04/2012 11:40:08
 
Gerhard timmerman

gerhard timmerman

02/04/2012 11:43:11
Quote Anchor link
tja maar hoe haal ik die bug er uit er zou nou toch wel eens een oplossing wezen voor php 5.2 voor dit probleem
Gewijzigd op 02/04/2012 11:59:29 door gerhard timmerman
 
- SanThe -

- SanThe -

02/04/2012 12:17:27
Quote Anchor link
Zet na elke header() een exit() neer. Nu loopt je script gewoon nog lekker door.
 
Gerhard timmerman

gerhard timmerman

02/04/2012 13:05:11
Quote Anchor link
bedankt nu is 1 probleem afgevinkt nu zit ik nog met die output paramater dat deze in het script komt dat hij relatieid uit kan lezen
 



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.