Php pagina triggeren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Izildo Pimentel

Izildo Pimentel

11/01/2018 23:39:48
Quote Anchor link
Ik heb gezien dat ik mijn delete php page niet trigger aan de hand van een a href tag. Wat ik dus wil is de row deleten als ik dus op de kruis png klik, je gaat dus naar de delete page en wordt snel geredirect zonder dat je het merkt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
        }


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Create query
    $sql = "DELETE FROM Students WHERE id = '$id'";

    // Executing query
    $result = $conn->query($sql);


    // If result then return back to the selectStudent page
    if ($result) {
        Header("Location: studentList.php");
    } else {

        echo "Couldn't delete student";
    }
 
PHP hulp

PHP hulp

22/12/2024 22:46:10
 
- Ariën  -
Beheerder

- Ariën -

11/01/2018 23:50:29
Quote Anchor link
Waar komt $id vandaan? Het lijkt mij logisch om deze via GET mee te geven in de URL.
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 -
 
Thomas van den Heuvel

Thomas van den Heuvel

12/01/2018 01:11:59
Quote Anchor link
^ Wat @Ariën zei, en tevens:

- 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
 
Izildo Pimentel

Izildo Pimentel

12/01/2018 10:08:30
Quote Anchor link
**quoteknip**

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 -
 
- Ariën  -
Beheerder

- Ariën -

12/01/2018 10:58:10
Quote Anchor link
Dan zou ik het alsnog wel toevoegen. Het beschermt je niet tegen inbraak, maar ook tegen tekens in je string die in SQL een opdracht hebben.

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 -
 
Izildo Pimentel

Izildo Pimentel

12/01/2018 11:13:51
Quote Anchor link
Het werkt nu maar is die prepare dat gene wat ze bedoelen met escapen?
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)
PHP script in nieuw venster Selecteer het PHP script
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
// 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;
Gewijzigd op 12/01/2018 11:15:36 door Izildo Pimentel
 
- Ariën  -
Beheerder

- Ariën -

12/01/2018 11:23:07
Quote Anchor link
Dat kan ook tegen SQL-injection: http://php.net/manual/en/pdo.prepare.php

Controleer wel even je $_GET waarde op het bestaan ervan.
Gewijzigd op 12/01/2018 11:23:17 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.