php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.01.2005, 20:13  
Gast
 
Beiträge: n/a
Standard Login und probleme mit Sessions

Hallo!

Ich probier so nen bißchen mit php zur Zeit rum um es zu lernen und als weitere Programmiersprache
zu beherrschen. Einige Sachen habe ich bisher ganz gut hinbekommen doch jetzt versuch ich mal nen
Login zu programmieren und schon tauchen die ersten Probleme auf. Hab schon viel gelesen aber
leider komm ich nicht weiter. Und zwar jedesmal wenn ich mich einloggen möchte Kommt jedesmal
die Fehlermeldung "Ungültiges Passwort!". Ich habe schon erstmal Testuser in der Datenbank
angelegt deswegen kann nur nen logischer Fehler sein.
Lange rede kurzer Sinn hier mein Quelltext:


Index.php Ist meine Startseite


Code:
<?php    error_reporting(E_ALL);
include "data.php";
if(isset($_GET['section']) AND ("admin" == $_GET['section'])) {
	session_start();
}
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
echo "         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
echo "<html>\n";
echo "    <head>\n";
echo "        <title>Startseite</title>\n";
echo "        <link rel=\"stylesheet\" type=\"text/css\" href=\"page1.css\" />\n";
echo "        <meta http-equiv=\"Content-Type\"                        content=\"text/html; charset=ISO-8859-1\" />\n";
echo "    </head>\n";
echo "    <body>\n";
if(get_magic_quotes_gpc()) {
	// wenn magic_quotes_gpc auf 1 steht
	foreach($_POST as $key => $value) {
		$_POST[$key] = stripslashes($value);
	}
}
echo "        <div id=\"root\">\n"; // ganz oberer Div-Holder
echo "            <div id=\"logo\">\n";
echo "                Der hier kommt nen Logo hin";
echo "            </div>\n";
echo "            <div id=\"links\">\n"; // linkes Menu
echo "				[*]<a href=\"index.php?section=start\">Home</a>\n";
echo "				[*]<a href=\"index.php?section=admin\">Login</a>\n";
echo "				[*]<a href=\"index.php?section=gb\">Gästebuch</a>\n";
echo "            </div>\n";
echo "            <div id=\"mitte\">\n"; // In der Mitte der Inhalt
include "inhalt.php";
echo "            </div>\n";
echo "            <br style=\"clear:both;\" />\n"; // css-float beenden
echo "       </div>\n";
echo "    </body>\n";
echo "</html>\n";
?>


Inalt.php

Code:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Title here</title>
</head>
<body>
<?php
if(isset($_GET['section']) AND isset($dateien[$_GET['section']])) {
	include $dateien[$_GET['section']];
} else {
include $dateien['start'];
}
?>
</body>
</html>

data.php

Code:
<?php
$dateien = array();
$dateien['gb'] = "gb.php";
$dateien['start'] = "start.html";
$dateien['admin'] = "admin.php";
?>
admin.php hier muss der Fehler sein

Code:
<?php
include "funktion.php";
include "config.php";
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db("test") OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
// Hier kann man jetzt MySQL-Querys senden
    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "

\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen sie sich wieder Einloggen\n";
        echo "</p>\n";
    } else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "

\n";
            echo "    Bitte wählen sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }
            if(isset($_SESSION['ID'])) {
                echo "

\n";
                echo "    Willkommen im Adminbereich 
\n";
                echo "    <a href=\"index.php?section=admin&amp;".SID."\">Repeat</a>\n";
                echo "    <a href=\"index.php?section=admin&amp;action=logout&amp;".SID."\">Ausloggen</a>\n";
                echo "</p>\n";
            } else {
                if(isset($_POST['submit'])) {
                     // Der Submit-Button wurde gedrückt
                     // aber der Login ist falsch. Deshalb
                     // erstellen wir eine Fehlermeldung
                     echo "<p class=\"error\">\n";
                     echo "    Ungültiges Password.\n";
                     echo "</p>\n";
                }
                echo "<form action=\"index.php?section=admin\" method=\"post\" class=\"admin_form\">\n";
                echo "    <table>\n";
                echo "        <tr>\n";
                echo "            <th colspan=\"2\">\n";
                echo "                <h2>Adminbereich</h2>\n";
                echo "            </th>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"name\">Name:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                $sql = "SELECT
                            `ID`,
                            `Name`
                        FROM
                            `users`
                        ORDER BY
                            `Name` ASC;";
                $result = mysql_query($sql) OR die(mysql_error());
                echo "                <select size=\"1\" name=\"UserID\" id=\"name\">\n";
                echo "                    <option value=\"0\" selected=\"selected\">Bitte wählen</option>\n";
                while($row = mysql_fetch_assoc($result)) {
                    echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
                }
                echo "                </select>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"password\">Password:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "                <input type=\"password\" name=\"Password\" id=\"password\"/>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td colspan=\"2\">\n";
                echo "                <input type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n";
                echo "                <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "    </table>\n";
                echo "</form>\n";
            }
        }
    }
?>

funktion.php

Code:
<?php
function login_right($id, $pass)
{
	$sql = "SELECT
				COUNT(*) as Anzahl
			FROM
				users
			WHERE
				ID = '".$id."' AND
				Password = MD5('".$pass."');";
	$result = mysql_query($sql) OR die(mysql_error());
	$row = mysql_fetch_assoc($result);        mysql_free_result($result);
	return $row['Anzahl'];
}
?>

Die config.php ist nur für die Zugangsdaten zur Datenbank.
Achtet nicht auf Grafik und so ist nur erstmal das ich das Grundprinzip hinbekomme und
verstehe. Ich hoffe jemand sieht den Fehler oder hat soar Verbesserungsvorschläge.

Ist jemand von euch Php Programmierer? Und vorallem wie sieht es mit Php Projekten in der Praxis
aus bzw. mit welchen Projekten hat man dort zu tun? Nur damit ich mir mal nen
Bild machn kann

MFG

Lara
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.01.2005, 20:46  
Gast
 
Beiträge: n/a
Standard

Habe mir bis jetzt nur die ersten 5 Zeilen durchgelesen.
Also dein include sollte geklammert werden:
Code:
include "data.php";
und session_start muss immer ganz am anfang der datei stehen. Davor darf nichts kommen.
 
Alt 08.01.2005, 21:18  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.781
derHund
Standard

Zitat:
Also dein include sollte geklammert werden:
nein, ist unnötig, ...
Zitat:
session_start muss immer ganz am anfang der datei stehen
nein, ist unnötig ... davor sollte lediglich keinerlei ausgabe erfolgen.
__________________
derHund ist offline  
Alt 08.01.2005, 21:32  
Gast
 
Beiträge: n/a
Standard

Also als erstes muss ich dir sagen das du nicht jedes mal echo schreiben musst es reicht wenn du es einmal machst, ich finde das macht den Quelltext übersichtlicher aber das ist jedem selbst überlassen. Dann ist mir aufgefallen das du deinen Connect einfach so reingeschrieben hast, include ihn doch ganz einfach dann kann man ihn leichter ändern wenn man z.B mal einen neuen Provider hat ....

Ich bin selber noch ein Anfänger und ich kann grade beim besten Willen nicht erkennen wo du eigentlich das Passwort und den Loginnamen überprüfst.

Warum machst du dir das alles so Schwer ? Erstell einfach in der DB einträge mit namen und passwort frage sie in einer datei ab und vergleiche sie mit if , da habe ich nur die hälfte an Code.

Noch ein kleiner Tipp von mir ist das Passwort per MD5 zu verschlüsseln weil so kann jeder depp der an deine DB kann alle Passwörter hacken.
 
Alt 08.01.2005, 22:46  
Gast
 
Beiträge: n/a
Standard

Hallo,
mhh ja ich würd schon gern den Weg weiter gehen wie ichs gemacht habe. Denke es ist auch nur ne Kleinigkeit. Vielleicht ist ja jemand so nett und macht sich die Mühe und lässt es zuhais mal bei sich laufen. Lieb Frag

MFG

Lara
 
Alt 08.01.2005, 23:54  
Gast
 
Beiträge: n/a
Standard

Hallo,
irgendwie lässt mir mein Prob keine Ruhe. Jemher ich mir den Quelltext immer wieder anschaue kann es nur 2 Fehler stellen geben. Einmal ist das die Funktion.php oder dort wo ich die Funktion verwende in der Inhalt.php an dieser Stelle:

