[php] Probleem met functie om post te editten.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo medetweakers,

ik zit weer met een probleem en ik hoop dat jullie me kunnen helpen want ik ben hier nu al een uur naar de bug aant zoeken, nochtans vind ik hem niet!
Het probleem is simpel:

Stel dat ik een gewone user ben met rank 0, ik heet user a, user b heeft het gepost, maar ik wil zijn bericht editten! Dit mag niet!
Nu als ik zijn bericht wil editten en daarna op de submit button druk die vervolgens door de request method POST wordt verzonden, dan edit hij het toch.
User a is ook geen moderator van dat bepaalde forum..

ik heb al vanalles geprobeerd, aparte filetjes gemaakt en daar zei hij dat hij do_error(2) moest doen, wat perfect klopt!
Nochtans doet hij het niet in mijn posting.php

Wat kan er hier fout gaan?


De 2 functies die ik gebruik:

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
<?php

//
// Mod Functions
//

function moderate_forum () 

{
 
global $rank;

 $sql = "SELECT rank, id FROM users WHERE username = '".$_COOKIE['username']."'";
 $query = mysql_query($sql);


 while($userdata = mysql_fetch_array($query)) 
 {
    $rank = $userdata['rank'];

   $sql = "SELECT mod_id, forum_id FROM mod WHERE forum_id = '".$_GET['forum_id']."'";
   $query = mysql_query($sql) or die(mysql_error());


  while($moddata = mysql_fetch_array($query)) 
  {

   if($userdata['id'] == $moddata['mod_id'] && $rank == 2) 
   {
    define('AUTHORISED', true);
   }
   else 
   {

    define('AUTHORISED', false);
    
   }
  
  }


 }


}

//
// Let's get the editpost id!
//

function get_editpost_username () {

 global $editpost_username;

 $sql = "SELECT username FROM reply WHERE id = '".$_GET['id']."' AND forum_id = '".$_GET['forum_id']."'";
 $query = mysql_query($sql);

 $fetch = mysql_fetch_array($query);

 $editpost_username = $fetch[0];

 return $editpost_username;

}

?>


En nu de PHP die kijkt of na het wijzigen de post mag geupdate worden (geedit)

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
<?php

} elseif($_POST['mode'] == "editpost" && isset($_POST['forum_id'])) {

            moderate_forum();

            get_editpost_username();

             if ( AUTHORISED == true || $rank == 3 || $rank == 4 || get_editpost_username() == $_COOKIE['username'] )

             {

    
                        $text = addslashes(htmlspecialchars($_POST['text']));
        
                    update_edited_topic();


            
                    header("Location: viewforum.php");

             }
             else
             {

              do_error(2);

              exit;

             }

?>



Mvg groeten,

Kris.

(Ik zou het erg appreciëren moest er iemand mij kunnen helpen! _/-\o_ )

[ Voor 8% gewijzigd door Verwijderd op 03-06-2003 20:58 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Als je gaat debuggen (welke variable heeft welke waarde op welke moment) kan je toch precies zien wanneer welke conditie true danwel false is. Waardoor je dus precies kan zien waar het fout gaat..

[edit]
in de FAQ staat een mooi stukje over debuggen

[ Voor 26% gewijzigd door thomaske op 03-06-2003 21:38 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 16:59

DUX

blijft ook nu voor Oranje

Kun je niet gewoon het icoontje verborgen houden bij posts die hij toch niet kan editen?

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

DUX schreef op 03 June 2003 @ 21:41:
Kun je niet gewoon het icoontje verborgen houden bij posts die hij toch niet kan editen?
En stel, ik heb zin om stiekem toch jouw post te editten, en klik niet op het icoontje, maar vul gewoon jouw post-id in...

Lijkt me niet de veiligste oplossing, mjah zolang niemand het probeert/weet, kan er niets gebeuren ;)

'Security by Obscurity'

[ Voor 6% gewijzigd door thomaske op 03-06-2003 21:48 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
@DUX: Je maakt hier een enorme denkfout, ik hoop niet dat jij ook zo je programma's maakt. Clientside-validatie (daar is dit gedeeltelijk een vorm van) is enorm fout.

@bReEzAh: Schaf eerst die globals eens af en roep functies met relevante parameters aan:
PHP:
1
voorbeeld($rank);

PHP:
1
2
3
4
function voorbeeld($rank)
{
  //bla
}


Constanten gebruiken waar je eigenlijk variabelen moet gebruiken krijg ik ook nachtmerries van.

Acties:
  • 0 Henk 'm!

  • DUX
  • Registratie: September 2002
  • Laatst online: 16:59

DUX

blijft ook nu voor Oranje

offtopic:
Good point.

En nee, meestal maak ik mijn creaties ook op alle fronten dicht, maar zoals mij op school is geleerd: "Programmeurs zijn lui" ;)

.    < G o o o o o o o o g l e >
Vorige 1 2 3 4 5 6 7 8 Volgende


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DUX schreef op 03 juni 2003 @ 21:53:
offtopic:
Good point.

En nee, meestal maak ik mijn creaties ook op alle fronten dicht, maar zoals mij op school is geleerd: "Programmeurs zijn lui" ;)
offtopic:
een programmeur mag dan wel lui zijn, maar dit soort "foutjes" kan je je irl (dus buiten school) niet veroorloven ;)

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
AUTHORISED == true || $rank == 3 || $rank == 4 || get_editpost_username() == $_COOKIE['username']

