Versio

if else goed of fout?

Overzicht Reageren

Pagina: 1 2 volgende »

Reshadd farid
Redacteur

reshadd farid

05/02/2012 16:04:16
Quote Anchor link
hallo, ik heb een registratie script ik heb alle fouten inmiddels eruit, alleen krijg ik niets in mijn database maar krijg ik wel te zien ''opgegeven email adress is bij ons al bekendgelukt!''

ik vraag me af of de if/else klopt ( en de volgorde uiteraard ) enof mijn query voor de insert wel goed is nu.

als jullie willen kan ik het ook even online zetten,

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
<?php

ini_set('display_errors', 0); // 0 = uit, 1 = aan
        error_reporting(E_ALL);

include ('connect.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST'){

    
                // alles uit de DB halen en in variable zetten
                $chekExist = ("
                              SELECT email, naam, wachtwoord
                              FROM gebruiker
                              WHERE email = '"
. mysql_real_escape_string($_POST['email']) . "'
                              AND naam = '"
. mysql_real_escape_string($_POST['naam']). "'
                              AND wachtwoord = '"
. mysql_real_escape_string($_POST['wachtwoord']). "'
                              "
);
                              
                              // controleren of de query ok was
                              $controle = mysql_query($chekExist);
                              
                              if ($controle === false){
                                  
                                  echo "er is iets fout gegaan in de database";
                              }

                              
                                 $row = mysql_fetch_assoc($controle);                                  
                
                // controleren of gebruiker al bestaat
                    if($row['email'] == $email) {
                    
                        echo "opgegeven email is al bij ons bekend!";
                        
                                }

                              
                              else {
                              
                              $insert = ("
                           INSERT INTO gebruiker (naam, email, wachtwoord)
                           VALUES ('"
. mysql_real_escape_string($_POST['naam'])."',
                           '"
. mysql_real_escape_string($_POST['email']) ."',
                           '"
. mysql_real_escape_string($_POST['wachtwoord']). "'
                           "
) or die (mysql_error());
                                
                                  
                                          
                                           $registreer = mysql_query($insert);
                                          
                                          
                                   }

                                  
                                   if($registreer === false){
                                      
                                       echo "er is iets fout gegaan met het registreren";
                                      
                                       }

                                      
                                       else {
                                          
                                           echo"gelukt!";
                                           }
                                    
    
    }





?>
 
PHP hulp

PHP hulp

25/05/2012 03:22:09
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Erwin H

Erwin H

05/02/2012 16:17:40
Quote Anchor link
Dit is wat je nu doet:
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
if($row['email'] == $email) {
  echo "opgegeven email is al bij ons bekend!";
}
else {
  //insert waaruit je $registreer komt
}
                                  
if($registreer === false){
  echo "er is iets fout gegaan met het registreren";
}
else {
  echo"gelukt!";
}

?>

Als je eerste if dus naar true evalueert wordt er die melding gedaan van dat het email adres al bestaat, maar er wordt verder geen query aangemaakt. $registreer krijgt dus geen waarde.
Vervolgens kijk je of $registreer === false. OMdat $registreer dus geen waarde heeft kom je daar in de else terecht en krijg je dus het bericht "gelukt".
Volgens mij moet die hele tweede if/else dus binnen de else van je eerste:
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($row['email'] == $email) {
  echo "opgegeven email is al bij ons bekend!";
}
else {
  //insert waaruit je $registreer komt
  if($registreer === false){
    echo "er is iets fout gegaan met het registreren";
  }
else {
    echo"gelukt!";
  }
}

                                  

?>
 
Reshadd farid
Redacteur

reshadd farid

05/02/2012 16:31:40
Quote Anchor link
ik krijg nu standaard de fout 'opgegeven email is al bij ons bekend'

heb het nu zo

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
<?php
              // controleren of gebruiker al bestaat
                if($row['email'] == $email) {
  echo "opgegeven email is al bij ons bekend!";
}
else {
  //insert waaruit je $registreer komt
   $insert = ("
                           INSERT INTO gebruiker (naam, email, wachtwoord)
                           VALUES ('"
. mysql_real_escape_string($_POST['naam'])."',
                           '"
. mysql_real_escape_string($_POST['email']) ."',
                           '"
. mysql_real_escape_string($_POST['wachtwoord']). "'
                           "
) or die (mysql_error());
                                
                                  
                                          
                                           $registreer = mysql_query($insert);
                                          
  if($registreer === false){
    echo "er is iets fout gegaan met het registreren";
  }
else {
    echo"gelukt!";
  }
}


?>


Toevoeging op 05/02/2012 16:39:58:

moet ik niet nog een dit weer in een else zetten die na regel 25 begint?
 
Erwin H

Erwin H

05/02/2012 16:52:40
Quote Anchor link
Reshadd farid op 05/02/2012 16:31:40:
ik krijg nu standaard de fout 'opgegeven email is al bij ons bekend'

Dan moet je het dus boven dit stuk zoeken.

Reshadd farid op 05/02/2012 16:31:40:
moet ik niet nog een dit weer in een else zetten die na regel 25 begint?

Denk na voor je iets doet. Waarom denk je dat dit nodig is?
 
Ger van Steenderen

Ger van Steenderen

05/02/2012 18:06:57
Quote Anchor link
Reshadd, je controleert verkeerd.
Kijk eens naar deze code:
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
<?php
$chekExist
= ("
                              SELECT email, naam, wachtwoord
                              FROM gebruiker
                              WHERE email = '"
. mysql_real_escape_string($_POST['email']) . "'
                              AND naam = '"
. mysql_real_escape_string($_POST['naam']). "'
                              AND wachtwoord = '"
. mysql_real_escape_string($_POST['wachtwoord']). "'
                              "
);
                              
                              // controleren of de query ok was
                              $controle = mysql_query($chekExist);
                              
                              if ($controle === false){
                                  
                                  echo "er is iets fout gegaan in de database";
                              }

                              
                                 $row = mysql_fetch_assoc($controle);                                  
                
                // controleren of gebruiker al bestaat
                    if($row['email'] == $email) {
                    
                        echo "opgegeven email is al bij ons bekend!";
                        
?>
                                }

Er gaan een paar dingen mis:
- $email bestaat niet en is dus NULL
- als emailadres, of de gebruikersnaam of het wachtwoord niet bestaan krijg je een leeg resultaat dus terug. Dus $row['email'] is ook NULL
Lijkt me duidelijk.
Daarnaast, als een gebruiker zich registreert met zelfde email adres en gebruikersnaam maar met ander wachtwoord, kan dit gewoon. Is dat wat je wilt?
Gewijzigd op 05/02/2012 18:07:35 door Ger van Steenderen
 
Obelix en Idefix

Obelix en Idefix

05/02/2012 18:16:36
 
- SanThe -

- SanThe -

05/02/2012 18:59:14
Quote Anchor link
Reshadd farid op 05/02/2012 16:04:16:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
ini_set('display_errors', 0); // 0 = uit, 1 = aan
?>


Als je dit op 1 had gezet had je zelf allang de foutmelding gezien.
 
Reshadd farid
Redacteur

reshadd farid

05/02/2012 19:06:53
Quote Anchor link
Ger van Steenderen op 05/02/2012 18:06:57:
Reshadd, je controleert verkeerd.
Kijk eens naar deze code:
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
<?php
$chekExist
= ("
                              SELECT email, naam, wachtwoord
                              FROM gebruiker
                              WHERE email = '"
. mysql_real_escape_string($_POST['email']) . "'
                              AND naam = '"
. mysql_real_escape_string($_POST['naam']). "'
                              AND wachtwoord = '"
. mysql_real_escape_string($_POST['wachtwoord']). "'
                              "
);
                              
                              // controleren of de query ok was
                              $controle = mysql_query($chekExist);
                              
                              if ($controle === false){
                                  
                                  echo "er is iets fout gegaan in de database";
                              }

                              
                                 $row = mysql_fetch_assoc($controle);                                  
                
                // controleren of gebruiker al bestaat
                    if($row['email'] == $email) {
                    
                        echo "opgegeven email is al bij ons bekend!";
                        
?>
                                }

Er gaan een paar dingen mis:
- $email bestaat niet en is dus NULL
- als emailadres, of de gebruikersnaam of het wachtwoord niet bestaan krijg je een leeg resultaat dus terug. Dus $row['email'] is ook NULL
Lijkt me duidelijk.
Daarnaast, als een gebruiker zich registreert met zelfde email adres en gebruikersnaam maar met ander wachtwoord, kan dit gewoon. Is dat wat je wilt?


nee ik wil het juist andersom een wachtwoord kan meerdere malen voorkomen, maar een email adres en gebruikersnaam niet,

hoe kan ik dan kijken of de gebruikersnaam , email al bestaat?

dat is in principe het enige wat hij in het code erboven op moet controleren en als alles goed is inserten

Toevoeging op 05/02/2012 19:09:49:

- SanThe - op 05/02/2012 18:59:14:
Reshadd farid op 05/02/2012 16:04:16:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
ini_set('display_errors', 0); // 0 = uit, 1 = aan
?>


Als je dit op 1 had gezet had je zelf allang de foutmelding gezien.


dat is het probleem ik krijg geen foutmelding alleen
Notice: Undefined variable: email in /Applications/MAMP/htdocs/testsite/registreer.php on line 68
 
- SanThe -

- SanThe -

05/02/2012 19:20:10
Quote Anchor link
Reshadd farid op 05/02/2012 19:06:53:
dat is het probleem ik krijg geen foutmelding alleen
Notice: Undefined variable: email in /Applications/MAMP/htdocs/testsite/registreer.php on line 68


Maar dat vertelt je toch dat die variabele niet bestaat.
Gewijzigd op 05/02/2012 19:23:39 door - SanThe -
 
Ger van Steenderen

Ger van Steenderen

05/02/2012 19:21:21
Quote Anchor link
Als volgt:
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
<?php
$sql
= "SELECT email, naam
    FROM gebruiker
    WHERE
        email='"
. $_POST['email'] . "'
    OR
        naam='"
. $_POST['naam'] . "'";
$result = mysql_query($sql);
if (mysql_num_rows($result)  > 0) {
    echo 'emailadres en/of gebruikersnaam bestaat al';
}

else {
    //gebruiker registreren
}
?>

Even zonder foutafhandeling, het gaat om het idee.
Gewijzigd op 05/02/2012 19:21:59 door Ger van Steenderen
 
- SanThe -

- SanThe -

05/02/2012 19:25:06
Quote Anchor link
Je kan ook die combinatie in mysql UNIQUE maken, dan zal er nooit een dubbele van ontstaan.
 
Ger van Steenderen

Ger van Steenderen

05/02/2012 19:33:39
Quote Anchor link
- SanThe - op 05/02/2012 19:25:06:
Je kan ook die combinatie in mysql UNIQUE maken, dan zal er nooit een dubbele van ontstaan.

Maar wel 1 van de twee
 
Reshadd farid
Redacteur

reshadd farid

05/02/2012 19:35:49
Quote Anchor link
@ger dat doe ik dus altijd normaal gesproken, maar als ik hier dan om hulp vraag is er altijd wel een reactie met niet beveiligd dus ik dacht ik probeer het beveiligd en met foutafhandelingen even zo te doen, en dat lukt nu voor geen meter dus!

een ding wat ik niet snap is, als je normaal gesproken declareert dan doe je

$email = $_POST['email'];

dan heb je dus email uit je form in een $email gezet is dat nu dezelfde als je

('" . mysql_real_escape_string($_POST['naam'])."',

hebt? krijg je dan hetzelfde resultaat?

ik heb nu trouwens dit

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
<?php
include ('connect.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST'){

    
                // alles uit de DB halen en in variable zetten
                $chekExist = ("
                              SELECT email, naam,
                              FROM gebruiker
                              WHERE email = '"
. mysql_real_escape_string($_POST['email']) . "'
                              OR naam = '"
. mysql_real_escape_string($_POST['naam']). "'
                              "
);
                              
                              // controleren of de query ok was
                              $controle = mysql_query($chekExist);
                              
                              if ($controle === false){
                                  
                                  echo "er is iets fout gegaan in de database";
                              }

                                                                                                            
                // controleren of gebruiker al bestaat
                if (mysql_num_rows($controle) > 0) {
  echo "opgegeven email is al bij ons bekend!";
}
else {

//gebruiker registreren

}

?>


@santhe maar wat voor fout krijg ik dan als ik dit in de database doe? kan ik hier dan wel een goede foutafhandeling mee maken?
 
- SanThe -

- SanThe -

05/02/2012 19:36:01
Quote Anchor link
Ger van Steenderen op 05/02/2012 19:33:39:
- SanThe - op 05/02/2012 19:25:06:
Je kan ook die combinatie in mysql UNIQUE maken, dan zal er nooit een dubbele van ontstaan.

Maar wel 1 van de twee


Dat mag toch.
En als dat niet mag maak je die ook UNIQUE.
 
Reshadd farid
Redacteur

reshadd farid

05/02/2012 19:40:06
Quote Anchor link
ik heb trouwens nu als fout dat ik een 1 nodig heb als parameter maar dat ik een boolean terugkrijg,,

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/MAMP/htdocs/testsite/registreer.php on line 65
er is iets fout gegaan met het registreren
 
- SanThe -

- SanThe -

05/02/2012 19:47:57
Quote Anchor link
Je query is blijkbaar mislukt.
 
Ger van Steenderen

Ger van Steenderen

05/02/2012 20:04:25
Quote Anchor link
Reshadd farid op 05/02/2012 19:35:49:
@ger dat doe ik dus altijd normaal gesproken, maar als ik hier dan om hulp vraag is er altijd wel een reactie met niet beveiligd dus ik dacht ik probeer het beveiligd en met foutafhandelingen even zo te doen, en dat lukt nu voor geen meter dus!

Ik bedoelde dat ik de foutafhandeling heb weggelaten.
Quote:
een ding wat ik niet snap is, als je normaal gesproken declareert dan doe je
$email = $_POST['email'];

dan heb je dus email uit je form in een $email gezet is dat nu dezelfde als je

('" . mysql_real_escape_string($_POST['naam'])."',

hebt? krijg je dan hetzelfde resultaat?

Normaal gesproken is dit het aanmaken van onnodige variabelen., maar ............
in dit geval kan je het dus wel op deze manier:
$email = mysql_real_escape_string($_POST['email']);
want je hebt dat namelijk 2 keer nodig
 
Reshadd farid
Redacteur

reshadd farid

05/02/2012 20:04:43
Quote Anchor link
ohgodd de query misluktte omdat er nog een komma achter naam stond *facepalm*

maar nu krijg ik alleen de foutmelding er is iets fout gegaan met registreren ( dus geen andere met index en variables o.i.d )



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
<?php

else {

  //insert waaruit je $registreer komt
   $insert = ("
                           INSERT INTO gebruiker (gebruiker_id, naam, email, wachtwoord)
                           VALUES ('', '"
. mysql_real_escape_string($_POST['naam'])."',
                           '"
. mysql_real_escape_string($_POST['email']) ."',
                           '"
. mysql_real_escape_string($_POST['wachtwoord']). "'
                           "
) or die (mysql_error());
                                
                                  
                                          
                                           $registreer = mysql_query($insert);
                                          
  if($registreer === false){
    echo "er is iets fout gegaan met het registreren";
  }
else {
    echo"gelukt!";
  }


?>
 
Obelix en Idefix

Obelix en Idefix

05/02/2012 20:11:29
Quote Anchor link
Wat doet die "or die" in je query?
 
Reshadd farid
Redacteur

reshadd farid

05/02/2012 20:13:45
Quote Anchor link
dat had ik er in gezet in de hoop dat het ietss maar dan ook iets van een foutmelding gaf maar nee, en ik heb de query in mysql gezet en daar voerde hij gewoon alles in mijn database heb nu de or die ook weggehaald weer en krijg nog steeds er is iets fout geaan met het registreren
 
- SanThe -

- SanThe -

05/02/2012 20:29:00
Quote Anchor link
echo mysql_error() eens.
 

Pagina: 1 2 volgende »



Overzicht Reageren

Get Adobe Flash player