[PHP] multiple buttons

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Stel je hebt een lijst met namen onder elkaar:

piet
jan
klaas
kees

Achter elke naam staan buttons: edit en drop
Logische wijs, als je op de knop drop achter kees klikt wordt kees uit
de DB (mysql in dit geval) verwijderd.
Klik je op edit achter jan, kan je jan editen en de nieuwe waarde in de DB weggschrijven.

Nu heeft mijn PHP ver 5RC1 register_globals uit staan, wat natuurlijk goed is.

Maar kan dus nu niet meer script.php?action=dropjan bijv. gebruiken.

Hoe los je dit op een nette manier op dat je toch per button een unieke actie kan generenen?

Ik kan enkel bedenken door elke button een submitknop van een groot form te maken en daarin de value als string weer te geven en hem exploden ofzo?

dank. _/-\o_

PS. hier mijn code so far, let niet op javascript dat wordt denk ik niks op deze manier....

code:
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
<script type="text/javascript">

    function _act(action, id, subid) {

    window.alert("blaat!");

    }

</script>

<?
/ fetch active anuals
$level = mysql_query ("SELECT MIN(year) AS min, MAX(year) AS max FROM nieuws WHERE active='yes' AND status!='deleted'");
$fetch_level = mysql_fetch_array($level);

for($i=$fetch_level['min']; $i<=$fetch_level['max']; $i++) {

    print "<b>$i</b> <br>";

    $items = mysql_query ("SELECT * FROM nieuws WHERE year=$i ORDER BY id, subid");

    while ($fetch_items = mysql_fetch_array($items)) {
            
            print "ID: " . $fetch_items["id"] . " | SUBID: " .  $fetch_items["subid"] . " end. ";
            print "<a href='javascript:_act(\"edit\", $fetch_items[id], $fetch_items[subid])'>[img]../objects/images/cms/edit.png></a[/img] ";
            print "<a href='javascript:_act(\"drop\", $fetch_items[id], $fetch_items[subid])'>[img]../objects/images/cms/drop.png></a>[/img]<br>";
        }

    print "this will contain the edit boxes and codes for adding and deleteing points for $i! <br><br>";
}
?>

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik snap niet wat hier aan misgaat?

Maak een knop met een link zoals drop.php?name=jan of id=10

in drop.php
$name = $_GET['name'];
delete from users where NAME = ".$name

Acties:
  • 0 Henk 'm!

  • eXcyle
  • Registratie: Juni 2002
  • Laatst online: 20-09 15:55
script.php?action=dropjan kan je nog steeds gebruiken, je kan dan de waarde van action uitlezen in
$_GET['action']

het enige wat register globals doet is zorgen dat alle post, get en server waardes in een array zitten
$_GET, $_POST en $_SERVER

in jou geval kan je dan action niet meer als $action terug vinden maar als $_GET['action']

Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
Als ik het goed begrijp denk je er nu aan om je actie via HTTP POST te versturen ipv HTTP GET (zoals in je uitleg)
Bij POST krijg je echter hetzelfde probleem als bij GET, en dat is dat je variabelen niet direct opvraagbaar zijn.

Je variabelen zitten in je uitleg verstopt in de $_GET array, en anders in $_POST. $_REQUEST bevat beiden.

Zie http://nl.php.net/manual/....variables.predefined.php (in het kader) voor een korte uitleg hierover als register_globals uitstaat

offtopic:
Zoolander van irc? :)

Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
maar met register globals mag je toch niks achter je URL aanwrappen...
dus drop.php?name=jan

anders is mijn probleem natuurlijk snel opgelost als het via de $_GET WEL werkt.... heb ik de register_globals zeker verkeerd begrepen en kan je ze ENKEL nog via $_GET aanroepen zodat niet iedereen 'jan kan droppen' zeg maar ;)

klopt dat?

ps. noork coole ondertitel :D

edit: wat een snelle reacties hier toch! :)

[ Voor 8% gewijzigd door Zoolander op 13-05-2004 12:39 ]

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Het lijkt me ook niet nuttig om voor elke regel een apart formulier te maken. Ik zou dus niet gaan voor de "button" oplossing.

Een tekstlink werkt makkelijker. Eventueel kun je zelf een soort button in de vorm van een plaatje gebruiken als link.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Noork schreef op 13 mei 2004 @ 12:39:
Het lijkt me ook niet nuttig om voor elke regel een apart formulier te maken. Ik zou dus niet gaan voor de "button" oplossing.

Een tekstlink werkt makkelijker. Eventueel kun je zelf een soort button in de vorm van een plaatje gebruiken als link.
lees je de topic start wel en heb je dan niet even een paar sec naar de code gekeken :? :X

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Erkens schreef op 13 mei 2004 @ 12:41:
[...]

