PHP If else über mehrere Dateien.

Floletni

Commander
Registriert
Sep. 2007
Beiträge
2.329
Nachdem ich mich mit meiner anderen Alternative zu start_session() befasst hab und ich ne ziemlich sichere Lösung über Cookies geschaffen hab, komm ich grad nicht so recht weiter.

Der Inhalt dieser Datei soll als include am anfang jeder Datei stehen. (Bevor zusätzliche Kommentare kommen, nein ich übertrage nicht das richtige (md5)Passwort per Cookie.)

Code:
<?php
$nutzernamekeks = $_COOKIE["nutzername"];
$passwortkeks = $_COOKIE["passwort"];
include 'connect.php';
//echo $nutzernamekeks."=Nutzernamekeks<br>";
//echo $passwortkeks."=Passwortkeks<br>";
$abfrage = "SELECT * FROM session WHERE nutzername='$nutzernamekeks'";
$ergebnis = mysql_query ($abfrage);
while ($row = mysql_fetch_object($ergebnis))
        {
        $nutzername = $row->nutzername;
        //echo $nutzername;
        $passwort = $row->sessionid;
        //echo $sessionid;
        }
$loesch = "DELETE FROM session WHERE zeitstempel<".(time()-1800);
$loeschen = mysql_query ($loesch);
if ($nutznamekeks != $nutzname OR $passwortkeks != $passwort)
        {
        echo "Du bist nicht angemeldet<br><a href='login.html'>Zum Log in</a>";
        }
?>

Meine Idee war es die Datei per else dann auszugeben. Quasi sowas: (Ich weiß das es auf diese Art nicht funktioniert.)

Code:
<?php
include 'cookie.php';
else
{
echo "Hallo ".$nutzername.". Das mit dem Cookie hat wohl geklappt.";
}
?>

Gibt es andere Lösungen wie ich so etwas zu stande bekomme?
 
Das ist ein wenig "schräg" was du da versucht.

Sinniger wäre es doch, wenn du es so machst:
PHP:
<?php
$nutzernamekeks = $_COOKIE["nutzername"];
$passwortkeks = $_COOKIE["passwort"];
include 'connect.php';
//echo $nutzernamekeks."=Nutzernamekeks<br>";
//echo $passwortkeks."=Passwortkeks<br>";
$abfrage = "SELECT * FROM session WHERE nutzername='$nutzernamekeks'";
$ergebnis = mysql_query ($abfrage);
while ($row = mysql_fetch_object($ergebnis))
        {
        $nutzername = $row->nutzername;
        //echo $nutzername;
        $passwort = $row->sessionid;
        //echo $sessionid;
        }
$loesch = "DELETE FROM session WHERE zeitstempel<".(time()-1800);
$loeschen = mysql_query ($loesch);
if ($nutznamekeks != $nutzname OR $passwortkeks != $passwort)
        {
        echo "Du bist nicht angemeldet<br><a href='login.html'>Zum Log in</a>";
        }
else
        {
        echo "Hallo ".$nutzername.". Das mit dem Cookie hat wohl geklappt.";
        }
?>

Dann musst du nur noch diese Datei einbinden, entsprechend könntest du es auch aber so machen, wenn der Zutritt verwehrt ist, einfach nach dem echo-Befehl ein exit/die zu machen und sobald das IF greift, wird die Anwendung beendet, ansonsten dein Code ausgeführt. ;)

PHP:
<?php
$nutzernamekeks = $_COOKIE["nutzername"];
$passwortkeks = $_COOKIE["passwort"];
include 'connect.php';
//echo $nutzernamekeks."=Nutzernamekeks<br>";
//echo $passwortkeks."=Passwortkeks<br>";
$abfrage = "SELECT * FROM session WHERE nutzername='$nutzernamekeks'";
$ergebnis = mysql_query ($abfrage);
while ($row = mysql_fetch_object($ergebnis))
        {
        $nutzername = $row->nutzername;
        //echo $nutzername;
        $passwort = $row->sessionid;
        //echo $sessionid;
        }
$loesch = "DELETE FROM session WHERE zeitstempel<".(time()-1800);
$loeschen = mysql_query ($loesch);
if ($nutznamekeks != $nutzname OR $passwortkeks != $passwort)
        {
        echo "Du bist nicht angemeldet<br><a href='login.html'>Zum Log in</a>";
        exit; // beendet das Skript an diesem Punkt, nichts weiter wird ausgeführt.
        }