Code:
 } else { 
            if(isset($_POST['UserID'], $_POST['Password']) AND 
               login_right(addslashes($_POST['UserID']), 
                           addslashes($_POST['Password']))) { 
                $_SESSION['ID'] = $_POST['UserID']; 
            } 
            if(isset($_SESSION['ID'])) { 
                echo "

\n"; 
                echo "    Willkommen im Adminbereich 
\n"; 
                echo "    <a href=\"index.php?section=admin&amp;".SID."\">Repeat</a>\n"; 
                echo "    <a href=\"index.php?
und zwar kommt es ja nie dazu das die Session Id gespeichert wird.
Ich hoffe jemand hat noch ne gute Idee.

MFG

Lara
 
Alt 09.01.2005, 11:43  
Erfahrener Benutzer
 
Registriert seit: 19.11.2003
Beiträge: 172
BastianX75
Standard

Hi,
gib doch mal zu Testzwecken in der Funktion.php vor dem mysql_query die Varable $sql mit echo aus. Dann siehst du ob überhaupt sinnige Daten an die DB gesendet werden.
Außerdem würde ich mir mal den Rückgabewert mit echo ausgeben lassen, ob der so ist wie er sein sollte. Vielleicht liegts ja an der Kombination von addslashes() und MD5() im $sql.

Hoffe das hilft ein bischen.
__________________
Schönen Gruß
Sebastian

Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie braucht.
BastianX75 ist offline  
Alt 09.01.2005, 12:58  
Gast
 
Beiträge: n/a
Standard

Zitat:
Ich hoffe jemand hat noch ne gute Idee.
Zwei Ideen.

1. $sql = "SELECT
COUNT(*) as Anzahl
FROM
users
WHERE
ID = '".$id."' AND
Password = MD5('".$pass."');"; <---
'password' ist für MySQL ein reserviertes Wort. Entweder mit Backticks einrahmen oder umbenennen.

2. die Paßwortspalte ist doch hoffentlich auch vom Typ varchar(32) ?

Ggf. das mal angucken:
PHP4 http://test.php-help.info/auth-4/ (Quelltext wird angezeigt)
PHP5 http://test.php-help.info/auth-3/ (Quelltext wird angezeigt)
 
Alt 09.01.2005, 17:48  
Gast
 
Beiträge: n/a
Standard

Hallo!

Mein anderes Prob hab ich gelöst nur habe ich jetzt schon wieder ein neues.
Und zwar möchte ich das sich nach dem einloggen auch das Menu links mit verändert.
Allerding tut es dieses immer nur wenn ich z.B. nach dem einloggen wieder auf auf Login
im Menu klicke. Hier ist es mir klar da das linke Menu zuerst in der index.php abgearbeitet
wird. Genauso ist es auch wieder beim ausloggen. Allerdings probier ich schon hin und her aber
bekomms nicht hin. Bin ich in einer Sackgasse? Ich hoffe jemand kann mir helfen.
Hie ist der Quelltext.

index.php

Code:
<?php    error_reporting(E_ALL);
include "data.php";
if(isset($_GET['section']) AND ("admin" == $_GET['section'])) {
	session_start();
	if(!isset($_SESSION['IP'])) {
		$_SESSION['IP'] = $_SERVER['REMOTE_ADDR'];
	}
	if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) {
		echo "<p class=\"error\">\n";
		echo "    Sie dürfen nicht die Session von einem\n";
		echo "    anderen user Benutzten. Bitte benutzen sie\n";
		echo "    folgenden Link um zur Homepage zu gelangen.\n";
		echo "    <a href=\"/\">Zurück zur Homepage</a>\n";
		echo "</p>\n";
		die(); // Aus Sicherheitsgründen die Abarbeitung sofort beenden
	}
}
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
echo "         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
echo "<html>\n";
echo "    <head>\n";
echo "        <title>Startseite</title>\n";
echo "        <link rel=\"stylesheet\" type=\"text/css\" href=\"page1.css\" />\n";
echo "        <meta http-equiv=\"Content-Type\"                        content=\"text/html; charset=ISO-8859-1\" />\n";
echo "    </head>\n";
echo "    <body>\n";
if(get_magic_quotes_gpc()) {
	// wenn magic_quotes_gpc auf 1 steht
	foreach($_POST as $key => $value) {
		$_POST[$key] = stripslashes($value);
	}
}
echo "        <div id=\"root\">\n"; // ganz oberer Div-Holder
echo "            <div id=\"banner\">\n"; // banner
echo "                Der Banner";
echo "            </div>\n";
echo "            <div id=\"links\">\n"; // linkes Menu
include "admin_menu.php";
echo "            </div>\n";
echo "            <div id=\"mitte\">\n"; // In der Mitte der Inhalt
include "inhalt.php";
echo "            </div>\n";
echo "            <br style=\"clear:both;\" />\n"; // css-float beenden
echo "       </div>\n";
echo "    </body>\n";
echo "</html>\n";
?>
inhalt.php

Code:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Title here</title>
</head>
<body>
<?php
if(isset($_GET['section']) AND isset($dateien[$_GET['section']])) {
	include $dateien[$_GET['section']];
} else {
include $dateien['start'];
}
?>
</body>
</html>
data.php

Code:
<?php
$dateien = array();
$dateien['start'] = "start.html";
$dateien['admin'] = "admin.php";
?>
admin.php

Code:
<?php
include "funktion.php";
include "config.php";
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db("test") OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
// Hier kann man jetzt MySQL-Querys senden
    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "

\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen sie sich wieder Einloggen\n";
        echo "</p>\n";
    } else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "

\n";
            echo "    Bitte wählen sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }
            if(isset($_SESSION['ID'])) {
                echo "

\n";
                echo "    Willkommen im Adminbereich 
\n";
                echo "</p>\n";
            } else {
                if(isset($_POST['submit'])) {
                     // Der Submit-Button wurde gedrückt
                     // aber der Login ist falsch. Deshalb
                     // erstellen wir eine Fehlermeldung
                     echo "<p class=\"error\">\n";
                     echo "    Ungültiges Password.\n";
                     echo "</p>\n";
                }
                echo "<form action=\"index.php?section=admin\" method=\"post\" class=\"admin_form\">\n";
                echo "    <table>\n";
                echo "        <tr>\n";
                echo "            <th colspan=\"2\">\n";
                echo "                <h2>Adminbereich</h2>\n";
                echo "            </th>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"name\">Name:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                $sql = "SELECT
                            `ID`,
                            `Name`
                        FROM
                            `users`
                        ORDER BY
                            `Name` ASC;";
                $result = mysql_query($sql) OR die(mysql_error());
                echo "                <select size=\"1\" name=\"UserID\" id=\"name\">\n";
                echo "                    <option value=\"0\" selected=\"selected\">Bitte wählen</option>\n";
                while($row = mysql_fetch_assoc($result)) {
                    echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
                }
                echo "                </select>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"password\">Password:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "                <input type=\"password\" name=\"Password\" id=\"password\"/>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td colspan=\"2\">\n";
                echo "                <input type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n";
                echo "                <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "    </table>\n";
                echo "</form>\n";
            }
        }
    }
?>
admin_menu.php

Code:
<?php
if(isset($_SESSION['ID'])) {
	echo "[*]<a href=\"index.php?section=admin&amp;".SID."\">Repeat</a>\n";
    echo "[*]<a href=\"index.php?section=admin&amp;action=logout&amp;".SID."\">Ausloggen</a>\n";
} else {
	include "menu.php";
}
?>
menu.php

Code:
<?php
echo "				[*]<a href=\"index.php?section=start\">Home</a>\n";
echo "				[*]<a href=\"index.php?section=admin\">Login</a>\n";
?>
Hui ist ne Menge aber denke wichtig sind nur die index.php, inhalt.php, admin.php und die admin_menu.php
Ich hoff jemand sieht mein Problem

MFG

Lara
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Login System Probleme ! 7Style PHP Tipps 2008 2 07.01.2008 13:55
Probleme mit Sessions auf Red Hat Enterprise 3 Server, Hosting und Workstations 0 23.02.2006 16:28
[Erledigt] probleme mit sessions PHP Tipps 2007 1 17.11.2005 10:43
Problem mit Login Bereich (Sessions, MySQL) nicobischof PHP Tipps 2005-2 6 19.10.2005 09:54
Sessions Probleme nach Server-umzug PHP Tipps 2005-2 7 14.09.2005 15:29
Login Probleme mit Sonderzeichen im Nick PHP Tipps 2005-2 11 21.08.2005 16:54
Nach Serverumzug Cookies bzw. Sessions Probleme PHP Tipps 2005-2 5 24.07.2005 01:10
LOGIN probleme PHP Tipps 2005 22 29.03.2005 09:20
parse error Login mit Sessions PHP Tipps 2005 12 08.03.2005 14:13
login Probleme PHP Tipps 2005 2 28.02.2005 08:46
Probleme mit Sessions PHP Tipps 2005 2 23.01.2005 12:30
[Erledigt] Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
[Erledigt] Probleme mit SESSIONS innerhalb einer METHODE PHP-Fortgeschrittene 0 26.09.2004 16:57
Probleme bei Login PHP Tipps 2004 5 18.07.2004 22:08
keine Sessions beim Login PHP Tipps 2004 6 06.06.2004 22:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
submit mit a href kombinieren, php liste mit echo ausgeben iclude menu.php, über adminlink in den adminbereich einhacken, w3c admin link login

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.