PHP Cookies werken niet
Ik heb een probleem met mijn PHP script,
ik heb een profielenscript met de pagina's "inloggen.php" en "wijzigen.php"
Als ik wil inloggen gaat er soms iets niet goed met de cookies...
Dan geeft ie de error dat je niet bent ingelogd...
Wie kan me even helpen?
Alvast bedankt!
Met vriendelijke groet,
Michel
Het script:
Inloggen.php:
Code (php)
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
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
<link rel="stylesheet" type="text/css" href="../css.css">
<?
ob_start(); // We laten weten dat we met cookies gaan werken
include("global.inc.php"); // eerst includen we global.inc.php weer
if(isset($_GET['actie']) AND $_GET['actie'] == "controleren"){ // Er is op inloggen geklikt
$fout = "";
if(empty($_POST['gebruikersnaam'])){
$fout.="Er is <i>geen</i> gebruikersnaam ingevoerd.<br>";
}
if(empty($_POST['wachtwoord'])){
$fout.="Er is <i>geen</i> wachtwoord ingevoerd.<br>";
}
if(isset($fout) AND $fout == TRUE){
begintabel("Error");
echo "".$fout."";
eindetabel();
} else { // Alles is ingevuld dan:
$select = @mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord='".md5($_POST['wachtwoord'])."'"); // we selecteren een lid met de opgegeven gegevens.
$aantal = @mysql_num_rows($select);
$Show = @mysql_fetch_assoc($select);
if($aantal == TRUE){ // Bestaat er een lid met de opgegeven gegevens dan:
$hash = rand(9999, 99999); // we maken een hash code dit is voor de veiligheid
$hash1 = md5($hash); // de hash code wordt in md5 omgezet
@mysql_query("UPDATE leden SET hash='".$hash1."' WHERE id='".$Show['id']."'"); // de hash code wordt geupdate
setcookie("userid", $Show['id'], time()+$_POST['tijdingelogd']); // er wordt een cookie voor userid
setcookie("wachtwoord", $Show['wachtwoord'], time()+$_POST['tijdingelogd']); // er wordt een cookie gemaakt met wachtwoord
setcookie("hash", $hash1, time()+$_POST['tijdingelogd']); // Er wordt een cookie gemaakt met hash. Dit is voor de veiligheid
header("location:wijzigen.php"); // het lid wordt dooorgewezen
} else { // Zijn de gegevens verkeer dan :
begintabel(" - Inloggen - Error"); // Het begin van een tabel.
echo "Gebruikersnaam en/of wachtwoord onjuist!";
eindetabel(); // Het einde van een tabel
} // afsluiten
} // ook afsluiten
} else {
// Nu maken we een formulier om in te loggen
begintabel(" - Inloggen");
echo "<form action='inloggen.php?actie=controleren' method='POST'>
<table width='100%' border='0' cellpadding='0' cellspacing='0'>
<tr><td width='50%' height='24'>Gebruikersnaam</td>
<td width='50%' height='24'><input type='text' name='gebruikersnaam'> <a href='aanmelden.php'>Aanmelden</a></td>
</tr><tr>
<td width='50%' height='24'>Wachtwoord</td>
<td width='50%' height='24'><input type='password' name='wachtwoord'> <a href='wwvergeten.php'>wachtwoord vergeten?</a></td>
</tr><tr>
<td width='50%' height='24'></td>
<td width='50%' height='24'><input type='submit' value='Inloggen'></td>
</tr>
</table>";
eindetabel(); // en weer afsluiten
}
?>
<?
ob_start(); // We laten weten dat we met cookies gaan werken
include("global.inc.php"); // eerst includen we global.inc.php weer
if(isset($_GET['actie']) AND $_GET['actie'] == "controleren"){ // Er is op inloggen geklikt
$fout = "";
if(empty($_POST['gebruikersnaam'])){
$fout.="Er is <i>geen</i> gebruikersnaam ingevoerd.<br>";
}
if(empty($_POST['wachtwoord'])){
$fout.="Er is <i>geen</i> wachtwoord ingevoerd.<br>";
}
if(isset($fout) AND $fout == TRUE){
begintabel("Error");
echo "".$fout."";
eindetabel();
} else { // Alles is ingevuld dan:
$select = @mysql_query("SELECT * FROM leden WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' AND wachtwoord='".md5($_POST['wachtwoord'])."'"); // we selecteren een lid met de opgegeven gegevens.
$aantal = @mysql_num_rows($select);
$Show = @mysql_fetch_assoc($select);
if($aantal == TRUE){ // Bestaat er een lid met de opgegeven gegevens dan:
$hash = rand(9999, 99999); // we maken een hash code dit is voor de veiligheid
$hash1 = md5($hash); // de hash code wordt in md5 omgezet
@mysql_query("UPDATE leden SET hash='".$hash1."' WHERE id='".$Show['id']."'"); // de hash code wordt geupdate
setcookie("userid", $Show['id'], time()+$_POST['tijdingelogd']); // er wordt een cookie voor userid
setcookie("wachtwoord", $Show['wachtwoord'], time()+$_POST['tijdingelogd']); // er wordt een cookie gemaakt met wachtwoord
setcookie("hash", $hash1, time()+$_POST['tijdingelogd']); // Er wordt een cookie gemaakt met hash. Dit is voor de veiligheid
header("location:wijzigen.php"); // het lid wordt dooorgewezen
} else { // Zijn de gegevens verkeer dan :
begintabel(" - Inloggen - Error"); // Het begin van een tabel.
echo "Gebruikersnaam en/of wachtwoord onjuist!";
eindetabel(); // Het einde van een tabel
} // afsluiten
} // ook afsluiten
} else {
// Nu maken we een formulier om in te loggen
begintabel(" - Inloggen");
echo "<form action='inloggen.php?actie=controleren' method='POST'>
<table width='100%' border='0' cellpadding='0' cellspacing='0'>
<tr><td width='50%' height='24'>Gebruikersnaam</td>
<td width='50%' height='24'><input type='text' name='gebruikersnaam'> <a href='aanmelden.php'>Aanmelden</a></td>
</tr><tr>
<td width='50%' height='24'>Wachtwoord</td>
<td width='50%' height='24'><input type='password' name='wachtwoord'> <a href='wwvergeten.php'>wachtwoord vergeten?</a></td>
</tr><tr>
<td width='50%' height='24'></td>
<td width='50%' height='24'><input type='submit' value='Inloggen'></td>
</tr>
</table>";
eindetabel(); // en weer afsluiten
}
?>
Wijzigen.php:
Code (php)
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
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
<link rel="stylesheet" type="text/css" href="../css.css">
<?php
include "global.inc.php"; // includen
if($ingelogd == 0) { // het persoon is niet ingelogd en kan zijn profiel dus iet wijzigen
begintabel(" - Profiel wijzigen - Error"); // Het begin van een tabel.
echo "U moet ingelogd zijn om u profiel te wijzigen.";
eindetabel(); // Het einde van een tabel.
} else {
if($_POST['submit']){ // er is op submit gedrukt
if(empty($_POST['naam']) || empty($_POST['email'])){ // controleren of er een naam en een e-mail adres is ingevuld
begintabel(" - Profiel Wijzigen - Error"); // zo nee even zeggen dat ze dat zijn vergeten
echo "U moet een naam en een e-mail adres invullen";
eindetabel();
} else {
mysql_query("UPDATE leden SET land = '".$_POST['land']."', woonplaats = '".$_POST['woonplaats']."', naam = '".$_POST['naam']."', email='".$_POST['email']."', type='".$_POST['type']."', bouwjaar='".$_POST['bouwjaar']."', kleur='".$_POST['kleur']."', motor='".$_POST['motor']."', uitlaat='".$_POST['uitlaat']."', velgen='".$_POST['velgen']."', binnenkant='".$_POST['binnenkant']."', overige='".$_POST['overige']."', toekomstige='".$_POST['toekomstige']."' WHERE id = '" . $_COOKIE['userid'] . "'");
// de dingen updates van de gebruiker die hij heeft ingevoerd
begintabel("sucsesvol gewijzigd"); // natuurlijk even weergeven dat alles goed is gegaan.
echo "Uw profiel is succesvol gewijzigd.";
echo "<br>U wordt naar uw profiel doorgestuurd.";
echo "<META HTTP-EQUIV='refresh' CONTENT='1; URL=profiel.php?id=" . $_COOKIE['userid'] . "'>"; // doorsturen na 1 seconden naar het profiel van de gebruiker
eindetabel();
}
} else {
begintabel(" - Controle Panel"); // even een titel maken
include "leden_menu.php"; // Nu halen we het leden menu erbij
eindetabel(); // en weer even de tabel afsluiten
// Hier weergeven we een forumulies met alle opties van het profiel
echo' <form method="post" action="wijzigen.php" name="bericht">';
$sql = @mysql_query("SELECT * FROM leden WHERE id='".$_COOKIE['userid']."'"); // we selecteren de dingen van het lid
$list = @mysql_fetch_object($sql); // eerst wat dingen selecteren van de gebruiker.
begintabel("Algemeen"); // hier staan de algemene dingen naam , e-mail
echo'<TABLE width="100%">'; // We maken even een mooie tabel.
echo'<TD width="25%">Naam:</TD>
<TD width="75%"><input type="text" name="naam" size="40" maxlength="80" value="' . $list->naam . '"></TD><TR>';
echo'<TD width="25%">Email:</TD>
<TD width="75%"><input type="text" name="email" size="40" maxlength="80" value="' . $list->email . '"></TD><TR>';
echo'<TD width="25%">Woonplaats:</TD>
<TD width="75%"><input type="text" name="woonplaats" size="40" maxlength="80" value="' . $list->woonplaats . '"></TD><TR>';
echo'<TD width="25%">Type Polo</TD>
<TD width="75%"><input type="text" name="type" size="40" maxlength="80" value="' . $list->type . '"></TD><TR>';
echo'<TD width="25%">Bouwjaar</TD>
<TD width="75%"><input type="text" name="bouwjaar" size="40" maxlength="80" value="' . $list->bouwjaar . '"></TD><TR>';
echo'<TD width="25%">Kleur</TD>
<TD width="75%"><input type="text" name="kleur" size="40" maxlength="80" value="' . $list->kleur . '"></TD><TR>';
echo'<TD width="25%">Motor</TD>
<TD width="75%"><input type="text" name="motor" size="40" maxlength="80" value="' . $list->motor . '"></TD><TR>';
echo'<TD width="25%">Uitlaat</TD>
<TD width="75%"><input type="text" name="uitlaat" size="40" maxlength="80" value="' . $list->uitlaat . '"></TD><TR>';
echo'<TD width="25%">Velgen</TD>
<TD width="75%"><input type="text" name="velgen" size="40" maxlength="80" value="' . $list->velgen . '"></TD><TR>';
echo'<TD width="25%">Binnenkant</TD>
<TD width="75%"><input type="text" name="binnenkant" size="40" maxlength="80" value="' . $list->binnenkant . '"></TD><TR>';
echo'<TD width="25%">Overige</TD>
<TD width="75%"><input type="text" name="overige" size="40" maxlength="160" value="' . $list->overige . '"></TD><TR>';
echo'<TD width="25%">Toekomstige</TD>
<TD width="75%"><input type="text" name="toekomstige" size="40" maxlength="160" value="' . $list->toekomstige . '"></TD><TR>';
echo'<TD width="25%">Land:</TD>
<TD width="75%">';
$land [1] = "";
$land [2] = "";
$land [3] = "";
$land [4] = "";
$land [5] = "";
$land [$list->land] = " selected"; // we kijken waar de selected moet komen bij Land
echo "<select size='1' name='land'>
<option value='1'".$land[1].">Nederland</option>
<option value='2'".$land[2].">Duitsland</option>
<option value='3'".$land[3].">Belgie</option>
<option value='4'".$land[4].">Frankrijk</option>
<option value='5'".$land[5].">Anders...</option>
</select>"; // we zetten het in een mooie tabel met een dropdown
echo '</TD><TR>';
echo'</TABLE>'; // einde van dde tabel en we sluiten af met </TABLE>
eindetabel();
begintabel("Foto's"); // hier staan de forum dingen onderschrift , ondertitel
echo'<TABLE width="100%" height="100%">'; // We maken even een mooie tabel.
echo'<TD width="25%">Fotos:<br>
LET OP!
Uw afbeeldingen mogen niet groter zijn dan 60kb en niet groter dan 300x225!<br><br>
Uw afbeeldingen hebben de naam pic1.jpg, pic2.jpg, pic3.jpg. Zorg dat uw plaatjes ook zo noemt!</TD><td>';
echo'<iframe src="upload.php" name="foto" width="100%" height="500"frameborder=0></iframe>';
echo'</TD></TR>';
echo'</TABLE>'; // einde van dde tabel en we sluiten af met </TABLE>
eindetabel();
echo'<input type="submit" name="submit" value="Wijzigen">'; // We maken even een button om op te klikken als je klaar bent
eindetabel();
} // afsluiten
} //afsluiten[/code]
<?php
include "global.inc.php"; // includen
if($ingelogd == 0) { // het persoon is niet ingelogd en kan zijn profiel dus iet wijzigen
begintabel(" - Profiel wijzigen - Error"); // Het begin van een tabel.
echo "U moet ingelogd zijn om u profiel te wijzigen.";
eindetabel(); // Het einde van een tabel.
} else {
if($_POST['submit']){ // er is op submit gedrukt
if(empty($_POST['naam']) || empty($_POST['email'])){ // controleren of er een naam en een e-mail adres is ingevuld
begintabel(" - Profiel Wijzigen - Error"); // zo nee even zeggen dat ze dat zijn vergeten
echo "U moet een naam en een e-mail adres invullen";
eindetabel();
} else {
mysql_query("UPDATE leden SET land = '".$_POST['land']."', woonplaats = '".$_POST['woonplaats']."', naam = '".$_POST['naam']."', email='".$_POST['email']."', type='".$_POST['type']."', bouwjaar='".$_POST['bouwjaar']."', kleur='".$_POST['kleur']."', motor='".$_POST['motor']."', uitlaat='".$_POST['uitlaat']."', velgen='".$_POST['velgen']."', binnenkant='".$_POST['binnenkant']."', overige='".$_POST['overige']."', toekomstige='".$_POST['toekomstige']."' WHERE id = '" . $_COOKIE['userid'] . "'");
// de dingen updates van de gebruiker die hij heeft ingevoerd
begintabel("sucsesvol gewijzigd"); // natuurlijk even weergeven dat alles goed is gegaan.
echo "Uw profiel is succesvol gewijzigd.";
echo "<br>U wordt naar uw profiel doorgestuurd.";
echo "<META HTTP-EQUIV='refresh' CONTENT='1; URL=profiel.php?id=" . $_COOKIE['userid'] . "'>"; // doorsturen na 1 seconden naar het profiel van de gebruiker
eindetabel();
}
} else {
begintabel(" - Controle Panel"); // even een titel maken
include "leden_menu.php"; // Nu halen we het leden menu erbij
eindetabel(); // en weer even de tabel afsluiten
// Hier weergeven we een forumulies met alle opties van het profiel
echo' <form method="post" action="wijzigen.php" name="bericht">';
$sql = @mysql_query("SELECT * FROM leden WHERE id='".$_COOKIE['userid']."'"); // we selecteren de dingen van het lid
$list = @mysql_fetch_object($sql); // eerst wat dingen selecteren van de gebruiker.
begintabel("Algemeen"); // hier staan de algemene dingen naam , e-mail
echo'<TABLE width="100%">'; // We maken even een mooie tabel.
echo'<TD width="25%">Naam:</TD>
<TD width="75%"><input type="text" name="naam" size="40" maxlength="80" value="' . $list->naam . '"></TD><TR>';
echo'<TD width="25%">Email:</TD>
<TD width="75%"><input type="text" name="email" size="40" maxlength="80" value="' . $list->email . '"></TD><TR>';
echo'<TD width="25%">Woonplaats:</TD>
<TD width="75%"><input type="text" name="woonplaats" size="40" maxlength="80" value="' . $list->woonplaats . '"></TD><TR>';
echo'<TD width="25%">Type Polo</TD>
<TD width="75%"><input type="text" name="type" size="40" maxlength="80" value="' . $list->type . '"></TD><TR>';
echo'<TD width="25%">Bouwjaar</TD>
<TD width="75%"><input type="text" name="bouwjaar" size="40" maxlength="80" value="' . $list->bouwjaar . '"></TD><TR>';
echo'<TD width="25%">Kleur</TD>
<TD width="75%"><input type="text" name="kleur" size="40" maxlength="80" value="' . $list->kleur . '"></TD><TR>';
echo'<TD width="25%">Motor</TD>
<TD width="75%"><input type="text" name="motor" size="40" maxlength="80" value="' . $list->motor . '"></TD><TR>';
echo'<TD width="25%">Uitlaat</TD>
<TD width="75%"><input type="text" name="uitlaat" size="40" maxlength="80" value="' . $list->uitlaat . '"></TD><TR>';
echo'<TD width="25%">Velgen</TD>
<TD width="75%"><input type="text" name="velgen" size="40" maxlength="80" value="' . $list->velgen . '"></TD><TR>';
echo'<TD width="25%">Binnenkant</TD>
<TD width="75%"><input type="text" name="binnenkant" size="40" maxlength="80" value="' . $list->binnenkant . '"></TD><TR>';
echo'<TD width="25%">Overige</TD>
<TD width="75%"><input type="text" name="overige" size="40" maxlength="160" value="' . $list->overige . '"></TD><TR>';
echo'<TD width="25%">Toekomstige</TD>
<TD width="75%"><input type="text" name="toekomstige" size="40" maxlength="160" value="' . $list->toekomstige . '"></TD><TR>';
echo'<TD width="25%">Land:</TD>
<TD width="75%">';
$land [1] = "";
$land [2] = "";
$land [3] = "";
$land [4] = "";
$land [5] = "";
$land [$list->land] = " selected"; // we kijken waar de selected moet komen bij Land
echo "<select size='1' name='land'>
<option value='1'".$land[1].">Nederland</option>
<option value='2'".$land[2].">Duitsland</option>
<option value='3'".$land[3].">Belgie</option>
<option value='4'".$land[4].">Frankrijk</option>
<option value='5'".$land[5].">Anders...</option>
</select>"; // we zetten het in een mooie tabel met een dropdown
echo '</TD><TR>';
echo'</TABLE>'; // einde van dde tabel en we sluiten af met </TABLE>
eindetabel();
begintabel("Foto's"); // hier staan de forum dingen onderschrift , ondertitel
echo'<TABLE width="100%" height="100%">'; // We maken even een mooie tabel.
echo'<TD width="25%">Fotos:<br>
LET OP!
Uw afbeeldingen mogen niet groter zijn dan 60kb en niet groter dan 300x225!<br><br>
Uw afbeeldingen hebben de naam pic1.jpg, pic2.jpg, pic3.jpg. Zorg dat uw plaatjes ook zo noemt!</TD><td>';
echo'<iframe src="upload.php" name="foto" width="100%" height="500"frameborder=0></iframe>';
echo'</TD></TR>';
echo'</TABLE>'; // einde van dde tabel en we sluiten af met </TABLE>
eindetabel();
echo'<input type="submit" name="submit" value="Wijzigen">'; // We maken even een button om op te klikken als je klaar bent
eindetabel();
} // afsluiten
} //afsluiten[/code]
Gewijzigd op 26/03/2006 14:10:00 door Michel
Heb je al eens error_reporting(E_ALL); bovenaan je script gezet?
wordt:
echo $fout;
if($aantal == TRUE){ // Bestaat er een lid met de opgegeven gegevens dan:
wordt:
if($aantal == 1) { // Bestaat er een lid met de opgeven gevens
(mocht er een keer perongeluk een lid met dezelfde naam oid dergelijks bestaan!)
Regel 5 gebruik je get...
de rest post.. Als het allebei van hetzelfde formulier komt moet het of allemaal POST zijn of allemaal GET.
(wat raar dat PHPhulp het 2de code-blok niet neerzet.)
Ik bedoel dat je dan niet word doorgestuurd naar Wijzigen.php
Iemand idee?
2) zou je wat relevante code eruit kunnen halen?
Tevens zou je kunnen kijken naar versie 2 van mijn nieuwssysteem, daar heb ik het namelijk wat veiliger opgelost. klik.
1) Nee, het origineel is geschreven door Melvin van den Bout, ik heb het aangepast aan mijn wensen...
2) Hoe bedoelt u dat? Code eruit halen wat relevant is voor het inloggen?
Nouja, ik zie een hele lap code... terwijl er maar weinig daarvan echt relevant is voor het probleem...
Ik denk dat u dit bedoeld... :$
if(empty($_COOKIE['userid']) && empty($_COOKIE['wachtwoord'])){
$ingelogd = 0; // dit persoon is niet ingelogd
} else {
$select = "SELECT * FROM leden WHERE id = '" . $_COOKIE['userid'] . "' AND wachtwoord = '" . $_COOKIE['wachtwoord'] . "' AND hash = '" . $_COOKIE['hash'] . "'"; // dingentjes selecteren van de gebruiker.
$sql = mysql_query($select)or die(mysql_error());;
$list = mysql_fetch_object($sql);
$hash1 = md5($list->hash);
if($_COOKIE['wachtwoord'] == $list->wachtwoord AND $_COOKIE['userid'] == $list->id AND $_COOKIE['hash'] == $list->hash) { // Als de cookie goed is dan :
$ingelogd = 1; // Dit persoon is ingelogd
} else {
$ingelogd = 0; // Dit persoon is niet ingelogd
}
}
Iemand nog een idee waar dit aan kan liggen?
Ik heb van mijn hosting gehoord dat dit te wijten is aan het doctype, iemand een idee welk doctype dat moet zijn?
Jason:
(wat raar dat PHPhulp het 2de code-blok niet neerzet.)
Geef PHPhulp maar de schuld :+
Hij sluit de PHP-tag niet af, logisch dan toch?
Ennuh, heb het even gefixt :)