Neu beim PHP und HTML Programmieren

Athrius

Grünschnabel
Hallo zusammen,

ich habe hier eine Login-Seite geschrieben und bekomme es einfach nicht hin das ich danach in einen Sicheren Bereich weitergeleitet werde... habe jetzt schon dutzende von Beiträgen und Anleitungen gelesen, ich denke jedoch das ich irgendwo im Code noch Fehler habe, und es daher nicht geht.... da ich gerade angefangen habe(blutiger Anfänger bin) verliere ich grade den Überblick!

Könnt ihr mir helfen? :

CODE:

<html>
<title>LoginBackoffice</title>
<head>
</head>
<body Style=bgcolor:#000000 Face=verdana>
<?php
$_db_host = "localhost";
$_db_datenbank = "pinoykaswitzerland";
$_db_username = "root";
$_db_passwort = "pinoyka";

SESSION_START();

$link = mysql_connect($_db_host, $_db_username, $_db_passwort);

if (!$link)
{
die("Keine Datenbankveribindung möglich: " .mysql_error());
}

$datenbank = mysql_select_db($_db_datenbank, $link);

if (!$datenbank)
{
echo "Kann die Datenbank nicht öffnen: " .mysql_error();
mysql_close($link);
exit;
}
mysql_close($link);
?>

<?php if (!empty($_POST["submit"])) {

$_username = mysql_real_escape_string($_POST["username"]);
$_passwort = mysql_real_escape_string($_POST["passwort"]);
$_sql = "SELECT * FROM pinuserbo
WHERE username='$_username' AND
passwort='$_passwort' AND
deleted=0
LIMIT 1";
$_res = mysql_query($_sql, $link);
$_anzahl = @mysql_num_rows($_res);


if($_anzahl >0) {

echo "Der Login war erfolgreich.<br>";
$_SESSION["login"] = 1;
$_SESSION["user"] = mysql_fetch_array($_res, MYSQL_ASSOC);
$_sql = "UPDATE pinuserbo
SET logintime=NOW()
WHERE id=".$_SESSION["user"]["id"];
mysql_query($_sql);


}
else
{
echo "Die Logindaten sind nicht korrekt.<br>";
}

if (mysql_num_rows($result) == 1) {
$_SESSION['login'] = true;
$status = "Du bist eingeloggt als <strong>$user</strong>!";
header ("Location: weiterleitung.php");
}

if ($_SESSION["login"] ==0)
{
include("PinoyKa_Backoffice.html");
mysql_close($link);
exit;
}

}
<?


</body>
</html>

danke vielmal!

Beste Grüsse

Athrius
 
Hallo erstmal im Forum!

Kommen wir nun zu deinen Fehlern:
  1. session_start(); muss vor der ersten Ausgabe an den Bildschirm, bestenfalls als Allererstes in einem Skript aufgerufen werden.
  2. PHP achtet auf die Groß- und Kleinschreibung. Deshalb funktioniert SESSION_START() nicht, weil es session_start() heißen muss.
  3. Ansonsten schließt du deine Datenbankverbindung, direkt nachdem du sie geöffnet hast.
  4. Deine Sauberkeit und Struktur von HTML-Tags und -Eigenschaften sowie dein PHP-Code lassen noch zu wünschen übrig, aber das wird noch.
  5. Dein Skript sollte größtenteils vor der ersten Bildschirmausgabe ausgeführt werden und nicht immer mal wieder zwischen durch.
  6. Für's Forum: nutze bitte die entsprechenden UBB-Tags!
So könnte dein Quellcode aussehen:
PHP:
<?php
  # Sitzung starten
  session_start();
  
  # Verbindungsdaten
  $database = array(
    'hostname' => 'localhost',
    'database' => 'pinoykaswitzerland',
    'username' => 'root',
    'password' => 'pinoyka',
  );
  
  $connection = mysql_connect(
      $database['hostname'],
      $database['username'],
      $database['password']
    ) or die(
      'Verbindungsaufbau fehlgeschlagen (#' . mysql_errno() . '): ' . mysql_error()
    );
  
  mysql_select_db(
      $database['database'],
      $connection
    ) or die(
      'Datenbankauswahl fehlgeschlagen (#' . mysql_errno() . '): ' . mysql_error()
    );
  
  # Bereits angemeldet
  if(isset($_SESSION['user'])) {
    header('Location: weiterleiten.php');
  # Anmelden
  } elseif(!empty($_POST['submit'])) {
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);
    
    $sql = 'SELECT * FROM pinuserbo WHERE username = "' . $username . '" AND password = "' . $password . '" AND deleted = 0';
    
    # Gültige Nutzerdaten
    if((($result = mysql_query($sql)) !== false) && (mysql_num_rows($result) > 0)) {
      $_SESSION['user'] = mysql_fetch_assoc($result);
      
      $sql = 'UPDATE pinuserbo SET logintime = NOW() WHERE id = "' . $_SESSION['user']['id'] . '"';
      mysql_query($sql);
      header('Location: weiterleiten.php');
    }
  }
?>
<!DOCTYPE html>
<html>
<head>
  <title>LoginBackoffice</title>
  <style type="text/css">
    body {
      background-color: #000000;
      font-face: Verdana;
    }
  </style>
</head>
<body>
  <?php
    if(empty($_POST['submit'])): 
      include 'PinoyKa_Backoffice.html';
    elseif:
  ?>
  Logindaten sind nicht korrekt!
  <?php endif; ?>
</body>
</html>
 
Zuletzt bearbeitet:
Hallo und willkommen im Forum.

Bitte verwende das nächste mal die Code-Tags für Source-Code, den du zeigen willst. Hier im PHP-Forum kannst du dazu [code=php] und sein Abschluss-Tag verwenden.

Zu deinem Problem:

1. Du hast in Zeile 76 das PHP-Short-Open-Tag verwendet, aber eigentlich sollte da das Close-Tag ?> sein.

2. Verwende die Fehler-Anzeige von PHP:

PHP:
// Füge mich in die erste Zeile des Scripts ein
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

3. Du kannst header() nicht mehr verwenden, wenn schon Ausgaben an den Browser gemacht wurden. Das wäre dir sofort aufgefallen, wenn die wie in 2. die Fehleranzeige aktiviert hättest.

4. mysql_num_rows() erfordern eine gültige Ergebnis-Menge, was dir aufgefallen wäre, wenn du in 2. die Fehler-Anzeige aktiviert hättest.

5. Hier mal ein korrigierter Versuch:

PHP:
<?php 
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);

// Aktiviere Output-Buffering um header() zu ermöglichen
ob_start();
?>
<html>
<title>LoginBackoffice</title>
<head>
</head>
<body Style="bgcolor: #000000" Face=verdana>
<?php
$_db_host = "localhost";
$_db_datenbank = "pinoykaswitzerland";
$_db_username = "root";
$_db_passwort = "pinoyka";

SESSION_START();

$link = mysql_connect($_db_host, $_db_username, $_db_passwort);

if (!$link)
{
	die("Keine Datenbankverbindung möglich: " .mysql_error());
}

$datenbank = mysql_select_db($_db_datenbank, $link);

if (!$datenbank)
{
	echo "Kann die Datenbank nicht öffnen: " .mysql_error();
	mysql_close($link);
	// Ausgaben zum Browser senden
	ob_end_flush();
	exit;
}

if (!empty($_POST["submit"])) {
	$_username = mysql_real_escape_string($_POST["username"]);
	$_passwort = mysql_real_escape_string($_POST["passwort"]);
	$_sql = "SELECT * FROM pinuserbo
      WHERE username='$_username' AND
      passwort='$_passwort' AND
      deleted=0
      LIMIT 1";
	$_res = mysql_query($_sql, $link);
	$_anzahl = @mysql_num_rows($_res);


	if($_anzahl >0) {
		echo "Der Login war erfolgreich.<br>";
		$_SESSION["login"] = 1;
		$_SESSION["user"] = mysql_fetch_array($_res, MYSQL_ASSOC);
		$_sql = "UPDATE pinuserbo
      SET logintime=NOW()
      WHERE id=".$_SESSION["user"]["id"];
		$result = mysql_query($_sql);

		if (mysql_num_rows($result) == 1) {
			$status = "Du bist eingeloggt als <strong>$user</strong>!";
			header ("Location: weiterleitung.php");
			die();
		}
	}
	else
	{
		echo "Die Logindaten sind nicht korrekt.<br>";
	}

	if (!isset($_SESSION["login"]) || $_SESSION["login"] == 0)
	{
		include("PinoyKa_Backoffice.html");
	}
	
	mysql_close($link);
	// Ausgaben zum Browser senden
	ob_end_flush();	
}
?>
</body>
</html>

Sorry, wenn das alles hier etwas rechthaberisch klingt, aber ich will dir als blutiger Anfänger gleich die Fallstricke von PHP aufzeigen, und wie du sie erfolgreich meistern kannst.
 
