• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Session aktualisieren ?

T

TheBeat

Guest
Hallo weiß einer von euch wie ich eine bestehende PHP-Session aktualisieren kann ? Habe nämlich aktuell das Problem das Änderung in der Datenbank erst nach einem erneutem Login sichtbar werden :/
 
Werbung:
Werbung:
Mein Ziel ist es das wenn ein User bspw. seinen Namen ändert und er auf die submit Taste drückt , die Seite neu lädt und dann bereits sein neuer Name zu sehen ist

Mal abgesehen davon, dass ein User seinen Namen nicht ändern können sollte, ist der Ansatz falsch. Reloads nerven und sollten unbedingt vermieden werden.

Angenommen, der User updatet sein Profil oder einen Beitrag, pusht man die Änderungen in das DOM, damit diese sofort sichtbar werden und sendet gleichzeitig einen Patch- oder Post-Request per Ajax an die Datenbank. Dafür gibt es entsprechende Frameworks wie Angular oder React.
 
Also derzeit ist ja noch folgendes Problem das die Änderungen zwar übernommen werden aber erst nach einem erneutem Login auch sichtbar werden. Das nervige ist halt das man ne neue Session starten muss da die bestehende Session alte Informationen besitzt.

Mal abgesehen davon, dass ein User seinen Namen nicht ändern können sollte, ist der Ansatz falsch. Reloads nerven und sollten unbedingt vermieden werden.

Angenommen, der User updatet sein Profil oder einen Beitrag, pusht man die Änderungen in das DOM, damit diese sofort sichtbar werden und sendet gleichzeitig einen Patch- oder Post-Request per Ajax an die Datenbank. Dafür gibt es entsprechende Frameworks wie Angular oder React.

Der Name war an der Stelle vielleicht ein schlechtes Beispiel. Besseres Beispiel: auf meiner Seite gibt es einen Bereich in dem jeder User ein Zitat oder ähnliches verschriftlichen kann.
Möchte ein User nun dieses Zitat ändern so tut er das, kann die Änderung aber erst feststellen wenn er eine neue Session startet.
Mein Ziel ist es also die Änderung direkt sichtbar zu machen.
 
Werbung:
Also derzeit ist ja noch folgendes Problem das die Änderungen zwar übernommen werden aber erst nach einem erneutem Login auch sichtbar werden. Das nervige ist halt das man ne neue Session starten muss da die bestehende Session alte Informationen besitzt.



Der Name war an der Stelle vielleicht ein schlechtes Beispiel. Besseres Beispiel: auf meiner Seite gibt es einen Bereich in dem jeder User ein Zitat oder ähnliches verschriftlichen kann.
Möchte ein User nun dieses Zitat ändern so tut er das, kann die Änderung aber erst feststellen wenn er eine neue Session startet.
Mein Ziel ist es also die Änderung direkt sichtbar zu machen.

Keine Ahnung was du da machst, aber das hört sich an als ob du die Datenbankinhalte in der Session zwischenspeicherst. Dazu ist die Session nicht die gedacht.
 
Keine Ahnung was du da machst, aber das hört sich an als ob du die Datenbankinhalte in der Session zwischenspeicherst. Dazu ist die Session nicht die gedacht.
Also. Ich Speicher nichts in der Session zwischen. Ganz einfach: Ich lese auf meiner Website Daten aus der Datenbank aus. Nun kann ein User bestimmt Informationen seines Profils verändern wie bspw. Ein Zitat hinzufügen oder sonstiges. Tut ein User dies so wird das eingetippte Zitat in der Datenbank abgespeichert und kann ausgelesen werden

ABER

Überlegt es sich der User nach einer gewissen Zeit anders und will einen anderen Text eintippen so funktioniert es auch das die Datenbank die bestehenden Informationen (mit dem alten Zitat) updatet. Hat der User die Änderung jetzt vorgenommen, so sieht er das direkt im Anschluss aber nicht.

In dem Bereich in dem das Zitat ausgelesen wird, würde auch nach der Änderung noch das alte Zitat drin stehen. Erst wenn er sich aus- und wieder einlogt wird das neue Zitat da stehen.

Und genau dieses aus- und wieder einlogen will ich verkürzen. Ich will das der User dich NICHT erstmal ausloggen muss um die Änderungen zu sehen :)
 
Werbung:
Das hört sich stark nach einem logischen Fehler im Script an.
 
Kopiere einfach per js den Inhalt des Eingabefeldes und überschreibe das was du überschreiben willst mit diesem Inhalt beim Klick auf absenden. Ist zwar nicht schön und ich weiß nicht ob das in deinem Seitenaufbau funktioniert, aber da ich nicht genau weiß was du möchtest ist das das einzige was mir einfällt
 
Werbung:
Also hier einmal das Script meines Formulars mit Datenbankanbindung:
Code:
<?php
session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
$userid = $_SESSION['userid'];
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root' );
?>
<!DOCTYPE html>
<html>
<head>
<title>Profil</title>
 
<link rel="stylesheet" href="Formdesign2.css" type="text/css" />
<link href='https://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>
 
</head>
<body>
     
<?php
$Biografie = (isset($_POST["Biografie"]) && is_string($_POST["Biografie"])) ?
$_POST["Biografie"] : "";
 
 
 
$ok = false;
$fehlerfelder = array();
if (isset($_POST["Submit"])) {
    $ok = true;
    if (!isset($_POST["Biografie"]) ||
    !is_string($_POST["Biografie"]) ||
    trim($_POST["Biografie"]) == ""  ){
    $ok = false;
    $fehlerfelder[] = "Biografie";
    }
 
    if ($ok) {
?>
 

 
<?php

$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root');
$statement = $pdo->prepare("UPDATE adressen SET biografie = '$Biografie' WHERE id = '$userid'");
$statement->execute();
 

     
$Biografie = htmlspecialchars($Biografie);      
echo "<p color: black>Super! Alle Daten wurden erfolgreich &uumlbermittelt.</p>";
?>

<?php
     
  } else {
    echo "<p><b>Formular unvolst&auml;ndig</b></p>";
    echo "<ul><li>";
    echo implode("</li><li>", $fehlerfelder);
    echo "</li></ul>";
  }
}
if (!$ok) {
?>
<fieldset>
<form method="post">
 
 
<label for="bio" style="font-size: 18px; line-height: 1.8em; text-align: center"> Biografie</label>
 
<textarea class="support" rows="10" cols="50" maxlength="255" placeholder="Schreibe hier rein was immer du möchtest..." name="Biografie" value="<?php

echo htmlspecialchars($Biografie);
 
?>"></textarea><br />
 

 
<input class="button" type="submit" name="Submit" value="Senden" style="margin-left: 3%"/>
</form>
</fieldset>
<?php
 }
?>
</body>
</html>

Das ist wie gesagt das Formular mit dem Datenbankeinträge der Spalte "Biografie" geupdatet werden können.

Wenn ein User jetzt also angemeldet ist und seinen Eintrag zum Punkt Biografie ändern möchte, so kann er das über diese Script/Formular.

Das Script funktioniert einwandfrei so das die Einträge tatsächlich nach belieben geändert werden können.

Normalerweise sollte man meinen das nun in dem Bereich in dem $Biogrsafie ausgelesen wird, der neue Eintrag stehen müsste aber das ist nicht der Fall. Damit das passiert muss die aktuelle Session geschlossen werden und eine neue gestartet werden ( nämlich über das aus- und wieder einloggen )

Darüber wird die Spalte ausgelesen:
Code:
<?php
$userbiografie = $_SESSION['userbiografie'];
if($userbiografie=="") {$userbiografie = "Biografie";}
echo $userbiografie;
?>
</div>

Dieser Teil kommt in meinem Login-Script vor:
Code:
<?php
error_reporting(E_ALL); /* Alle Fehler werden angezeigt, hilft beim Debuggen, kannst Du nachher wieder rausnehmen, wenn alles fertig ist */

session_start();

try{
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root'); /* Bei mir hat die Datenbank kein Passwort, lokal nicht so das Problem, online muss sie nat¸rlich eins haben */
} catch(PDOException  $e ){
echo "Error: ".$e;
}

if (isset($_POST["form_email"]) && isset($_POST["form_passwort"]) && $_POST["form_email"] <> '' && $_POST["form_passwort"] <> '') { /* Komischerweise kommt das Formular durch, wnen man nichts eigibt, daher habe ich das hier auch ausgeschlossen */
    $sql = "SELECT * FROM `adressen` WHERE `email` = '".$_POST["form_email"]."'";
    $stmt = $pdo -> query($sql);
    $ergebnis = $stmt -> fetch();
    if ($_POST["form_passwort"] == $ergebnis["passwort"]) { /* Diese if-Abfrage funktioniert ja nur, wenn auch in der Form ein Passwort eingegeben wurde, daher habe ich das mit in die erste if-Klammer genommen */
    $_SESSION['username'] = $ergebnis["vorname"];
    $_SESSION['userid'] = $ergebnis["id"];
    $_SESSION['usergeburtstag'] = $ergebnis["geburtstag"];
    $_SESSION['usergeburtsmonat'] = $ergebnis["geburtsmonat"];
    $_SESSION['usergeburtsjahr'] = $ergebnis["geburtsjahr"];
    $_SESSION['userwohnort'] = $ergebnis["wohnort"];
    $_SESSION['userjob'] = $ergebnis["job"];
    $_SESSION['userbiografie'] = $ergebnis["biografie"];
    $_SESSION['userpasswort'] = $ergebnis["passwort"];
        header("Location: LoginCorrectPHP.php");
    }   else {
        $message = "<p>E-mail oder Passwort ist falsch!</p>"; /* Lieber die Meldung in einem String speichern, sonst hast Du vor dem HTML-body-Tag schon eine Ausgabe, das gibt Fehlermeldungen */
    }
}  else {
    $message = "<p>Bitte Passwort und Benutzer eingeben!</p>"; /* Meldung, wenn die Felder nicht beide ausgef¸llt wurden */
}

?>
 
Zuletzt bearbeitet von einem Moderator:
Dieser Teil kommt in meinem Login-Script vor:

Ist aber nicht richtig.

Der User logt sich mit seinen Credentials ein, und der Server soll daraufhin ein User-Object und einen generierten Token zurücksenden.
https://jwt.io/introduction

Token und User-ID speicherst du im WebStorage, Cookie (Session? Bin kein PHP'ler). Der Token dient zur Authentifizierung beim Server und die ID brauchst du, um Änderungen beim Eintrag in die Datenbank dem richtigen User zuordnen zu können. PW und Username müssen dabei nicht übermittelt werden, und der ganze andere Kram gehört sowieso nicht in die Session.
 
Danke für die Antwort aber muss leider sagen das ich damit nicht viel anfangen kann weil ich mich nicht mit den Dingen die du genannt hast auskenne :/ Bzw. was mit Token usw. gemeint ist.

Aber jetzt mal Hand aufs Herz. Alles was ich mache funktioniert ja, also das ändern der Einträge ist absolut kein Problem.

Das Problem ist das die Session zum Zeitpunkt der Änderung alte Informationen besitzt und diese auch nach der Änderung weiterführt. Startet man die Session neu, sind auch die neuen Informationen vorhanden.

Es muss doch einen einfach weg geben eine Session neu zu starten oder die Informationen in der Session zu aktualisieren ?
 
Werbung:
Es muss doch einen einfach weg geben eine Session neu zu starten oder die Informationen in der Session zu aktualisieren?

Schonmal daran gedacht jene Session-Daten einfach zu überschreiben? Wie: Schau in dein Login-Skript.

Davon abgesehen: Tronjer hat durchaus recht mit dem was er schreibt. Solche Daten gehören nicht in eine Session.

Gruß
 
Danke für die Antwort aber muss leider sagen das ich damit nicht viel anfangen kann weil ich mich nicht mit den Dingen die du genannt hast auskenne :/ Bzw. was mit Token usw. gemeint ist.

Ich hatte extra einen Link an meinen Beitrag gehängt. Dort findest du ein Tutorial, wie sich JWT generieren lassen und dazu die Libraries für sämtliche Scriptsprachen.

Aber jetzt mal Hand aufs Herz. Alles was ich mache funktioniert ja

Nur weil etwas in früheren Zeiten als tauglich galt, muss es nach heutigen Maßstäben noch lange nicht gut sein. Viele User haben keine Lust mehr, überall einen extra Account anzulegen und sich die dazugehörigen Passwörter zu merken. Dafür gibt es einen Service namens OAuth, mittels dessen sich Leute über ihre bereits existierenden Facebook-, Google- oder Twitter-Accounts auf anderen Webseiten registrieren können.

https://de.wikipedia.org/wiki/OAuth

Sollte dir das jetzt alles zu komplex erscheinen: Moderne Webentwicklung bedeutet nicht, etwas hinzubekommen, das irgendwie funktioniert, sondern die eigenen Kenntnisse kontinuierlich zu erweitern. Und je mehr du dich den aktuellen Standards anpasst, desto größer ist die Wahrscheinlichkeit, in Foren qualifizierte Hilfe zu erhalten.
 
Werbung:
Zurück
Oben