[PHP] Variablen zwischen Unterseiten weitergeben



  • hmm die lösung von mar3000 ist irgendwie nicht so das wahre finde ich weil ich kann ja nicht bei jedem link diesen krempel davorschreiben, zumal ich ja auch auswahlboxen drin habe und meine links teilweise so aussehen:

    http://localhost/Front%20End/update.php?update_person=32&update_vorname=Ryan&update_nachname=Phillippe&update_geburtstag_tag=11&update_geburtstag_monat=12&update_geburtstag_jahr=1909&update_einzugsdatum_tag=07&update_einzugsdatum_monat=02&update_einzugsdatum_jahr=1998&update_wohngruppe=Van+Gogh&update_zimmer=C208&update_telefonnummer=348&update_konfession=rk&update_geschlecht=m&notiz=&update_data_submit=Bewohner+%E4ndern
    

    wie soll ich das denn nun sonst lösen? 😕

    @Flenders: wie mach ich das mit der session?!





  • also, wenn du das in der url hast, dann kannst du die variablen im nächsten Script verwenden, wenn du eine Superglobale verwendest:

    <?php
    $strName=$_GET['name'];
    $srtPasswort=$_GET['passwort'];
    ...
    ?>
    

    Die URL dazu sähe dann so aus:
    script.php?name=dername&passwort=daspasswort

    Was du im anderen Script verwenden willst, muss im $_GET[]-Array vor dem = als Varialbenname stehen.



  • Ich probier jetzt schon seid stunden mit diesen Sessions rum! Es will einfach nich laufen!! arggg 😡

    ich habe auf meiner Index.php ein Forumular zu einloggen:

    <form action="<?php echo $PHP_SELF ?>" method="get" name="login">
    <input type="text" size="10" name="loginuser" class="spalte" style="width:40%">
    <input type="password" size="10" name="loginpw" class="spalte" style="width:38%">
    <input type="submit" class="spalte" name="loginsubmit" value="ok">
    </form>
    

    ausserdem habe ich den folgenden code um die eingegebenen Daten zu überprüfen:

    <?php
         $link = mysql_connect("localhost:3306", "root","") or die("Keine Datenbankverbindung möglich !");
         mysql_select_db("CBT", $link) or die("Auswahl der Datenbank fehlgeschlagen !");
         $datum = date(Y .".". m .".". d);
         if(isset($loginsubmit))
         {
            $loginresult = mysql_query("select id,loginuser,loginpw,lastlogin,selektieren,inserten,updaten,deleten from benutzer");
            while($loginrow = mysql_fetch_array($loginresult))
            {
                   if(0==strcmp($loginrow["loginuser"],$loginuser))
                   {
                      $loginfehler = "User gefunden";
                      if(0==strcmp($loginrow["loginpw"],$loginpw))
                      {
                         session_start();
                         $zuletztda = $loginrow["lastlogin"];
                         mysql_query("update benutzer set lastlogin = '$datum' where id = $loginrow[id]");
                         $loginfehler = "Willkommen ";
                         $loginfehler = $loginfehler ."". $loginuser ."\nIhr letzter Besuch war am: " ."$zuletztda";
                         $b_s = $loginrow["selektieren"];
                         $b_i = $loginrow["inserten"];
                         $b_d = $loginrow["deleten"];
                         $b_u = $loginrow["updaten"];
                         session_register("b_s"); // Diese 4 Variablen soll er seitenübergreifend übernehmen damit ich in meinem include der navigation bestimmen kann was angezeigt wird und was nich
                         session_register("b_i");
                         session_register("b_d");
                         session_register("b_u");
                         break;
                       } else {$loginfehler= $loginfehler ." Passwort falsch!"; break;}
                   }else{$loginfehler = "User nicht gefunden"; continue;}
            }
         }
    ?>
    

    auf jeder seite wird die navigation includiert:

    <font face="Arial" size="2" color="#000000">
      <b>&nbsp;Bewohner</b><br></font>
      <font face="Verdana" size="1" color="#000000">
      <?php if($_SESSION["b_i"] == 1){echo "&nbsp;&nbsp;&nbsp;<a href=\"add.php\">Bewohner hinzufügen</a><br>";} ?>
      <?php if($_SESSION["b_u"] == 1){echo "&nbsp;&nbsp;&nbsp;<a href=\"update.php\">Bewohner ändern</a><br>";} ?>
      <?php if($_SESSION["b_s"] == 1){echo "&nbsp;&nbsp;&nbsp;<a href=\"karteikarte.php\">Bewohner einsehen</a><br>";} ?>
      <?php if($_SESSION["b_d"] == 1){echo "&nbsp;&nbsp;&nbsp;<a href=\"javascript:delbew()\">Bewohner löschen</a><br>";} ?>
      <?php if($_SESSION["b_s"] == 1){echo "&nbsp;&nbsp;&nbsp;<a href=\"suchen.php\">Bewohner suchen</a><br></font>";} ?>
    

    ⚠ 😡 ⚠ Was mache ich falsch?!?! Ich dreh gleich am Rad! ⚠ 😡 ⚠



  • Musst du nicht überall session_start aufrufen?



  • Doch und zwar ganz zu Beginn am Besten und wirklich auf jeder Seite! Da sonst die Session-ID imho nicht weitergereicht wird (wohl nur falls sie per GET übergeben wird)



  • CarstenJ schrieb:

    Musst du nicht überall session_start aufrufen?

    Sachma was glaubst du eigentlich warum ich hier so ausführlich mein Problem beschreibe? *lol* Weil ich nicht den Ablauf von diesen Sessions kenne 😕 *hoil*

    Weisst du denn wies geht?
    Ich weis nämlich wirklich nich wie und wo ich was einbinden muss.
    Ich hab mir zwar den hier durchgelesen, genau wie http://de2.php.net/session aber bei der umsetzung hapert es. ich will das jetzt aber umbedingt hinbekommen weil ich dann mit diesem projekt fertich bin und ein neues, schöneres, dickeres, umfangreicheres Projekt bekomme, wo ich mein, in diesem projekt erlerntes wissen, anwenden werde. und ohne sessions läuft da nickes! :p

    story des ganzen ist ein praktikum was ich soeben absolviere.
    hab bis vor dreieinhalb wochen kaum was über mysql/php gewusst.
    mitlerweile bin ich so weit dass mein betreuer sagt er sei mit mir sehr zufrieden. 🙂 was ich nicht zuletzt der hilfe von flenders und den anderen helfern aus dem forum zu verdanken habe.



  • Achso was ich noch vergessen habe:
    wenn ich mich nu einlogge mit user: Bonzen, ps: gott dann klappt der login aber es kommen folgende warnungen:

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\server\Front End\index.php:3) in C:\server\Front End\index.php on line 17

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\server\Front End\index.php:3) in C:\server\Front End\index.php on line 17

    was geht??? is das normal? kann ich die einfach mit @session_start muten?



  • Na gut, dann formulier ich das anders:

    session_start() aufrufen, bevor du irgendwas anderes machst. Also am ANFANG der Seite aufrufen. Es darf davor nicht anderes stehen!!!



  • CarstenJ schrieb:

    session_start() aufrufen, bevor du irgendwas anderes machst. Also am ANFANG der Seite aufrufen. Es darf davor nicht anderes stehen!!!

    hää was bringt mir das ne session aufzurufen wenn der typ sich noch nichtmal eingeloggt hat? dann brauch ich auch keine session. reicht doch wenn die session bei erfolgreihen login gestartet wird. oder?



  • Anstelle von session_register solltest du nur $_SESSION verwenden:

    Wenn Sie $_SESSION (oder $HTTP_SESSION_VARS) verwenden, sollten Sie nicht session_register(), session_is_registered() und session_unregister() verwenden.

    Wenn Sie wollen, dass ihr Script unabhängig von der Einstellung von register_globals funktioniert, müssen Sie den Array $_SESSION verwenden. Alle $_SESSION-Einträge werden automatisch registriert. Wenn Sie in Ihrem Script session_register() verwenden, funktioniert es nicht in Umgebungen, in denen register_globals deaktiviert ist.



  • Es darf eben, vor session_start keine Ausgabe erfolgen (dazu gehören z.B. auch Fehlermeldungen von PHP-Funktionen) da normalerweise die Session-ID per Cookie gespeichert wird und durch eine Ausgabe die Header schon gesendet werden und somit das Cookie mit der Session-ID nicht mehr gesetzt werden kann. Siehe auch setcookie()

    Wie andere Header auch, müssen Cookies vor irgendwelchen anderen Ausgaben Ihres Skriptes gesendet werden (dies ist eine Einschränkung des Protokolls). Sie müssen deshalb solche Funktionsaufrufe vor irgendwelchen Ausgaben, inklusive <html>- oder <head>-Tags sowie irgendwelcher Whitespaces tätigen.
    [...]
    Anmerkung: In PHP 4 können Sie den Ausgabepuffer verwenden, um Ausgaben vor dem Aufruf dieser Funktion duchführen zu können. Dies hat allerdings zur Folge, dass alle Ihre Ausgaben zum Browser am Server zwischengespeichert werden, bis Sie diese senden. Sie können dies in Ihrem Skript mittels den Funktionen ob_start() und ob_end_flush(), oder mittels der Konfigurationseinstellung output_buffering in Ihrer php.ini, oder durch Konfigurationseinstellungen am Server realisieren.



  • Sauber!, ich werd verrückt! Es läuft! 😮 😋
    kann ich denn auch überprüfen ob eine session schon besteht?
    weil dann könnte ich ja einen logout button einbinden, mit dem ich die variablen wieder unregister machen kann und das loginformular einblende!



  • Die Funktion session_is_registered() erledigt das:

    if(session_is_registered('name')){
    ...
    }



  • Hast du nicht gelesen, was ich (die PHP-Doku) auf der 1. Seite ganz unten geschrieben habe?
    Du machst einfach eine Variable $_SESSION['logged_in'], die du auf true setzt, wenn der User erfolgreich eingeloggt wurde



  • @Flenders: ne sorry hatte ich überlesen gehabt.
    Dafür habe ich mit deinem Tipp und ein paar kleinen Feinheiten diese nacht um vier einen echten Login/Logoutbereich programmiert. der mist funktioniert sogar.

    Ich habe allerdings noch eine frage!
    Also wenn sie jetzt user a anmeldet, wird seine session begonnen.
    was passiert denn mit seiner session wenn er ausm netz fliegt oder sein IE abkackt???


  • Mod

    CarstenJ schrieb:

    Die Funktion session_is_registered() erledigt das:

    nein, die funktion isset macht das:

    isset($_SESSION['name'])



  • @ Peter:

    Das hängt von diesen Einstellungen ab:

    session.gc_probability
    session.gc_dividend
    session.gc_maxlifetime

    Siehe hier:
    http://www.develnet.org/31.html


Anmelden zum Antworten