Fehler in Loginscript

Headymaster

Erfahrenes Mitglied
Hallo!

Vorweg will ich gleich ma eins klarstellen....ich bin noch total neu im Gebiet php also geht bitte net so hart mit mir um.


so nun mein Problem.

Mein Loginscript gibt bei Aufruf immer folgenden Fehler aus....aber ich werde daraus net schlau...:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /srv/www/web1/html/nielsmaseberg/admin/login.php:72) in /srv/www/web1/html/nielsmaseberg/admin/login.php on line 22
Keine Verbindung zur Datenbank


login.php:
PHP:
<?php
// Benötigte Dateien include
include("config/sql.php");

//Funktion zur Fehlerausgabe beim Formular
function formre()
{
    session_start();
    if (isset ($_REQUEST["fehler"])) 
  { 
    echo "Die Zugangsdaten waren ungültig."; 
  } 
    session_write_close();
    exit();
}  

// funktion zur Überprüfung der ins Formular eigegebenen Daten
function datenpr()  
{

    // Session starten
    session_start ();

    // Datenbankverbindung aufbauen 
    $connectionid = mysql_connect ($dbserver, $dbuser, $dbpw); 
    if (!mysql_select_db ($dbname, $connectionid)) 
    { 
      die ("Keine Verbindung zur Datenbank"); 
    } 

    $sql = "SELECT ". 
        "Id, Nickname, Nachname, Vorname ". 
      "FROM ". 
        "benutzerdaten ". 
      "WHERE ". 
        "(Nickname = '".$_POST["name"]."') AND ". 
        "(Kennwort = '".md5 ($_POST["pwd"])."')"; 
      $result = mysql_query ($sql); 

    if (mysql_num_rows ($result) > 0) 
    { 
      // Benutzerdaten in ein Array auslesen. 
      $data = mysql_fetch_array ($result); 

      // Sessionvariablen erstellen und registrieren 
      $_SESSION["user_id"] = $data["Id"]; 
      $_SESSION["user_nickname"] = $data["Nickname"]; 
      $_SESSION["user_nachname"] = $data["Nachname"]; 
      $_SESSION["user_vorname"] = $data["Vorname"]; 
  
  
      // Session vor weiterleitung schließen und script beenden
      session_write_close();
      exit();

     header ("Location: index.php"); 
    } 
    else 
    { 
      print $_SERVER['PHP_SELF']. formre($_REQUEST["fehler"]);  
    }
}

	  
?>
<html>
<body>
<head>
  <title>Login</title>
</head>  
<table align="center" style="width:400; background-color:#999999;"> 
<form action="<?php print $_SERVER['PHP_SELF']. datenpr() ; ?>" method="post">
  <tr>
     <td align="center"><b>Adminlogin</b></td>
  </tr>	 
  <tr>
     <td align="center">Name: <input type="text" name="name" size="20"></td>
  </tr>
  <tr>
     <td align="center">Kennwort: <input type="password" name="pwd" size="20"></td>
  </tr>
     <td align="center"><input type="submit" value="Login"><input type="reset" value="Reset"></td>
  </tr>	  
</form>
</table> 
</body> 
</html>

sql.php:
PHP:
<?php

  $dbserver = "****";         // Server auf dem Das Script liegt, meistens localhost
  $dbname = "****";        // Name der Datenbak in dem Das Script agieren soll
  $dbuser = "*****";        // Name des Benutzers der Datenbank
  $dbpw = "*****";              // PSW für die Datenbank
  
?>

Ich weiß echt kein Rat im moment......

MFG Niels
 
Hi,

du hast bereits vor session_start() irgendeine Ausgabe an den Browser geschickt. Das ist sogar ein Leerzeicen vor <?php .
Denn dann wird der Header bereits mit dem gesamten Inhalt abgeschickt.
Abhilfe könnte hier die Ausgabesteuerungs-Funktionen schaffen
 
joa.....

Also Whitespaces waren keine da wie du meintest....

Mit der Eingabesteuerung versteh ich nicht so....

Meinst du ob_start(); und ob_end_flush();

Wenn ja dann kann ich sagen dass es net funktioniert...habe ich schon getestet.


MFG Niels
 
Hi,

session_start() musst(!) du for allen anderen Headern starten. Normalerweise startet man die Session auch nur einmal. Also:

PHP:
<?
 session_start();
?>
<html>
<head></head>
<body>
.....usw.

In deinem Fall startest du die Session vor(!) den Funktionen.

Gruß Andrej

P.S. die Session brauchst du nicht zu schliessen, da diese automatisch am Script-Ende geschlossen wird. Außerdem füge das noch vor:
PHP:
/*
  Die Session wird gestartet.
  ini_set('session.use_trans_sid', 1); bedeutet der Server wählt selbst,
  ob die SID über ein Cookie oder über die Adresse übergeben wird.
 */
 ini_set('session.use_trans_sid', 1);
(Falls du keine Möglichkeit hast das in der php.ini zu ändern)
 
Habe es geändert...aber nun kommt der Fehler
formular.php?fehler=1

Also Zugangsdaten ungültig...obwohl die Zugangsdaten richtig sind...sehr komisch...

MFG Niels
 
Versuch das mal mit der Anweisung

PHP:
$sql = "SELECT * FROM Benutzerdaten WHERE Nickname = '{$_POST['name']}' AND Kennwort = '".md5 ($_POST["pwd"])."'";

Ahte auch dadrauf, dass Benutzerdaten gross-geschrieben sein soll (in manchen Eintellungen) wenn es bei CREATE TABLE auch gross-geschrieben worden ist.

Gruß Andrej
 
Ja das md5 verschlüsselte pw was ich mir mit echo $sql ausgeben lassen hab und das inner db stimmen über ein.


MFG Niels
 
@ Andrej Dyck

habe es geändert

nun kommt:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /srv/www/web1/html/nielsmaseberg/admin/login.php on line 22

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/web1/html/nielsmaseberg/admin/login.php:19) in /srv/www/web1/html/nielsmaseberg/admin/login.php on line 38

MFG Niels
 
Headymaster hat gesagt.:
@ Andrej Dyck

habe es geändert

nun kommt:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /srv/www/web1/html/nielsmaseberg/admin/login.php on line 22

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/web1/html/nielsmaseberg/admin/login.php:19) in /srv/www/web1/html/nielsmaseberg/admin/login.php on line 38

MFG Niels
Hallo!

Der Fehler oben sagt aus, dass deine SQL-Query auf einen Fehler läuft!
Nutze einfach mal mysql_error() und mysql_errno()!

Dann solltest du deinen Fehler schnell finden!

P.S.: Nutze auch error_reporting(E_ALL);

Ciao
Someday87
 
Zurück