php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 02-05-2009, 08:26
Skywalker031
 Registrierter Benutzer
Links : Onlinestatus : Skywalker031 ist offline
Registriert seit: Apr 2009
Ort: Kassel
Beiträge: 13
Skywalker031 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Loginscript: Login geht nicht, trotz richtiger Zugangsdaten

Hallo allerseits,

ich habe im Web ein Loginscript aufgestöbert
und dies ein wenig meinen Ansprüchen angepasst.

Nun passiert folgendes:
Der User registriert sich, wird vom Admin freigeschaltet,
steht in der db auch richtig drin (soweit ich das sagen kann),
loggt sich dann mit seinem Usernamen und
Userpasswort (Testuser / 1234567) ein und
bekommt nur die Nachricht, dass Username
oder Passwort falsch ist.

Ich habe mir den Code mehrfach angesehen und
überlegt woran es liegen könnte, doch ich kann
keinen Fehler sehen.

PHP-Code:
<?
echo "<center>";

if (isset(
$_POST["submit"])) {

    
//wenn submit button betätigt...
    
$username $_POST["username"];
    
//speichere eingegebenen Usernamen in Variable
    
$passwort md5($_POST["passwort"]);
    
//speichere eingegebenes Passwort in
    //Varaible und verschlüssele es mit md5()
    
$user mysql_fetch_object(mysql_query("SELECT id, username, passwort,
aktiv FROM benutzerdaten WHERE username='" 
$username "'"));
    
//userdaten aus datenbank holen

    
if ($username == "" or $passwort == "d41d8cd98f00b204e9800998ecf8427e") {

        echo 
"<b>Du hast nicht alle Felder ausgefüllt!</b>";
        
//felder aus inhalt überprüfen, wenn leer error ausgeben (Hinweis:
        //bei passwort steht so eine zeichenfolge, weil mit md5 auch leerer
        //inhalt verschlüsselt wird

    
} elseif ($user->aktiv == "0") {

        echo 
"<b>Dein Account muß erst noch freischaltet werden, bevor
       du dich einloggen kannst!<br>Benachrichtige bitte den Vorstand.</b>"
;
        
//überprüfen ob account mit bestätigungslink freigeschaltet wurde,
        //wenn nicht error ausgeben

    
} elseif ($username == $user->username && $passwort == $user->passwort) {

        
//daten überprüfen, wenn richtig...
        
$_SESSION["id"] = $user->id;
        
//registriere die sesson id, mit der ID des users
        
header("Location: main.php");
        
//leite zu main.php weiter
        
exit;
        
//ab hier tu nix mehr ^^

    
} else {

        
//wenn nicht richtig...
        
echo "<b>Du hast einen falschen Nutzernamen oder ein falsches
     Kennwort eingegeben!</b>"
;
        
//gib einen error aus

    
}
}
echo 
"</center>";
?>
Die Daten die in der db stehen:
id | username | passwort | aktiv
25 | Testuser | fcea920f7412b5da7be0cf42b8c93759 | 1

Vielleicht sieht einer von Euch, wo der Fehler sich versteckt. Vielleicht ist der Fehler ja schon drin gewesen,
bevor ich an dem Script etwas verändert habe.

Daten und Fakten vom Server (phpinfo)
__________________
lg
Stefan

Geändert von Skywalker031 (02-05-2009 um 12:24 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 02-05-2009, 09:19
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ändere die Zeile in:

elseif ($username == $user->username && $passwort == $user->passwort)

Auch schon $user->username und $user->passwort zur Kontrolle ausgegeben?
Mit Zitat antworten
  #3 (permalink)  
Alt 02-05-2009, 09:46
Skywalker031
 Registrierter Benutzer
Links : Onlinestatus : Skywalker031 ist offline
Registriert seit: Apr 2009
Ort: Kassel
Beiträge: 13
Skywalker031 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

also habe die änderung durch "&&" gemacht, aber hat sich
nichts durch geändert, es kommt immer noch die Fehlermeldung
das Username oder PW falsch sei.

Was meinst du mit

Zitat:
Auch schon $user->username und $user->passwort zur Kontrolle ausgegeben?
das verstehe ich nicht.
Ich muss auch dazu sagen, dass ich in Sachen PHP-Programmierung
ein totaler Anfänger bin und mich noch nicht wirklich auskenne.
__________________
lg
Stefan
Mit Zitat antworten
  #4 (permalink)  
Alt 02-05-2009, 10:18
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Warum lernst du dann nicht die Grundlagen oder machst ein paar Tutorials?

Lass dir alle Variablen, die du verwendest, mit var_dump() ausgeben und überprüfe ob sie stimmen.

Lass dir einen eventuellen MySQL Fehler mit mysql_error() ausgeben.

Und rück deinen Code ein, damit man sieht, was zu welcher IF-Bedingung gehört.

Geändert von h3ll (02-05-2009 um 10:20 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 02-05-2009, 11:04
Skywalker031
 Registrierter Benutzer
Links : Onlinestatus : Skywalker031 ist offline
Registriert seit: Apr 2009
Ort: Kassel
Beiträge: 13
Skywalker031 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich habe nun mal das mit dem var_dump()
probiert

PHP-Code:
if (isset($_POST["submit"])){  
  
//wenn submit button betätigt...  
  
$username $_POST["username"];  
  
//speichere eingegebenen Usernamen in Variable
  
$passwort md5($_POST["passwort"]);  
  
//speichere eingegebenes Passwort in Varaible und verschlüssele es mit md5()  
  
echo "eingegebener Username:";  
  
var_dump($username);
  echo 
"<br>unverschl. Passwort:";
  
var_dump($_POST["passwort"]);
  echo 
"<br>verschl. Passwort:";
  
var_dump($passwort);
  echo 
"<br>";

  
$user=mysql_fetch_object(mysql_query("SELECT id, username, passwort, aktiv 
FROM benutzerdaten WHERE username='"
.$username."'"));
  
//userdaten aus datenbank holen
  
echo "db-Fehlermeldung:";
  
mysql_error();
  echo 
"<br><br>"
und bekomme nach dem Login-Versuch
folgende Meldung:

eingegebener Username:string(8) "Testuser"
unverschl. Passwort:string(7) "1234567"
verschl. Passwort:string(32) "fcea920f7412b5da7be0cf42b8c93759"
db-Fehlermeldung:

Sieht alles korrekt aus. Die db meldet keinen Fehler.

Was das mit den Grundlagen angeht und den Tutorials,
das hab ich mal vor langer Zeit gemacht, hat mir aber
nicht wirklich geholfen.
__________________
lg
Stefan
Mit Zitat antworten
  #6 (permalink)  
Alt 02-05-2009, 11:11
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Und welche Werte liefert das Query?
Mit Zitat antworten
  #7 (permalink)  
Alt 02-05-2009, 12:05
Skywalker031
 Registrierter Benutzer
Links : Onlinestatus : Skywalker031 ist offline
Registriert seit: Apr 2009
Ort: Kassel
Beiträge: 13
Skywalker031 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nun habe ich noch folgenden Code hinzugefügt:

PHP-Code:
$user=mysql_fetch_object(mysql_query
("SELECT id, username, passwort, aktiv 
FROM benutzerdaten WHERE username='"
.$username."'"));
//userdaten aus datenbank holen
echo "db-Fehlermeldung:";
mysql_error();
echo 
"<br>";
echo 
"query:";
var_dump($user);
echo 
"<br>"
daraufhin kam folgende Ausgabe:
db-Fehlermeldung:
query:bool(false)

was genau heisst das?
also eine db-Fehlermeldung kam nicht,
aber bei query eben diese "bool(false)"
__________________
lg
Stefan
Mit Zitat antworten
  #8 (permalink)  
Alt 02-05-2009, 12:08
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Da fehlt eine }. An welcher Stelle darfst du selber herausfinden. So gewöhnst du dir vielleicht, deinen Code vernünftig einzurücken.
Mit Zitat antworten
  #9 (permalink)  
Alt 02-05-2009, 12:25
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Eine Klammer?

Das FALSE kommt hier her:
Zitat:
Liefert ein Objekt mit Eigenschaften, die den Feldern des geholten Datensatzes entsprechen, oder FALSE wenn keine weiteren Datensätze vorhanden sind.
Aus: http://de3.php.net/manual/de/functio...tch-object.php
__________________
Wir werden alle sterben
Mit Zitat antworten
  #10 (permalink)  
Alt 02-05-2009, 12:30
Skywalker031
 Registrierter Benutzer
Links : Onlinestatus : Skywalker031 ist offline
Registriert seit: Apr 2009
Ort: Kassel
Beiträge: 13
Skywalker031 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@onemorenerd:

Ich hab nun oben in meinem ersten Post,
den Code gänzlich überarbeitet, so das
er (hoffentlich) eingerückt ist.

(Nachtrag: Beim formatieren des Codes hat mir
dieses Tool geholfen)

Allerdings die } die da fehlen soll, habe
ich dadurch dennoch nicht gefunden.

Die } von
PHP-Code:
if (isset($_POST["submit"])) { 
endet ganz unten bei
PHP-Code:
}
  echo 
"</center>";  
?> 
die von
PHP-Code:
if ($username == "" or $passwort == 
"d41d8cd98f00b204e9800998ecf8427e") { 
wird bei
PHP-Code:
} elseif ($user->aktiv == "0") { 
unterbrochen und fortgesetzt

diese wiederum wird durch
PHP-Code:
} elseif ($username == $user->username && 
$passwort == $user->passwort) { 
erneut unterbrochen und fortgesetzt,
welche wiederum durch
PHP-Code:
} else { 
unterbrochen und fortgesetzt wird.

diese wird dann bei

PHP-Code:
    }
  }  
echo 
"</center>"
geschlossen.

Also wo fehlt da noch eine }?


@combie:

Und was heisst das genau?
Das ausser 2 Datensätzen keine in der DB sind?
Denn genau soviele Datensätze sind in der DB.
Oder das keine Datensätze zum suchen da sind?

ich blick da einfach nicht durch!
Für Euch scheint es einfach zu sein,
für mich jedoch ist es jedesmal erneut
ein echter Kampf... dabei bin ich eigentlich
gar nicht so schwer von Begriff... *kopfkratz*
__________________
lg
Stefan

Geändert von Skywalker031 (02-05-2009 um 13:06 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 02-05-2009, 12:41
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
@combie:

Und was heisst das genau?
Das ausser 2 Datensätzen keine in der DB sind?
Denn genau soviele Datensätze sind in der DB.
Oder das keine Datensätze zum suchen da sind?
Nein, das heißt:
Deine Abfrage hat keinen Datensatz gefunden!


PS:
Und denke auch an SQL-Injections
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 02-05-2009, 12:46
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ich kann da nicht mehr zuschauen.

PHP-Code:
<?php

if (isset($_POST['submit'])) {
    
$username trim($_POST['username']);
    
$passwort trim($_POST['passwort']);
    
    if (
$username == '' || $passwort == '') {
        echo 
'Geben Sie Username und Passwort ein.';
    } else {
        
$sql "
            SELECT
                id, username, passwort, aktiv 
            FROM
                benutzerdaten
            WHERE
                username = '%s' AND passwort = '%s'
            LIMIT
                1
        "
;
        
        
$result mysql_query(sprintf($sqlmysql_real_escape_string($username), md5($passwort));
        
        if (!
$result) {
            die(
'Invalid query: ' mysql_error());
        }
        
        
$row mysql_fetch_assoc($result);
        
        if (!
$row) {
            echo 
'Username oder Passwort sind nicht korrekt.';
        } elseif (!
$row['aktiv']) {
            echo 
'Login muss aktiviert werden.';
        } else {
            echo 
'Login erfolgreich.';
        }
    }
}
  
?>
Mit Zitat antworten
  #13 (permalink)  
Alt 02-05-2009, 12:55
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von Skywalker031
... den Code gänzlich überarbeitet, so das er (hoffentlich) eingerückt ist.

Allerdings die } die da fehlen soll, habe ich dadurch dennoch nicht gefunden.
Dann hat wohl doch keine gefehlt. Jetzt sieht der Code aber viel übersichtlicher aus und ich seh auch auf den ersten Blick, dass ich mich bzgl. der Klammer geirrt habe. Mea culpa.

Du verwendest $username in der Query, prüfst aber erst danach, ob diese Variable überhaupt etwas sinnvolles enthält.
Code:
wenn Formular abgeschickt {
    wenn alle felder ausgefüllt {
        Userdaten aus DB laden
        wenn User geladen werden konnte {
            wenn User aktiv {
                einloggen;
                weiterleiten;
            } sonst Fehlermeldung "Erst freischalten lassen";
        } sonst Fehlermeldung "False Eingabe";
    } sonst Fehlermeldung "Nicht alles ausgefüllt";
}
BTW: Kommentare stehen normalerweise vor dem Code, auf den sie sich beziehen.
EDIT:
Schade, ich war zu langsam. Aber mit der besseren Absicht.

Geändert von onemorenerd (02-05-2009 um 13:00 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 02-05-2009, 13:00
Skywalker031
 Registrierter Benutzer
Links : Onlinestatus : Skywalker031 ist offline
Registriert seit: Apr 2009
Ort: Kassel
Beiträge: 13
Skywalker031 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@combie:

Aha, wieso findet er mit diesem Code keinen Datensatz,
obwohl doch 2 Datensätze vorhanden sind?

@h3ll:

Ich habe nun deinen umgeschriebenen Code
anstelle des alten ersetzt. Wenn man nun die
Seite aufruft, bekomme ich einen HTTP 500 Internen
Serverfehler angezeigt - sprich die Seite lässt sich
nicht aufrufen

@onemorenerd:

Das mit den Kommentaren, und wie der Code aufgebaut
ist, von wegen was, wann und wo und in welcher Reihen-
folge, kam nicht von mir, sondern war schon so von Anfang an.

@all:

Ich hatte im ersten Post ja schon geschrieben,
dass ich das Grundscript aus dem Web habe.
An der Index, hatte ich ausser ein paar "Echo"-Zeilen
nichts verändert - also die index war so schon
als ich sie bekommen habe.
__________________
lg
Stefan

Geändert von Skywalker031 (02-05-2009 um 13:03 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 02-05-2009, 13:06
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von Skywalker031
[B]@combie:

Aha, wieso findet er mit diesem Code keinen Datensatz,
obwohl doch 2 Datensätze vorhanden sind?
Da gibts genau 2 Möglichkeiten:
1. In der DB steht nicht das, was du erwartest, was da drin stehen sollte.
2. Im Query steht nicht das, was du erwartest, was da drin stehen sollte.

Also eine einfache Differenz zwischen IST Zustand und Erwartungshaltung.
__________________
Wir werden alle sterben

Geändert von combie (02-05-2009 um 13:08 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:10 Uhr.