Portal > Foren > PHP > PHP-Programmierung > Problem mit Bens tutorial
Antwort
 
Themen-Optionen
Alt 24.10.2005, 11:29 Nach oben    #1
chrissie82
Gast
 
Beiträge: n/a
Standard Problem mit Bens tutorial

Hallo,

ich habe leider auch ein Problem mit Bens loginscript. Hab mich schon durch dieses Forum gewühlt, einige scheinen ja dieses Problem auch zu haben, andere wiederum nicht. Allerdings habe ich noch keine konkrete Lösung gefunden... kann der Fehler auch an der PHP-Version liegen??

Also, hier ist erstmal die Fehlermeldung:

Code:
Warning: Cannot modify header information - headers already sent by  (output started at c:\inetpub\wwwroot\config.inc.php:20) in  c:\inetpub\wwwroot\validateLogin.inc.php on line 48 
Und nun der Code der beiden Dateien:

Zuerst die config.inc.php:

PHP-Code:
<?php

    
// Array initialisieren ...
    
$_config = array();

    
// ... und mit Werten füllen

    // Der Datenbankserver.
    
$_config['host'] = 'localhost';  

    
// Ein User, der auf den Server zugreifen darf.
    
$_config['user'] = 'SÜSSE';        

    
// Das zum User passende Passwort.
    
$_config['password']  = 'golfie';

    
// Der Name der Datenbank, die auf dem Datenbankserver angesprochen werden soll.
    
$_config['database'] = 'versuch';

?>
Und jetz die validateLogin.inc.php:

PHP-Code:
<?php
    session_start
();
    
// Einbinden der Konfigurationsdatei
          
include ('config.inc.php');
    
    
// Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden.
    
if( isset($_POST['username'], $_POST['passwort'])
        AND
        
strcmp(trim($_POST['username']),'') != 0
        
AND
        
strcmp(trim($_POST['username']),'') != ) {

          
          
          
          
// Erstellen der Verbindung zur MySQL-Datenbank
          
if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
               die( 
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
          }

          if( !
mysql_select_db$_config['database'], $connection ) ) {
              die ( 
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                       MySQL-Error: <br />' 
mysql_error() );
          }
          
          
          
// SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob
          // diese Kombination von Usernamen und Passwort überhaupt existiert und
          // zweitens bei Existenz Userinformationen auszulesen
          
$sql "SELECT
                           _id,
                           _anzahlLogins
                      FROM         
                           archiv_login
                      WHERE
                           _username = '" 
trim($_POST['username']) . "'
                      AND
                           _passwort = '" 
md5(trim($_POST['passwort'])) . "'";
                           
          
$res mysql_query($sql) or die( 'Error[SELECT|User]: <br />
                                                           <pre>' 
$sql '</pre>
                                                           <br />
                                                           MySQL-Error: ' 
mysql_error() );
              
          
// Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt.
          // In allen anderen Fällen wird er zurück zum Loginformular geleitet.
          
if( mysql_num_rows($res) != ) {
               
header('Location: http://localhost/loginfehler.html');             
              exit();
          }
         else {
             
// Der Schlüssel 'loggedIn' erhält den Wert 'true'. So kann überprüft später werden,
             // ob der User eingeloggt ist oder nicht.
             
$_SESSION['loggedIn'] = true;
             
             
// Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt
             
$user mysql_fetch_object($res);
             
$_SESSION['anzahlLogins'] = $user->_anzahlLogins;
             
$_SESSION['id'] = $user->_id;
             
             
// Aktualisierung des Anzahl der Logins
             
$sql 'UPDATE
                              archiv_login
                         SET
                              _anzahlLogins = _anzahlLogins + 1
                         WHERE
                              _id = ' 
$user->_id;
                              
             
mysql_query($sql) or die( 'Error[UPDATE|User]: <br />
                                                          <pre>' 
$sql '</pre>
                                                          <br />
                                                          MySQL-Error: ' 
mysql_error() );  
                                                          
             
// Der Login war erfolgreich und der User wird zur Startseite des
             // passwortgeschützen Bereichs weitergeleitet
            
header('Location: http://localhost/geheim.php');
             exit();                                            
          }
          
    }
    else {
          
header'Location: http://localhost/loginformular.html' );
          exit();
    }

?>
Bin sehr sehr dankbar über jede Hilfe....
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 12:46 Nach oben    #2
Benutzer
 
Benutzerbild von Niedi
 
Registriert seit: 05.09.2005
Ort: Ostarrichi
Beiträge: 51
Standard

was ist zeile 20 in config.inc.php?

$_config['host'] = 'localhost';?
$_config['user'] = 'SÜSSE';?
__________________
-_- -_- -_- -_- -_- -_- -_- -_- -_- -_- -_- -_- -_-
Niedi ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 13:46 Nach oben    #3
chrissie82
Gast
 
Beiträge: n/a
Standard

Das ist ja das komische.... Zeile 20 ist eigentlich nur noch:

?>
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 14:15 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.212
Standard

Ich habe soeben noch einmal die Dateien an das Tutorial drangehängt. Ggf. testet du das nochmal mit den Originaldateien. Diese nämlich produzieren bei mir lokal, wie auch auf dem Server keinen Fehler.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 16:19 Nach oben    #5
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Also wodurch die Fehlermeldung verursacht wird habe ich denke ich hier: http://forum.developers-guide.net/thread431.html recht deutlich gemacht. Kann es sein, dass in deiner config.inc.php vielleicht noch nachfolgende Leerzeichen kommen, die eine Ausgabe bilden?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 17:20 Nach oben    #6
chrissie82
Gast
 
Beiträge: n/a
Standard

Das Problem ist behoben!! Vielen Dank!!

Allerdings is da auch schon das nächste Problem im Anmarsch... bin leider wirklich absolute Anfängerin...
Hab ein bißchen an dem Anmeldescript gebastelt, aber noch nicht so wirklich was hinbekommen... könntet ihr mich vielleicht wenigstens auf ein paar Fehler hinweisen?? Hoffe ja das nicht alles falsch ist... hier der Code:

PHP-Code:
<?php
    session_start
();
    
// Einbinden der Konfigurationsdatei
          