Vielen Dank euch beiden für die Hilfestellung... ich bin sehr sehr dankbar dafür, wenn mir direkt und ehrlich geholfen wird. Selbst wenn es etwas ruppig sein sollte. Nur so kann ich direkt lernen und mich verbessern!

nochmals vielen Dank, ich teste das jetzt mal und schreibe es als Lerneffekt selbst nochmal neu!
Und werde die Fehlerausgabe aktivieren!

Danke!

Grüsse

Athrius
 
Ich glaube ich habe bei der Login oberfläche auch noch einen fehler.... ich habe bei mir einen simplen Appache Server am laufen und dort eine MyPhp Datenbank erstellt. In dieser verknüpfe ich von mir eingegeben Benutzer mit dem Backoffice.

Jetzt habe ich den unten stehenden Code für das Login geschrieben (table) aber irgendwie leitet es mich immer auf eine leere Seite. login.php.... habe ich was beim redirect oder besser beim header falsch gemacht?

Danke nochmals... wenn ich das habe kann ich beruhigt in den Urlaub gehen hehe.... :D

Grüsse

PHP:
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#EAC117">
	<tr>
		<form name="login.php" method="POST" action="login.php">
		<td>
		<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#000000">
	<tr>
		<td colspan="3"><strong>BOPI</strong></td>
	</tr>
	<tr>
		<td width="78" ><Font Style=color:#EAC117>Username</td></font>
		<td width="6">:</td>
		<td width="294"><input name="username" type="text"></td>
	</tr>
	<tr>
		<td><Font Style=color:#EAC117>Passwort</td></font>
		<td>:</td>
		<td><input name="passwort" type=password></td>
	</tr>
		<tr>
		<td>&nbsp;</td>
		<td>&nbsp;</td>
		<td><input type="submit" name="Submit" value="Login"></td>
	</tr>
</table>
	</td>
</form>
</tr>
</table>
 
Die login.php ist also leer bzw. weiß. Hast du die Fehler-Anzeige dort drinnen aktiviert? Ist der Code, den du zuerst gepostet hast die login.php?

Wenn du XAMPP verwendest, sollte evtl. eine error.log auf deinem System liegen unter {XAMPP-Installationsordner}\apache\logs.
 
Ich habe mal deinen Quelltext ausgebessert. Tabellen sollte man niemals als Grundgerüst seiner Webseite nutzen. Außerdem solltest du in Zukunft darauf achten, wie, wann, wo und in welcher Reihenfolge du HTML-Tags öffnest und schließt.
HTML:
<!DOCTYPE html>
<html>
<head>
  <title>Login</title>
  <style type="text/css">
    #login {
      width: 300px;
      border: none;
      background-color: #EAC117;
    }
    
    #login fieldset {
      border: none;
      padding: 3px;
      width: 100%;
      background-color: #000000;
    }
    
    #login div {
      padding: 5px;
    }
    
    #login fieldset:after {
      clear: both;
    }
    
    #login label {
      display: block;
      float: left;
      width: 100px;
      height: 10px;
      color: #EAC117;
    }
  </style>
</head>
<body>
  <form id="login" method="post" action="login.php">
    <fieldset>
      <div>
        <label id="label-username" for="input-username">Nutzername:</label>
        <input id="input-username" name="login[username]" type="text" />
      </div>
      <div>
        <label id="label-password" for="input-password">Kennwort:</label>
        <input id="input-password" name="login[password]" type="password" />
      </div>
      <div>
        <label id="label-submit" for="input-submit"></label>
        <input id="input-submit" name="login[submit]" type="submit" value="Absenden" />
      </div>
    </fieldset>
  </form>
</body>
</html>

Anmerkung: In der Variante jetzt kommen deine Daten so an:
Code:
$_POST = array('login' => array('username' => ?, 'password' => ?))
Anmerkung II: IDs, Klassennamen und Namen von Elementen dürfen in HTML keine Punkte enthalten. Beschränke dich am besten auf Buchstaben, Zahlen, Unterstriche und Striche. Und bei input-Elementen sind auch noch öffnende und schließende eckige Klammern gültig für Arrays.
 
Zuletzt bearbeitet:
hallo zusammen,

ich bin zurück aus meinem Asia - Philippinen Urlaub :D und voller Tatendrang endlich mein Login script fertig zu bekommen... ich glaube jedoch das es bei mir an den Grundlagen mangelt, denn ich schaffe es nicht mal einen einfachen Eintrag in die Datenbank zu machen.

ich habe also nochmal von vorn angefangen und bisher folgende zwei php files angelegt.
Login.php:

PHP:
<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1); 
// Session starten
session_start ();

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

$sql = "SELECT ". 
    "id, benutzer, nachname, vorname, deleted ". 
  "FROM ". 
    "bologin ". 
  "WHERE ". 
    "(benutzer like '".$_REQUEST["benutzer"]."') AND ". 
    "(passwort = '".md5 ($_REQUEST["passwort"])."') AND ".;
$result = mysql_query ($sql); 

if (mysql_num_rows ($result) <0)
{ 
  $data = mysql_fetch_array ($result); 

   
  $_SESSION["user_id"] = $data["id"]; 
  $_SESSION["user_benutzer"] = $data["benutzer"];
  $_SESSION["user_nachname"] = $data["nachname"]; 
  $_SESSION["user_vorname"] = $data["vorname"];  

  header ("Location: Backoffice_index.php"); 
} 
else 
{ 
  header ("Location: BackofficePinoyKa.php?fehler=1"); 
} 
?>

und noch die Mainpage BackofficePinoyKa.php:

PHP:
<?php session_start (); 
?> 
<html>
<head>
<title>PinoyKa Switzerland/Backoffice
</title>
</head>
<body bgcolor="#000000">
<?php 
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Die Zugangsdaten waren ungültig."; 
} 
?>
	<p align=center><Font Face=verdana style=color:#EAC117>Welcome at the PinoyKa Backoffice</font></p>
	<p align=center><Font Face=verdana style=color:#EAC117>Willkommen im PinoyKa Büro</font></p>
	<p align=center><Font Face=verdana style=color:#EAC117>Maligayang pagdating sa PinoyKa sa Backoffice</font></p>
	<img style="margin-left:650px;" style width="600px"style height="600" src="Pinoyka_LOGO_Supernova.jpg">
<form action="Login.php" method="Post">
  <p align=center><Font Face=verdana style=color:#EAC117>Name <input style="margin-left:31px;" type="text" name="benutzer" size="20" ></font></p>
  <p align=center><Font Face=verdana style=color:#EAC117>Kennwort <input type="password" name="passwort" size="20"></font></p>
  <p align=center><input type="submit" value="Login"></p>
</form>
</body>
</html>

ich habe auch nochmal eure tipps und antworten durchgelesen und mich daran gerichtet... jedoch laufe ich immer wieder auf das gleiche Problem... es leitet mich nicht weiter.

ich weiss das ich was falsch mache, komme aber selber nicht darauf... vielen Dank für eure Tipps.

Grüsse

Athrius
 
PHP:
<?php
	if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
		$uri = 'https://';
	} else {
		$uri = 'http://';
	}
	$uri .= $_SERVER['HTTP_HOST'];
	header('Location: '.$uri.'/xampp/');
	exit;
?>
Something is wrong with the XAMPP installation :-(

ich glaube das Problem liegt hier, der Errorlog sagt folgendes:

[Mon Aug 01 00:22:11 2011] [error] [client 192.168.1.45] PHP Notice: Undefined index: HTTP_HOST in C:\\xampp\\htdocs\\index.php on line 7

wisst ihr wie ich das beheben kann?

Grüsse und danke

Athrius
 
Hallo Athrius,

bitte sei mir nicht böse, aber hast du dir überhaupt schon mal Gedanken über valides und ordentliches html gemacht?
Bevor du anfängst php sicher zu programmieren solltest du html beherrschen.

Arbeite dich durch das html Tutorial mal von Anfang bis Ende komplett durch.
Das Tutorial findest du hier:
http://de.selfhtml.org/


Danach solltest du ein php-Tutorial machen, in dem zunächst alle Grundlagen erläutert werden, z.B. der Unterschied zwischen $_GET, $_POST, und $_REQUEST.
Ein Passwort darf auf keinen Fall im $_REQUEST landen, da dies auch eine Übergabe via $_GET ermöglichen würde. Und das ist äusserst unsicher, weil die url ja einsehbar ist.
Da php eine Serverseitige Skriptsprache ist musst du hier auf Sicherheit achten.

SQL-Abfragen müssen zudem immer mit real_escape_string vor Injections geschützt werden.
PHP:
<?php
// Verbindung herstellen
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    OR die(mysql_error());

// Anfrage erstellen
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
?>
siehe http://php.net/manual/de/function.mysql-real-escape-string.php


Ich hoffe ich konnte dir ein paar Tipps geben.
 
Zurück