php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 15-11-2009, 15:36
2Bad4You
 Registrierter Benutzer
Links : Onlinestatus : 2Bad4You ist offline
Registriert seit: Jun 2007
Beiträge: 101
2Bad4You ist zur Zeit noch ein unbeschriebenes Blatt
2Bad4You eine Nachricht über ICQ schicken
Standard PHP Weiterleitung aus Ajax reload

Hey,

Ich habe einen Chat der auf Ajax und PHP basiert mit folgender Strucktur:
index.php -> Chat aufbau, chatverlauf und eingabe feld
getChat.php -> Verabeitet die Daten, also speichert Daten in die DB und liest dort aus. Wird per JavaScript AJAX aufgerufen.
Also Submit Button in der index.php löst JS Funktion aus die dann per POST oder GET die getChat.php aufruft.
Klappt auch alles soweit. Nun soll aber wenn jemand innerhalb von 15 Minuten nichts mehr geschrieben hat aus dem Chat fliegen. Also habe ich eine Abfrage eingebaut wenn der Chat refresht wird. Also wenn im PHP Script Daten aus der DB gelesen werden (alle 2 Sekunden) wird überprüft wann die lezte Nachricht von diesem User geschrieben wurde. Wenn es länger als 15 Minuten her ist wollte ich aus dem Script per
PHP-Code:
header("Location: .. "); 
rausheadern.
Nun wird allerdings logischerweise nur aus der getChat.php weitergeleitet (Dort wo die Abfrage stattfindet), jedoch nicht von der index.php, welche der User ja nie wirklich verlässt.

Wie kann ich nun der index.php mitteilen das der User nicht mehr aktiv ist. Habe gedacht es könnte funktionieren wenn ich per PHP eine JS Funktion aufrufe. Allerdings wird diese nur ausgegeben. Habe es so versucht:

PHP-Code:
if($SECURITY->checkActiveUser() == "false")
{
      echo 
'<script type="text/javascript">test();</script>';

Wie kann ich nun entweder eine JS Funktion aufrufen welche dann eine Weiterleitung erzwingt , oder der index.php mitteilen dass der User nicht mehr aktiv ist?

Falls weitere Informationen benötigt werden sagt bescheid^^
Danke im Vorraus :-)
Mit Zitat antworten
  #2 (permalink)  
Alt 15-11-2009, 15:53
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Lass doch in der index.php einen JavaScript-Ticker mitlaufen. Und wenn die 15 Minuten überschritten sind, leite ihn mit window.location.href weiter.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 15-11-2009, 16:19
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Würde gehen, aber es wäre äußerst störend, wenn sich die Seite nach 15 Minuten neu lädt, während ich gerade im Chat schreibe oder lese. Deshalb sollte zumindest beim Abschicken eines Textes der Timer neu gestartet werden.

Es ist aber auch kein Problem, Javascript aus einer AJAX-Antwort auszuführen. Du musst es nur finden und eval'n.

Geändert von onemorenerd (15-11-2009 um 16:24 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 15-11-2009, 16:29
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von onemorenerd Beitrag anzeigen
Würde gehen, aber es wäre äußerst störend, wenn sich die Seite nach 15 Minuten neu lädt, während ich gerade im Chat schreibe oder lese. Deshalb sollte zumindest beim Abschicken eines Textes der Timer neu gestartet werden.
Das ist doch selbstverständlich. Darum habe ich es auch nicht erwähnt.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #5 (permalink)  
Alt 16-11-2009, 00:55
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

du kannst auch in der getChat.php einen speziellen X-Header oder Statuscode zurückgeben. Dann brauchst du nicht den responseText auf JS untersuchen, sondern nur den entsprechenden Header auslesen, ob der User ausgeloggt werden soll. Wenn der Chat sowieso mit Login über HTTP Authentication funktioniert, bietet sich der 401-Statuscode mit WWW-Authenticate-Header an, der den Benutzer (falls er überhaupt noch mitliest) dazu auffordert, erneut Benutzernamen und Passwort anzugeben.

Gruß,

Amica
Mit Zitat antworten
  #6 (permalink)  
Alt 16-11-2009, 23:22
2Bad4You
 Registrierter Benutzer
Links : Onlinestatus : 2Bad4You ist offline
Registriert seit: Jun 2007
Beiträge: 101
2Bad4You ist zur Zeit noch ein unbeschriebenes Blatt
2Bad4You eine Nachricht über ICQ schicken
Standard

Hey, also eingeloggt wird man über einen Session Login. Die Sache mit dem Header finde ich interessant, weiß nur nicht genau wie ich die umsetzen kann. Ich poste mal ein bischen quelltext damit man das ganze besser versteht:

index.php
PHP-Code:
<?php

require_once("../common.php");

require_once(
"class.Chat.php");

$CHAT = new Chat();


if(!
$SECURITY->checkLoginStatus())
{
    
header("Location: ../index.php");
}
else if(!
$SECURITY->getRights("Friend") && (!$SECURITY->getRights("Admin")))
{
    
header("Location: ../index.php");
}
else
{
    
$CHAT->InsertUserToChat();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ajax Web Chat</title>
<link rel="stylesheet" href="css/chat.css" type="text/css" />
<script language="javascript" src="js/chat.js"></script>
</head>

<body onLoad="javascript:startChat();">
<h2>2Bad4You.net / cyber-hate-club.de Webseiten Chat</h2>
        <p id="p_status">Status: Normal</p>
        
        Chat Verlauf:<br />
        <div id="div_chat" class="chat_div"></div>
        
        <div class="headline_user_div">Aktive User im Chat:</div>
        <div id="user_div" class="user_div"></div>
         
        <div class="control_div">
        <form id="frmmain" name="frmmain" onSubmit="return
 blockSubmit('<?php if(isset($_SESSION['username']) &&
 (
$_SESSION['username'] != "")){ echo $_SESSION['username']; }?>');">
            <input type="button" name="btn_get_chat" id="btn_get_chat" value="Refresh Chat" 
onClick="javascript:getChatText();" />
            <input type="button" name="btn_reset_chat" id="btn_reset_chat" value="Reset Chat" 
onClick="javascript:resetChat();" />
<br />
            <input type="text" id="txt_message" name="txt_message" style="width: 447px;" />
            <input type="button" name="btn_send_chat" 
id="btn_send_chat" value="Send" 
onClick="javascript:sendChatText('<?php if(isset($_SESSION['username'])
 && (
$_SESSION['username'] != "")){ echo $_SESSION['username']; }?>');" />
        </form>
        </div>         
    </body>
</html>
chat.php
PHP-Code:
<?php
// Header Setzen
header("Expires Mon, 26 Jul 1997 05:00:00 GMT" );
header("Last Modified: " .gmdate"D, d M Y H:i:s" ) . "GMT" );
header("Cache-Control: no-cache, must-revalidate" );
header("Pragma: no-cache" );
header("Content-Type: text/xml; charset=utf-8");

require_once(
"../common.php");
require_once(
"class.Chat.php");

$CHAT = new Chat();

// Prüfen ob eine Nachricht an den Chat gesendet wurde
if(isset($_GET['action']) && ($_GET['action'] == "insertMessage"))
{
         
$SECURITY->globalStripSlashes();
        
    
$CHAT->InsertChatMessage($_GET['chat'], $_POST['name'], $_POST['message']);
}

// Prüfen ob Nachrichten angefordert wurden sind
if(isset($_GET['action']) && ($_GET['action'] == "getMessages"))
{
    if(isset(
$_GET['starttime']) && ($_GET['starttime'] != "") && (isset($_GET['last'])) && ($_GET['last'] != ""))
    {
        
$starttime $_GET['starttime'];
        
$last $_GET['last']; 
    }
    else
    {
        
$starttime date("Y-m-d H.i.s");
        
$last 0;
    }
    
    
$CHAT->getChatMessages($starttime$last);
}


