Ik heb gezocht maar ik kan nergens niks vinden hierover. Het is eigenlijk heel simpel. Ik heb een functie gemaakt in php om een bepaalde regel uit een database te verwijderen. Nu wil ik dat die functie uitgevoerd wordt als ik op een bepaald URL klik in de pagina. Hoe doe ik dat?
Verwijderd
Lees uit de url een variabele FunctionName oid, en maak een Main sub, die altijd aangeroepen wordt, en aan de hand van FunctionName een functie aanroept.
Succes
Succes
haha ja zo kan het ook, is er geen andere manier waarmee je dat direct kan aanroepen?
Hmmm die URL waar je op clicked? Is dat een php bestand op je eigen server?
Zo ja: gooi in het begin van die file de aanroep van je functie
Zo nee: Bouw een javascript functie die je onClick aanroept. In die javascript functie roep je een andere URL aan waar die functie in staat?
Zullen vast betere mogelijkheden zijn, maar dit is wat ik nu zo snel even bedenk.
Zo ja: gooi in het begin van die file de aanroep van je functie
Zo nee: Bouw een javascript functie die je onClick aanroept. In die javascript functie roep je een andere URL aan waar die functie in staat?
Zullen vast betere mogelijkheden zijn, maar dit is wat ik nu zo snel even bedenk.
Dit soort dingen doe je toch meestal door een variable, bijvoorbeeld action=delete&id=123 mee te geven? Dat kun je gewoon in een link doen als je met GET werkt, of is dat niet precies wat je bedoeld?
Lijkt mij een riskante oplossing (en wordt ook afgeraden door de PHP crew). Op deze manier kan nl. iedereen een willekeurig (of allemaal
) record wissen. D.m.v method="POST" is dit een veiligere oplossing; dus niet via URL.

[ Voor 4% gewijzigd door Krul op 25-01-2003 11:49 ]
ok, en dan copy ik 't formulier, zet 't op mn eigen pagina, en verander 't ID.
zelfde resultaat, iets meer werk
zelfde resultaat, iets meer werk
Ik zou het niet leuk vinden als gebruikers zomaar mijn functies aan kunnen roepen.. Maar een variabele actie die geef je door door te doen jouwscript.php?actie=deleteTrax_Digitizer schreef op 25 January 2003 @ 09:39:
haha ja zo kan het ook, is er geen andere manier waarmee je dat direct kan aanroepen?
if ($actie == "delete"){
deletefunctie();
}
tja.. makkelijker kan het niet!
Verwijderd
mja...
dis toch redelijk veilig?
PHP:
1
2
3
4
5
6
7
8
9
10
| switch($action) { case "delete": requireLogin(); requirePriv("delete"); if(isset($_GET["id"]){ deleteRecord($_GET["id"]); } break; } |
dis toch redelijk veilig?
edit:
Waarbij $action dus komt uit een functie die $action uit get of post haalt, waarbij post voorrang heeft op get...
Waarbij $action dus komt uit een functie die $action uit get of post haalt, waarbij post voorrang heeft op get...
[ Voor 29% gewijzigd door Verwijderd op 25-01-2003 18:43 ]
Als je $_GET["id"] daarna in je delete functie nog even checkt op SQL insertion attacks en checkt of die user dat record wel MAG deleten, komt het redelijk in de buurt van veilig.
Het is trouwens verrassend hoeveel commerciele pakketten stampvol zitten met SQL insertion bugs. Een enorm duur pakket van Exact ook al. Leuk detail: Ik zat pas door de sources van dat pakket te bladeren, blijkt dat 'ie een variabele wel checkt of 'ie numeriek is en een logentry aanmaakt als 'ie numeriek is. Alleen als 'ie NIET numeriek is, wordt die hele request niet gelogd en gaat ID gewoon rechtsstreeks naar MS SQL (de '=' tekens worden wel gestript, maar da's natuurlijk niet genoeg)
Het is trouwens verrassend hoeveel commerciele pakketten stampvol zitten met SQL insertion bugs. Een enorm duur pakket van Exact ook al. Leuk detail: Ik zat pas door de sources van dat pakket te bladeren, blijkt dat 'ie een variabele wel checkt of 'ie numeriek is en een logentry aanmaakt als 'ie numeriek is. Alleen als 'ie NIET numeriek is, wordt die hele request niet gelogd en gaat ID gewoon rechtsstreeks naar MS SQL (de '=' tekens worden wel gestript, maar da's natuurlijk niet genoeg)
[ Voor 10% gewijzigd door Gerco op 25-01-2003 19:15 ]
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!
Ok ik heb even gelezen wat jullie hebben getypt. En sommige problemen al opgelost, maar ik zal even omschrijven wat mijn huidige probleem is:
Qua security maakt het niks uit, want het geheel zit achter een .htaccess en .htpasswd file en als het dadelijk klaar is ook nog een via https..... dus dat zit wel goed......
Het probleem is nu dat ik een overzicht heb van een tabel ik de database en ik wil door op een icoontje achter de regel te klikken de desbetreffende regel verwijderen.
Ik heb alles in principe voor elkaar..... en er zijn 2 methodes die ik heb geprobeerd:
1) via http_post_vars het drukken op een knop afvangen..... en dan een sql delete query uitvoeren.
2) een aparte php file maken die in een popupscherm verschijnt waarin staat dat ie verwijderd is.
Allemaal geen probleem. Het probleem is nu echter dat wanneer ik terug kom op de pagina met het tabeloverzicht, de verwijderde regel er nog steeds tussen staat. Als ik nu een simpele refresh aanroep dan wil ie in principe opnieuw nr 1 of 2 van hierboven gaan uitvoeren, dus iets verwijderen wat er niet meer is.
Ik zoek nu een manier om die tabel te refreshen zonder dat ie opnieuw die acties gaat uitvoeren van de vorige keer.
Qua security maakt het niks uit, want het geheel zit achter een .htaccess en .htpasswd file en als het dadelijk klaar is ook nog een via https..... dus dat zit wel goed......
Het probleem is nu dat ik een overzicht heb van een tabel ik de database en ik wil door op een icoontje achter de regel te klikken de desbetreffende regel verwijderen.
Ik heb alles in principe voor elkaar..... en er zijn 2 methodes die ik heb geprobeerd:
1) via http_post_vars het drukken op een knop afvangen..... en dan een sql delete query uitvoeren.
2) een aparte php file maken die in een popupscherm verschijnt waarin staat dat ie verwijderd is.
Allemaal geen probleem. Het probleem is nu echter dat wanneer ik terug kom op de pagina met het tabeloverzicht, de verwijderde regel er nog steeds tussen staat. Als ik nu een simpele refresh aanroep dan wil ie in principe opnieuw nr 1 of 2 van hierboven gaan uitvoeren, dus iets verwijderen wat er niet meer is.
Ik zoek nu een manier om die tabel te refreshen zonder dat ie opnieuw die acties gaat uitvoeren van de vorige keer.
Verwijderd
code:
1
| <a href="lijst.php?id=$id&action=delete" OnClick="Confirm('Artikel wordt verwijderd.');parent.location=lijst.php;">Verwijder mij!</a> |
Dit kan volgens mij wel werken, er wordt een bevestiging gevraagd en als je werkt volgens de oplossing van zellufs is dit nog veilig ook.
(PS, dit is niet getest.)
Pagina: 1