Vervanger van Base64
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
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
<?php
session_start();
if(user_is_ingelogd()) {
if($id = filter_input(INPUT_GET, 'id') && id_is_van_user($id, $_SESSION['user'])) {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
header ("Location: index.php");
exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
// doe update query's en zo.
// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
$id = intval(base64_decode($_GET['id']));
}
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=verborgen', 'verborgen', 'verborgen');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabelnaam SET iets=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(6, $_POST['mid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: whatever.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabelnaam WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
if($ok) {
header('Location: overzicht.php' );
exit();
}
}
else {
// GET, dus tonen edit scherm
//HIER PLAATS IK HTML FORM!!!
}
}
else {
// foutmelding dat id niet gegeven is, of dat het niet een id is van deze user.
// eventueel in het midden laten of het wel een bestaand id zou zijn.
echo "Het is niet toegestaan om andermanse pagina aan te passen!";
}
}
?>
session_start();
if(user_is_ingelogd()) {
if($id = filter_input(INPUT_GET, 'id') && id_is_van_user($id, $_SESSION['user'])) {
if($_SERVER['REQUEST_METHOD'] == 'POST') {
header ("Location: index.php");
exit; // NA HEADER EEN EXIT EN JE SCRIPT STOPT DAN OOK DAADWERKELIJK
// doe update query's en zo.
// INITIALISATIE ID MET DEFAULTWAARDE 0
$id = 0;
if(isset($_GET['id'])) {
$id = intval(base64_decode($_GET['id']));
}
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=verborgen', 'verborgen', 'verborgen');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabelnaam SET iets=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(6, $_POST['mid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: whatever.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabelnaam WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
if($ok) {
header('Location: overzicht.php' );
exit();
}
}
else {
// GET, dus tonen edit scherm
//HIER PLAATS IK HTML FORM!!!
}
}
else {
// foutmelding dat id niet gegeven is, of dat het niet een id is van deze user.
// eventueel in het midden laten of het wel een bestaand id zou zijn.
echo "Het is niet toegestaan om andermanse pagina aan te passen!";
}
}
?>
Verderop in je script ben je echter nog wel bezig met $_POST.....
niet heel logisch.
1 als je niet ingelogd bent dan wordt je doorverwezen naar index.php
2 na update wordt je terug naar overzicht verstuurt.
3 als id niet door ingelogde gebruiker is aangemaakt dan kan hij bewerk pagina niet zien.
Regel 14 en 15 zal ik dan weg halen.
Regel 31 tot en met 38 kan eigenlijk weg omdat onderin al een 0 waarde niet pakt.
Gewijzigd op 07/07/2015 13:16:51 door johan de wit
want waar zit de } die hoort bij de { op regel 7? (ik heb geen zin om dat uit te tellen)
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
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
<?php
session_start();
if(user_is_ingelogd()) {// BEGIN 1
if($id = filter_input(INPUT_GET, 'id') && id_is_van_user($id, $_SESSION['user'])) {// BEGIN 2
if($_SERVER['REQUEST_METHOD'] == 'POST') {// BEGIN 3
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=verborgen', 'verborgen', 'verborgen');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabelnaam SET iets=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(6, $_POST['mid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: whatever.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabelnaam WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
if($ok) {
header('Location: overzicht.php' );
exit();
}
}// EINDE 3
else {
// GET, dus tonen edit scherm
//HIER PLAATS IK HTML FORM!!!
}
}// EINDE 2
else {
// foutmelding dat id niet gegeven is, of dat het niet een id is van deze user.
// eventueel in het midden laten of het wel een bestaand id zou zijn.
echo "Het is niet toegestaan om andermanse pagina aan te passen!";
}
}// EINDE 1
?>
session_start();
if(user_is_ingelogd()) {// BEGIN 1
if($id = filter_input(INPUT_GET, 'id') && id_is_van_user($id, $_SESSION['user'])) {// BEGIN 2
if($_SERVER['REQUEST_METHOD'] == 'POST') {// BEGIN 3
// VALIDATIE VAN $id
if($id < 1) {
echo 'Ongeldige GET parameter id';
exit;
}
try {
$dbc = new PDO('mysql:host=localhost; dbname=verborgen', 'verborgen', 'verborgen');
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
if(isset($_POST['submit_btn'])) { // HIER ZOU JE EERST NOG JE FORMULIER MOETEN VALIDEREN
$query = "UPDATE tabelnaam SET iets=? WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(6, $_POST['mid']);
if($stmt->execute()) {
echo "Geupdated";
} else {
echo "Probeer nogmaals";
}
// EEN GOEDE GEWOONTE IS OM NA HET VERWERKEN VAN EEN 'POST' TE REDIRECTEN
header ("Location: whatever.php"); // KIES ZELF MAAR NAAR WELKE PAGINA JE WILT
exit;
}
try {
$query = "SELECT * FROM tabelnaam WHERE id=?";
$stmt = $dbc->prepare($query);
$stmt->bindParam(1, $id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$id = $row['id'];
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
if($ok) {
header('Location: overzicht.php' );
exit();
}
}// EINDE 3
else {
// GET, dus tonen edit scherm
//HIER PLAATS IK HTML FORM!!!
}
}// EINDE 2
else {
// foutmelding dat id niet gegeven is, of dat het niet een id is van deze user.
// eventueel in het midden laten of het wel een bestaand id zou zijn.
echo "Het is niet toegestaan om andermanse pagina aan te passen!";
}
}// EINDE 1
?>
Gewijzigd op 07/07/2015 23:33:17 door johan de wit
Offtopic: met tip van Aar heb ik met 1 druk op de knop code overzichtelijker gekregen. Hiervoor wil ik je nogmaals bedanken!
Als user_is_ingelogd() true oplevert impliceert dit toch dat $_SESSION['user'] (niet echt een goede naam voor een id, maar goed) een waarde heeft?
Waarom zou je een simpele vergelijking dan in een aparte functie (id_is_van_user) stoppen?
Dit soort functies maken je code alleen maar onnodig wollig.
Dan de volgende observatie: als je ingelogd bent dan wéét je het user id al, deze zit in je sessie. Waarom zou je deze dan nog eens expliciet doorgeven via de URL? Dat is helemaal niet nodig.
En tot slot, je combineert hier de volgende (verschillende) acties in 1 script:
1. authorisatie controle
2. verbinding maken met je database
3. het verwerken van het formulier
4. het afdrukken van het formulier
Ook kan ik hier niet uit opmaken of dat elke keer dat je een soortement van pagina weergeeft, dit ook een volledig, kloppend HTML-document is.
Stap 1 en 2 zou je eigenlijk al in een eerder stadium moeten doen, bijvoorbeeld bij de bepaling welke pagina er geladen moet worden (en welke code hierbij uitgevoerd moet worden) en of je hier ook toegang tot hebt.
En dan zou je het afdrukken (stap 3) en verwerken (stap 4) van het formulier kunnen splitsen in twee verschillende, afzonderlijke acties.
Met deze "verdeel en heers" strategie creëer je veel meer overzicht, en kun je je op elk moment focussen op precies datgene waar je op dat moment mee bezig bent, en hoef je niet elke keer de hele pagina-generatie (met alle controles die daarbij horen) opnieuw uit te schrijven, dat is gewoon een hoop duplicatie van code, die alleen maar voor problemen zorgt als daar op een gegeven moment iets in verandert. Je moet dan namelijk al je code aan gaan passen...