if(isset(
$_GET['action']) && ($_GET['action'] == "getUser"))
{
    
$CHAT->getActiveUsers();
    
}
    
?>
Und aus der Chat Klasse die Funktion welche neue Nachrichten aus der Datenbank ausliest und dabei überprüft ob ein User noch aktiv ist.
PHP-Code:
public function getChatMessages($chatStartTime$lastMessageId)
{
    
// Prüfen ob Chat User noch Aktiv
        
    /**
    if(!$SECURITY->checkActiveUser())
    {
        doSomething();
    }
    **/
        
    // Nachrichten aus der Datenbank auslesen
    
$sql "SELECT message_id, user_name, message, 
post_time FROM message WHERE chat_id = '1' AND post_time >
'"
.$this->DB->escapeString($this->SECURITY->stripTags($chatStartTime))."'
 AND message_id > 
'"
.$this->DB->escapeString($this->SECURITY->stripTags($lastMessageId))."'";
        
    
$result $this->DB->query($sql);
        
    
$JSON '{"messages": { ';

    
// Prüfen ob Messages vorhanden sind
    
if(count($result) > 0)
    {
        
$JSON .= '"message":[';
            
        for(
$i=0$i<count($result); $i++)
        {
            
$JSON .= '{';
            
$JSON .= '"id":  "' $result[$i]['message_id'] . '",
                        "user": "' 
htmlspecialchars($result[$i]['user_name']) . '",
                        "text": "' 
htmlspecialchars($result[$i]['message']) . '",
                        "time": "' 
substr($result[$i]['post_time'],11) . '",
                        },'
;
        }
    
        
$JSON .= ']';
    }
    else
    {
        
$JSON .= '"message":[]';
    }
        
    
$JSON .= '}}';
        
    echo 
$JSON;

An der auskommentierten Stelle doSomething soll dann etwas passieren wenn der user nicht mehr aktiv ist. Welchen Header müsste/könnte ich dort setzen bzw wie könnte ich dort den logout aus dem Chat ausführen.

Ich sitz da jetzt schon was länger vor und bin über jeden weiteren Denkanstoß dankbar.
Mit Zitat antworten
  #7 (permalink)  
Alt 16-11-2009, 23:35
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Erstmal was anderes: Dein Expires-Header ist ungültig, dort fehlt der Doppelpunkt.

Zu doSomething:
PHP-Code:
header("X-Logoff: true"); 
im PHP-Code würde schon reichen. Per JS kannst du dann vom XMLHttpRequest-Objekt die Methode
Code:
getResponseHeader("X-Logoff")
aufrufen, um zu überprüfen, ob der User rausfliegen soll.

Den Namen kannst du dir selbst ausdenken, er muss nur spezifikationskonform mit "X-" anfangen.
Mit Zitat antworten
  #8 (permalink)  
Alt 22-11-2009, 23:53
2Bad4You
 Registrierter Benutzer
Links : Onlinestatus : 2Bad4You ist offline
Registriert seit: Jun 2007
Beiträge: 101
2Bad4You ist zur Zeit noch ein unbeschriebenes Blatt
2Bad4You eine Nachricht über ICQ schicken
Standard

Hey,

Vielen Dank für eure Hilfe. Mit der X-Header Methode klappt das ganze super. Vielen dank dafür.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP-Timeout durch Reload und Ajax? joop HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 2 13-01-2009 13:01
[AJAX] Bestes Ajax Framework PHP-Master07 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 4 18-11-2008 17:15
[AJAX] Ajax "Profi" gesucht! owi Jobgesuche 0 06-11-2008 22:34
Liveticker ohne Reload (PHP + AJAX) =delme= Projekthilfe 1 03-03-2008 11:43
reload jesuzz PHP Developer Forum 3 11-10-2002 14:09

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:19 Uhr.