lees je de topic start wel en heb je dan niet even een paar sec naar de code gekeken :? :X
half gelezen. 8)7 laat deze reactie dan maar zitten.

Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
nog een vraagje: kan je dan gewoon een location.href=drop.php?drop=jan gebruiken of MOET je dat ding echt posten?
Want ik snap geloof ik nog niet helemaal hoe die code eruit moet zien dan?

of gewoon een knop zoals Noork zei met link drop.php?drop=jan

[ Voor 15% gewijzigd door Zoolander op 13-05-2004 12:48 . Reden: wat vergeten... :) ]

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Zoolander schreef op 13 mei 2004 @ 12:47:
nog een vraagje: kan je dan gewoon een location.href=drop.php?drop=jan gebruiken of MOET je dat ding echt posten?
Want ik snap geloof ik nog niet helemaal hoe die code eruit moet zien dan?

of gewoon een knop zoals Noork zei met link drop.php?drop=jan
gewoon dezelfde code als die je nu hebt alleen bij het uitlezen gebruik je $_GET['action'] ipv $action, zo moeilijk is dat toch niet :X

Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
nee, dan is het inderdaat niet zo moeilijk! :) thnx.

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
En trouwens, controleer die input wel! Zorg dat men geen '-tekens kan invoeren. Anders heb je de kans op SQL-injections (zie: http://www.google.nl/sear...UTF-8&q=sql+injection&lr= ). Want hoe je het nu hebt staan, ben je binnen de kortste keren al je info kwijt.

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Je mag sowieso alleen maar een drop.php?action= etc gebruiken als je een valid session hebt lopen, anders killed hij meteen het script.
Maar ik ga het even doorlezen hoe dat SQL-inject werkt, maar kan me er nog niet veel bij voorstellen.
Sowieso vind ik het via dat vraagteken dat je erg makkelijk nog dingen kan aanpassen in het script. Snap dat het enkel bedoelt is voor echte forms & de $_SESSION global, die is nu echt niet makkelijk te faken. Maar de $_GET is dus lekker makkelijk daarin nog.

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 14:27
variabelen achter je url (?var=waarde&ver2=waarde2) komen in het $_GET[] array. Waarden die je post komen in het $_POST[] array. Je kunt ze dus gewoon achter het url plakken als je ze later opvraagt met $_GET.

Zorg wel dat je de inkomende vars checked om mysql injection te voorkomen. Met een query als deze:
code:
1
DELETE FROM tabel WHERE naam = '$_GET['drop']'

kan iemand bijvoorbeeld surfen naar:
code:
1
www.pagina.nl/script.php?drop=jan OR naam != ''

Ën al je records verwijderen...

[edit]
weer lekker lang over gedaan, maargoed nu kun je je mss iets voorstellen bij mysql injection

[ Voor 14% gewijzigd door T-MOB op 13-05-2004 13:10 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Sowieso kan je gezien mijn script niet direct mijn MySQL DB aanspreken denk ik, omdat je een valid session moet hebben.
Daarnaast gebruik ik zeker de query die jij voorsteld met een WHERE statement, zodat er geen andere meuk bij kan komen.

Maar ik begrijp dus dat de je met de OR de var drop behoorlijk kan uitbreiden :)
Ik zal er ook nog wel een pregmatch overheen halen :D die op spaties & =$*#(% etc checked!

Goed advies allen, en ga eens wat meer verdiepen in URL meesturen van vars, iets waar ik nieuw mee ben .....

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Zoolander schreef op 13 mei 2004 @ 13:17:
Sowieso kan je gezien mijn script niet direct mijn MySQL DB aanspreken denk ik, omdat je een valid session moet hebben.
Daarnaast gebruik ik zeker de query die jij voorsteld met een WHERE statement, zodat er geen andere meuk bij kan komen.
en session stealing?
overigens moet je _nooit_ iemand vertrouwen, en het is gewoon een goede regel om gewoon altijd te checken, poweruser of niet ;)
Maar ik begrijp dus dat de je met de OR de var drop behoorlijk kan uitbreiden :)
Ik zal er ook nog wel een pregmatch overheen halen :D die op spaties & =$*#(% etc checked!
http://php.net/mysql_escape_string ;)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

T-MOB schreef op 13 mei 2004 @ 13:08:
kan iemand bijvoorbeeld surfen naar:
code:
1
www.pagina.nl/script.php?drop=jan OR naam != ''

Ën al je records verwijderen...
Neuh, wel als je quotes goed gebruikt. ;)

code:
1
www.pagina.nl/script.php?drop=jan' OR naam != '

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Als de optie magic_quotes aanstaat heb je toch nooit last van sql injection?

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

Verwijderd schreef op 14 mei 2004 @ 12:46:
Als de optie magic_quotes aanstaat heb je toch nooit last van sql injection?
Never trust user input :)

Opzich is het wel te doen maar welke garanties heb je, zie ook dit stukje faq: P&W FAQ - PHP

buit is binnen sukkel

Pagina: 1