Inlog & Registratie Peter Kassenaar

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rinus

rinus

02/08/2006 15:52:00
Quote Anchor link
Ik heb het boek PHP applicatieontwikkeling gekocht van Peter Kassenaar. Bij het aanklikken van het formulier bij registreren of inloggen verschijnt er een witte pagina en geen enkele foutmelding. Alleen bij het inloggen ontvang ik een foutmelding wanneer ik de inputboxen leeghoud. Zou het aan de instellingen van de server van mijn webhoster kunnen liggen? Ik heb de config en functions.php goed ingesteld.

Iemand bekend met dit probleem? [email protected]

mvg,
rinus
 
PHP hulp

PHP hulp

29/04/2024 13:59:54
 
Arend a

Arend a

02/08/2006 16:10:00
Quote Anchor link
Beste rinus, ik denk dat je even met peter moet bellen, of de code even plaatsen.

Anders dan dat kan ik je aanraden boven elke pagina:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? error_reporting(E_ALL); ?>
te zetten, dit geeft alle foutmeldingen weer.
 
Rinus

rinus

02/08/2006 19:39:00
Quote Anchor link
Ik heb hier de code van de volgende files ingezet:
functions.php
confirm.php
config.php
register.php


http://www.stud.hro.nl/0769902/php.zip

alvast bedankt voor de moeite!

mvg,
rinus
 
Cake Masher

Cake Masher

02/08/2006 19:43:00
Quote Anchor link
Ik heb:

Zip file groote: 0KB
Fout: Archief heeft onbekend formaat of is bescahdigd.
 
- SanThe -

- SanThe -

02/08/2006 19:43:00
Quote Anchor link
Codes downloaden is niet mijn ding.

Zoals Arend al aangaf, geef een stukje relavante code. Dus geen boekwerk want dat gaat niemand doorspitten.
 
Rinus

rinus

02/08/2006 19:54:00
Quote Anchor link
oeps foutje met uploaden

http://www.scvoorne.nl/php.zip

Ik wil wel relevante code geven maar heb geen idee wat er mis is. Dus misschien leest het dan ook makkelijker met de gehele files.
 
Cake Masher

Cake Masher

02/08/2006 20:04:00
Quote Anchor link
voor SanThe:

Register:
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
<?php
// bestanden insluiten
include_once('yapa_config.php');
include_once('yapa_functions.php');

// controleren of de pagina zichzelf heeft aangeroepen
if(isset($_POST['verzonden'])){
    // initialisatie
    $fout_bericht        = '';
    $member_naam        = safe_text($_POST['naam']);
    $member_email        = safe_text($_POST['email']);
    $member_wachtwoord    = safe_text($_POST['wachtwoord']);
    $member_datum        = safe_text($_POST['datum']);
    $member_code        = create_regcode(); // random 32-bits registratiecode genereren
    
    // de database openen

    $db        = safe_db_open($host, $gebruiker, $wachtwoord, $database);
    
    // een reeks controles uitvoeren:
    // eerst controleren of het e-mailadres al bestaat in de database
    // (dubbele vermeldingen mogen niet voorkomen)

    $query    = "SELECT * FROM yapa_members WHERE email='$member_email'";
    $result    = safe_query($db, $query);
        
    if (mysqli_num_rows($result) > 0){
        // e-mailadres bestaat al in de database, foutmelding tonen
        $fout_bericht .= "Dit e-mailadres (<b>$member_email</b>) bestaat al!<br />";
    }

    elseif(!check_field($member_email, T_EMAIL)){
        $fout_bericht .= "U hebt geen geldig e-mailadres opgegeven";    
    }

    elseif(!check_field($member_wachtwoord, T_PASSWORD)){
        $fout_bericht .= "U hebt geen geldig wachtwoord opgegeven (minimaal 4, maximaal 8 tekens) <b />";
    }

    elseif(!send_confirmation($member_email, $member_code)){;
        // e-mailadres OK, query opbouwen en mailtje met
        // bevestigingscode verzenden

        $fout_bericht .="Het verzenden van de bevestigingsmail is mislukt";
    }

    if($fout_bericht){
        echo $fout_bericht . "<br/>";
        echo "<a href=\"$deze_pagina\">Opnieuw registreren</a>";
    }

    else{
        // alles is goed gegaan, query opbouwen en gegevens in de database plaatsen
        // wachtwoord versleutelen

        $member_wachtwoord = safe_password($member_wachtwoord);
        $query = "INSERT yapa_members (id, naam, email, wachtwoord, datum, reg_code) VALUES
            ('', '$member_naam', '$member_email', '$member_wachtwoord', '$member_datum', '$member_code');"
;
        safe_query($db, $query);
        mysqli_close($db);
        // gebruiker doorsturen naar de bevestigingspagina
        header ("Location: yapa_confirm.php");
    }
}

