Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Problem mit login tutorial [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit login tutorial


 
Germanjosh
15-09-2006, 21:55 
 
Hallo,

ich habe folgendes Problem mit dem Login-Script.
Wenn ich die richtigen Anmeldedaten eingebe, bekomme ich dennoch die Meldung 'Ihre Anmeldedaten waren nicht korrekt'.

Name und Passwort sind als U_Name und Passwort in einer Tabelle abgespeichert.

Hier die login.php

<?
error_reporting(E_ALL);
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
$userid=check_user($_POST['name'], $_POST['pass']);
if ($userid!=false)
login($userid);
else
echo 'Ihre Anmeldedaten waren nicht korrekt!';
}
if (!logged_in())
echo '<form method="post" action="login.php">
<label>Benutzername:</label><input name="name" type="text"><br>
<label>Passwort: </label><input name="pass" type="password" id="pass"><br>
<input name="login" type="submit" id="login" value="weiter">
</form>';
else
echo '<a href="logout.php">Ausloggen</a>';
echo '<p /><a href="logged_in.php">Check</a>';
?>


und hier die sessionhelpers:

<?

error_reporting(E_ALL);
function connect()
{
$con= mysql_connect('meinserver','nutzer','passwort') or die(mysql_error());
mysql_select_db('tabelle',$con) or die(mysql_error());
}



function check_user($name, $pass)
{
$sql="SELECT ID
FROM users
WHERE U_Name='".$name."' AND Passwort=MD5('".$pass."')
LIMIT 5";

$result= mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows($result)==1)
{

$user=mysql_fetch_assoc($result);
return $user['ID'];
}
else
return false;
}

function login($userid)
{
$sql="UPDATE users
SET UserSession='".session_id()."'
WHERE ID=".$userid;
mysql_query($sql);
}

function logged_in()
{
$sql="SELECT ID
FROM users
WHERE UserSession='".session_id()."'
LIMIT 1";
$result= mysql_query($sql);
return ( mysql_num_rows($result)==1);
}

function logout()
{
$sql="UPDATE users
SET UserSession=NULL
WHERE UserSession='".session_id()."'";
mysql_query($sql);
}

connect();
?>

Danke schonmal im Voraus

 
TobiaZ
19-09-2006, 21:46 
 
bitte erst komplett lesen UND befolgen: http://www.php-resource.de/forum/showthread.php?s=&threadid=50454

 
Germanjosh
24-09-2006, 19:21 
 
Hab's jetzt mal formatiert und das Errorreporting eingefügt. Mit meinem Problem bin leider trotzdem noch nicht weiter.

 
TobiaZ
24-09-2006, 19:24 
 
Wie heißt das Feld in der DB?

U_Name oder U-Name?

Mach testausgaben der Query in check_user().
nutze error_reporting so wie es in den Regeln steht.

 
Germanjosh
24-09-2006, 21:00 
 
Hallo in der DB heißt's U_Name - hab's oben im Text ausgbessert

ich erhalte folgende Ausgabe für
echo $result;

Resource id #4Ihre Anmeldedaten waren nicht korrekt!

 
TobiaZ
24-09-2006, 21:05 
 
echo result ist ja schonmal ganz nett und fördert auch nichts unerwartetes zu tage.

aber ich will mehr sehen.
Gib die Queries aus,
gib alle vars aus.
mysql_error().

erscheint etwas unerwartetes?

 
Germanjosh
24-09-2006, 21:33 
 
soweit ich das beurteilen kann, bekomme ich alle Werte geliefert die ich haben will.

in der check_user springt er mir aber in den else-teil.

sql fehler bekomme ich soweit keine

else
echo mysql_error(). "\n";
echo $name. "\n";
echo $pass ."\n";
echo $sql ."\n";
echo $result. "\n";
return false;
liefert mir:

admin 1234 SELECT ID FROM users
WHERE U_Name='admin'
AND Passwort=MD5('1234') LIMIT 5

Resource id #4 Ihre Anmeldedaten waren nicht korrekt!

 
TobiaZ
24-09-2006, 22:10 
 
Okay, Testausgaben sehen sauber aus.

Jetzt gib mal bitte die Query ins phpMyAdmin ein und lasse die die ergebnisse anzeigen. Was kommt raus?

if(keine ergebnisse gefunden)
echo "Wie hast du die Spalte Passwort definiert?";

 
Germanjosh
24-09-2006, 22:25 
 
echo
"feld: Passwort
Typ: varchar
länge/set: 20
kollation: latin1_general_ci
null: not null";

echo
"und was mach ich jetzt? ;-)";

 
TobiaZ
24-09-2006, 22:29 
 
Du setzt die länge für das Passwort mal schön auf 32 (so lang ist ein md5 hash in der Regel) und gibst das passwort noch mal neu in die DB ein. Danach gehts wieder.

 
Germanjosh
24-09-2006, 23:07 
 
ich werd' verrückt...... das funktioniert :D danke.


die 20 zeichen beim passwort rührten daher, weil ich ein Anmeldeformular ohne MD5 hatte.

bitte hilf' doch einem armen Anfänger noch bei folgendem Problem:

ich möchte per

'".$_REQUEST['Passwort']."'

das Passwort mit MD5 verschlüsselt an die db weitergeben. wie mach' ich das?

 
TobiaZ
24-09-2006, 23:14 
 
md5() oder MD5() suchs dir aus.

 
Germanjosh
24-09-2006, 23:37 
 
mysql_query("INSERT INTO $meinetabelle (Passwort)
VALUES ('".$_REQUEST[md5('Passwort')]."', $DatabasePointer);




<form action="<?php echo$_SERVER['PHP_SELF']; ?>"
method="post">

Passwort: <input maxlength="20" name=md5("Passwort") type="text"><br>

<input name="Send" type="submit" value="Absenden">
</form>

<?php


im Eingabeformular ist das Passwort im klartext sichtbar...:confused:

 
TobiaZ
24-09-2006, 23:41 
 
dafür gibts

<input type="password"..

Das sollte dir aber schon 1000 mal im internet begegnet sein. (hat mit md5 nichts zu tun.)

 
Germanjosh
24-09-2006, 23:47 
 
ok... jetzt funzts...

war mir leider bist jetzt noch nicht begegnet.


dankeschön:) :rocks:

 
TobiaZ
24-09-2006, 23:48 
 
Wie hast du dich hier im Forum angemeldet? :D

 
wahsaga
25-09-2006, 10:42 
 
Original geschrieben von Germanjosh
im Eingabeformular ist das Passwort im klartext sichtbar...:confused:
Es ist absolut unüblich, für Passwortfelder eine Vorbelegung auszugeben - wenn man Affenformular-mässig die Daten bei Fehler oder zur Kontrolle wieder ausgibt, werden Passwortfelder idR. nicht vorbelegt.

Und es mit dem MD5-Hash des eingegebenen Passwortes vorzubelegen, ist gleich mal doppelt sinnfrei.

 
Germanjosh
26-09-2006, 23:19 
 
Hallo,

habe ein neues kleines Problem:

ich habe ein Menü aufgebaut, das in einer config.php in einem array abgespeicherte sections enthält.

diese sections werden durch eine inhalt.php in der mitte der seite ausgegeben (tabellenlayout).

nun möchte ich eine suchfunktion einbauen, deren suchergebnisse durch die inhalt.php dargestellt wird.
So habe ich die section definiert:
$dateien['result'] = "./ex/result.php";


Hätte jetzt gerne meine Suchanfrage dergestalt (s.u.) vollzogen, leider klappt dann die join-funktion aber nicht. wie kann ich die Anzeige in der inhalt.php alternativ realisieren?
$res = join('', file("index.php?section=result"));
(wird hier die absolute Pfadangabe gesetzt öffnet sich ein neues Fenster)

 
TobiaZ
28-09-2006, 15:30 
 
HÄH? :goth:

Kannst du da noch mal für mich erklären. Bitte versuche auch zu unterscheiden, ob es sich um ein Serverseitiges oder ein Klientseitiges Problem handelt.

 
Germanjosh
03-10-2006, 04:42 
 
Sorry, dass ich mit dem Problem schon wieder für Verwirrung sorge.


Ich probier's nochmal anschaulicher zu erklären:

ursprünglich funktionierender Code:

$tmpl = implode("", file("./tmpl/search_result.php"));

mein "Wunsch"code:

$tmpl = implode("", file("./index.php?section=search_result"));

liefert:




Offensichtlich kommt die File-Funktion mit meiner php$section=search_result (die section verweist in einer config-datei auf die search_result.php) nicht klar und vermurkst im nächsten Schritt auch die Implode_funktion.

Ich hoffe, dass war jetzt etwas verständlicher.

Einen schönen Feiertag wünsche ich euch.

 
wahsaga
04-10-2006, 22:45 
 
Original geschrieben von Germanjosh
Offensichtlich kommt die File-Funktion mit meiner php$section=search_result (die section verweist in einer config-datei auf die search_result.php) nicht klar
Natürlich nicht - oder hat deine Datei im Filesystem wirklich den Namen "index.php?section=search_result" ...?


GET-Parameter gibt es nur dann, wenn du dich auch in einem Umfeld bewegst, welches solche kennt - HTTP beispielsweise.
Aber das Dateisystem kennt keine.

 
mrhappiness
05-10-2006, 08:23 
 
Krücke:$_GET['section'] = 'search_result';
$tmpl = implode("", file("./index.php"));

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:44 Uhr.