[PHP/Javascript] Body Unload

Pagina: 1
Acties:
  • 485 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
Hoi,

ik ben met een klein shoutbox bezig met inlog. gebruikersnaam enz..
bij het inloggen wordt er een popup opgeroepen waar de shoutbox in actief is waar met behuulp van iframes php modules worden ingeladen. aan het gebruikersnaam heb ik ook een bepaalde status. dus bv online afwezig en offline. nu wil ik als de pagina afgesloten wordt doormiddel van het kruisje boven aan. dat de status veranderd wordt naar offline. Ik had dit gedacht te doen met javascript en de body unload te werken. nu heb ik getest met een simpel alert schermpje en dat lukte goed. maar zodra ik er een andere code aan toe pas zoals onderaan te zien is, dan doet hij de actie al uitvoeren als hij de pagina laadt. in het script hieronder zie je dat de status naar afwezig wordt gezet. dit is echter alleen om te testen. hebben jullie een idee hoe dat kan? sorry mijn php skills zijn aan de lage kant..

edit. ik zie dat de script niet in een vakje wordt geplaats.. jammer.. :P

<?php
session_start();
?>
<link rel="stylesheet" type="text/css" href="pagina/paginaopmaak.css">

<?php include ("gegevens.php");?>

<SCRIPT LANGUAGE="JavaScript">
function onunload() { <?php mysql_query("UPDATE gebruikers SET status = 'Afwezig' WHERE gebruikersnaam ='$gebruikersnaam'"); ?> }
</SCRIPT>


<?php

$query = mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam = '$gebruikersnaam' AND wachtwoord = '$wachtwoord'");
$results = mysql_num_rows($query);
$r = mysql_fetch_object($query);

if ($results == '1')
{ //1a
?>

<BODY onUnload="onunload()">

<?PHP

echo"
<IFRAME SRC='berichten.php' NORESIZE SCROLLING=yes HSPACE=0 VSPACE=0 FRAMEBORDER=0 MARGINHEIGHT=0 MARGINWIDTH=0 WIDTH=200 HEIGHT=$r->blengte></IFRAME><br>
<IFRAME SRC='tekst.php' NORESIZE SCROLLING=NO HSPACE=0 VSPACE=0 FRAMEBORDER=0 MARGINHEIGHT=0 MARGINWIDTH=0 WIDTH=200 HEIGHT=90></IFRAME><br>
<IFRAME SRC='opties.php?mode=onoff' NORESIZE SCROLLING=NO HSPACE=0 VSPACE=0 FRAMEBORDER=0 MARGINHEIGHT=0 MARGINWIDTH=0 WIDTH=600 HEIGHT=150></IFRAME><br>
";

}
include('nietlogin.php');

?>

Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
HTML:
1
2
3
<SCRIPT LANGUAGE="JavaScript">
function onunload() { <?php mysql_query("UPDATE gebruikers SET status = 'Afwezig' WHERE gebruikersnaam ='$gebruikersnaam'"); ?> }
</SCRIPT>

Javascript wordt op de client (browser) uitgevoerd terwijl PHP op de server wordt uitgevoerd.
In de onunload-functie probeer je een PHP-functie uit te voeren op de client (de functie mysql_query kent Javascript niet) wat dus niet kan werken.

Je kunt dit oplossen d.m.v. AJAX (bericht naar de server sturen dat gebruiker uitlogd) of bijv. een ander (PHP-)script aanroepen m.b.v. document.location waar je de status aanpast.
maar zodra ik er een andere code aan toe pas zoals onderaan te zien is, dan doet hij de actie al uitvoeren als hij de pagina laadt.
Dat komt doordat alle PHP-codeblokken direct worden uitgevoerd op de server; daarna wordt de pagina naar de client verzonden. De status is dus al aangepast voordat de gebruiker de pagina op z'n scherm ziet.

Als je in de HTML-broncode kijkt zal de functie onunload er zo uitzien:
HTML:
1
2
3
<SCRIPT LANGUAGE="JavaScript">
function onunload() {  }
</SCRIPT>
Het PHP gedeelte is op de server uitgevoerd en in dat blok is er niets met bijv. ‘echo’ geschreven. De functie zal daarom geen code bevatten.

[ Voor 35% gewijzigd door Icelus op 23-01-2008 17:28 ]

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
ja idd ik had het ook gezien aan de hand van de broncode dat er niets zicht baar is.. maar ja ajax heb ik helemaal geen verstand van. heb maar basiskennis van php.. maar ik snap het principe..

dan maar een alternatief zoeken. ik heb wel al een knop uitloggen. maar ja iedereen is meer geneigd om het kruisje bovenaan te klikken..

[ Voor 26% gewijzigd door wayne1984 op 23-01-2008 17:41 ]


Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Er zijn genoeg tutorials over AJAX.

Een simpele is bijvoorbeeld deze: klik

Waar het simpel op neer komt is dat javascript een php bestand aanroept op de server, die iets doet, en dan weer iets teruggeeft. Het is dus net als je gewoon naar een php pagina zou gaan, maar zonder dat de pagina ververst.

Acties:
  • 0 Henk 'm!

  • wayne1984
  • Registratie: November 2004
  • Laatst online: 01-01-2021
ajax lijkt me wel interessant om toe te passen. vooral in de shoutbox . die wil ik steeds laten refreshen. want is irri met een stukje javascript dat hij steeds ed pagina gaat vernieuwen.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 22:05
Code wordt niet automatisch in die blokken gezet. Gebruik daarvoor [code=php][/code] :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett

Pagina: 1