PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Login Problem (https://www.php-resource.de/forum/php-developer-forum/102537-login-problem.html)

Steinchen87 05-01-2012 02:35

Login Problem
 
Servus,
ich bin noch relativ neu im Umgang mit PHP und habe ein Problem mit dem folgenden Skript.

Vorweg möchte ich sagen das ich in phpmyadmin eine Datenbank erstellt in die sich bereits über 2 andere Skripte meine Nutzer registrieren könnten.
Aufbau:
db Name: buchungsliste
db Tabelle: daten
# Spalte
1. ..........
2. .........
3. .........
4.............
5.benutzer
6..............
7...............
8................
9.................
10...............
11...........
12.Passwort

Jetzt wollte ich eig noch einen login dazu gestalten, damit sich halt direkt einloggen kann, wenn man schon registriert ist.

s.h. folgende Skripte

1. Skript: pw_eingabe scheint zu funktionieren...
PHP-Code:


<?php session_start();

/*
   * Benutzer- und Passworteingabe
   * BA - pw_eingabe.php
*/

?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
<title>Login</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h2>Login</h2>

<form action="pw_kontrolle.php" target="_self" method="post">
<table>
<?php
if ( isset( $_SESSION['pw_mitteilung'] ) ) {
    
// Es ist ein Passwort-Fehler aufgetreten
echo '
    <tr><td colspan="2" style="color:red">'
.$_SESSION['pw_mitteilung'].'</td></tr>';
    unset( 
$_SESSION['pw_mitteilung'] );
}
?>
<tr>
<td><strong>benutzer</strong></td>
<td><input name="benutzer" size="30" type="text"
</td>
</tr>
<tr>
<td><strong>Passwort</strong></td>
<td><input name="passwort" size="30" type="password" /></td>
</tr>
<tr><td colspan="2">&nbsp;</td></tr>
<tr>
<td colspan="2" align="right">
<input name="absenden" value="Absenden" type="submit" />
</td>
</tr>
</table>
</form>

</body>
</html>





2. Skript pw_kontrolle funktioniert nicht!!!!
Angezeigt wird diese zeile $result= mysql_query.....
könnte es vllt an der Bez. zu der darüberliegen Zeile liegen?
Um Hilfe wär ich sehr dankbar, bin schon am verzweifeln...

<?php session_start();
PHP-Code:


// Den Benutzer permanent speichern
$_SESSION['benutzer'] = $_POST['benutzer'];

include( 
'db_abfrage.inc.php' );


$sql 'SELECT * FROM daten WHERE benutzer=\''.$_SESSION['benutzer'].'\'';
$result mysql_query'buchungsliste'$sql );
#echo 'Zeile 15 - $result='.( $result === FALSE ? 'FALSE' : 'Ergebnis' );exit();

if ( mysql_num_rows$result ) == ) {
    
// Für die Bedingung SELECT * FROM daten WHERE benutzer='benutzer'
    // wurde kein Eintrag gefunden, d.h. Benutzer ist in der Datenbank nicht vorhanden

$_SESSION['pw_mitteilung'] = 'Der Benutzer <strong>'.$_SESSION['benutzer']
    .
'</strong> ist nicht bekannt.';
    
header'Location: pw_unbek_benutzer.php' );
    exit();
}

$nutzer mysql_fetch_array$result );
if ( 
$nutzer['passwort'] != md5$_POST['passwort'] ) ) {
    
// Das eingegebene Passwort stimmt nicht mit dem gespeicherten überein
$_SESSION['pw_mitteilung'] = 'Das Passwort zum Benutzer '.$_SESSION['benutzer']
    .
' ist falsch.';
    
header'Location: pw_eingabe.php' );
    exit();
}

$_SESSION['login_iO'] = TRUE;

// weiter im normalen Ablauf
echo 'Alles i.O.<br />'
.'Nutzer = '.$_SESSION['benutzer'].'<br />'
.'Passwort = '.$_POST['passwort'].'<br />'
.'md5_PW = '.md5$_POST['passwort'] ).'<hr />';

?> 


ddel 05-01-2012 08:50

Hi Steinchen87

Da hat sich ganz ein kleiner Fehler eingeschlichen!
Und zwar in folgender Zeile:

PHP-Code:

$sql 'SELECT * FROM daten WHERE benutzer=\''.$_SESSION['benutzer'].'\''

Du hast ein Anführungszeichen zu viel drinn. Darum denkt der PHP Intepreter dass es sich bei der nächsten Zeile auch noch um einen String handelt und gibt diesen aus.

Du könntest die Sache auch so schreiben:

PHP-Code:

$sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"

Ich gehe davon aus, dass der Benutzer bei dir ganz normal abgelegt ist und nicht mit Sonderzeichen davor und dahinter?


Gruss

combie 05-01-2012 08:56

Zitat:

PHP-Code:

// Den Benutzer permanent speichern 
$_SESSION['benutzer'] = $_POST['benutzer']; 


Das würde ich so nicht tun!!

1. So landet u.U. Schadcode in Session.
2. Die UserId zu speichern ist vollkommen ausreichend.
3. Erst die ID in Session speichern wenn die User Prüfung erfolgreich war
4. Beachte/vermeide SQL Injections
5. Das Passwort prüft man auch sofort im SQL

Steinchen87 05-01-2012 11:31

Zitat:

Zitat von ddel (Beitrag 658752)
Hi Steinchen87

Da hat sich ganz ein kleiner Fehler eingeschlichen!
Und zwar in folgender Zeile:

PHP-Code:

$sql 'SELECT * FROM daten WHERE benutzer=\''.$_SESSION['benutzer'].'\''

Du hast ein Anführungszeichen zu viel drinn. Darum denkt der PHP Intepreter dass es sich bei der nächsten Zeile auch noch um einen String handelt und gibt diesen aus.

Du könntest die Sache auch so schreiben:

PHP-Code:

$sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"

Ich gehe davon aus, dass der Benutzer bei dir ganz normal abgelegt ist und nicht mit Sonderzeichen davor und dahinter?


Gruss

Danke schon mal, der Benutzer soll keine Sonderzeichen enthalten das ist korrekt ja.

Kannst du mir die Zeile mal bitte so wieder geben das sie passt? Habe diese
eingefügt und das Anführungszeichen was meines erachtens zu viel war wegg gemacht, aber es geht immer noch nicht :(

combie 05-01-2012 11:36

Du wirst renovieren müssen!

ddel 05-01-2012 11:43

Zitat:

Zitat von Steinchen87 (Beitrag 658754)
Kannst du mir die Zeile mal bitte so wieder geben das sie passt? Habe diese
eingefügt und das Anführungszeichen was meines erachtens zu viel war wegg gemacht, aber es geht immer noch nicht :(

Du kannst direkt die zweite Zeile verwenden, sollte so funktionieren!

Steinchen87 05-01-2012 11:47

Zitat:

Zitat von ddel (Beitrag 658756)
Du kannst direkt die zweite Zeile verwenden, sollte so funktionieren!

Leider nicht wenn ich dieses eingebe wird immer noch: Parse error: syntax error, unexpected bei - $result = = mysql_query
(wie auch schon vorher) angezeigt.

ddel 05-01-2012 12:00

PHP-Code:

$result mysql_query'buchungsliste'$sql ); 

Diese Zeile ist falsch. mysql_query erwartet einen String welcher den SQL Statement beinhaltet ("SELECT * FROM TABELLE).

Die Datenbank (buchungsliste) musst du nicht migeben. Wenn du mit verschiedenen Datenbanken arbeitest, kannst du mysql_query noch die entsprechende Verbindung mitgeben. Wenn das aber nicht der Fall ist, reicht nur das SQL.

Die Datenbank musst du beim Aufbau der Verbindung auswählen:

PHP-Code:

$db_sel mysql_select_db('buchungsliste'); 

Nachdem du das alles gemacht hast, würde deine Zeile so aussehen:

PHP-Code:

$sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"
$result mysql_query($sql); 


Steinchen87 05-01-2012 12:03

Zitat:

Zitat von Steinchen87 (Beitrag 658757)
Leider nicht wenn ich dieses eingebe wird immer noch: Parse error: syntax error, unexpected bei - $result = = mysql_query
(wie auch schon vorher) angezeigt.


ach ja un wenn ich nicht über Debug gehe, sondern über den localhost und den Benutzer mit Passwort eingebe (der bereits regestriert ist) dann findet er den nicht.

Steinchen87 05-01-2012 12:09

Zitat:

Zitat von ddel (Beitrag 658758)
PHP-Code:

$result mysql_query'buchungsliste'$sql ); 

Diese Zeile ist falsch. mysql_query erwartet einen String welcher den SQL Statement beinhaltet ("SELECT * FROM TABELLE).

Die Datenbank (buchungsliste) musst du nicht migeben. Wenn du mit verschiedenen Datenbanken arbeitest, kannst du mysql_query noch die entsprechende Verbindung mitgeben. Wenn das aber nicht der Fall ist, reicht nur das SQL.

Die Datenbank musst du beim Aufbau der Verbindung auswählen:

PHP-Code:

$db_sel mysql_select_db('buchungsliste'); 

Nachdem du das alles gemacht hast, würde deine Zeile so aussehen:

PHP-Code:

$sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"
$result mysql_query($sql); 



Okay ja das habe ich bereits bei der Verbindung schon gemacht. Wenn ich das jetzt so eingebe dann sagt er mir das das Passwort zum Benutzer falsch ist. Was aber nicht stimmt. Habe mehrer Datenbanken in phpmyadmin drinn, arbeite aber hier nur mit der Datenbank buchungsliste.

ddel 05-01-2012 12:14

Zitat:

Zitat von Steinchen87 (Beitrag 658761)
Wenn ich das jetzt so eingebe dann sagt er mir das das Passwort zum Benutzer falsch ist. Was aber nicht stimmt.

Wenn "er" das sagt, dann hat er zu 100% Recht ;) Überprüfe nochmals ob du die richtige Datenbank anziehst, der Benutzer korrekt eingegeben ist und das Passwort stimmt.

Wenn das alles zutrifft und der Fehler ist noch da: Lösche den Benutzer und lege einen neuen an und merke dir gut das Passwort ;)

Je nach Hoster den du hast, wird dem Benutzernamen noch etwas hinzugefügt. Bsp: du legst den Benutzer Test an. Abgespeichert wird das aber als Test_xy. Das kannst du am besten überprüfen wenn du in der Übersicht de Benutzer nachschaut wie der Name genau ist. Du musst natürlich genau diesen Namen verwenden!

ezkimo 05-01-2012 12:15

Wie wäre es denn mal mit der kompletten Fehlermeldung?
Die Funktion mysql_query ist falsch angewendet. Einfach mal einen Blick in die PHP Dokumentation werfen: PHP: mysql_query - Manual

EDIT: Was passiert wenn Du das SQL Statement über phpMyAdmin direkt ausführst?

Steinchen87 05-01-2012 12:47

PHP-Code:


// Daten des Servers:
$dbhost_ip 'localhost';    //Hostname
$dbuser    'php';         //Benutzer
$dbpw      '';             //Passwort
$dbname    'buchungsliste';

//----------------------------------------------------------
// Funktion Datenbankabfrage
function db_query$dbname$sql )
{
    global 
$dbhost_ip$dbuser$dbpw;

    
// Verbindung zum DB-Host herstellen
    
$verbindung = @mysql_connect$dbhost_ip$dbuser$dbpw )
         or die (
'Verbindung zum Datenbank-Rechner (IP-Adresse '.$dbhost_ip.')
                  konnte nicht hergestellt werden!<br />Fehlertext: '
         
.mysql_error());

    
// auswählen der Datenbank
    
mysql_select_db$dbname$verbindung );

    
// ausführen einer SQL-Anfrage
    
$result mysql_query$sql );

    
// Datenbankverbindung schließen
    
mysql_close$verbindung );

    
// Rückgabe des Ergebnisses
    
return( $result );
}
?> 


hier noch ma die datei db_abfrage.inc.php die ich includiert hatte.
Vllt ist ja hier der Fehler versteckt. Weil meines erachtens nach greift er ja nicht auf die gewünschten Datensätze zu oder? Login benutzer wird ja nie erkannt

ddel 05-01-2012 12:53

Nimm mal vor dem mysql_connect das @ Weg. Ich denke du wärst sehr interessiert daran zu sehen was da schief läuft..

Zudem, hast du überprüft ob der Benutzer php existiert? Und du bist dir ganz sicher, dass der Benutzer KEIN Passwort hat?

Wie ezkimo bereits gesagt hat, es wäre sehr hilfreich die ganze Fehlermeldung zu sehen dann.

Steinchen87 05-01-2012 13:10

Das einzigste was angezeigt wird ist der oben erwähnte Fehler aber nur beim Debugen. Sonst wird kein Fehler angezeigt. Bin absolut am verzweifeln, könnte mir jemand vllt einen Login mit allem drum un drann schreiben? Also abfrage, eingabe, kontrolle???

Servername = localhost
Benutzer = php
Passwort gibt es nicht!

Datenbankname: buchungsliste
Tabellename: daten

Spalten die angesprochen werden sollen:
1.Spalte: benutzer
2.Spalte: Passwort

Dafür wäre ich sehr dankbar sitze seit Tagen drann, komm einfach nicht weiter...


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:34 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG