Avatar billede qualon2 Nybegynder
28. januar 2004 - 13:48 Der er 2 kommentarer

Opdater side når mysql bliver opdateret

Hej.. kan det lade sig gøre at lave sådan at når mysql bliver opdateret så opdater den også ved brugeren... altså for at lave sådan at når de får en ny intern besked så dukker den op med det samme...
Avatar billede jakoba Nybegynder
28. januar 2004 - 14:16 #1
Ja og nej :-))

Der er en meg fast regel (client/server) om at det ALTID skal være client (dvs browseren på brugerens computer) der skal give kommando når noget skal ske. serveren må kun svare når den bliver spurgt. den må ikke selv starte noget.

For at kommer rundt om det er der forskellige muligheder:
1) du kan lave dit script i browseren så den spørger igen og igen (fx hvert 5'te sekund) om der er sket noget siden sidst (det er som regel det man gør når man laver en chat)
2) du kan oprette en lille server på brugernes computer som web-serveren så kan lege client for (det er sådan ICQ gør). Det kræver at der installeres et program hos brugere, og virus-paranoide som vi er er det svært at få lov til.

Så jeg vil foreslå du også benytter metode 1).
Avatar billede jakoba Nybegynder
28. januar 2004 - 14:52 #2
så problemet bliver:

spørg serveren om der er sket noget siden sidst.
hvis ja, reload denne side.

for at spøge 'siden sidst' må brovseren have en måde at fortælle severen hvornår sidst var. det kan fx gøres ved at lægge et timestamp i databasen hvergang du opdatere, og samtid fortælle siden hvad det nuværende timestamp er hvergang siden bliver genereret med php:

læge nedenstående i den side der skal opdateres når databasen bliver opdateret:

<script type='text/javascript'> <!-- // et sted i <head på din side.
<?php
//  sørg selv for at du er connected til din database.
$res = mysql_query( "SELECT MAX( tidfelt ) FROM dintabel" ) or die(mysql_error());
$lastupdate = mysql_result( $res, 0, 0 );  // kræver mindst een record i dintabel
echo "var sidstOpdateret = '$lastupdate';\n";
?>
var sporgeBilled = new Image();

function loadNyt() {    // genhent denne side med nye data fra databasen.
    self.location.reload(true);
}

function sporgOmNyt () {
    sporgeBilled.onload = loadNyt;
    sporgeBilled.src = "testfornyt.php?sidst=" +escape( sidstOpdateret );
    setTimeout( "sporgOmNyt()", 5000 );  // gentag om 5000 millisekunder == 5 sekunder
}

</script>

Og lav en lille extra fil med navnet 'testfornyt.php' der kun indeholder php-kode:
<?php
//  sørg selv for at du er connected til din database.
$res = mysql_query( "SELECT MAX( tidfelt ) FROM dintabel" ) or die(mysql_error());
$lastupdate = mysql_result( $res, 0, 0 );  // kræver mindst een record i dintabel

if ( isset( $_GET['sidst'] ) $sidst = $_GET['sidst'];

if ( $sidst == $lastupdate ) {
    // ingen ændringer. alt er ok
    $filename = "mini_gif_som_ikke_findes.gif";  // giver fejl, så onload ikke bliver sand
} else {
    // siden trænger til at blive opdateret
    $filename = "mini_gif_som_findes.gif"        // aktiverer onlpad i sporgeBilled hos brugeren
}

$fp = fopen ( $filename , "rb" );
$ok = fpassthru ($fp);
fclose ($fp);
?>

gif billedet "mini_gif_som_findes.gif" skal være lille, fx et 1*1 pixel billede

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester