Seite aktualisieren
Hallo,
wie der Titl schon sagt versuch ich die Seite zu aktualisieren. Die Seite beinhaltet ein HTML Formular indem ich den Usernamen ändern kann, welches ohne Probleme Funktioniert.
Auf der Seite wird der alte Username Angezeigt, wenn man den neuen Usernamen angibt wird er erst angezeigt wenn man selber aktualisiert. Es soll aber automatisch sofort nach der neuen Eingabe aktualisieren.
Ich hoffe mir kann jemand helfen. Hier ist noch der Code:
MfG
Sapzero
wie der Titl schon sagt versuch ich die Seite zu aktualisieren. Die Seite beinhaltet ein HTML Formular indem ich den Usernamen ändern kann, welches ohne Probleme Funktioniert.
Auf der Seite wird der alte Username Angezeigt, wenn man den neuen Usernamen angibt wird er erst angezeigt wenn man selber aktualisiert. Es soll aber automatisch sofort nach der neuen Eingabe aktualisieren.
Ich hoffe mir kann jemand helfen. Hier ist noch der Code:
<?php
if($_REQUEST['abschicken1'])
{
if(strlen($username_neu)>=4)
{
echo "Ihr Username wurde geändert.<br>";
$aendern = "UPDATE tblRegistry
SET Username = '$username_neu'
WHERE Username = '$username'
AND Passwort = '$passwort'";
$update = mysql_query($aendern);
$_SESSION['username'] = $username_neu;
--> HIER SOLL ES DIE SEITE AKTUALISIEREN
}
else
{
echo "Ihr Username muss mindestens 2 Zeichen beinhalten.<br>";
}
}
?>
Sapzero
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105152
Url: https://administrator.de/contentid/105152
Ausgedruckt am: 23.11.2024 um 00:11 Uhr
15 Kommentare
Neuester Kommentar
Naja, das ja nicht so ein tolle Lösung... wenn JS deaktiviert ist, haste wieder das selbe Problem. Ausserdem löst das hier auch wahrscheinlich nicht Problem.
1. Da du den neuen Namen in eine Session überträgst, hast du ein session_start() ?
2. Wird der Name der angezeigt wird, noch vorher oder erst nach dem Speichern ausgelesen ?
3. Auf Daten eines Formulares immer per $_POST oder $_GET zugreifen.
Hm... wenn das jetzt alles ist, das in der Datei steht, an die das Formular geschickt wird, kannst du auch per header() weiterleiten -> PHP-Manual - header()
~Arano
1. Da du den neuen Namen in eine Session überträgst, hast du ein session_start() ?
2. Wird der Name der angezeigt wird, noch vorher oder erst nach dem Speichern ausgelesen ?
3. Auf Daten eines Formulares immer per $_POST oder $_GET zugreifen.
Hm... wenn das jetzt alles ist, das in der Datei steht, an die das Formular geschickt wird, kannst du auch per header() weiterleiten -> PHP-Manual - header()
~Arano
PHP läuft Serverseitig ja, aber die anfragen werden auch an den Server geschickt, der wiedeerum schickt dem Browser den HTTP-Header mit der Umleitung die dann vom Browser weiter verfolgt wird.
Ich habe es mal in klein nachgebastelt, hier funktioniert es wunderbarWie sieht es denn bei dir aus ? Irgendwo muss da ja noch der Wurm drin sein.
~Arano
Ich habe es mal in klein nachgebastelt, hier funktioniert es wunderbar
<?php
session_start();
if(isset($_POST['upd_name']) && isset($_POST['name']) && !empty($_POST['name']))
name2session($_POST['name']);
function name2session($n){
$_SESSION['name']=$n;
echo 'Name wurde aktualisiert !<br>';
}
?>
<html>
<head>
<title>session help</title>
</head>
<body>
Ihr Name lautet derzeit: "<?php echo $_SESSION['name']; ?>"<br>
<br>
<form action="./index.php" method="POST">
<input type="text" name="name" value="name"><br>
<input type="submit" name="upd_name" value="Speichern">
</form>
</body>
</html>
~Arano
Wenn du mit $_REQUEST arbeitest könnte jemand Variablen einschleusen (index.php?variable=wert) da $_REQUEST alle $_POST und $_GET Variablen zusammenführt.
Die Seite wird neu geladen beim Klick auf auf den Button "Speichern".
Ich glaube das Problem bei deinem Fall ist dass du die Query zu spät auf deiner Seite aufrufst. Wenn du deinen Quellcode gleich zu Beginn aufrufst, dann wird die $_SESSION Variable gleich gesetzt und alle echo $_SESSION['username'] werden richtig ausgeben.
Selbstverständlich erscheint der alte Inhalt noch wenn du den Code nach einem "echo" ausführst.
Eventuell könntest du mit <div id="username"></div> den Inhalt aller id="username" Felder mittels Javascript ändern.
Die Seite wird neu geladen beim Klick auf auf den Button "Speichern".
Ich glaube das Problem bei deinem Fall ist dass du die Query zu spät auf deiner Seite aufrufst. Wenn du deinen Quellcode gleich zu Beginn aufrufst, dann wird die $_SESSION Variable gleich gesetzt und alle echo $_SESSION['username'] werden richtig ausgeben.
Selbstverständlich erscheint der alte Inhalt noch wenn du den Code nach einem "echo" ausführst.
Eventuell könntest du mit <div id="username"></div> den Inhalt aller id="username" Felder mittels Javascript ändern.
Nein, nicht wirklich !
Eine SQL-Injection ist etwas anderes.
Dies ist nur ein kleines Beispiel, das es verdeutlichen soll, unter umständen, wäre es so vielleicht auch möglich, den ganzen Server zu Cnacken und für eigene Zwecke zu missbrauchen (z.B. Spam verschicken, XXX-Filme verteilen, oder schlimmeres)
Aber trotzdem lieber POST und GET verwenden, denn wie es Cubic83 schon erzählte, mit der REQUEST-Methode wäre es leichter für den Cracker. Und wir wollen ihnen ja nicht die Tore öffnen ;)
Gegen die Injections hilft es nur SÄMTLICHE Benutzereingaben zu überprüfen z.B das Preiseingaben nur aus Zahlen bestehen, oder Namen nur aus A-Z und min3-max20-Zeichen ect.pp
__Bei Formularen gilt:__
Wegen der Header-Weiterleitung:
update.php
formular.phpHier sollen (sollten, habs nur mal schnell getippt, nicht getestet) die Daten des Formulares an update.php geschickt werden, dies verarbeite sie und leitet dann wieder auf das Formular weiter, welches nun die aktualisierten Daten aus der Session liest.
(Das ist nur ein Beispiel also null sicherheit und von JEDEM aufrufbar ! [sowie kein Injectionschutz]).
Deswegen Fragte ich dich wie es bei dir aussieht, es gibt bekanntlich viele Wege die nach Rom führen :D
So, jetzt jetzt bin ich etwas durcheinander - zuviele dinge aufn mal... ähm.. hoffe ich habe jetzt aber alles, bis morgen.
~Arano
Eine SQL-Injection ist etwas anderes.
<?php
// Ein Wert von einem Formular (ein Name):
$_POST['name']='Arano';
// Ein Query um ihn in einer Datenbank zu speichern:
$query="INSERT INTO `tab` (`name`)
VALUES ('$_POST['name']')";
// Hier wird in dem Query die Variable surch den Wert des Formulares ersetzt=
$query="INSERT INTO `tab` (`name`)
VALUES ('Arano')";
// Soweit klar ? Alles okay, aer was wenn ich keinen Namen ins Formualr eintrage, sondern etwas PHP-Code:
$_POST['name']='Cracker\')"; echo $admin_pwd.\',\'.$admin_name; echo "';
/* Die einfachen Anführungszeichen musste ich wegen des Syntaxhiglighs maskieren */
// Daraus würde möglicherweise ein Query wie dieser:
$query="INSERT INTO `tab` (`name`)
VALUES ('Cracker')"; echo $admin_pwd.','.$admin_name; echo "')";
// Schaut man ihn sich nun genauer an, erkennt man, das der eigentliche Query okay ist aber danach direkt die Zugangsdaten angezeigt werden:
$query="INSERT INTO `tab` (`name`)
VALUES ('Cracker')";
echo $admin_pwd.','.$admin_name;
echo "')";
?>
Aber trotzdem lieber POST und GET verwenden, denn wie es Cubic83 schon erzählte, mit der REQUEST-Methode wäre es leichter für den Cracker. Und wir wollen ihnen ja nicht die Tore öffnen ;)
Gegen die Injections hilft es nur SÄMTLICHE Benutzereingaben zu überprüfen z.B das Preiseingaben nur aus Zahlen bestehen, oder Namen nur aus A-Z und min3-max20-Zeichen ect.pp
__Bei Formularen gilt:__
Alle Eingaben die von einem Benutzer (auch Admins) kommen, sind BÖSE !
Wegen der Header-Weiterleitung:
update.php
<?php
session_start();
$_SESSION['username']=$_POST['neuer_username'];
header('Location: http://www.example.com/formular.php');
?>
<?php
session_start();
?>
<html>
<head>
<title>blubb</title>
</head>
<body>
<form action="./update.php" method="POST">
<input type="text" name="neuer_username" value="<?php echo $_SESSION['username']; ?>"><br>
<input type="submit" name="upd_name_btn" value="Aktualisieren">
</form>
</body>
</html>
(Das ist nur ein Beispiel also null sicherheit und von JEDEM aufrufbar ! [sowie kein Injectionschutz]).
Deswegen Fragte ich dich wie es bei dir aussieht, es gibt bekanntlich viele Wege die nach Rom führen :D
So, jetzt jetzt bin ich etwas durcheinander - zuviele dinge aufn mal... ähm.. hoffe ich habe jetzt aber alles, bis morgen.
~Arano
Nasiehste, da haben wir´s doch *g*
Wie ichs vermutet hatte, der Username wird aus der Datenbank gelesen, in der Datenbank aktualisiert und dann das Ausgelesene (von VOR der aktualisierung) ausgegeben.
Das gilt auch für alle anderen Daten, sie werden erst ausgelesen, dann aktualisiert und dann werden die alten Daten weiterverarbeitet.
Also, erste alle Datensätz bearbeiten (erstellen, aktualisieren, löschen, was auch immer) und dann zur Ausgabe auslesen ;)
Und jetzt noch ein bisschen was:
anstelle von diesemverwende folgendes:
In den Zeilen 153,160,167,174,181,182,183 und 184 stellst du einfach ein paar Variablen in den Raum, warum ?
Bei den einzelnen änderungsdurchführungen gibst du erst aus das es erfolgreich war, obwohl die Änderung erst danach durchgeführt wird. Was den nun wenn diese doch fehlschlägt ?
Dann hast du dort stehen, das die Änderung Erfolgreich war, geändert hat sich aber nichts ;)
Achso, ich muss mich noch bei dir entschuldigen !
Tut mir leid !
Ich sagte vorhin, das du den Quelltext hier "speichern" kannst wenn er zu lang ist.
Dummerweise habe ich vergessen dir den Link zu geben :D
Mir "hier" meinte ich übrigens Pastie.org.
So, dann erstmal frohes schaffen und weiterhin viel Erfolg !
~Arano
Wie ichs vermutet hatte, der Username wird aus der Datenbank gelesen, in der Datenbank aktualisiert und dann das Ausgelesene (von VOR der aktualisierung) ausgegeben.
Zeile 148-153 Username aus der DB lesen und in Variable speichern.
Zeile 201-205 DB-Eintrag aktualisieren - nicht die Variable !
Zeile 291 // Variable mit (mittlerweile veraltetem) Usernamen ausgeben.
Zeile 201-205 DB-Eintrag aktualisieren - nicht die Variable !
Zeile 291 // Variable mit (mittlerweile veraltetem) Usernamen ausgeben.
Das gilt auch für alle anderen Daten, sie werden erst ausgelesen, dann aktualisiert und dann werden die alten Daten weiterverarbeitet.
Also, erste alle Datensätz bearbeiten (erstellen, aktualisieren, löschen, was auch immer) und dann zur Ausgabe auslesen ;)
Und jetzt noch ein bisschen was:
anstelle von diesem
$vergleich = "SELECT Username FROM tblRegistry
WHERE Username = '$username'
AND Passwort = '$passwort'";
$erfolg = mysql_query($vergleich);
$username_acc = mysql_fetch_assoc($erfolg);
$username_acc["Username"];
$vergleich = "SELECT Vorname FROM tblRegistry
WHERE Username = '$username'
AND Passwort = '$passwort'";
$erfolg = mysql_query($vergleich);
$vorname_acc = mysql_fetch_assoc($erfolg);
$vorname_acc["Vorname"];
$vergleich = "SELECT Nachname FROM tblRegistry
WHERE Username = '$username'
AND Passwort = '$passwort'";
$erfolg = mysql_query($vergleich);
$nachname_acc = mysql_fetch_assoc($erfolg);
$nachname_acc["Nachname"];
$vergleich = "SELECT eMail FROM tblRegistry
WHERE Username = '$username'
AND Passwort = '$passwort'";
$erfolg = mysql_query($vergleich);
$email_acc = mysql_fetch_assoc($erfolg);
$email_acc["eMail"];
$vergleich = "SELECT Username,Vorname,Nachname,eMail FROM tblRegistry
WHERE Username = '$username'
AND Passwort = '$passwort'";
$erfolg = mysql_query($vergleich);
// hier sollte man noch mal kontrollieren ob der Query erfolgreich ausgeführt wurde und ob es überhaupt ein Ergebnis gibt - auch eine Abfrage die nichts zurückliefert (z.B. Tippfehler im Passwort) wurde erfolgreich ausgeführt !
$userdaten=mysql_fetch_assoc($erfolg);
// $userdaten ist nun ein Array, das alle ausgelesenen Daten enthält
/*
$userdaten['Vorname']
$userdaten['Nachname']
...
*/
In den Zeilen 153,160,167,174,181,182,183 und 184 stellst du einfach ein paar Variablen in den Raum, warum ?
Bei den einzelnen änderungsdurchführungen gibst du erst aus das es erfolgreich war, obwohl die Änderung erst danach durchgeführt wird. Was den nun wenn diese doch fehlschlägt ?
Dann hast du dort stehen, das die Änderung Erfolgreich war, geändert hat sich aber nichts ;)
Achso, ich muss mich noch bei dir entschuldigen !
Tut mir leid !
Ich sagte vorhin, das du den Quelltext hier "speichern" kannst wenn er zu lang ist.
Dummerweise habe ich vergessen dir den Link zu geben :D
Mir "hier" meinte ich übrigens Pastie.org.
So, dann erstmal frohes schaffen und weiterhin viel Erfolg !
~Arano