De foutmelding op een andere pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rutje1

rutje1

23/10/2007 19:30:00
Quote Anchor link
Hallo,

Bij veel (alle) formulieren zoals bijv. een mailpagina krijg je als je iets fout doet een foutmelding (bijv. naam vergeten), maar die verschijnt dan op een blanke pagina.

Bijvoorbeeld:

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
<?php
error_reporting(E_ALL);
include('verbind.php');
    if(isset($_POST['registreer'])){

        function
email_validator($email){
            if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
               {
$geldig = 'ja';   }
           else{$geldig = 'nee';}
        return $geldig;
        }
        function
email_check($email){
                $email_query = "SELECT gebruiker_email FROM gebruiker WHERE gebruiker_email='".$email."';";
                $email_sql   = mysql_query($email_query)or die(mysql_error());
                if(mysql_num_rows($email_sql) == 0)
                    {
$bezet =  'nee';}
                else{$bezet =  'ja' ;}
                return $bezet;
        }
        function
gebruikersnaam_check($gebruikersnaam){
                $gebruikersnaam_query = "SELECT gebruiker_naam FROM gebruiker WHERE gebruiker_naam='".$gebruikersnaam."';";
                $gebruikersnaam_sql   = mysql_query($gebruikersnaam_query)or die(mysql_error());
                if(mysql_num_rows($gebruikersnaam_sql) == 0)
                    {
$bezet =  'nee' ;}
                else{$bezet =  'ja';}  
                return $bezet;
        }


            if(trim($_POST['gebruikersnaam']) == ""){
                    echo 'U heeft geen gebruikersnaam ingevuld';
            }
elseif(gebruikersnaam_check($_POST['gebruikersnaam']) == 'ja'){
                echo 'Deze gebruikersnaam is al in gebruik, kies a.u.b een ander.';
               }
elseif($_POST['wachtwoord1'] != $_POST['wachtwoord2']){
                 echo 'De opgegeven wachtwoorden komen niet overeen';
               }
elseif($_POST['wachtwoord1'] == ""){
                 echo 'Er zijn geen wachtwoord<b>en</b> opgegeven';
               }
elseif(email_validator($_POST['emailadres']) == 'nee'){
                   echo 'Het ingevulde emailadres is niet geldig';
               }
elseif(email_check($_POST['emailadres']) ==  'ja'){
                   echo 'Er is al iemand geregistreerd met dit emailadres.';
               }
else{
                    $query = "INSERT INTO gebruiker
                              (gebruiker_naam, gebruiker_wachtwoord, gebruiker_email)
                              VALUES
                              ('"
.mysql_real_escape_string($_POST['gebruikersnaam'])."',
                                '"
.md5($_POST['wachtwoord1'])."',
                                '"
.$_POST['emailadres']."');";
                   $sql = mysql_query($query)or die(mysql_error());
                echo 'U bent succesvol aangemeld. Hieronder kunt u inloggen:';
                include('inloggen.php');              
               }
}
else{

    ?>

<form action="registreren.php" method="POST">
<table>
<tr><td>Gebruikersnaam:</td><td><input type="text" name="gebruikersnaam" value=""></td></tr>
<tr><td>Wachtwoord:</td><td><input type="password" name="wachtwoord1" value=""></td></tr>
<tr><td>Wachtwoord nogmaals:</td><td><input type="password" name="wachtwoord2" value=""></td></tr>
<tr><td>Emailadres:</td><td><input type="text" name="emailadres" value=""></td></tr>
<tr><td></td><td><input type="submit" name="registreer" value="Aanmelden">
</table>
</form>    
<?php
}

?>


Wanneer bijv. de wachtwoorden niet overeen komen krijg ik dit op een andere pagina te zien. Niet op de pagina van het formulier zelf.
Hoe kan ik het script aanpassen om foutmeldingen te plaatsen onder / naast het formulier en niet op een andere pagina?

Mvg Rutje1

p.s. ik had dit artikel gevonden maar ik kom er helaas niet verder mee, moeilijk om in de code hierboven in te voegen.
 
PHP hulp

PHP hulp

21/11/2024 19:15:07
 
Rutje1

rutje1

24/10/2007 13:23:00
Quote Anchor link
Ik ben ondertussen nog een ander soort script tegen gekomen waarbij foutmeldingen & de bedank tekst boven de velden worden geplaatst.

Ik kom er niet uit waarom dit op die plek wordt geplaatst.
Kan iemand mij dit uitleggen:
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
<?php
if (isset($_POST['submitted'])) {
 
    $errors = array();
        require_once ('mysql_connect.php');
if (eregi('^[[:alnum:]\.\'\-]{4,30}$', stripslashes(trim($_POST['username']))) ) {
        $user = mysql_real_escape_string($_POST['username']);
        $query = "SELECT username FROM users WHERE username = '$user'";
        $result = @mysql_query($query);
        $num = @mysql_num_rows($result);
        
        if ($num> 0) {
            $errors[] = '<font color="red">The username you have chosen has already been taken, please try again.</font>';
        }
else {
            $username = mysql_real_escape_string($_POST['username']);
        }
    }
else {
        $errors[] = '<font color="red">Please provide a valid username between 4 and 30 characters.</font>';
    }

if (!eregi('^[a-zA-Z]+[a-zA-Z0-9_-]*@([a-zA-Z0-9]+){1}(\.[a-zA-Z0-9]+){1,2}', stripslashes(trim($_POST['email'])) )) {
        $errors[] = '<font color="red">Please provide a valid email address.</font>';
    }
else {
        $email = mysql_real_escape_string($_POST['email']);
    }

if (!empty($_POST['password1'])) {
        if ($_POST['password1'] != $_POST['password2']) {
            $errors[] = '<font color="red">The 2 passwords you have entered do not match.</font>';
        }
else {
            $password = $_POST['password1'];
        }
    }
else {
        $errors[] = '<font color="red">Please provide a password.</font>';
    }

if (empty($errors)) {
                $a = md5(uniqid(rand(), true));
        $query = "INSERT INTO users (username, email, password, active) VALUES ('$username', '$email', SHA('$password'), '$a')";
        
        $result = @mysql_query($query);
        
        if (mysql_affected_rows() == 1) {
 
                        // Send the E-Mail
                        $body = "Thank you for registering at the User Registration site. To activate your account, please click on this link:\n\n";
                $body .= "http://www.whateveraddressyouwanthere.com/activate.php?x=" . mysql_insert_id() . "&y=$a";
            mail($_POST['email'], 'Registration Confirmation', $body, 'From: [email protected]');
 
                        // Show thank you message
            echo '<h3>Thank You!</h3>
            You have been registered, you have been sent an e-mail to the address you specified before. Please check your e-mails to activate your account.'
;
        }
else {
            echo '<font color="red">You could not be registered, please contact us about the problem and we will fix it as soon as we can.</font>';
        }
}
else {
        echo '<h3>Error!</h3>
        The following error(s) occured:<br />'
;
        
        foreach ($errors as $msg) {
            echo " - <font color=\"red\">$msg</font><br />\n";
        }
    }
}

?>

<h3>Register</h3>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
    <p><input type="text" name="username" value="<?php if (isset($_POST['username'])) echo $_POST['username']; ?>" size="30" maxlength="30" /> <small>Username</small></p>
    
    <p><input type="password" name="password1" size="30" maxlength="40" /> <small>Password</small></p>
    
    <p><input type="password" name="password2" size="30" maxlength="40" /> <small>Confirm Password</small></p>
    
    <p><input type="text" name="email" size="30" maxlength="30" value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>" /> <small>Email Address</small></p>
    
    <p><input type="submit" name="submit" value="Register" /></p>
    <input type="hidden" name="submitted" value="TRUE" />
</form>


Bron
 
- SanThe -

- SanThe -

24/10/2007 13:26:00
Quote Anchor link
Omdat als er errors zijn je op regel 54 begint met de errors op het scherm te zetten en op regel 63 komt het formulier pas.
 
Timmy

timmy

24/10/2007 13:26:00
Quote Anchor link
ik denk omdat je eerst de controle doet en dan het form, bedoel je dat?
 
Joren de Wit

Joren de Wit

24/10/2007 13:28:00
Quote Anchor link
Dat komt omdat de verwerking van het formulier met hetzelfde script gebeurd. Tijdens de verwerking, het gedeelte van if((isset($_POST['submitted'])) wordt output gegenereerd, deze komt als eerste op het scherm te staan.

Als de verwerking afgelopen is houdt niets het script tegen om ook het formulier nog op het scherm te zetten. Dat is dus waarom je de meldingen boven het formulier ziet.

In dat andere script zit de output van het formulier in een else blok. Deze wordt dus niet getoond als het script het formulier verwerkt.
 
Timmy

timmy

24/10/2007 13:47:00
Quote Anchor link
dus probeer je script zo te maken:

-controle
-als fout -> formulier
-als fout -> foutmelding
-anders,alsgoed -> echo het is gelukt ofzo

zoiets
 
Rutje1

rutje1

24/10/2007 13:57:00
Quote Anchor link
Ik probeer nu om de foutmelding zoals bij het 2e script (boven het formulier) te krijgen in het eerste script.

Nu heb ik geprobeerd om bij bijv. ongeldige gebruikersnaam echo te vervangen door $errors en verder $errors toegevoegd zoals in script2. Maar dit is dus niet de juiste manier. De foutmeldingen komen niet bovenaan en de tekst: The following error(s) occured: staat constant in beeld.

Hoe moet dit veranderd worden?
 
Joren de Wit

Joren de Wit

24/10/2007 14:00:00
Quote Anchor link
Gewoon het script zoals hierboven staat gebruiken en enkel 'else {' op regel 52 en } op regel 63 weghalen...

Echter vindt ik beide manieren niet echt netjes aangezien output met logica vermengd wordt. Probeer dat zoveel mogelijk gescheiden te houden. Hier heb ik een netter voorbeeld staan...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Rutje1

rutje1

24/10/2007 14:11:00
Quote Anchor link
Dat is precies wat ik bedoel, maar eigenlijk had ik dat al opgegeven omdat het ingewikkeld is.

Ik zal even nalopen hoe het werkt en kijken of ik er gebruik van kan maken.
Voor nu bedankt allemaal
 
Rutje1

rutje1

24/10/2007 17:37:00
Quote Anchor link
Blanche, ik heb je script gelezen. Het ziet er zo naar uit dat dit script nu zo gemaakt is om enkel lege velden te markeren.

Nu heb ik in het bovenste script dus verschillende soorten fouten zoals naam al bezet, email al gebruikt, wachtwoord komt niet overeen etc..

Kan iemand mij helpen om het bovenste script te wijzigen zodat het fouten kan markeren?
Gewijzigd op 01/01/1970 01:00:00 door rutje1
 
Rutje1

rutje1

26/10/2007 13:29:00
Quote Anchor link
Tijd > 24 uur
Bump!
 
Gerben Jacobs

Gerben Jacobs

26/10/2007 13:56:00
Quote Anchor link
Fouten markeren? Zoiets;

<style type="text/css">
input { background-color: #FF0000; }
</style>
 
Rutje1

rutje1

26/10/2007 14:24:00
Quote Anchor link
Niet echt, ik hoop eigenlijk de oplossing te vinden dat als bijv. wachtwoorden niet overeen komen er een rood venster komt om de velden van het wachtwoord (zoals in script van blanche) en onderaan een melding.

In het script van Blanche werkt dit alleen wanneer een veld niet ingevuld is. Ik zou graag willen dat er ook bij andere redenen (bijv. gebruikersnaam ongeldig / te kort) dat er dan ook een rode rand omheen verschijnt en een melding onderaan.

Het werkt nu zodat dat wanneer je iets fout invult (script in 1e post) er via echo een foutmelding komt op een andere pagina, dat zou ik dus liever niet meer hebben.
 
Rutje1

rutje1

29/10/2007 16:13:00
Quote Anchor link
Bumpje!

Ik ben nu al een tijdje aan het zoeken maar nog niet verder gekomen =(

Zie post hierboven svp.

Greetz rutje1 ^
 
Joren de Wit

Joren de Wit

29/10/2007 17:19:00
Quote Anchor link
Het oorspronkelijke script controleert alleen op lege velden. Zelf gebruik ik echter al veel langer een uitgebreidere versie waarin allerlei controles toe te passen zijn.

Ik heb een voorbeeld online gezet.
 
Rutje1

rutje1

29/10/2007 19:22:00
Quote Anchor link
Ik ga kijken of het me zo lukt. Bedankt voor de hulp en het plaatsen van het script. Het zal even tijd kosten voor ik het aangepast heb, maar het moet zo lukken door de goede hulp.

Greetzz rutje1
 
Kalle P

Kalle P

29/10/2007 19:33:00
Quote Anchor link
alleen $no_check hoeft niet steeds opnieuw gedeclareerd en geïnitialiseerd te worden.
 
Joren de Wit

Joren de Wit

30/10/2007 09:07:00
Quote Anchor link
Daar heb je natuurlijk helemaal gelijkt in, die declaratie hoort buiten de foreach loop. Heb het even aangepast...
 



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.