Login Script Problem

Black Angel

Mitglied
Bin gerade dabei ein Login Script zusammen zu stellen.
Allerdings bekomme ich folgenden Fehler beim klick auf "Login":
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in D:\xampp\xampp\htdocs\xxx\pages\login.php on line 19
Ein Fehler ist aufgetreten

Der PHP Code in der login.php:
PHP:
<?php 

// Datenbankverbindung aufbauen 
$connectionid = mysql_connect ("xxx", "root", "xxx"); 
if (!mysql_select_db ("projekt", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

$sql = "SELECT ". 
    "Id, E-Mail, Nachname, Vorname ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(E-Mail like '".$_REQUEST["email"]."') AND ". 
    "(Kennwort = '".md5 ($_REQUEST["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["email"] = $data["email"]; 
  $_SESSION["user_nachname"] = $data["Nachname"]; 
  $_SESSION["user_vorname"] = $data["Vorname"]; 

  header ("Location: intern.php"); 
} 
else 
{ 
  echo "Ein Fehler ist aufgetreten";
} 
?>

Und in der form.php (Login Formular):
PHP:
<html> 
<head> 
  <title>Login</title> 
</head> 

<body> 
<?php 
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Die Zugangsdaten waren ungültig."; 
} 
?> 
<form action="?s=login" method="post"> 
  E-Mail: <input type="text" name="email" size="20"><br> 
  Kennwort: <input type="password" name="pwd" size="20"><br> 
  <input type="submit" value="Login"> 
</form> 
</body> 
</html>

Ich hoffe mir kann jemand helfen :(
 
Hi,

offensichtlich schägt mysql_query() hier fehl. Baue mal folgendes vor dem mysql_num_rows() ein:

PHP:
if (!$result) {
  die(mysql_error());
}

Dann sollte dir eine Fehlermeldung angezeigt werden. Mein erster Tipp fällt auf die Spalte "E-Mail"...

Best regards
 
Hi,

$_REQUEST sollte nicht mehr verwendet werden, du gibst im Formular als Übertragungsmethode "post" an, also empfang sie auch als $_POST.

Die Fehlermeldung besagt, das es keine Rückgabe bekommt weil sich wo ein Fehler eingeschlichen hat.
Desweiteren sollte man die Felder in den Tabellen im Query mit `Feld` angeben.
ICh hab dir das Script mal berichtigt, so sollte eine vernünftige Ausgabe kommen.
PHP:
<?php 

// Datenbankverbindung aufbauen 
$connectionid = mysql_connect ("xxx", "root", "xxx"); 
if (!mysql_select_db ("projekt", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 

$sql = "SELECT 
    `Id`, `E-Mail`, `Nachname`, `Vorname` 
  FROM 
    `benutzerdaten` 
  WHERE  
    `E-Mail` LIKE '".$_POST['email']."' AND
    `Kennwort` = '".md5 ($_POST['pwd'])."'"; 

$result = mysql_query ($sql) or die (mysql_error()); 

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["email"] = $data["email"]; 
  $_SESSION["user_nachname"] = $data["Nachname"]; 
  $_SESSION["user_vorname"] = $data["Vorname"]; 

  header ("Location: intern.php"); 
} 
else 
{ 
  echo "Ein Fehler ist aufgetreten";
} 
?>
 
Habe aber gleich noch eine Frage:
Folgender Fehler bei der test.php
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\xampp\xampp\htdocs\rsk projekt\index.php:11) in D:\xampp\xampp\htdocs\xxx\inc\checkuser.php on line 2

Warning: Cannot modify header information - headers already sent by (output started at D:\xampp\xampp\htdocs\rsk projekt\index.php:11) in D:\xampp\xampp\htdocs\xxx\inc\checkuser.php on line 5
BenutzerId:
E-Mail:
Nachname:
Vorname:

test.php
PHP:
<?php 
include ("inc/checkuser.php"); 
?> 
<html> 
<head> 
  <title>Interne Seite</title> 
</head> 
<body> 
  BenutzerId: <?php echo $_SESSION["user_id"]; ?><br> 
  E-Mail: <?php echo $_SESSION["email"]; ?><br> 
  Nachname: <?php echo $_SESSION["user_nachname"]; ?><br> 
  Vorname: <?php echo $_SESSION["user_vorname"]; ?> 
  <hr> 
  <a href="logout.php">Ausloggen</a> 
</body> 
</html>

index.php
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>xxx</title>
<link rel="stylesheet" href="style.css" type="text/css">
<link rel="stylesheet" type="text/css" media="screen" href="css/stylesheet.css" />
</head>

<body>
<?PHP include("./inc/navi.inc.php"); ?><br />
<?PHP
					$includeDir = ".".DIRECTORY_SEPARATOR."pages".DIRECTORY_SEPARATOR;
			$includeDefault = $includeDir."home.php";
			$include404 = $includeDir."404.php";
			
			if(isset($_GET['s']) && !empty($_GET['s']))
			{
			
				$_GET['s'] = str_replace("\0", '', $_GET['s']);
				$includeFile = basename(realpath($includeDir.$_GET['s'].".php"));
				$includePath = $includeDir.$includeFile;
				
				if(!empty($includeFile) && file_exists($includePath)) 
				{
					include($includePath);
				}
				else 
				{
				include($include404);
				}

			} 
			else 
			{
				include($includeDefault);
			}
		?>
</body>
</html>

navi.inc.php
PHP:
<center>
<ul class="menu" style="padding-left:37%;">
  <li><a href="?s=home"><span>Home</span></a></li>
  <li><a href="?s=wir"><span>Über Uns</span></a></li>
  <li><a href="?s=blog" class="active"><span>Blog</span></a></li>
</div> 
</center>

checkuser.php
PHP:
<?php 
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: ?s=form"); 
} 
?>
 
session_start() muss am Anfang jeder Datei stehen welches die Session verwendet. Davor !darf! keine Ausgabe stattfinden. Du bindest die test.php in deine index.php ein, also ist davor eine Ausgabe.
Bei header() ist das selbe. Du könntest Outputbuffering verwenden um dein Problem mit header() zu umgehen. session_start() dagegen einfach in jede Datei gleich unter <?php
 
Oder was ich immer mach in meinen Index.php ganz oben session_start() und dann das ganze mit einer switch

<?php

switch($_GET['site'])
{
case 'forum': include "include/forum.php"; break;

}
?>
dann brauch man das nicht Dan muss man auch nicht immer den desine css code und htm code mit schreiben

hier mal mein index.php

<?php
session_start();
?>
<title>Matthias</title>
<link rel="stylesheet" type="text/css" href="1.css" />
<link rel="stylesheet" type="text/css" href="Format.css" />
<center><img src="img/header.png" ></center>
<center>
<a href="index.php?site=forum">Forum</a>

<?php
If (isset($_SESSION['username']))//prüfe ob user eingelogt
{
echo'<a href="index.php?site=Logout">Logout</a>"';

}else
{
echo '<a href="index.php?site=Login">Login</a>"';
}
?>
<?php
If (isset($_SESSION['username']))//prüfe ob user eingelogt
{

}else
{
echo '<a href="index.php?site=Register">Register</a>';
}

?>
</center>
<div id="page">

<?php

switch($_GET['site'])
{
case 'forum': include "Pfart zu php"; break;



}
?>
</div>
 

Neue Beiträge

Zurück