flona: 2 Fragen

Hallo, ihr Profis!
Ich wollte selber ein Forum im PHP programmieren und das Grundgerüst steht und läuft auch schon gut. Jetzt habe ich aber 2 Fragen:
1. Die Seite wird einzig und allein über die index.php gesteuert und der Link sieht z.B. so aus: index.php?site=forum&su=forenübersicht&....
Das ganze mache ich mit Includes. Unter anderem habe ich eins für den Login. ich möchte jetzt, dass wenn man das Formular zum einloggen abschickt die gleichen GET Parameter wie bei der jetzigen Seite an des action="index.php" drangehängt werden.
2. In den meisten Foren gibt es ja so Symbole die anzeigen, ob ich in dem Thema schon drin war, also un/gelesen. Wie kann ich des am besten abspeichern wer was schon gelesen hat? In MySql oder Cookies oder mit was ganz anderem?
Danke im Voraus

  1. Hallo, ihr Profis!
    Ich wollte selber ein Forum im PHP programmieren und das Grundgerüst steht und läuft auch schon gut. Jetzt habe ich aber 2 Fragen:

    1. Die Seite wird einzig und allein über die index.php gesteuert und der Link sieht z.B. so aus: index.php?site=forum&su=forenübersicht&....
      Das ganze mache ich mit Includes. Unter anderem habe ich eins für den Login. ich möchte jetzt, dass wenn man das Formular zum einloggen abschickt die gleichen GET Parameter wie bei der jetzigen Seite an des action="index.php" drangehängt werden.

    Bei der ersten Frage kann ich dir helfen:
    $_SERVER["QUERY_STRING"] liefert dir die GET-Parameter.

    Bsp.: du rufst die seite meinet wegen so auf:
    index.php?site=login
    dann ist $_SERVER["QUERY_STRING"] = "site=login"

    in deinem Formular schreibst du dann einfach:
    ..."<form action="index.php' . $_SERVER["QUERY_STRING"] . '" method="POST">...

    Vorraussetzung ist aber, dass du als Methode POST angeben musst (siehe Beispiel) , denn sonst klappt es so nicht. Aber bei Login würde ich sowieso POST nehmen.

    Viel Spaß.

    1. Danke fbrider hast mir sehr geholfen. Funktioniert!

      Hat für die zweite Frage vll noch einer einen Tipp für mich.

    2. Hi,

      in deinem Formular schreibst du dann einfach:
      ..."<form action="index.php' . $_SERVER["QUERY_STRING"] . '" method="POST">...

      ... und machst die Seite damit XSS-anfaellig.

      *Niemals* vom Client kommende Daten unbehandelt in einen Kontext, in dem bestimmte Zeichen spezielle Bedeutung haben koennen, uebernehmen.

      In diesem Fall lautet der Kontext HTML, und deshalb ist htmlspecialchars() drauf anzuwenden.

      MfG ChrisB

      1. In diesem Fall lautet der Kontext HTML, und deshalb ist htmlspecialchars() drauf anzuwenden.

        Mach ich fast immer. In diesem Fall schon geschehen!
        Aber trotzdem danke, man kann ja nie wissen...

    1. In den meisten Foren gibt es ja so Symbole die anzeigen, ob ich in dem Thema schon drin war, also un/gelesen. Wie kann ich des am besten abspeichern wer was schon gelesen hat? In MySql oder Cookies oder mit was ganz anderem?
      Danke im Voraus

    Zu zweitens ist mir auch noch was eingefallen.
    Angenommen du möchtest diese Markierung nur für kurze Zeit haben (in meinem Fall bis die Browserhistory geleert wird), dann kannst du es mit CSS machen.

    Du rufst den Thread mit einem Link auf:
    <a href="index.php?site=forum&t=2423" class="forum_link">

    Im CSS schreibst du dann:

    .forum_link:link:before
    {
    content: url(unvisited.gif);
    }

    .forum_link:visited:before
    {
    content: url(visited.gif);
    }

    Mfg FBRider

    1. bis die Browserhistory geleert wird

      gibts nicht auch die Einstellung im Browser, dass er den Verlauf nicht speichern soll

      wenn man sich aber unter gleichem Namen auf einem anderen PC anmeldet, sind alle Beiträge ungelesen!

      ich werds mal so versuchen, aber wenn jemand eine bessere Idee hat, bitte schreiben!

      1. bis die Browserhistory geleert wird
        gibts nicht auch die Einstellung im Browser, dass er den Verlauf nicht speichern soll

        wenn man sich aber unter gleichem Namen auf einem anderen PC anmeldet, sind alle Beiträge ungelesen!

        ich werds mal so versuchen, aber wenn jemand eine bessere Idee hat, bitte schreiben!

        ja das stimmt. Bei Cookies ist es ja aber auch so.

        Du kannst ja eine Tabelle in MySQL erstellen:

        user_id und thread_watched als spalten.

        sobald ein user einen thread aufruft, dann schreibst du in die Tabelle die user_id mit dem thread.

        Wenn du dann die Links generieren willst, fragst du alle threads aus dieser neuen tabelle ab, die zu dem user_id gehören.

        dann erhälst als result ja ein array mit denke ich folgendem aufbau:

        $result[1]['thread_watched'] = 123
        $result[2]['thread_watched'] = 132

        das gehst du dann durch:
        $watched = array();
        foreach ($result as $row) {
        array_push($watched, $row['thread_watched']);
        }

        Wenn du jetzt die links ausgeben willst: meinetwegen $thread_id = 100

        if(in_array($thread_id, $watched)) {
        //mach was, damit der link als gelesen ausgegeben wird
        } else {
        //mach was, damit der link als ungelesen ausgegeben wird
        }

        Das is natürlich recht aufwendig und es häufen sich schnell viele einräge in der tabelle an. vielleicht kann man noch ein time-feld hinzufügen und alte tupeln (datensätze) löschen lassen, wenn man neue einschreibt.

        Mfg FBRider

        1. So ähnlich habe ich es gemeint. Ich hätte, wenn ein neuer Beitrag erstellt wird für jeden angemeldeten User einen neuen Eintrag erstellt, dass er den Beitrag xy noch nicht gelesen hat, beim Aufruf des Beitrags die Zeile rauslöschen.
          Und in den meisten Foren wird beim ausloggen alles auf gelesen gesetzt. Dann würden sich die Einträge in Grenzen halten.

          1. Hi,

            Ich hätte, wenn ein neuer Beitrag erstellt wird für jeden angemeldeten User einen neuen Eintrag erstellt, dass er den Beitrag xy noch nicht gelesen hat

            schlechte Idee. Je mehr User, desto länger dauert es dann, einen neuen Eintrag zu speichern.

            Und in den meisten Foren wird beim ausloggen alles auf gelesen gesetzt. Dann würden sich die Einträge in Grenzen halten.

            Bei denen die sich wieder einloggen. Aber denk auch an Karteileichen: die werden dann fleißig gefüttert.
            Abgesehen davon ist es übel, zwangsweise alles auf gelesen zu setzen, da der Besucher dann gezwungen ist, immer alles direkt zu lesen oder andernfalls sehr umständlich nach noch ungelesenen Beiträgen suchen muss.

            Sinnvoller ist es, für jeden Besucher alle gelesenen Beiträge zu speichern und bei der Speicherung ggfls. ältere Einträge zu löschen. Entweder korrespondierend mit der Zeitspanne für die Anzeige "neuer" Beiträge oder - falls es eine solche nicht gibt - ein mengenmäßiges Limit setzen und dann Eintrag des ältesten Beitrages einfach überschreiben.

            freundliche Grüße
            Ingo

  2. Hallo!

    1. In den meisten Foren gibt es ja so Symbole die anzeigen, ob ich in dem Thema schon drin war, also un/gelesen. Wie kann ich des am besten abspeichern wer was schon gelesen hat? In MySql oder Cookies oder mit was ganz anderem?

    Speicherst du die Daten jetzt schon in er DB? Wenn ja, mach eine Tabelle
    user_beitrag mit den spalten user_id und beitrag_id und wenn ein user einen Beitrag aufruft, dann schreib einen Datensatz in diese Tabelle. Damit weißt du wer den Beitrag schon angesehen hat.

    mfg
      frafu

  3. Hello,

    1. Die Seite wird einzig und allein über die index.php gesteuert und der Link sieht z.B. so aus: index.php?site=forum&su=forenübersicht&....
      Das ganze mache ich mit Includes. Unter anderem habe ich eins für den Login. ich möchte jetzt, dass wenn man das Formular zum einloggen abschickt die gleichen GET Parameter wie bei der jetzigen Seite an des action="index.php" drangehängt werden.

    echo "<form action="index.php".$url_param" method="post" enctype="multipart/form-data">";

    $url_param enthalten dann, wenn vorhanden, die url-codierten Parameter hinter dem Fragezeichen.

    Liebe Grüße

    Tom

    --
    Coming Back soon