Foutmelding aanpassen account
Ik ben bezig een pagina te maken waarin members hun gegevens kunnen aanpassen, maar het wil niet lukken.
Ik krijg deze fout melding;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE user_id = '1'' at line 1
Dit is mijn account.php
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sql = "SELECT name, achternaam, email, username, background FROM users WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
if(isset($_SESSION['logged']) && $_SESSION['logged'] == 1)
{
if (!isset($_POST['submit'])) {
?>
$sql = "SELECT name, achternaam, email, username, background FROM users WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
if(isset($_SESSION['logged']) && $_SESSION['logged'] == 1)
{
if (!isset($_POST['submit'])) {
?>
<form action="account.php" method="post">
<table>
<tr>
<td><h1>Account</h1></td>
</tr>
<tr>
<td><p>Gebruikersnaam:</p></td> <td><p><b></b></p></td>
</tr>
<tr>
<td><p>Email:</p></td> <td><p><b></b></p></td>
</tr>
<tr>
<td><p>Naam:</p></td> <td><p><input type="text" name="name" value="" /></p></td>
</tr>
<tr>
<td><p>Achternaam:</p></td> <td><p><input type="text" name="achternaam" value="" /></p></td>
</tr>
<tr>
<td><p>Wachtwoord:</p></td> <td><p><input type="password" name="password" /></p></td>
</tr>
<tr>
<td><p>Achtergrond:</p></td> <td><p><select name="wallpaper">
<option value="../css/background1.css">OS X Snow Leopard</option>
<option value="../css/background2.css">OS X Lion</option>
</select></p></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Pas aan"></td>
</tr>
</table>
</form>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
}
else
{
$name = form($_POST['name']);
$achternaam = form($_POST['achternaam']);
$password = md5($_POST['password']); // Encrypts the password.
$wallpaper = form($_POST['wallpaper']);
if (($password == "") || ($name == "")) { // Checks for blanks.
echo("<a>Niet alle velden zijn ingevuld!</a>");
}
mysql_query("UPDATE users SET name = '".$name."', achternaam = '".$achternaam."', WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
echo "<a>Het aanpassen is gelukt!</a>";
}}
else
{
echo '<p>Je moet ingelogd zijn om deze pagina te bekijken.</p>';
}
?>
}
else
{
$name = form($_POST['name']);
$achternaam = form($_POST['achternaam']);
$password = md5($_POST['password']); // Encrypts the password.
$wallpaper = form($_POST['wallpaper']);
if (($password == "") || ($name == "")) { // Checks for blanks.
echo("<a>Niet alle velden zijn ingevuld!</a>");
}
mysql_query("UPDATE users SET name = '".$name."', achternaam = '".$achternaam."', WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
echo "<a>Het aanpassen is gelukt!</a>";
}}
else
{
echo '<p>Je moet ingelogd zijn om deze pagina te bekijken.</p>';
}
?>
Iemand een idee?
Alvast bedankt.
Toevoeging op 15/03/2011 23:02:40:
Laat maar,
ik heb het even grondig doorgekeken en de fout was een , (komma) bij SET name = '".$name."', achternaam = '".$achternaam."',
Die laatste komma mag daar niet staan.
De komma voor WHERE moet weg.
dit is nu mijn script:
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
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
$sql = "SELECT name, achternaam, email, username, background FROM users WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
if(isset($_SESSION['logged']) && $_SESSION['logged'] == 1)
{
if (!isset($_POST['submit'])) {
?>
<form action="account.php" method="post">
<h1>Account</h1><p>Velden met een * zijn verplicht</p>
<table>
<tr>
<td><p>Email:*</p></td> <td><p><input type="text" name="email" value="<?php echo $rows['email'] ?>" /></p></td>
</tr>
<tr>
<td><p>Naam:*</p></td> <td><p><input type="text" name="name" value="<?php echo $rows['name'] ?>" /></p></td>
</tr>
<tr>
<td><p>Achternaam:</p></td> <td><p><input type="text" name="achternaam" value="<?php echo $rows['achternaam'] ?>" /></p></td>
</tr>
<tr>
<td><p>Wachtwoord:*</p></td> <td><p><input type="password" name="password" /></p></td> <td><p>Vul hier je actuele wachtwoord in, of een nieuw wachtwoord.</p></td>
</tr>
<tr>
<td><p>Achtergrond:</p></td> <td><p><select name="wallpaper">
<option value="../css/background2.css">OS X Lion</option>
<option value="../css/background1.css">OS X Snow Leopard</option>
</select></p></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Pas aan"></td>
</tr>
</table>
</form>
<?php
}
else
{
$name = form($_POST['name']);
$achternaam = form($_POST['achternaam']);
$password = sha1($_POST['password']); // Encrypts the password.
$wachtwoord = form($_POST['password']);
$wallpaper = form($_POST['wallpaper']);
$email = form($_POST['email']);
if (($wachtwoord == "") || ($name == "") || ($email == "")) { // Checks for blanks.
echo("<a>Niet alle velden zijn ingevuld!</a>");
}
$q = mysql_query("SELECT * FROM `users` WHERE email = '$email' WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
$r = mysql_num_rows($q);
$b = mysql_query("SELECT * FROM `users` WHERE email = '$email'") or die (mysql_error());
$c = mysql_num_rows($b);
if ($r > 1) { // Als het email adres al door de gebruiker in gebruik is
if ($c > 0) { // Als het email adres al in gebruik is
echo '<p>Dit email adres is al in gebruik!</p>';
}} else {
mysql_query("UPDATE users SET name = '".$name."', achternaam = '".$achternaam."', background = '".$wallpaper."', password = '".$password."', email = '".$email."' WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
echo "<a>Het aanpassen is gelukt!</a>";
}
}}
else
{
echo '<p>Je moet ingelogd zijn om deze pagina te bekijken.</p>';
}
?>
$sql = "SELECT name, achternaam, email, username, background FROM users WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ";
$result = mysql_query($sql);
$rows = mysql_fetch_assoc($result);
if(isset($_SESSION['logged']) && $_SESSION['logged'] == 1)
{
if (!isset($_POST['submit'])) {
?>
<form action="account.php" method="post">
<h1>Account</h1><p>Velden met een * zijn verplicht</p>
<table>
<tr>
<td><p>Email:*</p></td> <td><p><input type="text" name="email" value="<?php echo $rows['email'] ?>" /></p></td>
</tr>
<tr>
<td><p>Naam:*</p></td> <td><p><input type="text" name="name" value="<?php echo $rows['name'] ?>" /></p></td>
</tr>
<tr>
<td><p>Achternaam:</p></td> <td><p><input type="text" name="achternaam" value="<?php echo $rows['achternaam'] ?>" /></p></td>
</tr>
<tr>
<td><p>Wachtwoord:*</p></td> <td><p><input type="password" name="password" /></p></td> <td><p>Vul hier je actuele wachtwoord in, of een nieuw wachtwoord.</p></td>
</tr>
<tr>
<td><p>Achtergrond:</p></td> <td><p><select name="wallpaper">
<option value="../css/background2.css">OS X Lion</option>
<option value="../css/background1.css">OS X Snow Leopard</option>
</select></p></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Pas aan"></td>
</tr>
</table>
</form>
<?php
}
else
{
$name = form($_POST['name']);
$achternaam = form($_POST['achternaam']);
$password = sha1($_POST['password']); // Encrypts the password.
$wachtwoord = form($_POST['password']);
$wallpaper = form($_POST['wallpaper']);
$email = form($_POST['email']);
if (($wachtwoord == "") || ($name == "") || ($email == "")) { // Checks for blanks.
echo("<a>Niet alle velden zijn ingevuld!</a>");
}
$q = mysql_query("SELECT * FROM `users` WHERE email = '$email' WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
$r = mysql_num_rows($q);
$b = mysql_query("SELECT * FROM `users` WHERE email = '$email'") or die (mysql_error());
$c = mysql_num_rows($b);
if ($r > 1) { // Als het email adres al door de gebruiker in gebruik is
if ($c > 0) { // Als het email adres al in gebruik is
echo '<p>Dit email adres is al in gebruik!</p>';
}} else {
mysql_query("UPDATE users SET name = '".$name."', achternaam = '".$achternaam."', background = '".$wallpaper."', password = '".$password."', email = '".$email."' WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
echo "<a>Het aanpassen is gelukt!</a>";
}
}}
else
{
echo '<p>Je moet ingelogd zijn om deze pagina te bekijken.</p>';
}
?>
Nu kom ik er even niet uit.
Gewijzigd op 16/03/2011 07:45:56 door Jorg Heesbeen
Er kan maar één keer WHERE in een gewone query staan.
Welke moet ik dan weghalen?
alleen die snap ik niet helemaal?
SELECTEER voornaam, achternaam VAN tabel WANNEER voornaam = 'Jorg' EN achternaam = 'Heesbeen'
Maar dan is het in het engels:
SELECT voornaam, achternaam FROM tabel WHERE voornaam = 'Jorg' AND achternaam = 'Heesbeen'
Goed Engels kennen, zorgt er voor dat je veel beter beseft waarmee je bezig bent.
Ik snap niet waar ik het script moet plaatsen die Vincent geeft.
Code (php)
1
2
3
2
3
<?php
$q = mysql_query("SELECT * FROM `users` WHERE email = '$email' WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
?>
$q = mysql_query("SELECT * FROM `users` WHERE email = '$email' WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."' ") or die (mysql_error());
?>
Vervang hier de tweede WHERE door AND.
Gebruik geen backtics in een query.
en vars buiten de quote
Het werkt perfect!
Ow, er is nog 1 probleempje,
Hij controleert niet of het email adres al in gebruik is?
Gewijzigd op 16/03/2011 17:25:38 door Jorg Heesbeen
Jorg Heesbeen op 16/03/2011 15:29:00:
Ow, er is nog 1 probleempje,
Hij controleert niet of het email adres al in gebruik is?
Hij controleert niet of het email adres al in gebruik is?
Velden die uniek moeten zijn, zet je best als UNIQUE in de database (bij het creëren van de tabel).
Wat dan gebeurt, is dat de insert niet zal gebeuren.
Jorg Heesbeen op 16/03/2011 15:29:00::
En dan nog een vraag,
Waarmee stel ik in dat bij het registreren het email adres automatisch in kleine letters in de database komt?
Waarmee stel ik in dat bij het registreren het email adres automatisch in kleine letters in de database komt?
Gebruik de php functie strtolower dit is trouwens niet handig, omdat sommige email adressen met hoofdletters moeten.
Verder raad ik je aan de PHP beginnershandleiding en de SQL beginnershandleiding goed te lezen.
Daarnaast moet je geen or die gebruiken, maar een goede foutafhandelings methode.
Wie kan mij nog helpen om een controle te maken of het email adres al in gebruik is?
Jorg Heesbeen op 16/03/2011 22:20:54:
Wie kan mij nog helpen om een controle te maken of het email adres al in gebruik is?
Bij het inserten van een nieuwe gebruiker?
Ik zie in je code nergens iets van INSERT.
Hoe doe je dat?
Dan kunnen we daar eens zien wat we met die al-bestaande e-mail adressen kunnen doen.
Het gaat waarschijnlijk om de UPDATE query. Hij wil controleren dat als iemand zijn emailadres veranderd of die al niet door iemand anders in gebruik is
Gewijzigd op 17/03/2011 11:18:20 door Maikel B
Kris Peeters op 16/03/2011 15:54:06:
Velden die uniek moeten zijn, zet je best als UNIQUE in de database (bij het creëren van de tabel).
Wat dan gebeurt, is dat de insert niet zal gebeuren.
Jorg Heesbeen op 16/03/2011 15:29:00:
Ow, er is nog 1 probleempje,
Hij controleert niet of het email adres al in gebruik is?
Hij controleert niet of het email adres al in gebruik is?
Velden die uniek moeten zijn, zet je best als UNIQUE in de database (bij het creëren van de tabel).
Wat dan gebeurt, is dat de insert niet zal gebeuren.
...
Ook bij een update zal dat werken
Met die UNIQUE kan ik gebruiken. Maar dan wil ik ook een melding als het email adres al in gebruik is.
Net voor het updaten zoek je naar alle unieke velden en je vergelijkt met de gegevens die moeten worden geüpdatet.
iets zoals
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql = "
SELECT
id,
(username = '". mysql_real_escape_string($_POST['username']) ."') AS username_al_in_gebruik,
(email = '". mysql_real_escape_string($_POST['email']) ."') AS email_al_in_gebruik
FROM gebruikers
WHERE id != ". (int) $_POST['id'] ."
HAVING
username_al_in_gebruik = 1 OR email_al_in_gebruik = 1
";
?>
$sql = "
SELECT
id,
(username = '". mysql_real_escape_string($_POST['username']) ."') AS username_al_in_gebruik,
(email = '". mysql_real_escape_string($_POST['email']) ."') AS email_al_in_gebruik
FROM gebruikers
WHERE id != ". (int) $_POST['id'] ."
HAVING
username_al_in_gebruik = 1 OR email_al_in_gebruik = 1
";
?>
Dan fetch je al die records.
Als je $row['email_al_in_gebruik'] tegen komt (die 1 is), kan je een boodschap mee geven; uiteraard sla je dan ook die update query over.
Dito voor de username
Gewijzigd op 17/03/2011 12:33:02 door Kris Peeters