[PHP] forum: fout niet op te sporen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
Ik hoop dat iemand de tijd wil nemen, want het kan even duren voor je het snapt en als je het wilt oplossen nog meer tijd..

Ik ben bezig met een forum te maken, dit is aardig gelukt, er zit alleen nog een klein probleemje in (nog wel meer, maar daar gaat t nu niet om)..
Het probleem zit in het schrijven van wie (welk IP) een bepaalde pagina bezoekt naar de database.
Ik heb bovenaan iedere pagina een functie aangeroepen die dit doet, en dit werkt goed.
Het enige probleem is het aanroepen van deze functie op de index.php pagina.. Als ik deze functie hier gewoon laat aanroepen ("IP X bezoekt de indexpagina"), doet ie dit op alle pagina's (ipv bv "IP X bezoekt het topic X"). Pas als ik op de indexpagina een if() zet bij het aanroepen van die functie, werkt t wel goed:

code:
1
2
if( $_SERVER['REQUEST_URI'] == '/babel/forum/index.php' )
    updateonline(0);


Dit heb ik (natuurlijk) liever niet, ik wil liever het probleem oplossen ipv het te omzeilen.
Je zou kunnen verwachten dat het probleem zit in dat op de andere pagina's 'index.php' aangeroepen wordt of iets dergelijks, ik kon hier echter niets van vinden :S...

Als iemand de moeite zou willen nemen om naar de betreffende bestanden te kijken, zou ik dat zeer op prijs stellen, andere tips zijn ook welkom.


Edit: links weggehaald omdat het probleem opgelost is

[ Voor 19% gewijzigd door ekkoper op 16-04-2005 17:50 ]


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 20-09 21:39

Kaastosti

Vrolijkheid alom!

Als ik het zo bekijk zou die index.php inderdaad maar 1 keer moeten registreren dat je daar komt, tenzij je er specifiek op terug komt. Aangezien al je links verder verwijzen naar andere php files, komt de index.php daar niet in voor.

Wat gaat er precies mis? Er wordt bij iedere willekeurige pagina een entry in de database toegevoegd dat de bezoeker de index heeft bezocht?

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
ja, op helemaal exact te zijn wordt elke keer als een bezoeker op een pagina komt, gekeken of dit IP-adres al bekend is in de database, zo ja, dan wordt deze rij geupdate, zo nee toegevoegd. In deze rij staat dus het IP-adres, de tijd, de actie en eventueel een specificatie van die actie (actie=bekijkt topic, specificatie=topic 3).
Het probleem is dus dat elke pagina (ook al wordt er wat anders meegestuurd) de actie 0 invult (0=index; als ik hier 5 van maak, doet ie overal 5) in plaats van die ik meegegevn heb per pagina..

Acties:
  • 0 Henk 'm!

Verwijderd

In je functions.php bekijk deze regel van de functie updateonline() eens.
code:
1
$sql = 'UPDATE f_online SET ip="'.$_SERVER['REMOTE_ADDR'].'", datetime="'.time().'", action='.$action.', spec='.$spec.' WHERE (userid="0" AND ip="'.$_SERVER['REMOTE_ADDR'].'") LIMIT 1';


Het kan zijn dat SQL valt over het feit dat jij userid als een char veld ingeeft, terwijl dit, denk ik, een integer moet zijn.

Probeer het eens met:
code:
1
$sql = 'UPDATE f_online SET ip="'.$_SERVER['REMOTE_ADDR'].'", datetime="'.time().'", action='.$action.', spec='.$spec.' WHERE (userid=0 AND ip="'.$_SERVER['REMOTE_ADDR'].'") LIMIT 1';

Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
maar dat zou in dit geval toch geen probleem op moeten leveren?
Helemaal als ik dus in index.php de 'actie'-waarde van 0 verander in 5, dat ie overal 5 invult..
Het werkt dus wel goed, alleen gaat er iets mis met die index.php..

Eduard

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Het lijkt me dat het niet werkt omdat de functie niet wordt aangeroepen in cat.php
Op je indexpagina zie ik althans een echo van de query verschijnen, en op subpagina's verder niet. Daarnaast is het onmogelijk dat er een waarde die in index.php aan een functie wordt meegegeven bekend is in een ander script. Dat de aanroep niet plaatsvind lijkt me de enige logische verklaring voor je probleem. Ik heb alleen geen zin om heel cat.php voor je door te spitten...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
T-MOB schreef op vrijdag 15 april 2005 @ 16:42:
Het lijkt me dat het niet werkt omdat de functie niet wordt aangeroepen in cat.php
Op je indexpagina zie ik althans een echo van de query verschijnen, en op subpagina's verder niet. Daarnaast is het onmogelijk dat er een waarde die in index.php aan een functie wordt meegegeven bekend is in een ander script. Dat de aanroep niet plaatsvind lijkt me de enige logische verklaring voor je probleem. Ik heb alleen geen zin om heel cat.php voor je door te spitten...
In regel 14 van cat.php.txt staat
code:
1
updateonline(1, $_GET['cat']);

(ik heb er nu echo voorgezet)
Hier wordt dus de functie aangeroepen..


De echo van deze functie in cat.php geeft wel aan dat de juisten waarden geupdate worden inde database, maar wanneer ik vervolgens in de database kijk, is dit niet (meer?) het geval.. Ik denk dus omdat gelijk daarna index.php iets doet..

Ik stel deze vraag omdat ik echt geen flauw idee heb wat er mis is..
Alvast bedankt voor jullie hulp!

[ Voor 23% gewijzigd door ekkoper op 15-04-2005 16:51 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
ekkoper schreef op vrijdag 15 april 2005 @ 16:44:
[...]

De echo van deze functie in cat.php geeft wel aan dat de juisten waarden geupdate worden inde database, maar wanneer ik vervolgens in de database kijk, is dit niet (meer?) het geval.. Ik denk dus omdat gelijk daarna index.php iets doet..
Dat kun je checken door in de database even te kijken naar de timestamp. Als deze hoger is dan weergegeven in de query die cat.php weergeeft dan doet index.php inderdaad iets. (Even een domme vraag, heb je wel update rechten op de tabel?)

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
zoals ik al zei werkt alles op zich perfect. De timestamp wordt ook geupdate ja,a nders had ik daar wel iets achter gezocht natuurlijk..

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Misschien voor het debuggen even wat extra data loggen om te kijken waar de aanroep naar index.php vandaan komt. Blijkbaar wordt de code uit index.php aangeroepen dus probeer daar wat nuttige data weg te schrijven naar een logbestandje ofzo. Zodat je in elk geval kunt bepalen of er een include ergens plaatsvind, óf dat het om een aparte aanroep gaat.
Het doorspitten van al je files zul je verder denk ik zelf moeten doen. De meeste mensen hier hebben zelf denk ik nog wel wat van hun eigen code te debuggen...

Nog een algemene tip: google even op "sql injection". Je code is er namelijk nogal vatbaar voor, zorg in elk geval dat je altijd user-input checkt voor je het in een query stopt!

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Het probleem zit in je stylesheet:

code:
1
2
3
4
BODY{
        font : 12px Arial, Verdana;
        background-image : url('./');
    }
Doordat de bestandsnaam van je background-image leeg is (alleen het pad is ingevuld) wordt het default bestand als background-image gebruikt. Dat default-bestand is index.php, ergo: bij elk pagerequest wordt index.php abusievelijk aangeroepen. Dat zorgt niet alleen voor verhoogde serverload, maar zorgt er ook voor dat jouw action telkens op 0 wordt gezet.

Ff bestandsnaam invullen bij background-image of gewoon die hele regel weglaten.

[ Voor 8% gewijzigd door Bananeman op 16-04-2005 01:42 ]

Motor-forum.nl


Acties:
  • 0 Henk 'm!

  • ekkoper
  • Registratie: Augustus 2003
  • Laatst online: 17-11-2024
Ongelofelijk bedankt!!

Eduard
Pagina: 1