Session, Konstante, oder was...?

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

  • Session, Konstante, oder was...?

    Hallo, ich habe ein Skript bei dem eine Datenbank erzeugt wird (erst in ein Formular den DB-Namen eingeben und wenn es abgeschickt wird, wird ein Skript gestartet das die DB anlegt). Nun habe ich das Problem, das ja alle weiteren Skripte auf die erzeugte DB zugreifen müssen. Also wird der DB-Name aus dem Formular gleich noch in einer Session gespeichert:

    PHP-Code:
    session_start(); 
    extract($_POSTEXTR_OVERWRITE);
    $_SESSION['datenbankname']=$datenbankname
    ABER, wenn man dann eben am nächsten Tag weiter arbeiten will, gibt es ja die session nicht mehr. Also habe ich mir auf umständlichen Weg ein Skript gebaut, das mittels mysql_list_dbs alle Datenbanken auflistet und dort kann man dann seine DB auswählen und somit wieder in einer Session "aktivieren". Ich finde das aber total bescheuert so. Also habe ich mir die Konstanten reingezogen. Klingt ja soweit ganz gut. Aber Konstanten kann man halt nicht überschreiben. Ich wollte praktisch den Datenbanknamen per $_POST als Konstante definieren. Aber was ist nun wenn das Skript irgendwann mal wieder ausgeführt wird.... Kann er dann die Konstante anpassen? Die Konstanten sollen in einer eigenen Datei stehen und per include () aufgerufen werden. MfG Simauki

  • #2
    Du könntest in einem Cookie eine eindeutige Benutzer-ID speichern und dann in der DB jeder Benutzer-ID den Datenbank-Namen zuweisen... oder hab ich das nicht ganz kapiert?

    Kommentar


    • #3
      Hallo, ich glaube da reden wir von verschiedenen Dingen. MfG Simauki

      Kommentar


      • #4
        PHP-Code:
        extract($_POSTEXTR_OVERWRITE); 
        Oje, damit machst du die ganzen Vorteile von
        register_globals=Off mit einem Schlag wieder kaputt!

        Datenbankname:
        Wieviele Datenbanken setzt du in deinem Script ein?
        Eine ? Dann sind Konstanten genau richtig für dich!

        Sessions:
        Sessions halten in der Voreinstellung ca 24 min
        inaktivität aus. Das Sessioncookie verfällt beim
        Schließen des Browsers.


        Ansonsten kann ich strauberry nur zustimmen! Wenn du
        Benutzerbezogene Daten überlängere Zeit halten
        möchtest, dann verwende Cookies in verbindung mit
        einer Datenbank.

        Frage:
        Noch habe ich nicht verstanden, was du nun wirklich
        erreichen möchtest..? Versuche es bitte nochmal zu
        erklären..
        Zuletzt geändert von combie; 15.09.2006, 12:34.
        Wir werden alle sterben

        Kommentar


        • #5
          Ich hatte das so verstanden, dass jeder Benutzer seine eigene DB anlegen kann, bei der er den Namen selbst vorgibt. Dieser Name soll über längere Zeit gespeichert werden. Ist das falsch?

          Kommentar


          • #6
            Hallo, Strauberry hats doch (fast) verstanden. Ich will nicht das jeder Nutzer seine eigene Datenbank anlegen kann, sondern das das bei jedem Skriptdurchlauf möglich ist. Ist also fast dasselbe. Hintergrund des Ganzen ist, das ich eine Webapplikation für ein Seminar entwickele, bei der die Daten bzw. die Datenbank so wie die Seminarteilnehmer sie verlassen haben, erhalten bleiben soll. Und wenn praktisch der Kurs vom Montag eine Woche später wiederkommt, soll die DB unverändert sein und ich brauche eben den DB-Namen, den die Jungs sich zu dem früheren Zeitpunkt ausgesucht haben. Und am Dienstag gilt dasselbe. Es werden die selben Skripte mit den selben Abfragen benötigt. Nur das eben der DB-Name immer ein anderer ist. Session würde sicher gehen, wenn das seminar immer an einem Tag abgeschlossen wäre und die DB sonst nicht mehr vom dümmsten anzunehmenden User gebraucht werden würde. Ist aber nicht der Fall.

            Nun war meine Idee, den Datenbanknamen als Konstante zu speichern:

            PHP-Code:

            define
            ("DBNAME","".$_REQUEST['datenbankname'].""); 
            Das Ganze natürlich in einer eigenen Datei. Die Konstante soll aber in den anderen Skripten per include eingebunden werden können.

            PHP-Code:

            include 'konstanten.php';
            echo 
            DBNAME
            Nun zum Problem, den Problemen.

            1. So wie ich das da oben skizziert habe funktioniert das nicht. Kann man Konstanten überhaupt aus Variablen "herstellen"?
            2. Die Konstante, oder die Datei konstante.php muß irgendwie austauschbar sein, es soll ja beim nächsten Durchlauf eine andere DB verwendet werden.

            MfG Simauki
            Zuletzt geändert von simauki; 15.09.2006, 14:20.

            Kommentar


            • #7
              Hi,

              folgende Fragen:
              - Wieso müssen es verschiedene DBs sein, man kann auch eine Flag in die Tabelle setzen, zu welchem Seminar das ganze gehört
              - Wie erkennt das System, wer gerade am PC sitzt? Loggen die sich ein? Geht es nach Zeit?

              Kommentar


              • #8
                Hallo, für jeden Kurs eine eigene DB wäre mir lieber. Aber selbst so wie Du es vorschlägst und ich nehme meinetwegen andere Tabellen, oder was auch immer. Ich will das Ganze ja dynamisch halten und immer dieselben Skripte verwenden können nur das dort eben in irgendeiner Form immer eine Variable (welche auch immer) anders ist. Und ich will das jeder Kurs einmal den Namen der Variablen eingibt und danach nichts weiter tun muß, außer vielleicht noch die Variable in irgendeiner simplen Form auszuwählen.

                Und zum wie erkennt das System wer am PC sitzt? Eigentlich sollen die sich nur ransetzen und dann im schlimmsten Falle noch in einer simplen Form die Arbeit vom letzten Mal zu "aktivieren". Weiß halt nur nicht wie es am sinnvollsten ist. MfG Simauki
                Zuletzt geändert von simauki; 15.09.2006, 14:27.

                Kommentar


                • #9
                  ok, alles klar.

                  Was mir aber immer noch nicht klar ist: woher weiß das System, welches "Seminar" gerade am PC sitzt bzw. das Script aufruft? Hat jedes Seminar andere Computer/Domains/Scriptparameter/Logins/... irgendwie muss man das ja zuweisen oder ist es zeitabhängig: Montag DB 1, Dienstag DB 2, ...

                  Kommentar


                  • #10
                    Hallo, das ist die Methode "ransetzen und loslegen"....

                    So "aktivieren" die jetzt die DB:
                    PHP-Code:

                    echo "Um die Datenbank mit welcher zuletzt gearbeitet wurde 
                    auszuwählen, klicken sie einfach auf den entsprechenden Namen.<br><br>"
                    ;

                    $link = @mysql_connect("localhost","root","s1t2r3i4")
                    or die(
                    "Keine Verbindung möglich: " mysql_error());

                    $dblist mysql_list_dbs($link);

                    while (
                    $row mysql_fetch_object($dblist)) 
                    {echo 
                    "
                    <a href=session_datenbankname.php?datenbank="
                    .urlencode($row->Database).">
                    "
                    .urlencode($row->Database)."</a><br>";}

                    mysql_close($link); 
                    Im nächsten Skript wird der DB-Name in einer neuen Session gespeichert.

                    PHP-Code:

                    session_start
                    (); 
                    $_SESSION['datenbank']=$_GET['datenbank'];

                    echo 
                    "Die Datenbank -".$_SESSION['datenbank']."- ist jetzt aktiviert."
                    Das funktioniert, ich finde die Lösung aber so zum kotzen. MfG Simauki

                    Kommentar


                    • #11
                      Original geschrieben von simauki
                      Kann man Konstanten überhaupt aus Variablen "herstellen"?
                      Ja - allerdings lässt man dabei die absolut schwachsinnige Verkettung des Variableninhaltes mit Leerstrings am Anfang und am Ende weg.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Hallo, wenn ich aber

                        PHP-Code:
                        define("DBNAME","$_REQUEST['datenbankname']"); 
                        statt

                        PHP-Code:
                        define("DBNAME","".$_REQUEST['datenbankname'].""); 
                        mache, nimmt er die Konstante nicht an. MfG Simauki

                        Kommentar


                        • #13
                          Er meinte eher

                          PHP-Code:
                          define("DBNAME",$_REQUEST['datenbankname']); 
                          Das "" davor und danach ist absolut sinnfrei!

                          Kommentar


                          • #14
                            Hallo, was total komisch ist, ist das

                            PHP-Code:
                            define("DBNAME",$_REQUEST['datenbankname']);
                            echo 
                            DBNAME
                            funktioniert, aber wie gesagt, im nächsten Schritt

                            PHP-Code:
                            include 'konstanten.php';
                            echo 
                            DBNAME
                            zeigt er die Konstante nicht an. Was ist denn da los? MfG Simauki

                            Kommentar


                            • #15
                              Original geschrieben von simauki

                              funktioniert, aber wie gesagt, im nächsten Schritt
                              ...
                              zeigt er die Konstante nicht an. Was ist denn da los? MfG Simauki
                              kann es sein, dass du da etwas durcheinanderbringst?

                              selbst wenn du in einem script eine konstante definierst, ist sie nur zur laufzeit des scriptes bekannt.

                              Kommentar

                              Lädt...
                              X