Php pagina triggeren
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
foreach ($conn->query($result) as $row)
{
echo "<tr>";
echo "<td align=center>{$row['ID']}</td>" .
"<td align=center>{$row['Firstname']}</td>" .
"<td align=center>{$row['Lastname']}</td>".
"<td align=center><img src='edit.png'></td>".
"<td align=center><a href='deleteStudents.php'><img src='delete.png'></a></td>";
echo "</tr>";
}
{
echo "<tr>";
echo "<td align=center>{$row['ID']}</td>" .
"<td align=center>{$row['Firstname']}</td>" .
"<td align=center>{$row['Lastname']}</td>".
"<td align=center><img src='edit.png'></td>".
"<td align=center><a href='deleteStudents.php'><img src='delete.png'></a></td>";
echo "</tr>";
}
Dus: deleteStudents.php?id=42 bijv.
En dan kan je hem met $_GET['id'] in je script oproepen. Let er dan wel op dat de waarde escaped, voordat iemand via GET je query manipuleert. Als ik mij niet vergis is dat:
$conn->quote($_GET['id']) in PDO, maar ik gebruik zelf MySQLi.
Let er ook op dat je met isset() controleert of je $_GET['id'] waarde bestaat. Anders krijg je 'undefined' foutmeldingen.
En na een location-header hoort een exit().
Gewijzigd op 11/01/2018 23:51:40 door - Ariën -
- de naam deleteStudents.php is een beetje misleidend als deze enkel een enkele student verwijdert
- ik neem aan dat je ook een soort van historie bijhoudt, dus om nu een student volledig uit het systeem te verwijderen lijkt mij een beetje overkill; dit is al helemaal onhandig als deze per ongeluk wordt verwijderd, deze is dan ook echt helemaal (en in het ergste geval met een cascaded DELETE) verwijderd uit het systeem; het zou dus beter zijn om de studenten tabel een status "deleted" mee te geven, en de status bij een DELETE op 1 te zetten ofzo; moeten wel alle queries die betrekking hebben op actieve studenten een "WHERE ... deleted = 0" toevoeging hebben, maar dat lijkt mij nog steeds handiger dan het alternatief dat een student echt weggekieperd wordt
- ik hoop ook dat je deze bewerkingen hebt afgeschermd met een (desnoods rudimentair) rechtensysteem, zodat niet iedereen die deze URL kent te pas en te onpas studenten kan verwijderen (die in dit geval dan ook permanent worden verwijderd)
EDIT en voor de goede orde: de pagina wordt waarschijnlijk wel "getriggerd", echter gebeurt er niet zoveel (er is geen "effect" op dit moment), om de door @Ariën genoemde redenen. Dit zou je ook in je netwerktab/historie kunnen zien, dat die pagina/dat script wel wordt uitgevoerd, maar nu effectief (nog) niets doet.
Gewijzigd op 12/01/2018 01:14:26 door Thomas van den Heuvel
Dit is gewoon een oefen opdracht om query's te oefenen, let nog niet op het beveiligen ervan.
Edit:
Het is niet nodig het laatste voorgaande bericht volledig te quote
Gewijzigd op 12/01/2018 10:59:07 door - Ariën -
Grote kans dat je query ook al om zeep wordt geholpen als je: 's Hertogenbosch invoert, of 's nachts. Dus gewoon toevoegen, en nooit laks zijn. Het kan je zelfs misschien extra punten opleveren.
Gewijzigd op 12/01/2018 10:58:23 door - Ariën -
Snap niet wat je bedoelt met extra punten maar dit is geen school opdracht, gewoon iets wat ik in me vrije tijd doe om php te oefenen.
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
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
// Show erros
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Database + connection
require_once ('../../config.php');
// Make and check the connection with PDO
try {
$conn = new PDO($dsn, $name, $pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
// The id that is given to delete
$id = $_GET['id'];
// Create query
$sql = "DELETE FROM Students WHERE id = '$id'";
//Executing query
$result = $conn->prepare($sql);
$response = $result->execute(array($id));
// If result then return back to the selectStudent page
if ($result) {
Header("Location: studentList.php");
exit();
} else {
echo "Couldn't delete student";
}
// Closing connection
$conn = null;
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Database + connection
require_once ('../../config.php');
// Make and check the connection with PDO
try {
$conn = new PDO($dsn, $name, $pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
// The id that is given to delete
$id = $_GET['id'];
// Create query
$sql = "DELETE FROM Students WHERE id = '$id'";
//Executing query
$result = $conn->prepare($sql);
$response = $result->execute(array($id));
// If result then return back to the selectStudent page
if ($result) {
Header("Location: studentList.php");
exit();
} else {
echo "Couldn't delete student";
}
// Closing connection
$conn = null;
Gewijzigd op 12/01/2018 11:15:36 door Izildo Pimentel
http://php.net/manual/en/pdo.prepare.php
Controleer wel even je $_GET waarde op het bestaan ervan.
Dat kan ook tegen SQL-injection: Controleer wel even je $_GET waarde op het bestaan ervan.
Gewijzigd op 12/01/2018 11:23:17 door - Ariën -