Update query doet andere dingen
hier mijn codes
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
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
<?php
session_start();
if(isset($_SESSION['ingelogd']))
{
if($_SESSION['rechten'] == '1')
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
include 'dbconfig.php';
$username_input = $_POST['username'];
$password_input = $_POST['password'];
$level_input = $_POST['rechten'];
$id_check = $_SESSION['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
$result = mysql_query($query)
or die(mysql_error());
if($result)
{
header('refresh: 3; url=users.php');
echo "Uw wijziging is opgeslagen!";
}
}
else
{
include 'dbconfig.php';
$id = $_GET['id'];
$query = "SELECT user,password,level_id FROM users WHERE id=$id";
$result = @mysql_query($query,$connect)
or die(mysql_error());
$username = mysql_result($result,0,'user');
$password = mysql_result($result,0,'password');
$level = mysql_result($result,0,'level_id');
echo "<form action='edituser2.php' method='post'>";
echo "Gebruikersnaam: <input name='username' type='text' value='".$username."'/> <br />";
echo "Wachtwoord: <input name='password' type='text' style='margin-left: 21px;' value='".$password."'/> <br />";
echo "Rechten: <input name='rechten' type='text' style='margin-left: 21px;' value='".$level."'/> <br />";
echo "<input type='submit' name='submit' value='Wijziging opslaan' style='margin-left: 146px;' />";
echo "</form>";
}
}
else
{
header('refresh: 2; url=home.php');
echo "U hebt geen rechten voor deze site, u wordt teruggestuurd naar het beginscherm.";
}
}
else
{
header('refresh: 3; url=login.php');
echo "U ben niet ingelogd, u wordt doorgestuurd naar de loginpagina.";
}
?>
session_start();
if(isset($_SESSION['ingelogd']))
{
if($_SESSION['rechten'] == '1')
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
include 'dbconfig.php';
$username_input = $_POST['username'];
$password_input = $_POST['password'];
$level_input = $_POST['rechten'];
$id_check = $_SESSION['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
$result = mysql_query($query)
or die(mysql_error());
if($result)
{
header('refresh: 3; url=users.php');
echo "Uw wijziging is opgeslagen!";
}
}
else
{
include 'dbconfig.php';
$id = $_GET['id'];
$query = "SELECT user,password,level_id FROM users WHERE id=$id";
$result = @mysql_query($query,$connect)
or die(mysql_error());
$username = mysql_result($result,0,'user');
$password = mysql_result($result,0,'password');
$level = mysql_result($result,0,'level_id');
echo "<form action='edituser2.php' method='post'>";
echo "Gebruikersnaam: <input name='username' type='text' value='".$username."'/> <br />";
echo "Wachtwoord: <input name='password' type='text' style='margin-left: 21px;' value='".$password."'/> <br />";
echo "Rechten: <input name='rechten' type='text' style='margin-left: 21px;' value='".$level."'/> <br />";
echo "<input type='submit' name='submit' value='Wijziging opslaan' style='margin-left: 146px;' />";
echo "</form>";
}
}
else
{
header('refresh: 2; url=home.php');
echo "U hebt geen rechten voor deze site, u wordt teruggestuurd naar het beginscherm.";
}
}
else
{
header('refresh: 3; url=login.php');
echo "U ben niet ingelogd, u wordt doorgestuurd naar de loginpagina.";
}
?>
EN
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
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
<?php
session_start();
if(isset($_SESSION['ingelogd']))
{
if($_SESSION['rechten'] == '1')
{
include 'dbconfig.php';
$query = "SELECT id,user FROM users";
$result = @mysql_query($query,$connect)
or die(mysql_error());
$aantal = mysql_num_rows($result);
for($i=0;$i<$aantal;$i++)
{
$id = mysql_result($result,$i,"id");
$user = mysql_result($result,$i,"user");
echo "<b><a href='edituser2.php?id=$id'>".$user."</a></b><br />";
}
}
else
{
header('refresh: 2; url=home.php');
echo "U hebt geen rechten voor deze site, u wordt teruggestuurd naar het beginscherm.";
}
}
else
{
header('refresh: 3; url=login.php');
echo "U ben niet ingelogd, u wordt doorgestuurd naar de loginpagina.";
}
?>
session_start();
if(isset($_SESSION['ingelogd']))
{
if($_SESSION['rechten'] == '1')
{
include 'dbconfig.php';
$query = "SELECT id,user FROM users";
$result = @mysql_query($query,$connect)
or die(mysql_error());
$aantal = mysql_num_rows($result);
for($i=0;$i<$aantal;$i++)
{
$id = mysql_result($result,$i,"id");
$user = mysql_result($result,$i,"user");
echo "<b><a href='edituser2.php?id=$id'>".$user."</a></b><br />";
}
}
else
{
header('refresh: 2; url=home.php');
echo "U hebt geen rechten voor deze site, u wordt teruggestuurd naar het beginscherm.";
}
}
else
{
header('refresh: 3; url=login.php');
echo "U ben niet ingelogd, u wordt doorgestuurd naar de loginpagina.";
}
?>
Heeft iemand raad?
Gewijzigd op 14/11/2011 20:22:37 door Pietje akkers
Beveilig je $_GET en $_POST vars voor ze je query in gaan.
Haal variabelen buiten de quotes
en al die andere dingen die al 100000 keer gezegt zijn.
Daarbij vind ik je script opbouw maar een beetje vaag.
En verandert dat mijn fout?
$id_check = $_SESSION['id'];
WHERE id='$id_check'";
Dus is het logisch dat de update op jouw record gebeurt.
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
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
session_start();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$username = $_POST['username'];
$password = $_POST['password'];
include 'dbconfig.php';
$query = "SELECT b.rechten,a.id
FROM users a INNER JOIN level b ON a.level_id = b.id
WHERE user='$username'
AND password='$password'";
$result = mysql_query($query)
or die(mysql_error());
while($row = mysql_fetch_assoc($result))
{
$rechten = $row['rechten'];
$id = $row['id'];
}
if(mysql_num_rows($result))
{
header("refresh: 2; url=home.php");
echo "Welkom terug <b>" .$username. "</b>, u word automatisch doorgestuurd.";
$_SESSION['ingelogd'] = true;
$_SESSION['username'] = $username;
$_SESSION['rechten'] = $rechten;
$_SESSION['id'] = $id;
}
else
{
echo "Er is iets fout gegaan";
}
}
else
{
?>
<style type="text/css">
input[type="text"]
{
margin-left:15px;
}
input[type="password"]
{
margin-left: 34px;
}
input[type="submit"]
{
margin-left: 213px;
}
</style>
<form action="login.php" method="post">
Gebruikersnaam: <input type="text" name="username"/>
<br />
Wachtwoord: <input type="password" name="password"/>
<br />
<input type="submit" value="Inloggen" name="submit"/>
</form>
<?php
}
?>
session_start();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$username = $_POST['username'];
$password = $_POST['password'];
include 'dbconfig.php';
$query = "SELECT b.rechten,a.id
FROM users a INNER JOIN level b ON a.level_id = b.id
WHERE user='$username'
AND password='$password'";
$result = mysql_query($query)
or die(mysql_error());
while($row = mysql_fetch_assoc($result))
{
$rechten = $row['rechten'];
$id = $row['id'];
}
if(mysql_num_rows($result))
{
header("refresh: 2; url=home.php");
echo "Welkom terug <b>" .$username. "</b>, u word automatisch doorgestuurd.";
$_SESSION['ingelogd'] = true;
$_SESSION['username'] = $username;
$_SESSION['rechten'] = $rechten;
$_SESSION['id'] = $id;
}
else
{
echo "Er is iets fout gegaan";
}
}
else
{
?>
<style type="text/css">
input[type="text"]
{
margin-left:15px;
}
input[type="password"]
{
margin-left: 34px;
}
input[type="submit"]
{
margin-left: 213px;
}
</style>
<form action="login.php" method="post">
Gebruikersnaam: <input type="text" name="username"/>
<br />
Wachtwoord: <input type="password" name="password"/>
<br />
<input type="submit" value="Inloggen" name="submit"/>
</form>
<?php
}
?>
hoe zou ik het dan moeten aanpakken?
Hoe weet je welke gebruiker je wilt wijzigen?
echo "<b><a href='edituser2.php?id=$id'>".$user."</a></b><br />";
Als ze op de naam klikken, dan kunnen ze het wijzigen. En dan haal ik het id op:
$id = $_GET['id'];
En dan verwerk ik de gegevens die ze invullen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$username_input = $_POST['username'];
$password_input = $_POST['password'];
$level_input = $_POST['rechten'];
$id_check = $_SESSION['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
$result = mysql_query($query)
or die(mysql_error());
$password_input = $_POST['password'];
$level_input = $_POST['rechten'];
$id_check = $_SESSION['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
$result = mysql_query($query)
or die(mysql_error());
Verder zal je de (gecontroleerde/beveiligde) GET-waarde moeten gebruiken in de WHERE.
en bedoel je dit met de get?
$id_check = $_GET['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
Als we dan gaan kijken naar jouwn code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$username_input = $_POST['username'];
$password_input = $_POST['password'];
$level_input = $_POST['rechten'];
$id_check = $_SESSION['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
?>
$username_input = $_POST['username'];
$password_input = $_POST['password'];
$level_input = $_POST['rechten'];
$id_check = $_SESSION['id'];
$query = "UPDATE users
SET user='$username_input',
password='$password_input',
level_id='$level_input'
WHERE id='$id_check'";
?>
zie ik hier dat je $_SESSION['id'] bij 'WHERE' hebt staan. Wat dus inhoud (als mijn bovenstaande theorie correct is) dat je daadwerkelijk ook gewoon je eigen account waarmee je bent ingelogt aan het veranderen bent.
Veder, zoals al eerder genoemd, dien je POST en GET gegevens te beveiligen voordat je ze gebruikt in je query.
Dit betekend dat de code als volgt word:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$username_input = mysql_real_escape_string ($_POST['username']);
$password_input = mysql_real_escape_string ($_POST['password']);
$level_input = mysql_real_escape_string ($_POST['rechten']);
$id_check = mysql_real_escape_string ($_GET['id']);
$query = "UPDATE users
SET
user = '" . $username_input . "',
password = '" . $password_input . "',
level_id = '" . $level_input . "'
WHERE
id = '" . $id_check . "'";
?>
$username_input = mysql_real_escape_string ($_POST['username']);
$password_input = mysql_real_escape_string ($_POST['password']);
$level_input = mysql_real_escape_string ($_POST['rechten']);
$id_check = mysql_real_escape_string ($_GET['id']);
$query = "UPDATE users
SET
user = '" . $username_input . "',
password = '" . $password_input . "',
level_id = '" . $level_input . "'
WHERE
id = '" . $id_check . "'";
?>
(verbeter me als ik 't fout heb)
ik heb namelijk de $id_check inderdaad ook verandert in : $id_check = mysql_real_escape_string ($_GET['id']);
Maar dan gebeurt er niets meer, dan kan ik het helemaal niet meer wijzigen, tenminste hij slaat niets meer op. Wat nu?
En, wat doet mysql_real_escape_string?
EDIT: Overigens, bedankt voor je uitgebreide reactie, top!
Gewijzigd op 14/11/2011 20:34:25 door pietje akkers
Volgens mij wil jij eerst inloggen. Ben je eenmaal ingelogd wil je een gebruiker kunnen kiezen om te wijzigen. Zodra je de keuze hebt gemaakt wil je gegevens aanpassen en vervolgens die gegevens updaten.
Je kunt dit dus heel simpel in deze volgorde doen.
Let op:
- het beveiligen van je query's
- het uit de quotes halen van je variabelen
- het niet onnodig aanmaken van variabelen
- het goed afhandelen van je query's. Dus geen or die();
Voor het gemak als beginnende PHP'er kun je overbodige dingen als header(); nog even achterwegen laten. Zorg eerst dat de basis van je script goed is.
Daarbij geef ik je graag de tip om HTML met single quotes te echoën zodat je niet hoeft te escapen of single quotes in je HTML te gebruiken.
Code (php)
Gewijzigd op 14/11/2011 21:48:27 door Milo S
Is er ook nog een andere oplossing, ipv opnieuw beginnen? Want volgensmij zijn er vast wel mensen die mij kunnen helpen om deze fout weg te krijgen?
Vergeet ook niet een beetje commentaar toe te voegen. Dit is voor een andere developer makkelijk. Dus ook voor ons hier op het forum.
Gewijzigd op 15/11/2011 16:28:33 door Milo S
het probleem was inderdaad (SanThe) dat hij niet gepost word, dus moest ik het id ook in het volgende formulier zetten, en toen kon ik het wel ophalen.
Trouwens je database connectie pagina kun je ook 1 keer invoegen bovenaan je script. Scheelt weer.
Gewijzigd op 15/11/2011 17:01:36 door Milo S
Ja, andere mensen geven goede tips ipv opnieuw beginnen. Dus zo doende hebben ze gezegt (op een ander forum) wat heb probleem was.
Maar blijf dan lekker op dat andere forum als ze daar toch betere tips geven.
Gewijzigd op 15/11/2011 18:48:43 door Milo S
Milo S op 15/11/2011 18:48:22:
Ik ga je niet rechtstreeks je antwoord geven als er nog zoveel andere fouten inzitten. Maak eerst dat goed doe dan de rest.
Maar blijf dan lekker op dat andere forum als ze daar toch betere tips geven.
Maar blijf dan lekker op dat andere forum als ze daar toch betere tips geven.
2 forums is toegestaan ;)
Hier word gewoon op een andere manier gewerkt. Als dat andere forum beter bevalt wat tips betreft, dan mag je van mij daar blijven.
Zie je ergens in mijn bericht staan dat hier geen goede tips worden gegeven? Daar werd even de goude tip gegeven. ;) En ik blijf op 2 forums, dat vind ik fijner omdat phphulp.nl zijn voordelen heeft en het andere forum ook ;)