include ('config.inc.php');
          
 
// Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben  // gemacht wurden.
 
    
if( isset($_POST['username'], $_POST['passwort'])
        AND
        
strcmp(trim($_POST['username']),'') != 0
        
AND
        
strcmp(trim($_POST['username']),'') != ) {
        
        
 
// Erstellen der Verbindung zur MySQL-Datenbank
          
if( !$connection mysql_connect$_config['host'],  
           
$_config['user'], $_config['password'] ) ) {
               die( 
'Verbindung zum Datenbankserver konnte nicht 
                     hergestellt werden.' 
);
          }

          if( !
mysql_select_db$_config['database'], $connection ) ) {
              die ( 
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                       MySQL-Error: <br />' 
mysql_error() );
          }

 if( 
mysql_num_rows($res) != ) {
               
header('Location: http://localhost/loginfehler.html');
              exit();
          }
         else {
             

$sql "INSERT INTO
            archiv_login
       (
            _username,
            _passwort
       )
       VALUES
       (
            '" 
$username "',
            MD5('" 
$passwort "')
            )
            
            
    $res = mysql_query($sql) or die( 'Error[SELECT|User]: <br />
                                                           <pre>' . $sql . '</pre>
                                                           <br />
                                                           MySQL-Error: ' . mysql_error() );
             
              exit();
  }  
?>
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 18:00 Nach oben    #7
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

PHP-Code:
<?php
session_start
();
// Einbinden der Konfigurationsdatei
include ('config.inc.php');

// Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben
// gemacht wurden.
if (isset ($_POST['username'], $_POST['passwort'])
AND
strcmp (trim ($_POST['username']), '') != 0
AND
strcmp (trim ($_POST['username']), '') != 0)
{
  
// Erstellen der Verbindung zur MySQL-Datenbank
  
if (!$connection mysql_connect ($_config['host'], $_config['user'], $_config['password']))
  {
    die (
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.');
  }

  if (!
mysql_select_db ($_config['database'], $connection))
  {
    die (
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />' .
         
'MySQL-Error: <br />' .
         
mysql_error ());
  }
?>
Bis hier hin ist alles soweit OK.
PHP-Code:
<?php
  
if (mysql_num_rows ($res) != 0)
  {
    
header ('Location: http://localhost/loginfehler.html');
    exit ();
  }
?>
Woher soll $res auf einmal kommen? Du hast gerade erst eine Verbindung zur DB aufgebaut und $res kann dementsprechend nicht gefüllt sein bzw. was anderes als 0 enthalten, da kein Query ausgeführt wird. Ergo: Sinnlos diese Abfrage (zumindest solange $res nicht gesetzt wird)
PHP-Code:
<?php
  
else
  {
    
$sql "INSERT INTO `archiv_login` (`_username`, `_passwort`) VALUES ('" $username "', MD5('" $passwort "')";
?>
Du solltest einen angefangenen SQL-Query auch wieder schließen. Letztlich ist es erstmal nur ein String in PHP, aber wenn du kein "; ans Ende setzt, wirst du einen Parse-Error bekommen.
PHP-Code:
<?php
    $res 
mysql_query ($sql) OR die ('Error[SELECT|User]: <br />' .
                                                          
'<pre>' $sql '</pre>' .
                                                          
'<br />' .
                                                          
'MySQL-Error: ' mysql_error ());
             
    exit ();
  }
}  
?>
Du hast vergessen zusätzlich noch den ELSE-Part zu schließen mit einem }. Ansonsten ist mir aufgefallen, dass du dir erstmal einen Coding-Style angewöhnen solltest, denn du hast in diesem kurzen Script bereits etliche Dinge unterschiedlich geschrieben (OR einmal groß, einmal klein, dann einfache Quotes für Strings, dann wieder doppelte Quotes...) Ein einheitliches Layout des Quelltextes wirkt nicht nur professioneller, sondern ist auch übersichtlicher.

Achja: Die Einrückungen sollten etwas einheitlicher sein (ich favorisiere 2 Spaces für eine Ebene).
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 19:22 Nach oben    #8
chrissie82
Gast
 
Beiträge: n/a
Standard

OK, habe versucht deinen Ratschlag zu befolgen und zumindest ETWAS ordnung in die sache gebracht... ne fehlermeldung kommt nun zwar nicht mehr, aber ich werde immer wieder zum anmeldeformular geleitet und in die Datenbank wird auch nix geschrieben....

PHP-Code:
<?php
  session_start
();
  
  
// Einbinden der Konfigurationsdatei
  
  
include ('config.inc.php');
          
 
// Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben  // gemacht wurden.
 
   
if( isset($_POST['username'], $_POST['passwort'])
        AND
        
strcmp(trim($_POST['username']),'') != 0
        
AND
        
strcmp(trim($_POST['username']),'') != )
        {
           
 
// Erstellen der Verbindung zur MySQL-Datenbank
 
          
if( !$connection mysql_connect$_config['host'],  
              
$_config['user'], $_config['password'] ) )
               { die( 
'Verbindung zum Datenbankserver konnte nicht 
                       hergestellt werden.' 
);
          }

          if( !
mysql_select_db$_config['database'], $connection ) ) {
              die ( 
'Die Datenbank ' $_config['database'] . ' kann
                     nicht verwendet werden. <br />
                     MySQL-Error: <br />' 
mysql_error() );
          }

   
$sql "SELECT
                  _id,
                  _anzahlLogins
           FROM
                   archiv_login
           WHERE
                  _username = '" 
trim($_POST['username']) . "'
           OR
                   email = '" 
md5(trim($_POST['email'])) . "'";

   
$res mysql_query($sql) or die( 'Error[SELECT|archiv_login]:
                                     <br /> <pre>' 
$sql '</pre> <br />
                                     MySQL-Error: ' 
mysql_error() );
                                     
   if( 
mysql_num_rows($res) != ) {
              
header('Location: http://localhost/loginfehler.html');
              exit();
          }     
        
          else {                                           

               
$sql "INSERT INTO
                           archiv_login ( _username, _passwort )
                       VALUES 
                           ( '" 
$username "', MD5('" $passwort "')";
                           
mysql_query($sql) or die( 'Error[INSERT INTO|archiv_login]:
                                 <br /><pre>' 
$sql '</pre><br />
                                  MySQL-Error: ' 
mysql_error() );
                
header('Location: http://localhost/loginformular.html');
                exit();
                }
          }
                
          else {
                
header'Location: http://localhost/anmeldeformular.html' );
                exit();
          }
   
                        
      
