Chris1996: Artikel merken

Hallo und guten Tag,

ich möchte gerne auf meiner Seite eine Funktion "merken" anbieten, der User muss sich dazu nicht einloggen. Wie könnte ich dieses umsetzten?

Bis jetzt habe ich dieses im Kopf:

  • User geht auf die Seite
  • wählt einen Artikel
  • auf der Seite gibt es ein Button "merken"
  • der User klickt darauf und der Button wechselt in den Status "entfernen"
  • gleichzeitig ist auf der Seite "merken" der Artikel

Hab leider keine Ahnung wie ich das ohne Login umsetzten kann :( müsste eigentlich mit Cookis gehen oder? Aber dieses sind doch hier in DE ohne weiteres nicht mehr erlaubt oder?

Gibt es dazu vielleicht ein kleines Beispiel wie ich dieses umsetzten kann? Meine Seite ist in PHP, MySQL, HTML und CSS umgesetzt.

Liebe Grüße
Chris1996

  1. Meine Herren,

    Hab leider keine Ahnung wie ich das ohne Login umsetzten kann :( müsste eigentlich mit Cookis gehen oder? Aber dieses sind doch hier in DE ohne weiteres nicht mehr erlaubt oder?

    Ob Cookies rechtlichen Hürden unterliegen, kann ich nicht beantworten.

    Es gibt neben Cookies aber auch weitere clientseitige Speichermethoden. WebStorage, SessionStorage, IndexedDB und (zwar nicht standardisiert aber in FF,Chrome,Safari und Opera unterstütz) WebSQL.

    Aber dafür gelten dann vermutlich die selben Richtlinien wie für Cookies.

    Ansonsten kann der User sich die Artikel doch vermutlich sowieso über die Browser-interne Lesezeichen-Verwaltung merken, oder nicht?

    1. Hallo,

      Ansonsten kann der User sich die Artikel doch vermutlich sowieso über die Browser-interne Lesezeichen-Verwaltung merken, oder nicht?

      natürlich, es ist eie vollwertige URL die auch in den Favoriten bzw. Lesezeichen abgeleg werden kann. Willst du mir damit sagen, dass die Funktion "merken" überflüssig ist?

      Liebe Grüße
      Chris1996

      1. Meine Herren!

        natürlich, es ist eie vollwertige URL die auch in den Favoriten bzw. Lesezeichen abgeleg werden kann. Willst du mir damit sagen, dass die Funktion "merken" überflüssig ist?

        Für mich wäre sie das. Für andere Nutzer mag sie nützlich sein. Ich wollte aber eigentlich darauf hinaus, dass du die Standardlesezeichen-Funktion nutzen kannst, wenn du die rechtlichen Hürden für lokale Speicher nicht überwinden kannst. Einige Browser bieten eine API, um programmatisch [Stackoverflow] auf die Lesezeichen-Verwaltung zugreifen zu können.

  2. Hallo und guten Tag,

    ich bin ein Schritt weiter, meine artikel.php wurde um folgende Zeile erweitert:

      
    <?php  
    setcookie ("artikelID", "1", time()+14400);  
    ?>  
    
    

    meine merken.php sieht derzeit so aus:

      
    <?php  
    echo "artikelID: " .htmlspecialchars($_COOKIE["artikelID"])."<br>";  
    ?>  
    
    

    damit kann ich nun die Artikel ID auslesen und in der MySQL Abfrage nutzten um den Artikel wieder auszulesen.

    So meine Frage jetzt, was ist, wenn mein User z.B. 5 Artikel merken möchte? Muss ich dann 5 Cookies anlegen oder kann ein Cookie auch erweitert werden?

    Liebe Grüße
    Chris1996

    1. Om nah hoo pez nyeetz, Chris1996!

      So meine Frage jetzt, was ist, wenn mein User z.B. 5 Artikel merken möchte? Muss ich dann 5 Cookies anlegen oder kann ein Cookie auch erweitert werden?

      Cookies sind dafür nicht die beste Idee. Ein Cookie ist eine Textwurst, lässt sich also nur mit String-Operationen behandeln, sie wird zwischen Client und Server ausgetauscht, verbraucht somit Bandbreite und ist in Länge und Lebensdauer beschränkt. Zudem ist auch die Anzahl der Cookies limitiert und du musst für die Nutzung von Cookies um Erlaubnis bitten.

      local-storage hat diese Nachteile nicht. Allerdings weiß ich nicht, ob man für die Verwendung von local-storage auch eine Erlaubnis brauchst.

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Sala und Salami.

      1. Hallo,

        das Problem bei Local-Storage ist aber, dass nur Moderne Browser damit umgehen können. Meine Seite ist auch für ältere User gedacht bei denen sehr viele noch Win Xp oder auch Win 98 haben, somit fällt diese Funktion leider weg.

        Liebe Grüße
        Chris1996

        1. Meine Herren!

          das Problem bei Local-Storage ist aber, dass nur Moderne Browser damit umgehen können. Meine Seite ist auch für ältere User gedacht bei denen sehr viele noch Win Xp oder auch Win 98 haben, somit fällt diese Funktion leider weg.

          Für XP gibt es ja immerhin schon den IE8, der unterstüzt Web Storage. Für noch ältere Browser würde ich mal nach Polyfills suchen.

      2. Cookies sind dafür nicht die beste Idee. Ein Cookie ist eine Textwurst, lässt sich also nur mit String-Operationen behandeln,

        Web Storage speichert auch nur Text, der einzige Unterschied ist der einfachere Zugriff auf diesen Text. Hat er aber erstmal die Daten, die Artikelliste, egal ob aus einem Cookie oder aus einem Web-Storage-Schachtelchen, ist die weitere Verarbeitung gleich: Er würde seine Artikelliste mit Javascript so oder so als Zeichenkette à la "123,727,341,6767" speichern, mit String.split() zur Nutzung aufteilen und mit Array.join() zur Speicherung vorbereiten.

        sie wird zwischen Client und Server ausgetauscht, verbraucht somit Bandbreite

        Grundsätzlich richtig, aber du darfst die Kirche auch gerne im Dorf lassen, selbst wenn das Dorf nur mit 512-KBit-Spar-DSL versorgt ist. Am Ende präsentiert er seine Ware mit mehreren 150 KByte großen Bildern und Videos, meinst du nicht, dass ein 150 Byte großes Cookie da nur noch homöopathisch ins Gewicht fällt, selbst, wenn's mehrfach übertragen werden muss?

        und ist in Länge und Lebensdauer beschränkt.

        Beim Speichern von einem Dutzend Artikelnummern wird er kaum an die Längenbegrenzung von Cookies stoßen.

        Dass die Lebensdauer von Cookies beschränkt werden kann, ist ein Vorteil. Web Storage bleibt dem Besucher bis in alle Ewigkeit an der Backe kleben, so er nicht manuell eingreift oder der Browser gnädigerweise von sich aus seit 20 Jahren unbenutzen Kram löscht.

        Seinem Cookie könnte er eine sinnvolle Altersgrenze geben. Wenn ich einen Laden ein Jahr lang nicht mehr besuche, dann habe ich ziemlich sicher auch kein Interesse mehr an den Artikeln in der Merkliste.

        Zudem ist auch die Anzahl der Cookies limitiert.

        Für eine Merkliste braucht er auch nur einen Cookie - und so limitiert ist die Anzahl nun nicht.

        und du musst für die Nutzung von Cookies um Erlaubnis bitten.

        Das ist, so pauschal, falsch.

        local-storage hat diese Nachteile nicht. Allerdings weiß ich nicht, ob man für die Verwendung von local-storage auch eine Erlaubnis brauchst

        Das (vermeintliche) Problem bei Cookies ist, dass man darin eine eindeutige Kennung (Neudeutsch: ID) ablegen kann, mit der sich jeder Besucher auf Jahrzehnte hin wiedererkennen lässt.

        Daraus folgt:
        1. Wenn man keine eindeutige Kennung im Cookie ablegt, ist gegen die Cookieverwendung auch nichts einzuwenden. Der ursprüngliche Ansatz, die Artikelnummern im Cookie zu speichern, ist also vollkommen ok.

        2. Jede andere Form der Speicherung von Daten auf dem Nutzerrechner ist genauso unzulässig, wenn sie zur Speicherung besagter Kennung benutzt wird.
        Es ist doch offenkundig Jacke wie Hose, ob der Stempel, der jedem Besucher ungefragt auf die Stirn geballert wird, in einem Cookie landet, per Web Storage gespeichert wird oder, ganz perfide, als Cache-Objekt daherkommt.

        Nochmal, kurz: Das Problem ist die Kennung, nicht der Keks.

        1. Hallo,

          nur eine kleine Ergänzung.

          Dass die Lebensdauer von Cookies beschränkt werden kann, ist ein Vorteil. Web Storage bleibt dem Besucher bis in alle Ewigkeit an der Backe kleben, so er nicht manuell eingreift oder der Browser gnädigerweise von sich aus seit 20 Jahren unbenutzen Kram löscht.

          »Web Storage« ist der Überbegriff für die JavaScript-APIs sessionStorage und localStorage. Erstere gilt, wie der Name schon sagt, nur für die Session und entspricht somit Session-Cookies. Zweitere gilt tatsächlich bis Browser oder Nutzer die gespeicherten Daten leeren. Ein automatisches Verfallsdatum wie bei Cookies lässt sich nicht angeben.

          Mathias

    2. So meine Frage jetzt, was ist, wenn mein User z.B. 5 Artikel merken möchte? Muss ich dann 5 Cookies anlegen oder kann ein Cookie auch erweitert werden?

        
      <?php  
       setcookie ("artikelID[0]", "102-Alles ist toll", time()+14400);  
       setcookie ("artikelID[1]", "3415-Wahnsinn zur Weihnacht", time()+14400);  
       setcookie ("artikelID[3]", "1233-Kekse enthalten Zucker", time()+14400);  
      # ...  
      ?>  
      
      

      Du baust einen Array und bekommst auch einen Array in $_COOKIE['artikelID'] geliefert. Ich würde alle Informationen, die ich brauche, damit ich mit JS aus dem Cookie die Link-Liste der gemerkten Seiten erzeugen kann auch darin speichern. Obiges lässt sich am ersten '-' splitten.

      Zu den Bedenken hinsichtlich des Cookies: Schreib in die Datenschutzerklärung, wozu das Ding gut ist.

      Jörg Reinholz

  3. Hallo und guten Tag,

    hab noch eine Idde, ich speichere genau ein Cookie auf dem Rechner darin ist eine ID enthalten, wenn der User auf "merken" klickt, dann schaue ich nach was für eine ID im Cookie ist und speichere das ganze in einer MySQL DB ab, hätte den Vorteil, dass der User nur ein Cookie hat und ich alles in einer Datenbank habe, was die Verwaltung um einiges einfacher macht oder?

    Sorry wenn ich immer wieder mit anderen Ansätzen komme, aber ich will das ganze nicht in wenigen Wochen / Monaten neu machen.

    Liebe Grüße
    Chris1996

    1. Om nah hoo pez nyeetz, Chris1996!

      hab noch eine Idde, ich speichere genau ein Cookie auf dem Rechner darin ist eine ID enthalten, wenn der User auf "merken" klickt, dann schaue ich nach was für eine ID im Cookie ist und speichere das ganze in einer MySQL DB ab, hätte den Vorteil, dass der User nur ein Cookie hat und ich alles in einer Datenbank habe, was die Verwaltung um einiges einfacher macht oder?

      Da das aber auch für unangemeldete gelten soll, müsstest du den Browser auf dem das geschieht, eindeutig wiedererkennen. Und das ist imho genau das, was man als Nutzer vermeiden möchte. Ich würde tatsächlich auf local-storage setzen und Nutzer mit älteren Browsern haben halt diesen Komfort ebensowenig wie ein Oldtimer eine Servolenkung oder ein Fernseher von 1965 eine kabellose Fernbedienung.

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen nass und Nasser.

      1. Om nah hoo pez nyeetz, Matthias Apsel!

        oder ein Fernseher von 1965 eine kabellose Fernbedienung.

        Es gab übrigens schon in der Frühzeit Fernbedienungen für Fernseher. In meiner Kindheit hatten wir einen Sibylle 1 und für den gab es auch eine Fernbedienung.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Nacht und Nachtisch.

      2. Hallo

        hab noch eine Idde, ich speichere genau ein Cookie auf dem Rechner darin ist eine ID enthalten, wenn der User auf "merken" klickt, dann schaue ich nach was für eine ID im Cookie ist und speichere das ganze in einer MySQL DB ab, hätte den Vorteil, dass der User nur ein Cookie hat und ich alles in einer Datenbank habe, was die Verwaltung um einiges einfacher macht oder?

        Da das aber auch für unangemeldete gelten soll, müsstest du den Browser auf dem das geschieht, eindeutig wiedererkennen. Und das ist imho genau das, was man als Nutzer vermeiden möchte.

        Das gilt für dich, (in gewissen Grenzen) für mich, jedoch insbesondere für Martin. ;-)

        Im allgemeinen akzeptieren die meisten Leute aber Cookies für jeden Unfug (um das mal nett zu umschreiben), warum also nicht auch für eine (so scheint es zumindest) sinnvolle Aufgabe? Der Weg, den Browser über Cookies wiederzuerkennen funktioniert zumindest übergreifend (auch in Browsern, die eigentlich ins Museum gehören).

        <exzessiv mit der Zeicheneinfügeleiste herumspiel />

        … Nutzer mit älteren Browsern haben halt diesen Komfort ebensowenig wie ein Oldtimer eine Servolenkung …

        „Servolenkung ist für Weicheier!“

        Zitat: Ich (wenn ich mit meinem VW T2/T3 (wer auch immer hab ihn selig) vor Publikum beim Einparken wild fluchend am Lenkrad rumkurbelte).

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
        1. n'Abend!

          [...] eindeutig wiedererkennen. Und das ist imho genau das, was man als Nutzer vermeiden möchte.
          Das gilt für dich, (in gewissen Grenzen) für mich, jedoch insbesondere für Martin. ;-)

          Prima, es funktioniert also. :-)
          Man muss einebestimmte Meinung oder Überzeugung nur oft genug kundtun, dann tun es andere irgendwann auch.

          Im allgemeinen akzeptieren die meisten Leute aber Cookies für jeden Unfug (um das mal nett zu umschreiben), warum also nicht auch für eine (so scheint es zumindest) sinnvolle Aufgabe?

          Zumal vermutlich sehr viele Nutzer die Cookie-Strategie auf "alles annehmen, aber beim Beenden der Browser-Session löschen" eingestellt hat.

          „Servolenkung ist für Weicheier!“
          Zitat: Ich (wenn ich mit meinem VW T2/T3 (wer auch immer hab ihn selig) vor Publikum beim Einparken wild fluchend am Lenkrad rumkurbelte).

          Während meiner Bundeswehrzeit war ich vor allem mit Dreiachs-LKWs des Typs MAN 22.240 unterwegs. Bei einer mehrtägigen Übung in Baumholder in der Pfalz teilte uns unser Zugführer am Nachmittag mit, einer unserer LKWs sei ein paar Kilometer vom Truppenübungsplatz mit Motorschaden liegengeblieben, am nächsten Tag würden wir das Fahrzeug abschleppen. "Und denkt dran, Männer, dass man da ohne Servounterstützung reichlich Muskelkraft für die Lenkung braucht!"
          Das war der Moment, wo ich dann anmerkte, ich hätte genau das vor kurzem ausprobiert und festgestellt, dass man das Fahrzeug noch ganz gut handhaben kann, solange es noch rollt. "Perfekt", meinte der Stuffz, "dann haben wir ja schon einen Fahrer für das havarierte Fahrzeug."

          Am nächsten Tag habe ich geschwitzt wie ein Stier. Denn außerhalb des Truppenübungsplatzes führ der Fahrer des schleppenden LKW noch einigermaßen manierlich (40km/h sind für so ein Schlepp-Gespann laut StVO zulässig). Aber sobald wir den öffentlichen Verkehrsraum verlassen hatten, fegte er mit 60..70km/h über die Panzerpisten - und ich im Abstand von knapp 3m (Länge der Abschleppstange) dahinter. Ich fand das nicht lustig!
          Noch einen Tag später hatte ich heftigen Muskelkater in den Armen. :-P

          Ciao,
           Martin

          --
          Die letzten Worte der Challenger-Crew:
          Lasst doch mal die Frau ans Steuer!
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hallo

            [...] eindeutig wiedererkennen. Und das ist imho genau das, was man als Nutzer vermeiden möchte.
            Das gilt für dich, (in gewissen Grenzen) für mich, jedoch insbesondere für Martin. ;-)

            Prima, es funktioniert also. :-)
            Man muss einebestimmte Meinung oder Überzeugung nur oft genug kundtun, dann tun es andere irgendwann auch.

            Tut mir leid, dich enttäuschen zu müssen. Ich habe mich nicht von dir überzeugen lassen müssen, bestimmte Techniken und Funktionen nicht grundsätzlich zuzulassen. Allerdings wirkt dein Umgang damit in meinen Augen stellenweise übertrieben paranoid.

            Im allgemeinen akzeptieren die meisten Leute aber Cookies für jeden Unfug (um das mal nett zu umschreiben), warum also nicht auch für eine (so scheint es zumindest) sinnvolle Aufgabe?

            Zumal vermutlich sehr viele Nutzer die Cookie-Strategie auf "alles annehmen, aber beim Beenden der Browser-Session löschen" eingestellt hat.

            Nö, das glaube ich nicht. Wenn das "sehr viele Nutzer" täten, wäre Tracking nicht ein solch präsenter Diskussionsstoff.

            „Servolenkung ist für Weicheier!“
            Zitat: Ich (wenn ich mit meinem VW T2/T3 (wer auch immer hab ihn selig) vor Publikum beim Einparken wild fluchend am Lenkrad rumkurbelte).

            ... außerhalb des Truppenübungsplatzes führ der Fahrer des schleppenden LKW noch einigermaßen manierlich (40km/h sind für so ein Schlepp-Gespann laut StVO zulässig). Aber sobald wir den öffentlichen Verkehrsraum verlassen hatten, fegte er mit 60..70km/h über die Panzerpisten - und ich im Abstand von knapp 3m (Länge der Abschleppstange) dahinter. Ich fand das nicht lustig!

            Ach, gelten die 40 km/h auch für PKW bzw. Kleintransporter unter 2.8t? <rumsuch /> Nee, es gibt keine konkret vorgeschriebene Geschwindigkeit. Empfohlen werden, unter Anderem abhängig von der Verwendung von Seil oder Stange, zwischen 25 und maximal 50km/h (letzter Absatz).

            Ach herrje, dann waren wir damal mit 60km/h im Berufsverkehr mit Seil und schleppendem LT28 als Kastenwagen doch recht zügig unterwegs. Vor mir die rote Rückwand des LT, die Aufmerksamkeit stur auf die Spannung des ca. 4m langen Seil gerichtet und der Fuß permanemt an der Bremse. Das Lenken war ohne Servo eh wie immer. Nach etwa 7km war die Fahrt zwar vorbei, ich aber auch ganz schön fertig.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
            Veranstaltungsdatenbank Vdb 0.3
            1. Hi,

              ... außerhalb des Truppenübungsplatzes führ der Fahrer des schleppenden LKW noch einigermaßen manierlich (40km/h sind für so ein Schlepp-Gespann laut StVO zulässig).

              ich muss mich korrigieren. In der aktuellen Fassung der StVO finde ich dazu auch nichts mehr. Entweder gab es diese Vorschrift mal in einer früheren Fassung (wir reden immerhin von 1989*), oder es war nicht die StVO, sondern eine Dienstvorschrift der BW.
              Jedenfalls stand dort schwarz auf weiß zu lesen, dass die zulässige Höchstgeschwindigkeit beim Abschleppen auf 40km/h begrenzt sei, und dass für Fahrzeuge über 3.5t ausschließlich eine Abschleppstange, kein Seil, verwendet werden darf.

              Ich erinnere mich jetzt diffus, dass der Feldwebel in der Fahrschule noch darauf hinwies, dass das mit der Abschleppstange im zivilen Bereich nur eine gute Empfehlung sei, bei der BW aber eine klare Vorschrift. Das deutet darauf hin, dass diese Regeln aus einer militärischen Dienstvorschrift stammten.

              Ach, gelten die 40 km/h auch für PKW bzw. Kleintransporter unter 2.8t?

              Beim Bund schon.

              Nach etwa 7km war die Fahrt zwar vorbei, ich aber auch ganz schön fertig.

              Ja, ich hatte am Tag darauf auch Muskelkater in den Armen. :-)

              Ciao,
               Martin

              (*) Schade, dass alte Fassungen z.B. der StVO nicht mehr im Netz abrufbar sind, um etwa mit der aktuellen zu vergleichen. Zumindest in der StVZO weiß ich, dass im Lauf der Jahre das eine oder andere verschlimmbessert wurde.

              --
              Treffen sich zwei Holzwürmer im Käse: "Na, auch Probleme mit den Zähnen?"
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    2. Meine Herren!

      hab noch eine Idde, ich speichere genau ein Cookie auf dem Rechner darin ist eine ID enthalten, wenn der User auf "merken" klickt, dann schaue ich nach was für eine ID im Cookie ist und speichere das ganze in einer MySQL DB ab

      Das ähnelt sehr dem Prinzip einer Session und hat die gleichen Vor- und Nachteile, die Matthias schon angemerkt hat. Also wenn du diesen Ansatz wählst, musst du das Rad nicht neu erfinden und kannst auch gleich auf Sessions setzen. Ich würde aber auch auf WebStorage oder IndexedDB mit WebStorage-Fallback setzen und die Funktion für völlig veraltete Browser (IE7 ist 8 Jahre alt, IE6 schon 12) mit einem entsprechenden Hinweis nicht zur Verfügung stellen.

      Haben sich deine juristischen Bedenken zu Cookies inzwischen geklärt?

      1. Hallo und guten Tag,

        Das ähnelt sehr dem Prinzip einer Session und hat die gleichen Vor- und Nachteile, die Matthias schon angemerkt hat. Also wenn du diesen Ansatz wählst, musst du das Rad nicht neu erfinden und kannst auch gleich auf Sessions setzen. Ich würde aber auch auf WebStorage oder IndexedDB mit WebStorage-Fallback setzen und die Funktion für völlig veraltete Browser (IE7 ist 8 Jahre alt, IE6 schon 12) mit einem entsprechenden Hinweis nicht zur Verfügung stellen.

        Das Problem ist, dass ich bis jetzt Null Ahnung habe, wie man WebStorage verwendet und ob ich es hinbekomme.

        Haben sich deine juristischen Bedenken zu Cookies inzwischen geklärt?

        ja, so wie ich das verstanden hab musst du den User draug hinweißen, dass Cookies verwendet werden und dieses muss er mit OK bestätigen sonst dürfen keine Cookies gesetzt werden.

        Liebe Grüße
        Chris1996

  4. ich möchte gerne auf meiner Seite eine Funktion "merken" anbieten, der User muss sich dazu nicht einloggen. Wie könnte ich dieses umsetzten?

    Bis jetzt habe ich dieses im Kopf:

    • User geht auf die Seite
    • wählt einen Artikel
    • auf der Seite gibt es ein Button "merken"
    • der User klickt darauf und der Button wechselt in den Status "entfernen"
    • gleichzeitig ist auf der Seite "merken" der Artikel

    Der Bequemlichkeit halber solltest du Javascript einsetzen. Es wäre unschön, wenn man auf "Merken" klickt und der Browser die ganze Seite neu lädt, nur um (aus Sicht des Benutzers) statt "Merken" "Entfernen" anzuzeigen.
    Du kannst als Rückfallmöglichkeit auch noch die Methode Neuladen vorsehen, aber konzentriere dich erstmal auf die Javascript-Variante, denn mit der wirst du 99% aller Besucher glücklich machen.

    Du wirst dich darüber informieren müssen,

    • wie man beim Anklicken des Elements Merken eine Javascript-Funktion aufruft (Stichwort onclick).
    • wie man beim Laden einer Seite dem Element Merken den Text Entfernen verpasst (Stichwort onload und getElementByID).

    Speichern solltest du nur die relevanten Informationen, d.h. die reinen Artikelnummern. Speichere eine mit Komma oder Leerzeichen getrennte Liste von Artikelnummern als Zeichenkette, etwa "12,23,856,567,34". So eine Zeichenkette lässt sich leicht verarbeiten und belegt nur einen Platz, also ein Cookie oder einen Web-Storage-Eintrag.

    Beim Laden der Seite trennst du die Zeichenkette mit String().split(",") in ein Array auf. Dieses Array kannst du leicht nach dem aktuell angezeigten Artikel bzw. seiner Nummer durchsuchen. Ist die Nummer vorhanden, änderst du den Merken-Text in Entfernen.

    Klickt der Benutzer später auf Merken bzw. Entfernen, durchsuchst du das Array erneut nach der Nummer. Falls sie nicht vorhanden ist, fügst du die Nummer dem Array mit Array.push() hinzu, ist sie nicht vorhanden, entfernst du sie mit Array.splice(). Abschließend änderst du den Text Merken / Entfernen, je nach Situation.
    Du vermeidest so Mehrfacheinträge und brauchst dich obendrein nicht darum kümmern, was denn gerade auf dem Knöpfchen steht, das gedrückt wurde - du schaltest einfach stur bei jedem Knopfdruck den Eintrag in der Merkliste und die Beschriftung um.

    Versuche erstmal, den Kram bis hierhin zusammenzubauen. Wo du die Zeichenkette speicherst, ist erstmal irrelevant. Zum Programmieren kannst du sie auch fest in deinen Code speichern und damit nur so tun, als wäre sie von irgendwo geladen worden.

    Anschließend kannst du dich dann immer noch entscheiden, ob du Cookies oder Web Storage benutzt (oder beides, Web Storage als Standard, Cookies als Absicherung - ob Web Storage im Browser funktioniert, lässt sich leicht abfragen). Ich täte wegen der definierten Lebensdauer zu Cookies tendieren.

    Falls dir das mit Javascript zu viel ist, kannst du natürlich auf fast die gleiche Art und Weise auch PHP einsetzen. Es muss dann halt nur, wie eingangs bemängelt, bei jedem Merken und Entfernen die Seite neu geladen werden.

    Wie du Cookies in PHP speicherst und ausliest, hast du ja schon herausgefunden. Benutze nur statt

    setcookie("artikelID", "1", time()+14400);

    die Zeile

    setcookie("merkliste", $merkliste, time()+14400);

    $merkliste wäre die Zeichenkette nach oben erwähntem kommagetrennten Format. Diese Zeichenkette kannst du mit $liste = explode(",", $merkliste) in ein Array verwandeln, im Array mit in_array($artikelnummer, $liste) suchen bzw. array_push($liste, $artikelnummer) anfügen, und das Array am Ende mit implode(",", $liste) wieder zu einer Zeichenkette zusammensetzen, die du dann an setcookie() übergibst.