?>
 
hey, nur eine kleine Anmerkung. Ich bin zwar kein PHP Experte, aber dein Code könnte anfällig für SQL-Injections sein. Wenn ich als Benutzername sowas ähnliches wie "; Drop Table session; --" wähle, bekommst du vllt ein problem :). Kann mich auch irren, kenn mich zu schlecht mit PHP aus...

Gruß,
misu
 
@misu
Die Benutzernamen sind quasi schon vorgegeben. Also es kann sich keiner so einfach mit so einem Ausdruck anmelden.

@GameRsT
Ah, sowas wie die zweite Variante meinte ich. Die ersten würde zwar meinen schönen Text ausgeben, bringt mir nur nicht viel. Es sollen ja damit längere Texte/Tabellen/Eingabefelder ect. in unterschiedlichen Dateien ausgegeben werden.

Danke für die Hilfe.
 
misu schrieb:
hey, nur eine kleine Anmerkung. Ich bin zwar kein PHP Experte, aber dein Code könnte anfällig für SQL-Injections sein. Wenn ich als Benutzername sowas ähnliches wie "; Drop Table session; --" wähle, bekommst du vllt ein problem :). Kann mich auch irren, kenn mich zu schlecht mit PHP aus...

Gruß,
misu

Das geht in PHP nicht, da mit mysql_query maximal ein "Query" ausgeführt wird. Man könnte so aber die WHERE-Bedingung manipulieren auf die Art "WHERE nutzername="" AND nutername<>"".

Dafür müsste man als Parameter nur "AND nutzername<>" ;)
 
Floletni schrieb:
@misu
Die Benutzernamen sind quasi schon vorgegeben. Also es kann sich keiner so einfach mit so einem Ausdruck anmelden.

Du schreibst die Cookie Daten ungeprüft in ein Query? Schon mal bedacht, dass man mit böswilligen Absichten man seinen Cookie bearbeiten kann und so deine Website manipulieren kann? ;)

Generell gilt: alle Daten die von außen kommen (post, get, file, cookie...), sind grundsätzlich böse und müssen überprüft werden!!
 
das ist ja das problem, die eigentlich anwendung hat 5kb doch die ganzen überprüfungen und haste nicht gesehen blähen den code bis 30kb und mehr auf, das heisst wenn man alles ganz genau macht. denn du kannst prüfen und das geprüfte nochmals prüfen und prüfen. und wenn man zuviel prüft hat man zum schluss mehr löcher drin als vorher wenn man nicht genau aufpasst. deshalb sage ich mir, nur das nötigste, überblick bewahren und täglich ein backup. wer mist bauen will und hrtnäckig ist der findet immer was du hingst immer nur hinterher.
 
Es ist jetzt noch ein Problem aufgetreten. HMTL und CSS sind jetzt shcon ne Weile her und finde den Fehler einfach nicht. Es gibt 3 Bereiche die ich per Boxen definiert habe. Einmal den Kopf, eine Seitenleiste und das Textfeld.
Problem an der ganzen Geschichte: Das Textfeld schiebt sich unter die Seitenleiste (Bild im Anhang).

Code:
<html>
<head>

<style type="text/css">
<!--
#kopf { width:1000px; height:75px; background-color:#366C63;}
#seite { width:50px; height:200px; top:75; background-color:#7C0142;}
#textfeld { width:950px; height:725px; top:120px; left:20px;background-color:#E3EDA5;}

-->
</style>
<?php
include 'connect.php';
?>
</head>
<body>
<div id="kopf"></div>
<div id="seite"></div>
<div id="textfeld">
<form action="eintragen.php" method="post">
<table border="0" th width="800px">
...bla Tabelle mit Eingabefeldern (teilweise mit php gefüllt)
</table>
<br>
<input type="submit" value="Abschicken / Send">
</form>
</div>
</body>
</html>

@Sicherheit
Das ganze wird dann auf auf nen Igel laufen. Dort ist fast alles ausgestellt. Und selbst ich kenn noch nicht mal das Root-Passwort. Das bringt auch nochmal Sicherheit dazu.
Wie wäre es möglich die Daten weiter zu überprüfen?
 

Anhänge

  • div-box.jpg
    div-box.jpg
    25,2 KB · Aufrufe: 130
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben