*gelöst* Login von PHP Seite ist Fehlerhaft - VarmintLP - 10.12.2014 10:50
Guten Tag liebe Community,
Mein Name ist Stephen M. bin 21 Jahre alt und komme aus Luxemburg.
Aktuell habe ich wieder ein Problem, das mir letztes Jahr nicht aufgefallen beziehungsweise nicht aufgetretten ist. Für mein Schulprojekt soll ich einen simplen Login erstellen und mir ist aufgefallen, dass man sich unter egal welchen Eingaben einloggen kann.
Hier einmal mein Code
//Eingabe des Datenbankdaten
$con = mysqli_connect($SQLIP, $SQLAccount, $SQLPassword)
or die("Verbindungsaufbau Fehlschlag.");
//Auswahl der Datenbank
mysqli_select_db($con, "RaspPiThermo");
function CheckNow()
{
echo shell_exec("sudo ./TempNow.sh");
}
function LogOff()
{
unset($_SESSION['LoggedIn']);
unset($_SESSION['Username']);
unset($_SESSION['Password']);
unset($_SESSION['LoggedIn']);
unset($Check3);
echo "
<script type='text/javascript'>
window.setTimeout(location.href='index.php', 500);
</script>
";
}
echo"
<form method='post' action='index.php'>
";
echo "
<body>
<div>
<div>
<p>
";
if (isset($_SESSION['LoggedIn']))
{
echo" <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt
</p>
";
}
else
{
echo"
<table border='0'>
<tr>
<td>
Username:
</td>
<td>
<input type='text' name='Username' maxlength='20' >
</td>
</tr>
<tr>
<td>
Passwort:
</td>
<td>
<input type='password' name='Password' maxlength='20'>
</td>
</tr>
<tr>
<td colspan='2'>
<input type='submit' name='Login' value='Login'>
</td>
</tr>
</table>
";
//übergabe der Registrationsdaten
$Username = $_POST['Username'];
$Password = $_POST['Password'];
//Prüfen ob Daten eingegeben wurden
if (isset($_POST['Username']) AND
isset($_POST['Password']))
{
//Code für Logindaten Überprüfung
$sqlLoginData = "SELECT * FROM `tblUser`
WHERE `Name` = '$Username'
AND `Password` = '$Password'
";
//Ausführung des MySQL-Befehls
$ausführen = mysqli_query($con, $sqlLoginData)
or die("Login Fehler");
if ($ausführen)
{
$_SESSION['Username'] = $Username;
$_SESSION['Password'] = $Password;
$_SESSION['LoggedIn'] = "Set";
$Check3 = "OK";
echo "
<script type='text/javascript'>
window.setTimeout(location.href='index.php', 500);
</script>
";
}
else
{
echo "Login Fehlgeschlagen!";
}
if (isset($Check3))
{
}
}
}
Ich würde außerdem noch gerne das Problem mit meinem Include lösen, wobei ich leider keine Ahnung habe, was genau ich ändern soll. Mittlerweile habe ich schon die richtige Datei gefunden, in der es geändert werden muss.
Die Rede ist von "/etc/php5/apache2/php.ini". Dort gibt es die Zeile
PHP's default setting for include_path is ".;/path/to/pehp/pear"
Die Frage ist, wie muss ich den Pfad verändern, dass er in den Ordner /var/www/Include die Dateien suchen geht. In der /var/log/apache2/error.log steht immer wieder
PHP Warning: include(Include/table.php): failed to open stream: Permission denied in /var/www/index.php on line 145
PHP Warning: include(): Failed opening 'Include/table.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/index.php on line 145
Würde mich über eure Hilfe freuen
Mit freundlichen Grüßen
VarmintLP
RE: Login von PHP Seite ist Fehlerhaft - Kevv - 10.12.2014 11:09
//Eingabe des Datenbankdaten $con = mysqli_connect($SQLIP, $SQLAccount, $SQLPassword) or die("Verbindungsaufbau Fehlschlag."); //Auswahl der Datenbank mysqli_select_db($con, "RaspPiThermo"); function CheckNow() { echo shell_exec("sudo ./TempNow.sh"); } function LogOff() { unset($_SESSION['LoggedIn']); unset($_SESSION['Username']); unset($_SESSION['Password']); unset($_SESSION['LoggedIn']); unset($Check3); echo " <script type='text/javascript'> window.setTimeout(location.href='index.php', 500); </script> "; } echo" <form method='post' action='index.php'> "; echo " <body> <div> <div> <p> "; if (isset($_SESSION['LoggedIn'])) { echo" <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt </p> "; } else { echo" <table border='0'> <tr> <td> Username: </td> <td> <input type='text' name='Username' maxlength='20' > </td> </tr> <tr> <td> Passwort: </td> <td> <input type='password' name='Password' maxlength='20'> </td> </tr> <tr> <td colspan='2'> <input type='submit' name='Login' value='Login'> </td> </tr> </table> "; //übergabe der Registrationsdaten $Username = $_POST['Username']; $Password = $_POST['Password']; //Prüfen ob Daten eingegeben wurden if (isset($_POST['Username']) AND isset($_POST['Password'])) { //Code für Logindaten Überprüfung $sqlLoginData = "SELECT * FROM `tblUser` WHERE `Name` = '$Username' AND `Password` = '$Password' "; //Ausführung des MySQL-Befehls $ausführen = mysqli_query($con, $sqlLoginData) or die("Login Fehler"); if ($ausführen) { $_SESSION['Username'] = $Username; $_SESSION['Password'] = $Password; $_SESSION['LoggedIn'] = "Set"; $Check3 = "OK"; echo " <script type='text/javascript'> window.setTimeout(location.href='index.php', 500); </script> "; } else { echo "Login Fehlgeschlagen!"; } if (isset($Check3)) { } } }
Du checkst nur ob der Query ausgeführt wird.
Versuch mal das hier
//Eingabe des Datenbankdaten $con = mysqli_connect($SQLIP, $SQLAccount, $SQLPassword) or die("Verbindungsaufbau Fehlschlag."); //Auswahl der Datenbank mysqli_select_db($con, "RaspPiThermo"); function CheckNow() { echo shell_exec("sudo ./TempNow.sh"); } function LogOff() { unset($_SESSION['LoggedIn']); unset($_SESSION['Username']); unset($_SESSION['Password']); unset($_SESSION['LoggedIn']); unset($Check3); echo " <script type='text/javascript'> window.setTimeout(location.href='index.php', 500); </script> "; } echo" <form method='post' action='index.php'> "; echo " <body> <div> <div> <p> "; if (isset($_SESSION['LoggedIn'])) { echo" <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt </p> "; } else { echo" <table border='0'> <tr> <td> Username: </td> <td> <input type='text' name='Username' maxlength='20' > </td> </tr> <tr> <td> Passwort: </td> <td> <input type='password' name='Password' maxlength='20'> </td> </tr> <tr> <td colspan='2'> <input type='submit' name='Login' value='Login'> </td> </tr> </table> "; //übergabe der Registrationsdaten $Username = $_POST['Username']; $Password = $_POST['Password']; //Prüfen ob Daten eingegeben wurden if (isset($_POST['Username']) AND isset($_POST['Password'])) { //Code für Logindaten Überprüfung $sqlLoginData = "SELECT * FROM `tblUser` WHERE `Name` = '$Username' AND `Password` = '$Password' "; //Ausführung des MySQL-Befehls $ausführen = mysqli_query($con, $sqlLoginData) or die("Login Fehler"); $checkforRow = mysqli_num_rows($ausführen); if ($checkforRow != 0) { $_SESSION['Username'] = $Username; $_SESSION['Password'] = $Password; $_SESSION['LoggedIn'] = "Set"; $Check3 = "OK"; echo " <script type='text/javascript'> window.setTimeout(location.href='index.php', 500); </script> "; } else { echo "Login Fehlgeschlagen!"; } if (isset($Check3)) { } } }
RE: Login von PHP Seite ist Fehlerhaft - VarmintLP - 10.12.2014 11:31
Naja mit dem Code funktion iert es zwar, dass nicht alle gleich eingeloggt werden mit egal welchen werten, aber ich kann mich auch nicht mit anderen Usern die existieren einloggen.
Leider funktioniert es auch nur einmal :/
P.S.: brauchst nicht den ganzen Code zu schreiben. Der betreffende Ausschnitt reicht.
RE: Login von PHP Seite ist Fehlerhaft - Kevv - 10.12.2014 11:39
Du lieferst auch keinen kompletten Code.
Was steht denn noch vor dem Abschnitt hier:
/Eingabe des Datenbankdaten $con = mysqli_connect($SQLIP, $SQLAccount, $SQLPassword) or die("Verbindungsaufbau Fehlschlag.");
Außer das die Variablen da irgendwo definiert werden ?
Du bräuchtest auch noch ein session_start() ganz am Anfang.
Und die Variablen sollten auch mal escaped werden (SQL Injection).
Würde das ganze ja mal gerne Lokal bei mir testen.
RE: Login von PHP Seite ist Fehlerhaft - Freddy - 10.12.2014 11:48
Zudem kann ich Dir vorweg sagen, dass dein LogOff() nicht funktionieren wird. Du kannst keine PHP-Funktion mit onclick="" aufrufen.
[...]
function LogOff()
{
unset($_SESSION['LoggedIn']);
unset($_SESSION['Username']);
unset($_SESSION['Password']);
unset($_SESSION['LoggedIn']);
unset($Check3);
echo "
<script type='text/javascript'>
window.setTimeout(location.href='index.php', 500);
</script>
";
}
[...]
if (isset($_SESSION['LoggedIn']))
{
echo" <input type='submit' name='logout' value='Log Off' onclick='LogOff()' /> Eingeloggt
</p>
";
}
[...]
MfG
Freddy
RE: Login von PHP Seite ist Fehlerhaft - Scharock - 10.12.2014 11:57
Du hast da verdammt noch mal das aller wichtigste im Umgang mit Sessions vergessen.
Hier lesen:
[Link: Registrierung erforderlich]
und Sessions verstehen und zu benutzen verstehen.
PS: Wenn du entwickelst, lerne zu debuggen.
Ansonsten wirst du vor jeder 2. Zeile fragend stehen und nicht weiter wissen.
Ahh myfarynet.eu war schneller. Ich wollte lieber das er den Fehler selber erkennt und sich informiert. Sonst lernt er nicht weil er scheinbar nicht weiß wie Sessions funktionieren oder er hat es vergessen(wobei ich auf erstes tippe).
Mfg Scharock
RE: Login von PHP Seite ist Fehlerhaft - VarmintLP - 10.12.2014 17:03
@myfarynet.eu der session_start ist vorhanden. Und im Header stehen nun wirklich keine weiteren relevanten Informationen nur das Übliche Titel, Charset und nach dem Header die Variablen für den Server (die ich nicht zeigen möchte, da man ja weiß, dass das große weite Internet von Überall zugänglich ist. Das mal vorweg.
@Scharock ich kann richtig Debuggen, nur manchmal komme ich auch nicht weiter, da nicht jedes Problem vorgekommen ist.
@Freddy die Funktion habe ich nur eben so dahin gesetzt, damit ich das später ändern kann. Sogesehen, kann man die Funktion einfach entfernen und so tun, als ob sie nicht da gewesen wäre.
@all Ich habe in der Zwischenzeit ein wenig weiter an der Index.php gearbeitet, aber da mir das nötige Material hier Zuhause fehlt und mir manche Möglichkeiten einfach nicht gegeben sind, kann ich nicht so ohne weiteres meinen Raspberry Pi Permanent eingeschaltet lassen.
Außerdem kenne ich mich sehr wohl ausreichend mit Sessions aus, um diese ohne weiteres Verwenden zu können.
Das Gesamtprojekt ist außerdem nur dafür gedacht in einem geschlossenen Firmennetz verwendet zu werden. Das soll heißen: Von außen wird man später nicht auf die Geräte Zugriff erhalten, außer man ist innerhalb des Firmen/Schulnetzwerks.
Um wieder auf das Problem zurück zu kommen. Mit der Idee
durch folgendes zu ersetzen, hat leider nicht geholfen.
//Ausführung des MySQL-Befehls $ausführen = mysqli_query($con, $sqlLoginData) or die("Login Fehler"); $checkforRow = mysqli_num_rows($ausführen); if ($checkforRow != 0)[...]
Leider bin ich jetzt genau so entfernt von der Lösung als vorher. -_-
Vlt hat ja einer von euch eine andere Lösung parat.
RE: Login von PHP Seite ist Fehlerhaft - Scharock - 10.12.2014 17:47
@myfarynet.eu der session_start ist vorhanden. Und im Header stehen nun wirklich keine weiteren relevanten Informationen nur das Übliche Titel, Charset und nach dem Header die Variablen für den Server (die ich nicht zeigen möchte, da man ja weiß, dass das große weite Internet von Überall zugänglich ist. Das mal vorweg.
@Scharock ich kann richtig Debuggen, nur manchmal komme ich auch nicht weiter, da nicht jedes Problem vorgekommen ist.
@Freddy die Funktion habe ich nur eben so dahin gesetzt, damit ich das später ändern kann. Sogesehen, kann man die Funktion einfach entfernen und so tun, als ob sie nicht da gewesen wäre.
@all Ich habe in der Zwischenzeit ein wenig weiter an der Index.php gearbeitet, aber da mir das nötige Material hier Zuhause fehlt und mir manche Möglichkeiten einfach nicht gegeben sind, kann ich nicht so ohne weiteres meinen Raspberry Pi Permanent eingeschaltet lassen.
Außerdem kenne ich mich sehr wohl ausreichend mit Sessions aus, um diese ohne weiteres Verwenden zu können.
Das Gesamtprojekt ist außerdem nur dafür gedacht in einem geschlossenen Firmennetz verwendet zu werden. Das soll heißen: Von außen wird man später nicht auf die Geräte Zugriff erhalten, außer man ist innerhalb des Firmen/Schulnetzwerks.
Um wieder auf das Problem zurück zu kommen. Mit der Idee
durch folgendes zu ersetzen, hat leider nicht geholfen.
//Ausführung des MySQL-Befehls $ausführen = mysqli_query($con, $sqlLoginData) or die("Login Fehler"); $checkforRow = mysqli_num_rows($ausführen); if ($checkforRow != 0)[...]
Leider bin ich jetzt genau so entfernt von der Lösung als vorher. -_-
Vlt hat ja einer von euch eine andere Lösung parat.
Ich kann dir rein gar nichts davon glauben.
Ich habe den Code komplett kopiert und bei mir getestet.
Mit dem Code von myfarynet.eu hat alles perfekt funktioniert.
Sorry, ich kann dir nicht ansatzweise glauben, dass du deinen Code gedebuggt hast.
Der Code funktioniert fehlerfrei.
Dann debugge das und schreib uns wo genau welcher Wert fehlt oder falsch ist.
Deine Aussagen sind recht grob.
Und wie gesagt bei mir lokal läuft der Code Problemlos.
RE: Login von PHP Seite ist Fehlerhaft - VarmintLP - 10.12.2014 19:04
Ich kann dir rein gar nichts davon glauben.
Ich habe den Code komplett kopiert und bei mir getestet.
Mit dem Code von myfarynet.eu hat alles perfekt funktioniert.
Sorry, ich kann dir nicht ansatzweise glauben, dass du deinen Code gedebuggt hast.
Der Code funktioniert fehlerfrei.
Dann debugge das und schreib uns wo genau welcher Wert fehlt oder falsch ist.
Deine Aussagen sind recht grob.
Und wie gesagt bei mir lokal läuft der Code Problemlos.
Ok dann welches System benutzt du und welche PHP Version verwendest du. Bei mir kommt halt Login Fehler dahinstehen, ich bekomme dann die Eingegebenen Werte angezeigt und das wars dann. Mehr kommt da echt nicht bei mir.
RE: Login von PHP Seite ist Fehlerhaft - Aaron - 10.12.2014 19:08
Wenn da "Login Fehler" steht, hast du nen Fehler in der Mysql Abfrage - check das mit mysqli_error() - da wären wir wieder beim Thema: richtig debuggen ... was du ja laut eigener Aussage drauf hast
Das hat hier auch nichts mit dem OS oder der PHP Version zu tun - wie kommst du da drauf?
RE: Login von PHP Seite ist Fehlerhaft - VarmintLP - 10.12.2014 19:22
Wenn da "Login Fehler" steht, hast du nen Fehler in der Mysql Abfrage - check das mit mysqli_error() - da wären wir wieder beim Thema: richtig debuggen ... was du ja laut eigener Aussage drauf hast
Das hat hier auch nichts mit dem OS oder der PHP Version zu tun - wie kommst du da drauf?
Naja hab mich wohl etwas falsch ausgedrück.
Ich kann richtig Debuggen, aber nur bis zu einem gewissen Grad, da mein Wissen manchmal nicht ausreicht, um jede Debugging Methode zu verwenden.
Die MySQL Abfrage werde ich dann so schnell wie möglich mal auseinander nehmen und das Problem mit mysqli_error lösen.
Die PHP version könnte außerdem wichtig sein, da nicht jede PHP version die gleichen Features hat. Vlt verwende ich ja eine veraltete Version für meinen kleinen Webserver.
Naja Danke trotzdem für den Tipp
RE: Login von PHP Seite ist Fehlerhaft - Scharock - 10.12.2014 20:16
Wenn da "Login Fehler" steht, hast du nen Fehler in der Mysql Abfrage - check das mit mysqli_error() - da wären wir wieder beim Thema: richtig debuggen ... was du ja laut eigener Aussage drauf hast
Das hat hier auch nichts mit dem OS oder der PHP Version zu tun - wie kommst du da drauf?
Naja hab mich wohl etwas falsch ausgedrück.
Ich kann richtig Debuggen, aber nur bis zu einem gewissen Grad, da mein Wissen manchmal nicht ausreicht, um jede Debugging Methode zu verwenden.
Die MySQL Abfrage werde ich dann so schnell wie möglich mal auseinander nehmen und das Problem mit mysqli_error lösen.
Die PHP version könnte außerdem wichtig sein, da nicht jede PHP version die gleichen Features hat. Vlt verwende ich ja eine veraltete Version für meinen kleinen Webserver.
Naja Danke trotzdem für den Tipp
lass dir den mysql String ausgeben und prüfe ihn mit einem SQL Programm oder phpmyadmin.
Dann siehst du ob es an dem SQL String liegt oder wo anders.
RE: Login von PHP Seite ist Fehlerhaft - Aaron - 10.12.2014 23:09
@VarmintLP
das mit der PHP Version macht keinen Sinn, da es sonst nen PHP Fehler oder wenigstens n Warning geben würde.
Folgende Sachen bei ner Fehlersuche beachten:
- PHP Fehler anzeigen
- MySQL Fehler ausgeben (Wenn da nichts kommt den String ausgeben lassen und manuell in phpmyadmin ausführen)
- Variablen dumpen (mit var_dump) - an versch. / sinnvollen Stellen
- evtl. Stellen auskommentieren und so Fehlerquellen ausschließen
- oder auch mal alle definierten Vars ausgeben: [Link: Registrierung erforderlich]
Gruß
RE: Login von PHP Seite ist Fehlerhaft - VarmintLP - 18.03.2015 09:26
So Leute. Ich habe mich heute wieder hinter das Login Skript geklemmt, um es nun endlich zum Laufen zu bringen und es funktioniert so wie es soll.
Da ich mich so schwer getan habe und es anderen vlt auch so geht, möchte ich hier nur noch einmal mein Skript veröffentlichen, das ich mit der Hilfe der User von Sponsor-Board geschrieben habe.
Der Fehler lag daran, dass mir ein gewisser Jemand mysql_num_row anstelle von mysqli_num_rows gegegen hat und es mir erst jetzt aufgefallen ist. Da sämtliche Variabeln entweder keine Fehler/falschen Werte ausgegeben haben, habe ich mir das ganze Skript nochmal durchgeschaut und diesen Fehler dann mit einem einfachen Debugging herausgefunden.
Hier ist nun der Code, der eventuell zukünfigen Hilfesuchenden helfen kann.
echo " <p>
Name: ".$_SESSION['Username']." PW: ".$_SESSION['Password']."
";
if ($_SESSION['LoggedIn'] == "Set")
{
echo" <input type='submit' name='logout' value='Log Off' onclick='LogOff()'>Eingeloggt";
}
else
{
echo" <table border='0'>
<tr>
<td>
Username:
</td>
<td>
<input type='text' name='Username' maxlength='20' >
</td>
</tr>
<tr>
<td>
Passwort:
</td>
<td>
<input type='password' name='Password' maxlength='20'>
</td>
</tr>
<tr>
<td colspan='2'>
<input type='submit' name='Login' value='Login'>
</td>
</tr>
</table>
";
//Prüfen ob Daten eingegeben wurden
if (isset($_SESSION['Username']) AND
isset($_SESSION['Password']))
{
$Username = $_SESSION['Username'];
$Password = $_SESSION['Password'];
//Code für Logindaten Überprüfung
$sqlLoginData = "SELECT * FROM `tblUser` WHERE `Name` = '$Username' AND `Password` = '$Password'";
//Ausführung des MySQL-Befehls
$ausführen = mysqli_query($con, $sqlLoginData)
or die("Login Fehler");
$checkforRow = mysqli_num_rows($ausführen);
if (mysqli_connect_errno())
{
echo "Ein Verbindungsfehler ist aufgetretten.
<br>Bitte senden sie folgende Fehlermeldung an ihren Netzwerkadministrator:
" . mysqli_connect_error();
}
if ($checkforRow != 0)
{
$_SESSION['LoggedIn'] = "Set";
$_SESSION['Check3'] = "OK";
}
else
{
echo "Login Fehlgeschlagen!";
echo("<br>Login Fehler: " . mysqli_error($con));
}
if (isset($_SESSION['Check3']))
{
}
}
else
{
//übergabe der Registrationsdaten
$_SESSION['Username'] = $_POST['Username'];
$_SESSION['Password'] = $_POST['Password'];
}
}
//Durchführen von zwei Reloads, um den Benutzer einzulogen oder die entsprechende Fehlermeldung auszuschreiben
if (isset($_POST['Login']) == "Set" AND $_SESSION['Reload1'] != "Set")
{
$_SESSION['Reload1'] = "Set";
echo "
<script type='text/javascript'>
window.setTimeout(location.href='index.php', 500);
</script>
";
}
else if ($_SESSION['Reload1'] == "Set" AND $_SESSION['Reload2'] != "Set")
{
$_SESSION['Reload2'] = "Set";
echo "
<script type='text/javascript'>
window.setTimeout(location.href='index.php', 500);
</script>
";
}
Ich hoffe ich konnte einigen Helfen und eventuell dient mein Code ja auch zur Lösung eventueller Probleme.
P.S.: Mein Include geht auch wieder
|