[MYSQL][PHP] geluidje bij nieuw bericht

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Ik sta voor een probleempje; ik heb een php support site die werkt met een MYSQL database. Ik zou graag willen dat wanneer er een bericht komter een geluidje afspeelt. Momenteel steekt de code die kijkt naar nieuwe tickets in een frame links, dat om de minuut ververst wordt. Nu, als er een bericht is, en je neemt het berichtje niet aan, dan blijft er elke minuut een geluidje afpselen. We zitten met op de support afdeling dus dat is niet zo aangenaam.
Ik zou graag willen dat hij alleen een geluidje afspeelt als er een echte verandering is. Dus van 1 nieuw bericht naar 2 nieuwe berichten, en niet als ie refreshed en opnieuw hetzelfde bericht ziet (wat hij natuurlijk nu doet).

Ik denk eraan om voor elke technieker een record aan te maken met het aantal nieuwe berichten, om dan zo te beslissen of er een geluidje moet afgespeeld worden of niet. Maar misschien kan het gemakkelijker?

Hoop dat het een beetje duidelijk is. Andere oplossingen/suggesties zijn natruulijk welkom.

Dit is een stuk van de code die in het linkerframe staat (wordt automatisch elke minuut ververst met meta)

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
if ($_REQUEST['time']) {
    $time = $_REQUEST['time'];
} else {
    $time = mktime() - ($user['alert_frequency'] * 60); $result = 0;
}

$newtickets = 0; 
$replycount = 0;
$pm = 0;

$tickets = array();
$msgs = array();
$replies = array();
$yourreps = array();

$db->query("
    SELECT id, subject 
    FROM ticket 
    WHERE is_open 
        AND !tech 
");

$newtickets = $db->num_rows();
if ($newtickets) {
    while ($res = $db->row_array() AND $i < 6) {
        $i++;
        $tickets[$res['id']] = $res;
        $matched[] = $res['id'];
    }
echo    "<EMBED SRC=\"sound.wav\" hidden=\"true\" AUTOSTART=\"TRUE\" WIDTH=\"0\" PLAYCOUNT=\"1\" ALIGN=\"CENTER\"></EMBED>";
}

Acties:
  • 0 Henk 'm!

Verwijderd

Geef het laatst "gespeelde" ID door in de URL van je refresh. Indien opgehaalde ID groter is dan hetgeen je doorgegeven hebt moet je je geluidje, anders niet.

Acties:
  • 0 Henk 'm!

  • defusion
  • Registratie: Juli 2003
  • Niet online
ik heb de code niet gelezen maar ik zou gewoon iets als hetvolgende nemen:

kijk wat oude message count is (uit database van eerder opgeslagen count)
kijk wat de huidige message count is
kijk of de huidige count groter is dan oude count
- ja: message, en schrijf huidige messagecount als oude message count weg naar database
- nee: negeer


uiteraard heb je hier zo'n kip-ei probleem, en dus als er geen messagecount is, moet je uitgaan van een oude count van 0 :)

Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Waarom maak je geen cookie aan met daarin het hoogste id van de ontvangen ticket? Zodra er dan een nieuw ticket is (met een hoger ID) kan je weer je geluid af laten spelen.

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kan idd met de ID van het ticket werken, ga het meteen eens proberen. ik laat sel iets weten als het lukt... Alvast bedankt

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kunnen jullie even kijken naar volgende code? Ik krijg een foutmelding 'headers already sent, cannot modify header information'. Ik kan precies de cookies niet verzenden.

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
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
$messagecount = $HTTP_COOKIE_VARS["message"];
$messagereplycount = $HTTP_COOKIE_VARS["message"];
$newtickets = 0; 
$replycount = 0;
$pm = 0;

$tickets = array();
$msgs = array();
$replies = array();
$yourreps = array();

$db->query("
    SELECT id, subject 
    FROM ticket 
    WHERE is_open 
        AND !tech 
");

$newtickets = $db->num_rows();
if ($newtickets) {
    while ($res = $db->row_array() AND $i < 6) {
        $i++;
        $tickets[$res['id']] = $res;
        $matched[] = $res['id'];
    }
}

//Check cookie if sound is needed
if( $messagecount > '$i') {
    echo "<EMBED SRC=\"sound.wav\" hidden=\"true\" AUTOSTART=\"TRUE\" WIDTH=\"0\" PLAYCOUNT=\"1\" ALIGN=\"CENTER\"></EMBED>";
}
else {
setcookie("message",$messagecount); 
}

// replies to tickets
if ($user['alert_reply_all'] == "0") { 
    
    $db->query("
        SELECT id, subject
        FROM ticket
        WHERE is_open
        AND awaiting_tech
        GROUP BY id
    ");

    $replycount = $db->num_rows();
    while ($res = $db->row_array()) {
        if (!@in_array($res['id'], $matched)) {
            $replies[$res['id']] = $res;
        } else {
            $replycount--;
        }
    }
}

//Check cookie if sound is needed
if( $messagereplycount > '$replycount') {
    echo "<EMBED SRC=\"sound.wav\" hidden=\"true\" AUTOSTART=\"TRUE\" WIDTH=\"0\" PLAYCOUNT=\"1\" ALIGN=\"CENTER\"></EMBED>";
}
else {
setcookie("messagereply",$messagereplycount); 
}

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
headers already sent, cannot modify header information

^ headers worden verstuurd op het moment dat php de eerste tekst naar de browser gaat versturen, gewoonlijk is dat bij een echo.

Als je even de hele foutmelding leest staat erbij op welke regel de eerste output wordt verstuurd ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De foutmelding zit bij die 2 setcookies... Hoe kan ik dat oplossen?

Acties:
  • 0 Henk 'm!

  • webfreakz.nl
  • Registratie: November 2003
  • Laatst online: 21-08 15:56

webfreakz.nl

el-nul-zet-é-er

Er mag geen output naar je browser zijn voor je setcookie(); doet.

Erg ranzige methode om het op te lossen is:

code:
1
2
3
4
5
6
7
<?
ob_start();

....

ob_end_flush();
?>

[ Voor 13% gewijzigd door webfreakz.nl op 01-12-2005 21:22 ]

"You smell that, son? What sir? Napalm, I love the smell of napalm in the mornin!" || Children of Bodom fan!


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op donderdag 01 december 2005 @ 21:16:
De foutmelding zit bij die 2 setcookies... Hoe kan ik dat oplossen?
mja, zie dat ik nog iets was vergeten te melden.

setcookie / header / session_start zijn functies waarbij data via de headers worden verstuurd. De headers kunnen 1 keer gestuurd worden en dat gebeurd zodra de eerste output door je script is gegenereerd (een echo bijvoorbeeld).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ah, en dus omdat ik een tweede setcookie() na een echo heb gaat het dus niet? Dus moet ik proberen om die setcookies te combineren in 1 update en dan pas een echo doen? Of heb ik het mis?

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Verwijderd schreef op donderdag 01 december 2005 @ 21:28:
Ah, en dus omdat ik een tweede setcookie() na een echo heb gaat het dus niet? Dus moet ik proberen om die setcookies te combineren in 1 update en dan pas een echo doen? Of heb ik het mis?
"Eerst headers dan output" lijkt me duidelijk genoeg, concreter: eerst setcookies() dan echo. Korter: Ja.
Pagina: 1