else{
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YAPA - registratie</title>
</head>

<body>

<h2>YAPA: Registratie</h2>
Registreer nu bij Yet Another Photo Album!
<ul>
    <li>Als inlognaam wordt uw e-mailadres gebruikt. </li>
    <li>Na ontvangst van uw aanmelding ontvangt u een e-mail om uw account te activeren.</li>
    <li>Alle velden zijn verplicht.</li>
</ul>
<hr>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<pre>
Naam:        <input name="naam" type="text"  size="30 " />
E-mailadres:    <input name="email" type="text"  size="30 " />
Wachtwoord:    <input name="wachtwoord" type="password" size="30" /> (minimaal 4, maximaal 8 tekens)
<input type="hidden" name="verzonden" value="1" />
<input type="hidden" name="datum" value="<?php echo date("YmdHis"); ?>" />
</pre>
<input type="submit" name="Submit" value="Registreren" />
<input type="reset" name="Reset" value="Leegmaken" />
</form>
</body>
</html>
<?php
} // else-blok afsluiten
?>




Functions:
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
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
<?php
/**
 * Configuratiebestand invoegen.
 *
 */

include_once 'yapa_config.php';

/**
* function safe_query ()
* Algemene functie om queries safe uit te voeren, inclusief
* error-nummers. Schakel DEBUG_QUERY uit in config.php voor productiesites!
*
* @return resource
*/

function safe_query($db, $query){
    global $ERRORS; // globale array met foutmeldingen    
    $result = '';
    if (empty($query) || empty($db) || !is_string($query) || !is_object($db)){
        // er zijn geen geldige parameters meegegeven
        return false;
    }

    else{
        if (DEBUG_MODE){
            // uitgebreide debugging-mode, met meldingen voor de programmeur
            if (!$result = @mysqli_query($db, $query)){
                die ("{$ERRORS['QUERY_ERROR_ADMIN']}
                <br> uitgevoerde query: $query  .
                <br> MySQL-foutnummer: "
. mysqli_errno($db) .
                "<br> MySQL-melding: " . mysqli_error($db));
            }

            else {
                return $result;
            }
        }

        else{
            // geen debug-mode, eindgebruiker krijgt beperkte foutmelding te zien
            if (!$result = @mysqli_query($db, $query)){
                die ($ERRORS ['QUERY_ERROR_USER']);
            }

            else {
                return $result;
            }
        }
    }
}
// einde functie safe_query()

/**
* Function safe_text()
* Biedt de formuliergegevens eerst aan aan de functie safe_text().
* hierin worden HTML-tags uitgefilterd en (eventueel) speciale tekens
* als ', ", &, < en > omgezet naar tekst. Het binnensmokkelen van script
* in de database is dan al een stuk lastiger geworden.
* <p>Er wordt gebruik gemaakt van strip_tags() om ongewenste HTML-tags
* uit de invoer te weren. De tekst wordt eerst van spaties en andere whitespaces
* ontdaan via trim().
*
* @return string
*/

function safe_text($tekst='', $toegestane_tags=''){
    $tekst = trim($tekst);
    if(!get_magic_quotes_gpc()){
        $tekst = addslashes($tekst);
    }

    return strip_tags($tekst, $toegestane_tags);
}
// einde functie safe_text()

/**
* function get_docroot()
 * Haal %DOCUMENT_ROOT% op, onafhankelijk van de gebruikte webserver.
 * Werkt zowel voor Apache als voor IIS
 *
 * @return string
 */

function get_docroot(){
    // twee variabelen inlezen
    $docroot    = $_SERVER['SCRIPT_FILENAME'];
    $filename    = $_SERVER['PHP_SELF'];
    // backslashes vervangen door voorwaartse slashes
    $docroot = str_replace('\\', '/', $docroot);
    // de positie uitrekenen waar de bestandsnaam begint
    $positie = strpos($docroot, $filename);
    // deze van de docroot aftrekken en teruggeven
    return substr($docroot, 0, $positie);
    
}
// einde functie get_docroot()

/**
* function check_field()
* Valideert een formulierveld tegen een gegeven type
* @param string $inhoud De tekstuele inhoud van het formulierveld
* @param string $type Een van de typen die is vastgelegd in het configbestand (T_TEKST, T_EMAIL of T_URL)
*
* @return int
*/

function check_field($inhoud, $type){
    trim($inhoud); // eventuele spaties verwijderen
    switch ($type){
        // controleer een tekstveld. Voorwaarde: niet leeg.
        case T_TEXT:
            if(empty($inhoud)){
                return false;
            }

            else{
                return true;
            }

            break;
        // controleer een e-mailadres met behulp van een reguliere expressie
        case T_EMAIL:
            if(empty($inhoud) ||
                !
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $inhoud)){
                 return false;
             }

             else{
                 return true;
             }

             break;
        // controleer een URL met behulp van een reguliere expressie
        case T_URL:
            if(empty($inhoud) ||
                !
eregi( '^http:\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}$', $inhoud)){
                return false;
            }

            else{
                return true;
            }

            break;
        // EXTRA:
        // controleer een opgegeven wachtwoord. Eis: minimaal 4, maximaal 10 tekens,
        // moet beginnen met een letter.
        // voorbeeld:     Peter1 = true;
        //                1Peter = false;

        case T_PASSWORD:
            if(empty($inhoud) ||
                !
eregi( '^[a-zA-Z].{3,9}$', $inhoud)){
                return false;
            }

            else{
                return true;
            }

            break;
            
        // vangnet, deze regel zou nooit moeten worden uitgevoerd
        // maar voor de zekerheid (hackpogingen?) laten we de functie
        // false retourneren

        default:
            return false;            
    }
}
// einde functie check_field()
 
 /**
 * function admin_toegang($melding, $foutmelding){
 * Autoriseert een gebruiker/administrator voor YABG met Basic Realm
 * @return string
 */

 function admin_toegang($melding, $foutmelding){
     header("WWW-Authenticate: Basic realm=\"$melding\"");
     header("HTTP/1.0 401 Unauthorized");
     die ($foutmelding);
 }
// einde functie admin_toegang()
 
/**
 * function safe_db_open()
 * algemene functie om database te openen. Kan vanuit alle modules
 * worden aangeroepen. Zelf eventueel uitbreiden met code om ook MySQL 3.x
 * te bedienen. (mysql_ in plaats van mysqli_).
 * @param string $host
 * @param string $gebruiker
 * @param string $wachtwoord
 * @param string $database
 * @return resource
 */

 function safe_db_open($host, $gebruiker, $wachtwoord, $database){
     $db ='';
     if (empty($host) || empty($gebruiker) || empty($wachtwoord) || empty($database)){
        // er zijn geen geldige parameters meegegeven
        // eventueel nog uitbreiden met controles op het meegegeven type,
        // zoals is_string().

        return false;
    }

    else{
        if (DEBUG_MODE){
            // uitgebreide debugging-mode, met meldingen voor de programmeur
            // DEBUG_MODE is een constante, gedefinieerd in het config-bestand

            if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
                die ("Oooops: er is een fout opgetreden: <br />
                host        : $host <br />
                gebruiker    : $gebruiker <br />
                wachtwoord    : $wachtwoord <br />
                database    : $database <br />
                 MySQL-foutnummer: "
. mysqli_errno($db) .
                "<br /> MySQL-melding: " . mysqli_error($db));
            }

            else {
                // alles OK, resource-handler teruggeven
                return $db;
            }
        }

        else{
            // geen debug-mode, eindgebruiker krijgt beperkte foutmelding te zien
            if (!$db = mysqli_connect($host, $gebruiker, $wachtwoord, $database)){
                die ("Er s een fout opgetreden bij het werken met de database");
            }

            else {
                // alles OK, resource-handler teruggeven
                return $db;
            }
        }
    }
 }
// einde functie safe_db_open()
 
/**
* function send_confirmation ()
* functie om een bevestigingsmailtje te sturen
* na aanmelding/registratie bij YAPA
*
* @param string $email het email-adres waar de bevestigng naartoe gestuurd wordt
* @param string $code de registratiecode die in de database is opgenomen
* @return int
*/

function send_confirmation($email, $code=''){
    
    if(!empty($email)){
        $pagina = "http://" . $_SERVER['HTTP_HOST'];
        // Let op: zelf het pad eventueel dynamischer samenstellen
        // met andere $_SERVER[...]-variabelen. Hier: hard-coded

        $pagina .= "/php_app/yapa_h07/yapa_confirm.php?user="
                    . $email . "&code=" . $code;
        $onderwerp = "YAPA: bevestig uw registratie";
        $ontvanger = $email;
        
        $bericht = "Bedankt voor uw aanmelding bij Yet Another Photo Album!\n\n";
        $bericht .= "Uw account is geregistreerd met het volgende e-mailadres: $email\n\n";    
        $bericht .= "Activeer uw account via deze pagina: $pagina\n\n";
        $bericht .= "Met vriendelijke groet\nDe YAPA-webmaster";
    }

    else{
        return false;
    }

    // Het e-mailbericht verzenden
    if(!mail($ontvanger, $onderwerp, $bericht)){
        return false;
    }

    else{
        return true;
    }
    
}
// einde functie send_confirmation()

/**
* function create_regcode ()
* functie om een 32-bits random registratiecode te genereren
*
* @return string
*/

function create_regcode(){
    return (md5(microtime().rand(10000, 32000)));
}
// einde functie create_regcode()

/**
* function safe_password()
* versleuteld een meegegeven wachtwoord op basis van md5-encryptie
*
* @param string $wachtwoord
* @return string
*/

function safe_password($wachtwoord=''){
    if(!empty($wachtwoord)){
        return md5($wachtwoord);
    }

    else{
        return false;
    }
}
// einde functie safe_password()

?>






Config:
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
<?php
/**
* yapa_config.php - configuratiebestand voor YAPA
*
* Hierin worden de configuratieparameters ingesteld<br>
* voor het fotoalbum Yet Another Photo Album
*/

//initialisatie databasevariabelen

$host        = 'localhost';
$gebruiker    = 'root';
$wachtwoord    = 'retep01';
$database    = 'php_app';
$query        = null;
$db         = null;

// initialisatie uploadvariabelen
$deze_pagina     = $_SERVER['PHP_SELF'];    // de naam van de pagina zelf
$upload_dir        = 'uploads/';            // directory voor uiteindelijke opslag van foto's
$foto_naam        = '';                    // de bestandsnaam van de foto
$fout_bericht    = '';                    // Variabele voor eventueel opgetreden fouten

// Een array met toegestane afbeeldingstypen

$foto_MIME = array('image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif');

// Constanten
define ('DEBUG_MODE', true);        // geeft aan of de debugging-mode voor queries actief is
                                    // uitschakelen op een productiesite (false).

define ('MAX_FOTO_SIZE', 500000);    // maximaal 500KB  per foto                                    
define ('FOTOS_PER_RIJ', 4);        // het aantal foto's dat in 1 tabelrij wordt getoond
define ('UPLOAD_VERPLICHT', true);    // het uploaden van een bestand is verplicht
define ('THUMB_SIZE', 120);            // de breedte van thumbnails voor de foto.

// Verschillende typen inhoud voor formuliervelden

define('T_TEXT', 'tekst');            // valideren als tekst (alle tekens toegestaan)
define('T_EMAIL', 'email');            // valideren als e-mailadres
define('T_PASSWORD', 'wachtwoord');    // valideren als wachtwoord
define('T_URL', 'url');                // valideren als webadres
?>



Confirm:
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
<?php
// bestanden insluiten
include_once('yapa_config.php');
include_once('yapa_functions.php');

// Eerst controleren of de pagina is aangeroepen met een registratiecode op de adresregel
if (!isset($_GET['code'])){
    // nee, de algemene pagina tonen dat gebruikers in hun mailbox moeten kijken
    $bericht  = "<h2>Bedankt voor uw aanmelding</h2>";
    $bericht .= "Uw account is nog niet geactiveerd. " ;
    $bericht .= "Controleer uw e-mail voor een bericht met een bevestigingscode";
}

else{
    // de pagina is aangeroepen met een registratiecode, deze member activeren
    // initialisatie

    $member_code    = safe_text($_GET['code']);
    $member_email    = safe_text($_GET['user']);
    
    // database openen
    $db         = safe_db_open($host, $gebruiker, $wachtwoord, $database);
    $query     = "SELECT * FROM yapa_members WHERE email='$member_email' ";
    $query    .= "AND reg_code='$member_code'";
    $result     = safe_query($db, $query);
    
    if (mysqli_num_rows($result) > 0){
        // match gevonden, voor deze member de record activeren
        $query = "UPDATE yapa_members SET actief='1' WHERE reg_code='$member_code' ";
        $result    = safe_query($db, $query);
        // bericht opstellen voor weergave op de pagina
        $bericht  = "<h2>Registratie succesvol!</h2>";
        $bericht .= "Uw account is nu geactiveerd. U kunt inloggen met uw e-mailadres en wachtwoord";    
    }

    else{
        // geen match gevonden
        $bericht  = "<h2>Fout: registratiecode of e-mailadres niet gevonden</h2>";
        $bericht .= "<a href=\"yapa_register.php\">Voer een nieuwe registratie uit</a>";
    }    
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>YAPA -uw registratie bevestigen</title>
</head>

<body>

<h2>YAPA: Uw registratie bevestigen</h2>
<?php echo $bericht?>
<ul>
    <li><a href="yapa_index.php">Terug naar de homepage</a></li>
    <li><a href="yapa_login.php">Inloggen</a></li>
</ul>
</form>
</body>
</html>
 
Rinus

rinus

02/08/2006 20:21:00
Quote Anchor link
Het begint langzaam duidelijk te worden bij mij met de foutmeldingen myqli_query functie kent ie bijvoorbeeld niet :)
 
- SanThe -

- SanThe -

02/08/2006 20:52:00
Quote Anchor link
Zet error_reporting(E_ALL); eens aan.
 
Arend a

Arend a

02/08/2006 21:21:00
Quote Anchor link
mysqli is een aparte extensie en het kan zijn dat je webhoster die niet geinstalleerd heeft. Het lijkt me dat je in dit geval ook mysqli_ door mysql_ kan vervangen, en dat het waarshcijnlijk werkt. Ik zie hier niet werkelijk de reden wat mysqli_ hier wel kan en mysql_ niet.
 



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.