Ankündigung

Einklappen
Keine Ankündigung bisher.

Session-Variablen hochzählen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Session-Variablen hochzählen?

    Hallo zusammen,

    ich brauche mal wieder Rettung im Bezug auf Session-Variabeln, falls mir hier jdm. behilflich sein könnte, wäre das toll! (meine PHP-Kenntnisse sind leider sehr, sehr beschränkt.)

    Folgendes Problem:
    Ich möchte auf einer Seite verschiedene Datenbankabfragen machen, sofern ein dazugehöriger Link geklickt worden ist.
    Damit ich weiß, welcher Link das war, hat die Tabelle keinen fixen Namen, sonder nennt sich > $_SESSION['site']
    Diese wurde auf der entsprechenden Seite zuvor definiert als >
    $_SESSION['site'] = $_GET['site']


    PHP-Code:
    $query "SELECT * from `".$_SESSION['site']."` WHERE ARTIKEL_ID IN('".$articleString."')";                       
    $result mysql_query($query) ;
        while(
    $data mysql_fetch_array($result)){
        echo 
    $data["ARTNR"];
        } 

    Gehe ich nun auf eine andere Seite, verändert sich der Get- sowie der Session-Wert natürlich. Logischerweise wird meine vorherige Datenbankabfrage so überschrieben.
    Und genau das ist der Knackpunkt - ich muss irgendwie die Werte abspeichern, die Sessions hochzählen, etc.

    Folgende Lösungsansätze habe ich in den letzen 3 Tagen ergrübelt, aber keine klappt so richtig:

    1. Sessions hochzählen - falls möglich
    Hier klappt das Hochzählen einfach nicht. Ergebnis bleibt immer 1

    PHP-Code:
    if (!isset ($site)) {
            
    $site $_SESSION['nr'] = "1";
        }else {
            
    $site $_SESSION['nr'] ++;
        }
        
     
    session_register("site"); 
    // ohne diese Zwischenspeicherung klappt es gar nicht, weil es wohl Probleme mit integers gibt 
    oder

    PHP-Code:
    if (!isset ($site)) {
            
    $site "1";
        }else {
            
    $site ++;
        }
        
     
    session_register("site"); 
    oder

    PHP-Code:
    if (!isset ($_SESSION[$site])) {
            
    $site "1";
        }else {
            
    $site ++;
        } 
    2. Die bereits gezogenen Daten anders abspeichern
    Hier habe ich nur einen Ansatz, aber mir fehlt das letzte Stück (die Fragezeichen):

    PHP-Code:
    for ($b 0$b count(??array??); $b++){
    ?????????
    }      

    $artnr.'-'.$b $data["ARTNR"]; 
    Bis wann soll $b erhöht werden? Und was gebe ich in der Schleife aus?
    Ich schreibe immer nur Endlosschleifen..


    Sonstiges
    Ich habe mich mit vielen Lösungsansätzen beschäftigt, aber habe keinen davon richtig anwenden können: Session_id, Session_name, session_write_close (ich dachte damit speichert man die Inhalte ab bevor die Session beendet und eine neue gestartet wird).
    Alles andere habe ich schnell wieder ganz verworfen.

    Ich bin für jede Hilfe dankbar! LG

  • #2
    Was ist der Hintergrund zu der Logik? Ich finde das sieht alles sehr seltsam aus. Abgeshen davon glaub ich das dein DB-Design falsch ist, wenn du für jede "Seite" eine eigenen Tabelle mit aber selben Spalten hast (muss aber nicht sein).

    Und mysql_ solltest du gar nicht verwenden, das fällt bald aus PHP raus, weil veraltet: http://php.net/manual/en/mysqlinfo.api.choosing.php

    Und grundsätzlich - probier mal folgendes wo zum Testen ganz oben auf deiner Seite:

    PHP-Code:

    error_reporting
    (-1);
    ini_set('display_errors'1);

    session_start();

    $_SESSION['test'] = 1;
    var_dump($_SESSION); 
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Dein Script kann nur mit der veralteten Einstellung register_globals = on fuktionieren, das ist schlecht. So sollte es gehen:
      PHP-Code:
      if (!isset ($_SESSION['nr']))
          
      $_SESSION['nr'] = 1;
      else
          
      $_SESSION['nr']++; 
      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

      Kommentar


      • #4
        Zitat von uha Beitrag anzeigen
        Dein Script kann nur mit der veralteten Einstellung register_globals = on fuktionieren, das ist schlecht.
        bzw. Seit php 5.4 gar nicht mehr
        http://php.net/manual/en/function.session-register.php

        Kommentar


        • #5
          Hallo hausl,

          es mag schon sein, dass es bessere Lösungen für das Design der DB gibt, für mich war nur dieses sinnvoll.
          Knapp formuliert sieht meine DB so aus:

          Tabelle Produkt 1

          ARTIKEL_ID, ARTIKEL_PREIS etc.

          Tabelle Produkt 2

          ARTIKEL_ID, ARTIKEL_PREIS etc.

          ____________________________________

          Als Ergebnis der Abfrage erscheint das: (Außerdem noch diverse andere Parameter wie Username usw.)

          array(11) {
          ["nr"]=>
          int(11)
          ["test"]=>
          int(1)
          ["site"]=>
          string(10) "BT-NRD 312"
          ["produkt_id"]=>
          array(1) {
          [0]=>
          int(1)
          }


          um msqli kümmere ich mich, sobald mein script endlich mal steht und funktioniert, sonst komme ich ganz durcheinander. Habe das blöderweise schon so angefangen gehabt.

          ____________________________________


          Uha:

          Bei deinem Script funktioniert das Hochzählen schonmal, danke. Allerdings kann ich nicht ganz nachvollziehen, wann immer hochgezählt wird - auf jeden Fall nicht unbedingt nur auf Klick auf den Link.
          Aber da muss ich erst selbst nochmal nachsehen, wie ich das am besten definiere.
          Was mich noch interessiert.. es gibt hier ja gar keine geschwungenen Klammern, das habe ich ganz anders gelernt. Ist das eine gängige Schreibweise?

          if (!isset ($_SESSION['nr']))
          $_SESSION['nr'] = 1;
          else
          $_SESSION['nr']++;

          Kommentar


          • #6
            Wenn bei einem if/else jeweils nur eine Anweisung benötigt wird, kann man die Klammern weglassen.
            Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

            Kommentar


            • #7
              Zitat von notasquare Beitrag anzeigen
              Tabelle Produkt 1

              ARTIKEL_ID, ARTIKEL_PREIS etc.

              Tabelle Produkt 2

              ARTIKEL_ID, ARTIKEL_PREIS etc.
              das sieht irgendwie merkwürdig aus.
              Hast du mehr als einen Datensatz in jeder Tabelle?
              Es scheint, als hätte jedes Produkt seine eigene Tabelle.

              Kommentar


              • #8
                Ah, nice to know.

                So wie die Abfrage jetzt ist, wird wie gesagt ziemlich beliebig hochgezählt, nicht nur, wenn $_SESSION['site'] bereits existiert und überschrieben werden wird.
                Ich habe das hier versucht, aber es ändert sich nichts:

                PHP-Code:
                if (isset ($_SESSION['nr']) && isset ($_SESSION['site']))
                            
                $_SESSION['nr']++;
                    else 
                                
                $_SESSION['nr'] = 1
                Damit nichts mehr überschrieben wird, wollte ich $_SESSION['nr'] als Konstante abspeichern, sodass diese nicht mehr überschrieben werden kann, aber das tut überhaupt nichts zur Sache:

                PHP-Code:
                $number $_SESSION['nr'];

                define("KONSTANTE""$number");

                echo 
                KONSTANTE
                Hat jmd. eine andere Lösung?

                Kommentar


                • #9
                  Hallo Mr. Beer,

                  nein, nicht direkt.
                  Es handelt sich um jeweils ein Gerät welches in einer eigenen Tabelle steht. Dieses hat ca. 30 Einzelteile, das sind die ganzen Datensätze dazu.

                  Kommentar


                  • #10
                    Ah. Jetzt verstehe ich.
                    Danke.

                    Was bedeutet denn
                    ziemlich beliebig hochgezählt
                    Wie oft schreibst du denn pro Seitenaufruf in $_SESSION['nr']?
                    Löschst du auch den cookie um den Zähler wieder auf null zu setzen?

                    Kommentar


                    • #11
                      Zum Beispiel bei jedem Seitenaufruf, nicht nur bei dem Klick auf den Link.
                      isset () frägt ja nur ab, ob die Variable exisitiert, nicht, ob etwas auch wirklich angeklickt wurde, oder?

                      Pro Seitenaufruf wird 1mal hochgezählt.
                      Und ich setze ja gar kein Cookie mit setcookie, deswegen lösche ich auch keines. Aber im Prinzip will ich den Zähler ja auch gar nicht wieder auf 0 setzen.

                      Am wichtigsten ist eigentlich, dass sich die Session-Variable nicht ständig selbst überschreibt.
                      Der Zähler war nur eine Idee, vll. gibts es ja eine viel bessere Lösung dafür.

                      Kommentar


                      • #12
                        schau' dir mal das an:
                        http://www.peterkropff.de/tutorials/...p_sessions.htm

                        Mit dem Befehl session_start() erzeugst du einen Cookie mit dem Namen, der in der php.ini angegeben ist (in der Regel ist der Name dann 'PHPSESSID'). Wenn allerdings schon so ein Cookie existiert, wird die Session wieder aufgenommen.
                        Das bedeutet, so lange der Cookie auf deinem Rechner gespeichert ist, wird $_SESSION['nr'] immer weiter gezählt.
                        Du kannst die $_SESSION['nr'] nur wieder auf null setzen, indem du den Cookie löschst.
                        (Wenn du nicht gerade eine extra Funktion / Abfrage dafür schreiben möchtest.)

                        (ich hoffe ich habe mich verständlich ausgedrückt.)

                        Kommentar


                        • #13
                          Ah, alles klar. Leider muss ich jetzt los, werde mir das aber morgen in Ruhe mal anschauen.
                          Ich sage schon mal vielen Dank an alle für eure schnelle Hilfe!!

                          Kommentar


                          • #14
                            Zitat von Mr.Beer Beitrag anzeigen
                            Du kannst die $_SESSION['nr'] nur wieder auf null setzen, indem du den Cookie löschst.
                            PHP-Code:
                            session_destroy();

                            unset(
                            $_SESSION["nr"]);

                            $_SESSION["nr"] = 0

                            Kommentar


                            • #15
                              ja, so geht das auch
                              Was ich meinte ist 'von außen' (ohne einen Button oder ähnliches dafür zu bauen.)

                              Kommentar

                              Lädt...
                              X