Fout: unexpected T_ELSE
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
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$email = $_POST['email']; // Voor de functie
function checkemail($email)
{
// Kijk of er een @ in zit, zo nee false
if(!stristr($email, '@'))
{
return false;
}
$email_split = explode("@", $email);
// Er mag slecht één @ inzitten dus het array moet 2 records tellen
if(count($email_split) != 2)
{
return false;
}
$email_user = $email_split[0];
$email_host = $email_split[1];
// Kijk of er MX-servers zijn, zo nee false
if(!getmxrr($email_host, $var))
{
return false;
}
// Kijk of het usergedeelte okee is, zo nee false
if(!preg_match("/^[0-9a-z]([-_.~]?[0-9a-z])*$/i", $email_user))
{
return false;
}
return true;
}
if($_SERVER['REQUEST_METHOD']=="POST") {
if(checkemail($email) == TRUE)
{
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
if($_POST['pass1'] != "") {
$sql_select_pass = "SELECT password
FROM leden
WHERE id = '".$_COOKIE['id']."'
";
# Check of query is gelukt
if (($result_select_pass = mysql_query($sql_select_pass)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql_select_pass,mysql_error(),'Fout met het ophalen van de gebruiker.');
}
elseif (mysql_num_rows($result_select_pass) == 0)
{
# De query is gelukt en we hebben net gekeken met _num_rows of er een rij is:
# -> Als er geen rij is echoën we hier:
echo 'Er is geen lid met dit id!';
}
else
{
$row_select_pass = mysql_fetch_assoc($result_select_pass);
if($row_select_pass['password'] == md5($_POST['pasnow']))
{
if($_POST['pass1'] == $_POST['pass2'])
{
$newpass = md5($_POST['pass1']);
$sql_update_pass = "UPDATE gebruikers
SET email='".$_POST['email']."', wachtwoord='".$newpass."'
WHERE id = '".$_COOKIE['id']."'
";
if(!$res_update_pass = mysql_query($sql_update_pass))
{
trigger_error(mysql_error().'<br />In query: '.$sql_update_pass);
}
elseif(mysql_affected_rows() == 0)
{
echo 'Geen records gewijzigd. <br />Query: '.$sql_update_pass;
}
else
{
echo "Je e-mailadres is succesvol gewijzigd naar '".$_POST['email']."', en je wachtwoord is gewijzigd.<br />\n<a href=\"useropties.php\">« Ga terug</a>";
}
}
else
{
echo "De twee nieuwe wachtwoorden zijn niet hetzelfde. Probeer het opnieuw.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
echo "Het door jou opgegeven huidige wachtwoord is incorrect.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
$sql_only_email = "UPDATE leden
SET email='".$_POST['email']."'
WHERE id='".$_SESSION['user_id']."'
";
if(!$res_only_email = mysql_query($sql_only_email))
{
echo "Er is een fout opgetreden tijdens het bijwerken van je e-mailadres. Probeer het later nog eens.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
else
{
echo "Je e-mailadres is succesvol gewijzigd naar '".$_POST['email']."'.<br />\n<a href=\"useropties.php\">« Ga terug</a>"
}
}
else
{
echo "Je hebt een niet geldig emailadres opgegeven (lijkt niet op [email protected]).<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
echo "Je hebt een niet geldig emailadres opgegeven (lijkt niet op [email protected]).<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
$sql_get_user = "SELECT username, email
FROM leden
WHERE id='".$_SESSION['user_id']."'
";
if (($result_get_user = mysql_query($sql_get_user)) === false)
{
echo showSQLError($sql_get_user,mysql_error(),'Fout met het ophalen van de gebruiker.');
}
elseif (mysql_num_rows($result_get_user) == 0)
{
echo 'Geen informatie opgehaald!';
}
else
{
$row_user = mysql_fetch_assoc($result_get_user);
?>
<form method="post" action="">
<table>
<tr>
<td>E-mailadres:</td><td><input type="text" name="email" value="<? echo $row_user['username']?>" /></td>
</tr>
<tr>
<td>Huidige wachtwoord:</td><td><input type="password" name="pasnow" /> <small>(alleen bij nieuw wachtwoord)</small></td>
</tr>
<tr>
<td>Nieuw wachtwoord:</td><td><input type="password" name="pass1" /> <small>(leeglaten voor huidige)</small></td>
</tr>
<tr>
<td>Herhaal:</td><td><input type="password" name="pass2" /></td>
</tr>
<tr>
<td></td><td><input type="submit" name="submit" value="Opslaan" /></td>
</tr>
</table>
</form>
<?
}
}
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$email = $_POST['email']; // Voor de functie
function checkemail($email)
{
// Kijk of er een @ in zit, zo nee false
if(!stristr($email, '@'))
{
return false;
}
$email_split = explode("@", $email);
// Er mag slecht één @ inzitten dus het array moet 2 records tellen
if(count($email_split) != 2)
{
return false;
}
$email_user = $email_split[0];
$email_host = $email_split[1];
// Kijk of er MX-servers zijn, zo nee false
if(!getmxrr($email_host, $var))
{
return false;
}
// Kijk of het usergedeelte okee is, zo nee false
if(!preg_match("/^[0-9a-z]([-_.~]?[0-9a-z])*$/i", $email_user))
{
return false;
}
return true;
}
if($_SERVER['REQUEST_METHOD']=="POST") {
if(checkemail($email) == TRUE)
{
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
if($_POST['pass1'] != "") {
$sql_select_pass = "SELECT password
FROM leden
WHERE id = '".$_COOKIE['id']."'
";
# Check of query is gelukt
if (($result_select_pass = mysql_query($sql_select_pass)) === false)
{
# als de query fout is -> foutafhandeling
echo showSQLError($sql_select_pass,mysql_error(),'Fout met het ophalen van de gebruiker.');
}
elseif (mysql_num_rows($result_select_pass) == 0)
{
# De query is gelukt en we hebben net gekeken met _num_rows of er een rij is:
# -> Als er geen rij is echoën we hier:
echo 'Er is geen lid met dit id!';
}
else
{
$row_select_pass = mysql_fetch_assoc($result_select_pass);
if($row_select_pass['password'] == md5($_POST['pasnow']))
{
if($_POST['pass1'] == $_POST['pass2'])
{
$newpass = md5($_POST['pass1']);
$sql_update_pass = "UPDATE gebruikers
SET email='".$_POST['email']."', wachtwoord='".$newpass."'
WHERE id = '".$_COOKIE['id']."'
";
if(!$res_update_pass = mysql_query($sql_update_pass))
{
trigger_error(mysql_error().'<br />In query: '.$sql_update_pass);
}
elseif(mysql_affected_rows() == 0)
{
echo 'Geen records gewijzigd. <br />Query: '.$sql_update_pass;
}
else
{
echo "Je e-mailadres is succesvol gewijzigd naar '".$_POST['email']."', en je wachtwoord is gewijzigd.<br />\n<a href=\"useropties.php\">« Ga terug</a>";
}
}
else
{
echo "De twee nieuwe wachtwoorden zijn niet hetzelfde. Probeer het opnieuw.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
echo "Het door jou opgegeven huidige wachtwoord is incorrect.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
$sql_only_email = "UPDATE leden
SET email='".$_POST['email']."'
WHERE id='".$_SESSION['user_id']."'
";
if(!$res_only_email = mysql_query($sql_only_email))
{
echo "Er is een fout opgetreden tijdens het bijwerken van je e-mailadres. Probeer het later nog eens.<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
else
{
echo "Je e-mailadres is succesvol gewijzigd naar '".$_POST['email']."'.<br />\n<a href=\"useropties.php\">« Ga terug</a>"
}
}
else
{
echo "Je hebt een niet geldig emailadres opgegeven (lijkt niet op [email protected]).<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
echo "Je hebt een niet geldig emailadres opgegeven (lijkt niet op [email protected]).<br />\n<a href=\"javascript:history.back()\">« Ga terug</a>";
}
}
else
{
$sql_get_user = "SELECT username, email
FROM leden
WHERE id='".$_SESSION['user_id']."'
";
if (($result_get_user = mysql_query($sql_get_user)) === false)
{
echo showSQLError($sql_get_user,mysql_error(),'Fout met het ophalen van de gebruiker.');
}
elseif (mysql_num_rows($result_get_user) == 0)
{
echo 'Geen informatie opgehaald!';
}
else
{
$row_user = mysql_fetch_assoc($result_get_user);
?>
<form method="post" action="">
<table>
<tr>
<td>E-mailadres:</td><td><input type="text" name="email" value="<? echo $row_user['username']?>" /></td>
</tr>
<tr>
<td>Huidige wachtwoord:</td><td><input type="password" name="pasnow" /> <small>(alleen bij nieuw wachtwoord)</small></td>
</tr>
<tr>
<td>Nieuw wachtwoord:</td><td><input type="password" name="pass1" /> <small>(leeglaten voor huidige)</small></td>
</tr>
<tr>
<td>Herhaal:</td><td><input type="password" name="pass2" /></td>
</tr>
<tr>
<td></td><td><input type="submit" name="submit" value="Opslaan" /></td>
</tr>
</table>
</form>
<?
}
}
?>
Beste, hier wat uitleg:
Het script is om gebruikers, hun wachtwoord en emailadres aan te passen.
Let niet op de layout van de html, die wordt nog in een divje gestoken enzovoort.
Ik heb ook nog niet op de veiligheid gelet: momenteel geen mysql_real_escape_string()
Probleem:
Ik krijg een error:
Parse error: syntax error, unexpected T_ELSE in /****/********/public_html/change.php on line 115
Ik heb al een uur er zitten aan werken, enzovoort.
Hopelijk weten jullie waar exact de fout zit.
Dem
Je logica met de 'else' klopt niet. Kijk eens naar regel 78 en 115.
Je else {} is mis, om else te kunnen gebruiken moet er wel een IF zijn die er naartoe kan leiden. Dat is nu niet het geval, je hebt 2x een else {} achter elkaar.
Ik ga het script verwijderen en opnieuw schrijven.
Lijkt me verstandig. Regel 62 is trouwens ook onveilig, cookies kun je namelijk manipuleren, dus ook jouw query.
WHERE username = '".$get_userdata['username']."'
Of nog eens met mysql_real_escape_string()?
Alvast bedankt!
Alle variabelen die je naar de database stuurt, kan je het beste beveiligen met mysql_real_escape_string().
Toevoeging op 11/04/2012 15:55:23:
Als je zeker weet dat het een integer is tenminste.
Persoonlijk ga ik liever voor het eerste, met het tweede als backup. Geen SQL injection krijgen is natuurlijk bijzonder belangrijk, maar dat wil nog niet zeggen dat ik allerlei troep in mijn database wil hebben. Ik wil bijvoorbeeld ook later niet script tags in de text op mijn site zien staan. Als je alleen maar beveiligt met mysql_real_escape_string, dan zorg je ervoor dat SQL injection niet meer mogelijk is, maar die tags komen later alsnog gewoon tevoorschijn.
Mijn mantra is dus eerder gewoon alle input uitgebreid controleren, filteren, typecasten indien nodig en bij echte hack pogingen dit ook registreren.
Gewijzigd op 11/04/2012 16:06:23 door Erwin H
Moet ik er nog mysql_real_escape_string() rond zetten? of niet?
Je plaatst met enige regelmaat topics en je zult ongetwijfeld ook de nodige lezen (hoop ik). Daar staat in dat je altijd de variabelen in je query moet beveiligen als ze van een gebruiker afkomstig zijn.