?>
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 19:49 Nach oben    #9
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Der Fehler steckt also hier:

PHP-Code:
   if( isset($_POST['username'], $_POST['passwort'])
        AND
        
strcmp(trim($_POST['username']),'') != 0
        
AND
        
strcmp(trim($_POST['username']),'') != )
        { 
Mal abgesehen davon, dass das eine wohl eher $_POST['passwort'] sein sollte, würde ich die Verwendung von empty() empfehlen:

PHP-Code:
   if( isset($_POST['username'], $_POST['passwort'])
        AND
        empty (
$_POST['username']) === FALSE
        
AND
        empty (
$_POST['passwort']) === FALSE )
        { 
Wenn der Fehler immernoch auftritt (was ich für wahrscheinlich halte), stimmt entweder was mit der Übergabe der Variablen nicht (Die Namen der Felder im Formular sind anders geschrieben, als im Script, man beachte Groß- und Kleinschreibung) oder irgendwoanders werden diese Daten bereits überschrieben (config.inc.php?)
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 20:02 Nach oben    #10
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

und ich würd empfehlen bei Vergleichen, den zu vergleichenden String, Array, Hash, Scalar oder sonstwas immer auf die linke Seite des Vergleichs zu schreiben

bsp.:
$str = 'x';
if ('x' === $str ) { .....

warum ?

ganz einfach:

um Fehler wie if ($str = 'x') { .....
zu vermeiden ...

mfg

[edit]
und wenn man schon dabei ist ...
um ein mehrfach laden von "modulen/dateien" auszuschließen
anstatt von include und require lieber include_once, require_once

Geändert von J33d3X (24.10.2005 um 20:51 Uhr).
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 22:13 Nach oben    #11
chrissie82
Gast
 
Beiträge: n/a
Standard

Erstmal vielen vielen Dank für eure Hilfe!!

Nun bekomm ich allerdings folgende Fehlermeldung nach dem anmelden:

Code:
Error[INSERT INTO|archiv_login]: 
INSERT INTO
                           archiv_login ( _username, _passwort )
                       VALUES
                           ( '', MD5('') 
MySQL-Error: You have an error  in your SQL syntax. Check the manual that corresponds to your MySQL server  version for the right syntax to use near '' at line 4
Kann das evtl. daran liegen, dass meine MySQL Tabelle schon mehrere Spalten hat als die 2?? Habe dort schon email und so eingefügt, wollte diese Felder dann aber erst mit einbeziehen, wenn ich es mit 2 Feldern (sprich username und passwort) zum laufen bekommen habe....
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 22:14 Nach oben    #12
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.212
Standard

versuch doch mal dein sql-statement in phpmyadmin abzusetzen. Dann siehst du gleich - wenn es geklappt hat - wie es richtig sein muss.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.10.2005, 05:37 Nach oben    #13
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Soe wie es da steht ist dein SQL-Query auch ohne Werte aufgerufen worden, was mich zu der Annahme bringt, dass deine Variablen $_POST['username'] und $_POST['passwort'] leer sind. Eigentlich dürfte er diese Fehlermeldung aber nicht auftauchen, da durch empty ($_POST['username']) === FALSE eigentlich sichergestellt wird, dass der Username angegeben ist, ebenso wie das Passwort.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.10.2005, 15:40 Nach oben    #14
chrissie82
Gast
 
Beiträge: n/a
Standard

OK, erstmal vielen vielen Dank für eure Hilfe!!

Hab den Code nochmal etwas umgestellt, Passwort wird auch in die Datenbank eingetragen, nur der Username nicht... warum muss das denn alles so kompliziert sein??
Ich poste nur nochmal den SQL-insert Code, das andere müßte glaube gleich geblieben sein... vielleicht bemerkt ja jemand einen Fehler???

PHP-Code:
 $sql "INSERT INTO
                           archiv_login ( _username, _passwort )
                       VALUES
                           ('" 
$username "', MD5('" $passwort "'))"
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.10.2005, 15:44 Nach oben    #15
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.212
Standard

lass dir doch mal an der entspr. Stelle mittels

echo $sql;

das zusammengesetzte sql-statement ausgeben, dann kannst du kontrollieren, ob das auch richtig ist!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen