Update query doet andere dingen
Ik heb hier 2 codes, waar ik mijn gebruikers webbased kan veranderen. Nu is het zo, als ik een gebruiker wil veranderen, dan klik ik op submit. En dan kijk in mijn database, en tot mijn grote verbasing, zijn de gegevens van de gebruiker waarmee ik ingelogd ben, verandert in de gegevens van de persoon die ik heb verandert.. Ik snap totaal niet hoe! :O
hier mijn codes
EN
Heeft iemand raad?
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
Gesponsorde koppelingen:
Queries hoor je niet zo af te handelen, maak fatsoenlijke afhandeling...
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.
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.
Sorry hoor, maar ik ben een beginnende phper, en dan is het goed dat je kritiek geeft, maar dan kun je ook zeggen wat ik beter kan doen!
En verandert dat mijn fout?
En verandert dat mijn fout?
Ik neem aan dat jouw id in de session staat.
$id_check = $_SESSION['id'];
WHERE id='$id_check'";
Dus is het logisch dat de update op jouw record gebeurt.
$id_check = $_SESSION['id'];
WHERE id='$id_check'";
Dus is het logisch dat de update op jouw record gebeurt.
Ja klopt. Maar ik weet niet hoe ik het dan moet doen, want nu verander ik inderdaad mijn record. hier maak ik de session aan:
hoe zou ik het dan moeten aanpakken?
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?
doordat dit de output is:
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:
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());
Probleem: Als je op de link klikt is het formulier niet gepost.
Verder zal je de (gecontroleerde/beveiligde) GET-waarde moeten gebruiken in de WHERE.
Verder zal je de (gecontroleerde/beveiligde) GET-waarde moeten gebruiken in de WHERE.
Hoe bedoel je, waar is hij niet gepost?
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'";
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 ik het zo zie (verbeter me als ik het fout heb) set jij een aantal sessies wanneer een gebruiker inlogt. Zoals de ingelogd sessie, de rechten die hij heeft en volgens mij set jij $_SESSION['id'] met het id van de persoon die inlogt. Wat dus inhoud als jij inlogt, $_SESSION['id'] de id bevat van de account waar jij ingelogt mee bent.
Als we dan gaan kijken naar jouwn code:
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:
(verbeter me als ik 't fout heb)
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)
Je hebt helemaal gelijk. Nu heb ik 2 vragen.
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!
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
Wat ik zou gaan doen als ik jou was, is even opnieuw beginnen. Denk eerst uit wat je wilt doen.
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.
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?
Die is er wel, maar het is denk sneller als je gewoon even nieuw documentje openend en je jezelf aan die volgorde houd.
Vergeet ook niet een beetje commentaar toe te voegen. Dit is voor een andere developer makkelijk. Dus ook voor ons hier op het forum.
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
Ik heb het al voor elkaar ;)
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.
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.
Nu kun je het wel voor elkaar hebben, maar heb je ook nog iets gedaan met al die andere tips? Ze worden niet voor niets gegeven he.
Trouwens je database connectie pagina kun je ook 1 keer invoegen bovenaan je script. Scheelt weer.
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.
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.
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 ;)
Zie je ergens in mijn bericht staan dat je hier niet mag zijn? Ik uit alleen maar me mening over het feit dat jij min of meer weergeeft dat hier geen goede tips worden gegeven en daar wel.
Hier word gewoon op een andere manier gewerkt. Als dat andere forum beter bevalt wat tips betreft, dan mag je van mij daar blijven.
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 ;)