lekker is dat, hier staat dus:
code:
1
AUTHORISED == (true || $rank == (3 || $rank == (4 || get_editpost_username() == $_COOKIE['username'])))

vraag me af of dat je bedoeling was.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sinds wanneer is de precedence van de || operator hoger dan die van de == ? :)

Zie ook: http://www.php.net/manual/en/language.operators.php
Daar staat dus gewoon:
(AUTHORISED == true) || ($rank == 3) || ($rank == 4) || (get_editpost_username() == $_COOKIE['username'])

Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
offtopic:
lama
;)

[ Voor 90% gewijzigd door zeroxcool op 03-06-2003 23:23 ]

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

Verwijderd

oo - php eigenaardigheidje, bij delphi is dat dus duidelijk anders, excuse me.
desalniettetoch kan het imho nooit kwaad wat extra haakjes te gebruiken.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 03 juni 2003 @ 23:24:
oo - php eigenaardigheidje, bij delphi is dat dus duidelijk anders, excuse me.
desalniettetoch kan het imho nooit kwaad wat extra haakjes te gebruiken.
Dan is dat, imho, een eigenaardigheidje van delphi :)

Want in elke taal waar i kmee gewerkt hebt is de comparisonoperator hoger in precedence dan de or-operator (of lager, afhankelijk van hoe je de tabel wilt aflezen).

Misschien ben je in de war met de assignment? (= in php, := in delphi :? )

[ Voor 6% gewijzigd door ACM op 03-06-2003 23:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

uit de delphi manual:
Operators Precedence
@, not first (highest)
*, /, div, mod, and, shl, shr, as second
+, –, or, xor third
=, <>, <, >, <=, >=, in, is fourth (lowest)
dus 'or' of 'and' gaan boven '=' in delphi.
daarom, haakjes kunnen nooit kwaad....

[ Voor 25% gewijzigd door Verwijderd op 03-06-2003 23:30 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

das dan toch net als met php? :)

en dus:
1 = 1 or 2 = 2
==
(1 = 1) or (2 = 2)

Acties:
  • 0 Henk 'm!

Verwijderd

nee,
1 = 1 or 2 = 2 wordt dus
( 1 = (1 or 2) ) = 2
in delphi...

verders heeft php nog wel eens last van 'bugjes' en andere inconsequenties
ik hou me er nooit zo mee bezig en forceer uit gewoonte altijd de volgorde.

[ Voor 73% gewijzigd door Verwijderd op 03-06-2003 23:45 ]


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 15:30
In php is OR en || ook niet geheel gelijk qua volgorde geloof ik (weet niet zeker).

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
echo is your friend :-)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

ddc:
In php is OR en || ook niet geheel gelijk qua volgorde geloof ik (weet niet zeker).
de or operator heeft inderdaad een lagere precedence dan een || operator.

Precedence van operators in PHP

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Waarom is de ? : operator in PHP left associative? Die hoort toch right associative te zijn?

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Vinden jullie zelf ook niet dat we nu redelijk off-topic gaan?? ;)
Pagina: 1