per session id oder?
also
if (!isset(session('id')) {
http_response_code(401);
die();
}
Beiträge von McArthur
-
-
Hallo,
mir ist gerade aufgefallen, dass normale user, die meine Internetseite beusuchen, oben in der Url leiste einfach .../registrieren.php schreiben können und dann einen neuen account registrieren könnten. Es funktioniert eh nicht, weil keine Verbindung zur Datenbank hergestellt wird, aber kann ich verhinder, dass dieses Formular zusehen ist? Vllt kann man ja irgendwie eine weiterleitung einbringen die einen zurückleitet oder eine Errorseite auf der steht zugang unberechtigt oder so. Hat jemand eine Idee?
-
Okay, erstmal vielen Dank, dass du geantwortet hast. Aber ich versteh nicht ganz was was bedeutet...
Okay hab es schon rausgefunden. Vielen Dank an alle. Ihr habt mir sehr weiter geholfen
-
Also ich würde gerne alles über eine einzelne .php seite machen können. Aber ich weiss nicht wie ich das relisieren kann...
-
Ahhh, stimmt. Aber wie kann ich das umgehen. kann ich inhalt=1 in einene neue Variable packen, so dass nicht mehr$_Get['inhalt'] abgefragt wird, sondern eine andere Variable die die = 1 ist??
-
Das ist das das registrieren formular
HTML
Alles anzeigen<form action="?register=1" method="post"> Benutzername:<br/> <input type="text" size="40" maxlength="250" name="name"/><br /><br/> E-Mail:<br/> <input type="email" size="40" maxlength="250" name="email"/><br/><br/> Admin rang: <select name="rang" size="1"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> </select><br/><br/> Dein Passwort:<br/> <input type="password" size="40" maxlength="250" name="passwort"/><br/> <input type="submit" value="Abschicken"/> </form>
-
Also finden tut er den gewünschten Link. Der Link wird ja sogar angezeigt. Aber sobald ich das Formular Abschicke, kommen Warnungen, die ich am Anfang schon gezeigt hatte.
Wenn ich "include('registrieren.php')" Angebe, funktioniert es einwandfrei.
Es scheint also so, als wenn der Inhalt der Variable gelöscht werden würde wenn ich auf Abschicken klicke. Aber warum?Und wenn ich die Variable "$link" im vorfeld definiere, geht es auch...
-
@Multivitamin, hast du eine idee?
-
Okay, danke für die Erklärung.
Aber mein ursprüngliches Problem ist noch nicht gelöst. Habt ihr da noc eine idee?
-
Ok, danke für die Erklärung. Und wenn ich das jetzt richtig verstanden habe, dann ist dein code schnipsel "escapet"?
Zitat von Multivitamin- $query = $pdo->prepare("SELECT * FROM inhalte WHERE id = :inhalt")
- $query->execute(array(":inhalt" => $_GET["inhalt"]))
- foreach ($query->fetchAll() as $row) {
- ....
- ....
-
Oh, entschuldigung. Das habe ich voll übersehen.
Darf ich fragen, was mit escapen gemeint ist? pardon -
Wie könnte ich es denn ohne Framework sicher machen?
-
oh okay... gut zu wissen, danke.
Ich bin ja noch Anfänger und weiss nicht wie ich das verhindern kann..... -
Ich habe mich in diesem fall nicht weiter damit ausseinander gesetzt, da diese Db Lokal auf meinem PC gespeichert ist und natürlich nicht so öffentlich gemacht wird. wenn ich iwann fertig bin, werde ich natürlich einen neuen Benutzer anlegen und ein vernünftiges Passwort benutzen.
Aber wenn es Loka auf meinem Pc ist und niemand von ausserhalb drauf zugreifen kann, ist es ja kein Problem denke ich.
So viel zur Datenbank.
-
Also ich möchte einen Internen bereich für Admins machen. auf der linken seite, befinden sich links für bestimmte aktionen. Zb ist eine dieser Aktionen, dass man einen neuen Admin registriert. diese registrierung habe ich in einer anderen datei (registrieren.php) gespeichert. diese datei soll in die intern.php datei eingebunden werden. wenn ich auf diesen Link klicke.
Ich hoffe ich konnte dir einigermaßen gut erläutern was ich vorhabe.
-
Danke für den tip, aber ich würde es schon gerne selber machen wollen. Hast du eine Idee, wie ich das Problem anders lösen kann?
-
Hallo,
ich möchte per Klick auf einen Link, einen wert weitergeben, nachdem in einer Datenbank gesucht wird, sagen wir eins(es wird nach id 1 gesucht). zu der id wird etwas gefunden, und es ist ein Link. Dieser Link wird in eine Variable namens inhalt gepackt und durch include wird die Variable ausgegeben.
PHP: intern.php
Alles anzeigen<?php session_start(); $pdo = new PDO('mysql:host=localhost;dbname=altislife', 'root', ''); $zugriff = true; if(!isset($_SESSION['userid'])) { $zugriff = false; } //Abfrage der Nutzer ID vom Login $userid = $_SESSION['userid']; $sql = "SELECT * FROM users WHERE id = '".$userid."' "; foreach ($pdo->query($sql) as $row) { $benutzername = $row['benutzername']; $email = $row['email']; $rang = $row['rang']; $created_at = $row['created_at']; $updatet_at = $row['update_at']; } $timestamp = time(); $datum = date("d.m.Y - H:i", $timestamp); if(isset($_GET['inhalt'])) { $inhalt = $_GET['inhalt']; $sql = "SELECT * FROM inhalte WHERE id = '".$inhalt."' "; foreach ($pdo->query($sql) as $row); $link = $row['inhalt']; } ?> <!DOCTYPE html> <html> <head> <title>...-Adminbereich</title> <link href="styles/intern.css" type="text/css" rel="stylesheet" /> </head> <body> <div class="haupt"> <?php if($zugriff == false) { ?> <div class="block"> Sie sind nicht eingeloggt. <a href="login.php">Zurück zum Login.</a> </div> <?php } if($zugriff == true) { ?> <aside class="logout"> <?php echo "<h4>Hallo, ".$benutzername."</h4><br/> <a>Ihre email: ".$email."<br /> Ihr Adminrang: ".$rang."<br /> Admin seit: ".$created_at."<br /><br /> Datum: ".$datum."</a>"; ?> <br/><br/> <a href="logout.php">Logout</a> </aside> <aside class="menue"> <a href="?inhalt=1" >Neuen Admin registrieren</a> </aside> <section> <?php include($link); ?> </section> <?php } ?> </div> </body> </html>
Die Standart Datei.
PHP: registrieren.php
Alles anzeigen<?php $pdo = new PDO('mysql:host=localhost;dbname=altislife', 'root', ''); $showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll $datum = date("d.m.Y - H:i"); if(isset($_GET['register'])) { $error = false; $benutzername = $_POST['name']; $email = $_POST['email']; $rang = $_POST['rang']; $passwort = $_POST['passwort']; if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>'; $error = true; } if(strlen($passwort) == 0) { echo 'Bitte ein Passwort angeben<br>'; $error = true; } //Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde if(!$error) { $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email"); $result = $statement->execute(array('email' => $email)); $user = $statement->fetch(); if($user !== false) { echo 'Diese E-Mail-Adresse ist bereits vergeben<br>'; $error = true; } } //Keine Fehler, wir können den Nutzer registrieren if(!$error) { $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT); $statement = $pdo->prepare("INSERT INTO users (email, passwort, benutzername, rang, created_at) VALUES (:email, :passwort, :benutzername, :rang, :created_at)"); $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash, 'benutzername' => $benutzername, 'rang' => $rang, 'created_at' => $datum)); if($result) { echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>'; $showFormular = true; } else { echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>'; } } } if($showFormular) { ?> <form action="?register=1" method="post"> Benutzername:<br/> <input type="text" size="40" maxlength="250" name="name"/><br /><br/> E-Mail:<br/> <input type="email" size="40" maxlength="250" name="email"/><br/><br/> Admin rang: <select name="rang" size="1"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> </select><br/><br/> Dein Passwort:<br/> <input type="password" size="40" maxlength="250" name="passwort"/><br/> <input type="submit" value="Abschicken"/> </form> <br/> <?php } //Ende von if($showFormular) echo $datum; ?> </body> </html>
Die einzubidende Datei.
Wenn ich die Seite nun aufrufe, sieht zunächst alles richtig aus, doch wenn ich das formular, welches durch include eingesetzt wird, Abschicke, bekomme ich Warnungen, dass die Variable leer sei.
Zitat von PHP
Notice: Undefined variable: link in C:\xampp\htdocs\intern.php on line 72Warning: include(): Filename cannot be empty in C:\xampp\htdocs\intern.php on line 72
Warning: include(): Failed opening '' for inclusion (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\intern.php on line 72
Hat einer eine idee was da nicht stimmt?
Vielen Dank schonmal im voraus.
Mfg
Nico -
Funktioniert einwandfrei, vilen Dank. Kann ich dir bei Fragen eine pm schicken??
-
Okay. Diese header weiterleitung habe ich schon im internet gefunden aber hab keinen Plan wo ich die reinsetzen sollte.
Zitat von McArthur- if ($user !== false && password_verify($passwort, $user['passwort'])) {
- $_SESSION['userid'] = $user['id'];
- die('Login erfolgreich. Weiter zu <a href="geheim.php">internen Bereich</a>');
- } else {
- $errorMessage = "Benutzername oder Passwort war ungültig<br>";
- }
Ich hatte es in den klammern hinter die versucht und vor die. Hat allerdings nicht funktioniert. Und wo anders würde es für mich keinen Sinn machen.
-
Ich hätte dann dazu noch eine kleine Frage. Hast du eine idee, wie ich direkt nach dem login auf eine andere Seite weiter geleitet werden kann??