Ergebnis 1 bis 16 von 16

Thema: PHP: Vermalledeite Sessions .__.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    PHP: Vermalledeite Sessions .__.

    Moin moin.
    Ich bin gerade mal wieder dabei, einen PHP-Chat auf die Beine zu stellen. Das hatte ich in einer älteren Version schonmal grundlegend hinbekommen (will heißen: Input und Output funktionierten, sonst gab's keine großartig tollen Features). Nun mach ich das ganze nochmal wieder, mit neugeschriebenem Code und einigen anderen Sachen, aber jetzt stolpere ich wieder über eines meiner Lieblingsprobleme: Seiten mit Session-Verwendung, die einfach nicht mehr ausgeliefert werden wollen.

    Der Aufbau sieht wie folgt aus: Wir haben eine output.php, die in regelmäßigem Abstand neue Nachrichten aus der Datenbank abfragt und ausgibt, und eine input.php, die eben ein Textfeld und einen Submitbutton enthält, und die geschriebenen Nachrichten in die Datenbank einträgt. Das ganze findet sich in der chat.php in einem Frameset.

    Wenn ich mich nun einlogge (bzw. mir die Sessionvariablen besorge, die mir Zugriff zum Chat verschaffen) und die input.php allein aufrufe, wird sie ganz normal angezeigt, also das leere Textfeld + Submitbutton. Wenn ich sie nun aber erneut aufrufe (also neulade, die Seite schließe und neu öffne oder was auch immer), wird mir nichts mehr angezeigt - Die Seite bleibt weiß, mein Server liefert mir keine Datei. Das Gleiche bei der output.php - beim ersten Aufruf wird sie angezeigt, danach weigert sie sich.

    Bei der input.php geht es noch etwas weiter: Wenn man vor dem ersten Aufruf die output.php aufruft, will die input.php auch nicht mehr. Was natürlich ärgerlich ist, da ja schließlich beide Dateien im Frameset geladen werden sollen.

    Nun frage ich mich als kleiner, (was Sessions angeht) recht unerfahrener PHP-Programmierer: Warum denn? ;__;
    Außer der Sessioninitialisierung und der Datenbankverbindung ist in der input.php im Grunde kein PHP vorhanden ... die output.php ist schon umfangreicher, aber diese macht ja seltener Probleme ... ihr könnt mir nicht zufällig sagen, woran das liegt und wie ich das ändern kann?

    input.php:
    PHP-Code:
    <?php session_start();
    if (!(
    $_SESSION['logged'])) header ('Location: login.php');
    # MySQL
    include ('global.inc.php');
    $db->connect();
    # Nachricht eintragen
    if ($_POST['submit'] && !empty ($_POST['msg']))
    {
        
    $msg str_replace ('<''&lt;'str_replace ('>''&gt;'str_replace ('"''&quot;'$_POST['msg'])));
        
    $msg '['.date('H:i').'] '.$_SESSION['user'].' // '.$_SESSION['char'].' <strong>&raquo;</strong> '.$msg;
        
    $db->query ('INSERT INTO `chat` (`msg`, `userid`, `time`) VALUES ("'.$msg.'", "'.$_SESSION['userid'].'", UNIX_TIMESTAMP())');
    ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>

      <meta content="text/html; charset=iso-8859-1" http-equiv="content-type" />
      <title>ChatInput</title>
      <link href="style.css" rel="stylesheet" type="text/css" />

     </head>
     <body onload="document.input.msg.focus();">

      <form action="<?php echo ($_SERVER['PHP_SELF']); ?>" id="input" method="post" name="input">
      <strong class="symbol">&raquo;</strong> <input alt="Eingabefeld" class="input" id="msg" name="msg" style="width: 300px;" type="text" />
      <input alt="Absendebutton" class="input" id="submit" name="submit" style="width: 100px;" type="submit" value="Senden!" />
      </form>

     </body>
    </html>
    output.php:
    PHP-Code:
    <?php session_start();
    if (!(
    $_SESSION['logged'])) header ('Location: login.php');
    # MySQL
    include ('global.inc.php');
    $db->connect();
    # Pufferung deaktivieren
    ob_end_flush(); ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>

      <meta content="text/html; charset=iso-8859-1" http-equiv="content-type" />
      <title>ChatOutput</title>
      <link href="style.css" rel="stylesheet" type="text/css" />

     </head>
     <body>

    <?php echo ('Willkommen, '.$_SESSION['user'].'!<br />
    ------------------------------------------------------------<br />
    '
    );
    $db->query ('SELECT `id` FROM `chat` ORDER BY `id` DESC LIMIT 1');
    $position $db->result();
    echo (
    '<strong>Die letzten Zeilen:</strong><br />
    '
    );
    $db->query ('SELECT `msg` FROM `chat` WHERE `id` > '.($position 10).' ORDER BY `id` ASC');
    while (
    $db->record())
    {
        echo (
    $db->record[0].'<br />
    '
    );
    }
    echo (
    '------------------------------------------------------------<br />
    '
    );
    # Aktuelle Nachrichten
    while (== 3)
    {
        
    $db->query ('SELECT `id` FROM `chat` ORDER BY `id` DESC LIMIT 1');
        
    $currentposition $db->result();
        
    # Neue Nachrichten vorhanden?
        
    if ($position $currentposition)
        {
            
    $db->query ('SELECT `msg` FROM `chat` WHERE `id` > '.$position);
            while (
    $db->record())
            {
                echo (
    $db->record[0].'<script type="text/javascript"> self.ScrollTo(0, 99999); </script><br />
    '
    );
            }
        }
        
    $position $currentposition;
        
    flush();
        
    sleep (1);
    ?>

     </body>
    </html>
    chat.php:
    PHP-Code:
    <?php session_start();
    if (!(
    $_SESSION['logged'])) header ('Location: login.php');
    define ('sessionhash', !empty ($_COOKIE[session_name()]) ? '' session_name().'='.session_id().'&amp;'); ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>

      <meta content="text/html; charset=iso-8859-1" http-equiv="content-type" />
      <title>Chat ~ Eingeloggt als <?php echo ($_SESSION['user']); ?></title>

     </head>

     <frameset cols="*, 200px" frameborder="no" border="0" framespacing="0">
      <frameset rows="*, 60px, 300px" frameborder="no" border="0" framespacing="0">
       <frame name="output" src="output.php?<?php echo (sessionhash); ?>" />
       <frame name="input" src="input.php?<?php echo (sessionhash); ?>" />
       <frame name="tools" src="tools.php?<?php echo (sessionhash); ?>" />
      </frameset>
      <frame name="userlist" src="userlist.php?<?php echo (sessionhash); ?>" noresize="noresize" />
     </frameset>

     <noframes>
     <body>

      Dein Browser unterstütz keine Frames - <a href="http://www.opera.com/download/" onclick="window.open (this.href); return false;">Opera</a> hilft!

     </body>
     </noframes>
    </html>
    phpinfo()

  2. #2
    Kannst du mir mal Erklären was du mit str_replace machen willst ?
    Vielleicht kann ich dir da schon helfen.

  3. #3
    ich weiss zwar nicht kann sein das ich mich irre aber gehört das:
    PHP-Code:
    <?php session_start();
    nicht so:

    PHP-Code:
    <?php
    session_start
    ();
    Denn direkt dahinter hat das bei mir nie funktioniert...

  4. #4
    LOL
    Das kann man so oder so machen. Sollte das ein spamm werden oder was?
    Man kann auch so machen
    PHP-Code:
    <?php session_start(); ?>
    oder wenn der code in einer php datei steht auch so
    PHP-Code:
    <? sessions_start(); ?>

  5. #5
    Zitat Zitat von Milchbox
    LOL
    Das kann man so oder so machen. Sollte das ein spamm werden oder was?
    Man kann auch so machen
    PHP-Code:
    <?php session_start(); ?>
    oder wenn der code in einer php datei steht auch so
    PHP-Code:
    <? sessions_start(); ?>
    nein das hat bei mir nie funktioniert kA wieso o.ô
    Na gut dabei muss ich zugeben das ich so gut wie nie mit Sessions gearbeitet habe (nur nen winzig kleines Script habe ich unter Sessions geschrieben) und da hat das mit direkt dahinter nie funktioniert... kA wieso o.ô

  6. #6
    Nein, eigentlich ist das session_start(); sogar in der zweiten Zeile. Hatte ich jetzt einfach abgekürzt, weil ich auch davon ausgehe, dass das keine Rolle spielen sollte o_ô
    Und wiegesagt, wenn ich sonst Sessions benutze, funktioniert es ja.

    Aber das es etwas mit der str_replace-Verwendung zu tun hat, bezweifle ich dann doch stark >_>

  7. #7
    Erkläre mir nur was sie bringen soll.

  8. #8
    Zitat Zitat von Milchbox
    Erkläre mir nur was sie bringen soll.
    RTFM
    Str_replace ersetzt einfach <, > und " durch den passenden HTML-Code. Was soll er da groß erklären? Außerdem denke ich auch nicht, dass das etwas mit dem Problem zu tun hat. Naja, mit Sessions kenne ich mich auch nicht sonderlich gut (sprich: gar nicht) aus, ich arbeite generell nur mit puren Cookies ohne Sessions.

    freundliche Grüße, Rolus

  9. #9
    Du bist echt schlimm rolus!!!Ich wollte Toarus testen ob er das weiss was ich bezweifel.
    Wieso machst du dir so viel arbeit?Erstmal kann man die Zeichen einfacher umwandeln (entschärfen)!Mach einfach so:
    PHP-Code:
    <?php session_start();
    if (!(
    $_SESSION['logged'])) header ('Location: login.php');
    # MySQL
    include ('global.inc.php');
    $db->connect();
    # Nachricht eintragen
    if ($_POST['submit'] && !empty ($_POST['msg']))
    {
        
    $msg htmlspecialchars($_POST['msg']);
        
    $msg '['.date('H:i').'] '.$_SESSION['user'].' // '.$_SESSION['char'].' <strong>&raquo;</strong> '.$msg;
        
    $db->query ('INSERT INTO `chat` (`msg`, `userid`, `time`) VALUES ("'.$msg.'", "'.$_SESSION['userid'].'", UNIX_TIMESTAMP())');
    ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>

      <meta content="text/html; charset=iso-8859-1" http-equiv="content-type" />
      <title>ChatInput</title>
      <link href="style.css" rel="stylesheet" type="text/css" />

    </head>
    <body onload="document.input.msg.focus();">

      <form action="<?php echo ($_SERVER['PHP_SELF']); ?>" id="input" method="post" name="input">
      <strong class="symbol">&raquo;</strong> <input alt="Eingabefeld" class="input" id="msg" name="msg" style="width: 300px;" type="text" />
      <input alt="Absendebutton" class="input" id="submit" name="submit" style="width: 100px;" type="submit" value="Senden!" />
      </form>

    </body>
    </html>

  10. #10
    Zitat Zitat von Milchbox
    Du bist echt schlimm rolus!!!Ich wollte Toarus testen ob er das weiss was ich bezweifel.
    Wow, vielen Dank. Ich mein, ist ja logisch, dass ich Funktionen in meine Scripts einbaue, von denen ich keine Ahnung habe, was sie bewirken -__-
    Und keine Angst, htmlspecialchars() bzw. htmlentities() sind mir durchaus bekannt, allerdings ersetzen die mir dann doch ein paar Zeichen zu viel.

    Und, ähm, ja ... niemand 'ne Idee oder schonmal das gleiche Problem gehabt? ;__;

  11. #11
    LOL?
    Also das war ja wohl echt geil. Als wenn hier jemand getestet werden müsste.

    @Tomarus
    Hm, du könntest es zwar trotzdem ein wenig vereinfachen (laut Manual kann man als 1. und 2. Parameter ein Array übergeben) aber das bleibt ja dir überlassen.
    Zu deinem Hauptproblem: Laut Manual soll man eine Session schließen, wenn man ein Frameset verwendet, da nur einer Datei erlaubt wird, die Session zu bearbeiten... Vielleicht hilft dir das ja.

  12. #12
    Zitat Zitat von dead_orc
    Zu deinem Hauptproblem: Laut Manual soll man eine Session schließen, wenn man ein Frameset verwendet, da nur einer Datei erlaubt wird, die Session zu bearbeiten... Vielleicht hilft dir das ja.
    *knuddel* Dankeschön. Das hat geholfen. Nu funktioniert's
    Also denn bis zum nächsten Problem ^^"

  13. #13
    Ich gebe dir noch einen tip:
    Falls du payd webspace hast solltest du das script kürzen also mit leerzeichen sparen etc.
    warum:
    Ich wollte auch mal ein chat machen hab diesem aber wieder gelöscht weil der zu viel traffic verursacht!Überleg doch mal wenn man 10 user bei einem chat hat und die dateien alle zusammen ca. 2 kb haben sind das schonmal 20kb wenig oder?Nein zuviel wenn man jetzt noch einer stunde chatten rechnet und die refresh rate bei alle 10sek. liegt kann man sich ja ausrechnen wieviel das in einem Monat ist
    Also nimm für den Funpic, Ohost oder so lieber dafür.

  14. #14
    Öhm, was bringt es dir dann, wenn du im Skript die Leerzeichen entfernen willst? Oder meinst du die Leerzeichen im HTML-Code?

    Annahme: 10 User für 1 Std und 1024 Leerzeichen/Zeilenumbrüche im Quellcode (mal nicht beachtend, dass Zeilenumbrüche meistens 2 Byte verbrauchen, gehen wir hier von einem KB Free Spaces aus, was wohl schon viel ist) und 10 Sek Refresh
    Code:
    1024 * 10 * (60 * 60 / 10)
    =1024 * 10 * 360
    =10240 * 360
    =3686400 Byte
    =3600 KB
    Pro Stunde spart man dann immerhin 3600 KB (also um die 3,5 MB) Traffic, wenn man konstant 10 User im Chat hat. Wenn du einen Tarif mit sagen wir 5GB Traffic free hast, dann werden dir diese Leerzeichen kaum helfen, oder? (da dein Chat bestimmt nicht rund um die Uhr jeden Tag so sehr gefüllt ist)
    Und ich schätze, der HTML-Code wird nur etwa ein Zehntel bis ein Fünftel dieser Leerstellen hat.

  15. #15
    Öhmjoar ... eine Refreshrate im klassischen Sinne gibt's bei meinem Chat leider nicht - Per PHP werden jede Sekunde neue Nachrichten aus der Datenbank abgefragt, neu geladen wird nichts. Ich hab also exakt den Traffic der Nachrichtenabfrage (welche genau einmal pro User und Nachricht passiert) und die vielleicht 10KB pro User beim ersten Aufrufen des Chats ... also keine Sorge, meine 50GB Freitraffic im Monat werden wohl erstmal ausreichen.

    Also nächstes Mal doch bitte einfach mal in die geposteten Scripts schauen. Danke.

  16. #16
    Ich meinte das ja nur im allgemeinen!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •