Antworten auf deine Fragen:
Neues Thema erstellen

Denkfehler ?? PHP $_SESSION

Kadey

Nicht mehr ganz neu hier

Hallo zusammen,

nach langer Zeit mal wieder eine Frage:

Vorab...
Ich habe mein Xampp in meinem lokalem Netzwerk zugänglich gemacht, sodass ich auch vom Laptop auf meine Anwendung zugreifen kann.

Nun zur Frage:
In meiner Anwendung habe ich ein Anmeldeformular....Daten werden aus Datenbank geholt und verglichen.
Sodann speichere ich diese in einer Session.

Wenn ich mich nun auf dem Hauptrechner anmelde und mir die Session ausgeben lasse, erhalte ich nur meine eigene Anmeldung, obwohl ich am Laptop auch mit einen anderen Benutzer & PW angemeldet bin. Aber auch am Laptop erscheint nur die eigene Anmeldung in der Session.
Normalerweise müssten doch beide Benutzer in der Session sein oder sehe ich das falsch.

Hier mal etwas Quellcode:
PHP:
<?php
/* Vor Beenden der Session wieder aufnehmen */
session_start();

require_once('db.php');
require_once('bereich-kopf.inc.php');

$_SESSION['einloggen'] = array();

// Wenn einloggen gedrück, dann auf Inhalt prüfen.
if ( isset($_POST['aktion']) and $_POST['aktion'] == 'einloggen' )
{
    if ( isset($_POST['name']) and trim($_POST['name']) != ''
            and
            isset($_POST['passwort']) and trim($_POST['passwort']) != ''
       )
    {
        // Name und Passwort in Variable speichern, Whitespaces wieder entfernen
        $name_formular = trim($_POST['name']);
        $passwort_formular = trim($_POST['passwort']);
       
        // Datenbank anfragen
        $zugang = $db->prepare("SELECT id, name, rechte
                 FROM mitarbeiter WHERE name=? && passwort=? ");
       
        // Name und Passwort übergeben
        $zugang->bind_param('ss',$name_formular, $passwort_formular);
        $zugang->execute();
        $zugang->bind_result($id, $name, $rechte);
        while ($zugang->fetch()) {
                //echo "<li> $id $name $passwort, $rechte";
       
         //echo "<p>Treffer $name / $passwort: ". $zugang->num_rows ."</p>";
        }
       
       
        // Wenn mindestens 1 Datensatz übereinstimmt, dann Name und Nutzerrechte in Session speichern und weiterleiten an index.php
        if (  $zugang->num_rows == 1 ) {
            $_SESSION['einloggen']['id'] = $id;
            $_SESSION['einloggen']['name'] = $name;
            $_SESSION['einloggen']['rechte']   = $rechte;
           
            echo"<pre>";
            print_r($_SESSION['einloggen']);
            echo "</pre>";
           
        }
        // Wenn nicht, richtige Zugangsdaten eingeben und Session zurücksetzen
        else
        {
            echo "<p>Bitte korrekte Zugangsdaten eingeben!</p>";
        }       
    }

}


?>
 

Curanai

Aktives Mitglied

Hi, darf ich als Alltagsbinäro einen winzigen Vorschlag einstreuen?

Nehmen wir mal an, Deine Table in der Datenbank hat 50.000 User (rein fiktiv) und Du suchst quasi den einen - mit name und passwort. Jetzt loggst Du Dich ein - Du bist Teil dieser Table und hast die User-ID 1. Damit stehst Du gaaaanz oben. Dein SELECT rattert aber dennoch durch die 49.999 anderen, denn es könnte ja noch einer kommen. Also? Richtig: Begrenzer per Limit rein! Der ist eben nicht nur Begrenzer, sondern auch Abbrecher - wir reden also eigentlich über Performance.

Ergänzend:
Dann könnte man noch über "ticks" nachdenken - das hilft man dem MySQL Interpreter ein wenig sich schneller darauf einstellen zu können, was er da eigentlich machen bzw. nutzen soll. Setze also Datenbanken, Tables und Spalten - sofern nur MySQL - in "`" (ohne ").

print_r() hat noch einen zweiten Parameter - versuche
PHP:
echo '<pre>' . print_r($_SESSION['einloggen'], true) . '</pre>';

Bei größeren Queries solltest Du Dir angewöhnen, diese in eine eigene Variable zu schreiben und entsprechend zu strukturieren. So könnte es bspw. aussehen (Grund: spätere Wartung, Lesbarkeit usw.):
PHP:
$select = 'SELECT
  `id`,
  `name`,
  `rechte`
FROM
  `mitarbeiter`
WHERE   `name`=? &&
         `passwort`=?
LIMIT 1;';
$zugang = $db->prepare($select);

Vermeide noch so kleine Redundanz (hier: trim und isset()) - überarbeitet wäre das viel schlanker:
PHP:
if (
   isset($_POST['aktion'], $_POST['name'], $_POST['passwort']) &&
   $_POST['aktion'] == 'einloggen'
) {
   $name_formular      = trim($_POST['name']);
   $passwort_formular  = trim($_POST['passwort']);
  
   if (
     $name_formular != '' &&
     $passwort_formular != ''
   ) {
     // ...
   }
}

Und ja, ich formatiere wirklich if-Anweisungen über mehrere Zeilen so - auch hier: Wartung, Lesbarkeit etc.

Das mit while() musst Du überarbeiten - das geht hier nur, weil max. ein Datensatz zurückkommt. Es ist recht dreckig gemacht.

Zuguterletzt: require_once! Der kann Sinn ergeben, dürfte in dem Fall aber eine Kanone auf einen Spatz sein. :D

Schlag mich bitte nicht, ich baue abartig große Projekte. Selbst Dein' Einsatz von " oder ' bei Stringausgaben stößt bei mir auf keine Gegenliebe (hat was mit dem PHP-Interpreter zu tun). Es lässt sich überall Performance rauskitzeln und dann ist eine Applikation gestrafft, wartungsfreundlich und „fast as hell“! Je früher man sich daran gewöhnt und es macht, umso besser. Also ganz egal ob Hobby, Amateuer, Semi-Pro oder Pro ...

Keine Bange, Du hast auch Dinge drin, die mir gefallen und schon dicht am PSR (Empfehlung zum Code-Schreiben) angelehnt sind. Dafür bekommste von mir einen Daumen hoch!

Ich wünsche Dir aber dennoch weiterhin ganz viel Spaß beim Coding!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben