tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
522
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    raage raage ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    Ich habe folgende File: Chat.php

    PHP-Code:
    <?php

    error_reporting
    (0);
    session_start();
    header('Cache-control: private'); // IE6 fix
    header("Content-Type: text/html; charset=utf-8");
    if (!isset(
    $_SESSION['USER_ID'])) $_SESSION['USER_ID'] = rand(124);
    $USER_ID $_SESSION['USER_ID'];
    session_write_close();
    ob_flush();
    flush();


    $fn 'chat.txt';

    $read = &$_GET['r'];
    if (isset(
    $read)) {

      if (!
    file_exists($fn)) {
        
    touch($fn);
        
    chmod($fn0644);
      }
      if (
    $read == 0chat_write('<E>');

      
    ignore_user_abort(true);
      
    $i 0;
      while (
    true) {
     
        
    $f fopen($fn'r');
        
    flock($f2);
        
    $offset 0;
        
    $offset trim(fgets($f));

        if (
    $offset $read) break;

        
    flock($f3);
        
    fclose($f);
        @
    set_time_limit(0);
     
        if (
    $i 20sleep(10);
        else 
    sleep(3);

        echo 
    "\n";
        
    ob_flush();
        
    flush();
        if (
    connection_status() != 0) {

          
    chat_write('<L>');
          exit();
        }
        
    $i++;
      }

      while (
    $s fgets($f)) {
        echo 
    utf8_encode($s);
        if (
    $offset <= ++$read) break;
      }

      
    flock($f3);
      
    fclose($f);
      exit();
    }


    function 
    chat_write($write) {
      global 
    $USER_ID$fn;

      
    $maxlines 35;
      if (
    trim($write) == '') return;

      if (!
    file_exists($fn)) {
        
    touch($fn);
        
    chmod($fn0644);
      }

      
    $f fopen($fn'r+');
      
    flock($f2);
      
    $offset 0;
      
    fscanf($f"%s\n"$offset);

      
    $offset++;
      
    $i 0;
      
    $chat '';

      while ((
    $i $maxlines) && ($s fgets($f))) {
        
    $chat .= $s;
        
    $i++;
      }

      
    $time date('H:i:s');
      
    $js "cs($offset,$USER_ID,'$time','User','$write','');\n";

      
    fseek($f0);

      
    ftruncate($f0);

      
    fwrite($f"$offset\n");

      
    fwrite($f$js);

      
    fwrite($f$chat);

      
    flock($f3);
      
    fclose($f);

      return 
    $js;
    }

    function 
    chat_delete($delete) {
      global 
    $fn;
      if (
    $delete == '') exit();
      if (!
    file_exists($fn)) {
        
    touch($fn);
        
    chmod($fn0644);
      }
      
    $f fopen($fn'r+');
      
    flock($f2);
      
    $offset 0;
      
    fscanf($f"%s\n"$offset);
      
    $chat '';
      
    $i 0;
      while (
    $s fgets($f)) {
        
    $s str_replace("'$delete'""''"$s);
        
    $chat .= $s;
        
    $i++;
      }
      
    fseek($f0);
      
    ftruncate($f0);
      
    fwrite($f"$offset\n");
      
    fwrite($f$chat);
      
    flock($f3);
      
    fclose($f);
    }


    $write = &$_POST['w'];
    if (isset(
    $write)) {
      if (
    $write == '') exit();

      
    $write stripslashes($write);

      
    $write htmlspecialchars($writeENT_QUOTES);
      
    $write addslashes($write);
      if (
    strpos($write'/del ') === 0) {
        
    $delete str_replace('/del '''$write);
        
    chat_delete($delete);
        exit();
      }

      
    $lines wordwrap($write100"\n"true);
      
    $lines explode("\n"$lines);
      foreach (
    $lines as &$line) {

        echo 
    utf8_encode(chat_write($line));
      }
      exit();
    }
    ?>
    var lines    = 35;
    var title    = '';
    var offset   = 0;
    var messages = new Array();
    var message  = document.getElementById('message');
    var chat     = document.getElementById('chat');
    var tmrRead = setTimeout('chat_read();', 300);

    function request_write(url, post) {
      r = false;
      if (window.XMLHttpRequest) {
        r = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        try {
          r = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
          try {
            r = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
          }
        }
      }
      if (!r) return false;
      r.onreadystatechange = alert_write;
      if (post == null) {
        r.open('GET', url, true);
        r.send(null);
      } else {
        r.open('POST', url, true);
        r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        r.send(post);
      }
    }

    function alert_write() {
      try {
        if ((r.readyState == 4) && (r.status == 200)) parse(r.responseText);
      } catch(e) {
      }
    }

    function request_read(url, post) {
      r2 = false;
      if (window.XMLHttpRequest) {
        r2 = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        try {
          r2 = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
          try {
            r2 = new ActiveXObject("Microsoft.XMLHTTP");
          } catch(e) {
          }
        }
      }
      if (!r2) return false;
      r2.abort();
      r2.onreadystatechange = alert_read;
      if (post == null) {
        r2.open('GET', url, true);
        r2.send(null);
      } else {
        r2.open('POST', url, true);
        r2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        r2.send(post);
      }
    }

    function alert_read() {
      clearTimeout(tmrRead);
      try {
        if ((r2.readyState == 4) && (r2.status == 200)) {
          parse(r2.responseText);
          tmrRead = setTimeout('chat_read();', 30);
        }
      } catch(e) {
        tmrRead = setTimeout('chat_read();', 3000);
      }
    }

    function chat_read() {
      clearTimeout(tmrRead);
      request_read('chat.php?r='+offset, null);
    }

    function keyup(e) {
      if (window.event) k = window.event.keyCode;
      else if (e) k = e.which;
      else return true;
      if (k == 13) chat_write();
    }

    function chat_display() {
      html = '';
      i = 0;
      while ((i < lines) && (i < offset)) {
        h = offset-i;
        if (messages[h]) html = messages[h] + html;
        i++;
      }
      chat.innerHTML = html;
      if (title != '') {
        title = title.replace(/&amp;/g, '&');
        title = title.replace(/&quot;/g, '"');
        title = title.replace(/'/g, '\'');
        title = title.replace(/&lt;/g, '<');
        title = title.replace(/&gt;/g, '>');
        document.title = title + ' - Chat by WebTemp.org';
      }
    }

    function chat_write() {
      request_write('chat.php', 'w='+escape(message.value));
      message.value = '';
    }

    function cs(o, i, t, u, m, c) {
      if (m == '<E>') {
        if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has entered the chat *</span><br />';
      } else if (m == '<L>') {
        if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has left the chat *</span><br />';
      } else {
        if (u != '') {
          u += ':';
          spaces = 5 - u.length;
          for (j = 0; j < spaces; j++) u += "&nbsp;";
          u += ' ';
        }
        if (title == '') title = m;
        m = m.replace(/ /g, '&nbsp;');
        messages[o] = '<span id="C'+i+'">['+t+'] '+u+'<b>'+m+'</b></span><br />';
      }
      if (o > offset) {
        offset = o;
        window.focus();
        message.focus();
      }
    }

    function parse(s) {
      if (s != '') {
        s = unescape(s);
        eval(s);
        chat_display();
      }
    }

    Nun will ich das er aus meinem Membereich die Namen auslie´t, ich habe es schonmal versucht anhand der Session uid die ich mit dem Login habe die Namen auslesen zu lassen und dann an den Chat zu übergeben. an dieser Stelle ist das geregelt welcher Name benutzt wird:


    PHP-Code:
    $js "cs($offset,$USER_ID,'$time','User','$write','');\n"

    Wenn ich da jetzt Statt User, Hallo eingeb funktioniert der Chat noch, wenn ich nun meine MySQL ausgabe da einfüge ($row['username']) dann bleibt der Chat bei Connecting..... stehen.
    Kann mir wer nen Tipp geben? habe auch schon die ausgabe anders definiert und es funktioniert nicht... auch schon bei der Chat Session selber statt User_ID uid eingetragen aber i-wie ist es verhext...
    hier wichtige Daten:
    Mein Userbereich hat flgende Userid Session $_Session['uid']
    meine MySQL Datenbank hat folgende Struktur:
    user.sql:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    `id` int(11) NOT NULL auto_increment,
      `username` varchar(32) NOT NULL,
      `password` varchar(32) NOT NULL,
      `email` varchar(255) NOT NULL,
      `name` varchar(64) NOT NULL,
      `icq` varchar(16) NOT NULL,
      `admin` int(11) NOT NULL default '0',
      `time` int(15) NOT NULL default '0',
      `msn` varchar(45) NOT NULL,
      `hobbie` text NOT NULL,
      `lieblingsfaecher` text NOT NULL,
      `hassfaecher` text NOT NULL,
      `klasse` varchar(3) NOT NULL,
      `schule` text NOT NULL,
      `avatarid` int(8) NOT NULL,
      `online` int(2) default NULL,
      PRIMARY KEY  (`id`)

    Vielen Dank schon mal!

    Mfg Raage
     

  2. #2
    kerstel kerstel ist offline Mitglied Gold
    Registriert seit
    Dec 2004
    Beiträge
    184
    [QUOTE=raage;1832256]Ich habe folgende File: Chat.php

    PHP-Code:
    $js "cs($offset,$USER_ID,'$time','User','$write','');\n"
    Wieso steht das in Anführungszeichen? Ich würde das so schreiben:

    PHP-Code:
    $js cs($offset$USER_ID$time"User"$write""); 
    LG
    Kerstel
     

  3. #3
    raage raage ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    ist das nicht wayne ob ' ' oder " " ... also ich aknn keinen unterschied feststellen
     

  4. #4
    kerstel kerstel ist offline Mitglied Gold
    Registriert seit
    Dec 2004
    Beiträge
    184
    klar kannst du auch '' anstatt "" schreiben, ich meinte die Anführungszeichen um die Variablen und um die Funktion, damit wäre $js ein String mit dem Inhalt:
    cs($offset,$USER_ID,'$time','User','$write','');\n, d.h. die Funktion cs wird gar nicht aufgeführt. Also Anführungszeichen um Funktion weg, dann darf bei der Übergabe an eine Funktion eine Variable nicht in Anführungszeichen stehen, da Du sonst auch hier nur einen String übergibst, also anstatt '$time' $time übergeben.
     

  5. #5
    raage raage ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    Ich habe jetzt mal über alles andere folgendes gesetzt:
    PHP-Code:
    $sql="SELECT username FROM users WHERE id='".$_SESSION['uid']."'";
    $result mysql_query($sql) OR die(mysql_error()); 
    $row mysql_fetch_assoc($result); 
    weil ich ja meine User auslesen möchte und den Namen an den Chat übergeben möchte damit da nicht immer nur User steht dementsprechend habe ich diese Zeile abgeändert und diesmal die ' ' weg gelassen:

    PHP-Code:
      $time date('H:i:s');
      
    $js "cs($offset,$USER_ID,$time,$row['username'],$write,'');\n"
    Funktioniert immer noch nicht obwohl es für mich logisch erscheint... wenn ich statt $row['username'] XYZ oder Halll oeingebe heißen alle User entweder XYZ oder Hallo... warum funktioniert das hier nicht mit dem Usernamen... bzw. was mache ich falsch?

    hier nochmal die File die den Chat später anzeigt: index.php
    PHP-Code:
     echo " <style type=\"text/css\">";
     echo
    "<!--";
     echo
    "body {color:black; background:white; font-family:verdana,arial,helvetica,sans-serif; font-size:13px;}";
     echo
    "#C1  {color:#000;}";
     echo
    "#C2  {color:#008;}";
     echo
    "#C3  {color:#004;}";
     echo
    "#C4  {color:#080;}";
     echo
    "#C5  {color:#088;}";
     echo
    "#C6  {color:#084;}";
     echo
    "#C7  {color:#040;}";
     echo
    "#C8  {color:#048;}";
     echo
    "#C9  {color:#044;}";
     echo
    "#C10 {color:#800;}";
     echo
    "#C11 {color:#808;}";
     echo
    "#C12 {color:#804;}";
     echo
    "#C13 {color:#880;}";
     echo
    "#C14 {color:#888;}";
     echo
    "#C15 {color:#884;}";
     echo
    "#C16 {color:#840;}";
     echo
    "#C17 {color:#848;}";
     echo
    "#C18 {color:#844;}";
     echo
    "#C19 {color:#400;}";
     echo
    "#C20 {color:#408;}";
     echo
    "#C21 {color:#404;}";
     echo
    "#C22 {color:#480;}";
     echo
    "#C23 {color:#4CC;}";
     echo
    "#C24 {color:#440;}";
     echo
    "#chat {height:561px; width:830px; font-family:courier new,monospace; font-size:11px; line-height:16px; border:1px solid #CCC; background:#EEE;}";
     echo
    "#message {font-family:courier new,monospace; font-size:12px; color:#00F;}";
     echo
    "a.copyright {font-size: 10px; color:#888;}";
     echo
    "-->";
     echo
    "</style>";
     echo
    "</head>";
     echo
    "<body>";
     echo
    "<div id=\"chat\">Connecting...</div>";
     echo
    "<input id=\"message\" type=\"text\" size=\"100\" onkeyup=\"keyup(event);\" />";
     echo
    "<input type=\"button\" value=\"Absenden\" onclick=\"chat_write();\" /><br />";
     echo
    " <script language=\"JavaScript\" type=\"text/javascript\" src=\"chat.php\"></script>"
    Geändert von raage (21.01.10 um 15:40 Uhr)
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    PHP-Code:
      $js "cs({$offset},{$USER_ID},{$time},{$row['username']},{$write},'');\n"
    Details zu {} findest du im Link in meiner Signatur (letzter Punkt).

    PHP-Code:
    // Funktioniert aber beachten Sie: außerhalb von
    // String-Anführungszeichen funktioniert das anders
    echo "Eine Banane ist $früchte[Banane].";
    .....
    // Funktioniert nicht; verwenden Sie geschweifte Klammern. Das
    // erzeugt einen Parser-Fehler.
    echo "Eine Banane ist $früchte['Banane'].";

    // Funktioniert
    echo "Eine Banane ist {$früchte['Banane']}."
    Ich bevorzuge die letzte Variante
    Geändert von Yaslaw (21.01.10 um 15:38 Uhr)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    Avatar von Daniel0108
    Daniel0108 Daniel0108 ist offline Mitglied Silber
    Registriert seit
    Jan 2010
    Ort
    Österreich
    Beiträge
    85
    Probier doch mal mit
    PHP-Code:
    error_reporting(E_ALL); 
    ob eine Fehlermeldung kommt.
    Wenn ja, dann poste Sie bitte...
    Edit: Er könnte es auch so probieren:
    PHP-Code:
    echo "Eine Banane ist ".$früchte['Banane']."."
    LG
    Daniel
    Geändert von Daniel0108 (21.01.10 um 17:40 Uhr)
     

  8. #8
    raage raage ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    vielen dank leute das problem lag wo anders... habe meine datenbankabfrage an den anfang des Scriptes gesetzt wobei es eigentlich eher mittig gesetzt werden sollte
     

Ähnliche Themen

  1. Problem mit AJAX-Chat
    Von Sasser im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 14.03.10, 23:10
  2. Antworten: 5
    Letzter Beitrag: 06.04.09, 17:36
  3. Ajax Chat Tutorial
    Von Kurt Cobain im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 28.02.08, 21:42
  4. Ajax Chat - Problem
    Von frank24 im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 27.07.06, 17:30
  5. Awaysystem für Ajax chat
    Von wt-e im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 24.03.06, 04:18