Portal > Foren > PHP > PHP-Programmierung > Templatesytem und sessionbasierender Login
Antwort
 
Themen-Optionen
Alt 22.03.2007, 17:53 Nach oben    #1
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard Templatesytem und sessionbasierender Login

Hallo,
ich hab leider nicht soviel Ahnung von PHP und wenn es dann auch noch um Templatesysteme geht, schnall ich sowieso nur noch ganz wenig *gg*
Mein Problem ist folgendes -->
Ich würde gern einen sessionbasierenden Login in das Templatesystem von Corvin einbauen, nur weiß ich nicht genau wie ich das nun machen soll... Das einzigste was ich bekomme sind Fehlermeldung wie z.B.

Warning: Cannot modify header information - headers already sent by (output started at .X.X.X./config.inc.php:22) in .X.X.X.X./validateLogin.inc.php on line 48

Könnte mir bitte jemand erklären wie ich die Dateien "einbinden" muss ?
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 17:57 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Das Eine hat mit dem Anderen ja nicht wirklich etwas zu tun.
Die Fehlermeldung ist leicht erklärt:
http://php-faq.de/q/q-fehler-header.html
bzw.
http://php-faq.de/q/q-fehler-session-cookie.html

Wo willst du denn da was genau "einbinden"?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:12 Nach oben    #3
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Naja ich hab es jetzt so das ich eine Navigation links habe (mit request und switch/case fals das wichtig ist ) über die man auf der rechten Seite dann den Content verändern kann.. nun möchte ich unter der Navigation noch ein Login. Der Login sollte vom Sinn her ähnlich wie in einem Forum sein.. man meldet sich an und hat dann auf bestimmte Bereiche (die in der Navigation stehen) Zugriff. Also alles in allem möchte ich das Loginscript komplett in das Templatesystem einbauen.
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:13 Nach oben    #4
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Warning: Cannot modify header information - headers already sent by (output started at .X.X.X./config.inc.php:22) in .X.X.X.X./validateLogin.inc.php on line 48
Kannst du englisch? Wenn ja, dann lies dir doch einfach mal die Fehlermeldung genau durch - dann wirst du festestellen, dass bevor man irgendwelche header() daten mittels PHP modifiziert, man kiene Ausgabe haben darf - und ein einziges Leerzeichen außerhalb von PHP-Code ist auch schon eine Ausgabe.

PHP zeigt dir ja sogar, wo diese Ausgabe stattfindet: config.inc.php Zeile 22.
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:15 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Bezüglich der Fehlermeldung habe ich die Antwort ja schon geliefert.
Ich glaube, dass du aber ein ganz anderes Problem hast. Ein strukturelles Problem.

Einen Login in eine Template-Engine einbauen .. das ist einfach nicht wirklich .. möglich. Das sind zwei komplett verschiedene Schuhe.
Symbolischer Quelltext wäre hier wohl angebracht.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:21 Nach oben    #6
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

@Chr!s: Ja ich kann Englisch nur wenn an der Stelle das Ende des Scriptes ist sprich da das ?> steht und dahinter kein Leerzeichen ist bringt mir auch mein Englisch reichlich wenig...

@Ben: Also um mein Problem nochmal verständlich zu machen... ich hab 0 Plan wie ich ein Login mit den Templates kombiniere, aber irgendwie muss es ja gehen denn Foren laufen ja auch mit Templates Nur ich weiß auch garnicht genau wie und wo ich Anfangen soll...
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:39 Nach oben    #7
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 426
Standard

@Ben:
Ich glaube, er mein das Login-Form in ein ein Template rein zu packen.
Und das ist mit bisschen nachdenken sehr einfach.

Man braucht ne Funktion/Klasse, die einem den HTML-Code für das Login-Form erstellt, und es als Variable zurückgibt.
Im Template (zb. vom Navigator) steht dann ein {!login!} und im Script, der das Template zusammen setzt, ersetzt man das {!login!} durch $login_form (<= da drin steht der HTML-Code für den Login), uind das wars.

Aber ein Templatesystem und ein Loginsystem zusammen zu bauen... geht nicht. Sind ja zwei Systeme, und wenn man das auf Politik überträgt, versuch mal ne Demokratie und ne Diktatur zusammen zu stecken.. geht nicht, sind ja auch zwei verschiedene Systeme.
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:39 Nach oben    #8
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Prinzipiell müsstest du den HTML-Code, der in dem SessionLogin-Tutorial ausgegeben wird per Template-Engine ausgeben.

Du hast eine Datei, index.php zum Beispiel. Und da baust du dann beide Sachen ein. Nicht das Eine in das Andere.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:43 Nach oben    #9
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Also müsste ich die Dateien eines Loginscripts zusammengefasst in die index.php einbauen?
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:44 Nach oben    #10
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Damit wir mal klarer sehen. Ist dein sessionbasiertes Loginsystem das von Ben? [PHP] Ein sessionbasiertes Loginsystem

Wenn ja, dann könnte es sein, dass irgendwo (wie oben schon beschrieben) im Code ein Leerzeichen drin ist, am besten einfach alle Dateien vom Loginsystem durchgehen und schauen ob du was findest

Sollte dem nicht so sein, freuen wir uns auf guten Quellcode in [php][/php] Tags und schön eingerückt
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 18:52 Nach oben    #11
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Ja genau es ist der von Ben und ich weiß jetzt eben nur nicht wie ich sowas mit dem Template-System zusammenbringe. Muss ich dort alle Dateien zusammenfassen und in die Index schreiben oder nur bestimmte Teile mit in die Index schreiben oder oder oder
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 19:13 Nach oben    #12
leftover when bar closes
 
Benutzerbild von dsxs
 
Registriert seit: 29.06.2006
Ort: Bern
Beiträge: 123
Standard

Hey bl-25

Ich glaube, Du solltest Dich zuerst mit den Grundlagen von Templatesystemen vertraut machen.

Als Templatesystem empfehle ich Dir nicht das von Ben, sondern Smarty - sehr eifnach für den Einstieg, später beliebig erweiterbar, und Du findest online genügend Informationen, um Deine Fragen zu beantworten.

Smarty gibts unter http://smarty.php.net

Alles runterladen und gemäss den Installationsanweisungen alle Files oberhalb des Webrootverzeichnisses hochladen.

http://smarty.php.net/crashcourse.php -> ein kleiner Crashcourse, wie überhaupt der PHP Code und ein Templatesystem zusammenarbeiten.
__________________
Unkraut ist die Opposition der Natur gegen die Regierung der Gärtner.
ticketbörse

dsxs ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 19:15 Nach oben    #13
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Vielen Dank ich guck mir das mal an denn Template-Systeme sind für mich völliges Neuland
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 19:28 Nach oben    #14
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Kann ich so nicht stehen lassen.
Zitat:
Zitat von dsxs Beitrag anzeigen
Als Templatesystem empfehle ich Dir nicht das von Ben, sondern Smarty - sehr eifnach für den Einstieg, später beliebig erweiterbar, und Du findest online genügend Informationen, um Deine Fragen zu beantworten.
1. Ist die Template-Engine von Corvin.
2. Ist sie nur da, um zu demonstrieren, wie man es theoretischen selbst machen könnte.
3. Gibt es zu der Engine hier prompte Hilfe!!!
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 19:30 Nach oben    #15
leftover when bar closes
 
Benutzerbild von dsxs
 
Registriert seit: 29.06.2006
Ort: Bern
Beiträge: 123
Standard

Eben, das meinte ich - schön langsam

Versuche, einmal folgendes zu realisieren.

- Smarty installieren (wie gesagt ausserhalb des Webroots... Die beigelegte Anleitung ist gut verständlich, einfach der folgen).

- Danach erstellst Du eine Datei, die du content.tpl nennst, mit folgendem Inhalt:

Code:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>{$title}</title>
</head>

<body>
<b>Titel ist: {$title}
</body>
</html>
Diese Datei speicherst Du per FTP im Verzeichnis ./smarty/templates


Dann machst Du noch eine Datei, welche Du smarty_test.php nennst, die sieht dann so aus:

PHP-Code:
<?php
// achtung leerzeichen vor <?php, wenn Dus hier ausm Forum rauskopierst!

// set up smarty engine
define("__SMARTY__","/home/bl_25/pfadzusmarty/",TRUE);

require_once(
__SMARTY__.'Smarty.class.php');
$smarty = new Smarty();

$smarty->template_dir '__SMARTY__.templates';
$smarty->compile_dir '__SMARTY__.templates_c';
$smarty->cache_dir '__SMARTY__.cache';
$smarty->config_dir '__SMARTY__.configs';
$smarty->caching FALSE;

if (!isset(
$_GET['title'])) {
  
$smarty->assign('title','unbekannt');
} else {
  
$smarty->assign('title',$_GET['title']);
}

$smarty->display('content.tpl');

?>
Nun ruf mal die URL deinweb.de/smarty_test.php auf

Zuerst steht im Titel "unbekannt". Wenn Du nun hinter den Dateinamen ?title=smaaaaaarty schreibst, dann übernimmt Dein PHP Code entsprechend die Übermittlung an die Smarty Engine, welche die Seite, {title} ersetzt durch den Wert, welchen Du per $smarty->assign übergeben hast, ausgibt.


Ein sehr einfaches Beispiel, welches für den Anfang mal zeigen soll, die PHP Code und HTML Code vollständig getrennt werden können.

! Wie jemand schon vorher bemerkt hat, ist es NICHT ratsam, per GET Dinge zu verarbeiten oder direkt ans Template/Datenbank/Dateisystem weiterzuleiten, ohne vorherige Überprüfung oder "Reinigung". Vorsichtig damit


[EDIT]

Das war überhaupt nicht gegen das Template System an sich. Das Templatesys von Dir resp. Corvin, sorry, ist bestimmt hilfreich für Leute, die ein eigenes Coden wollen. Zum lernen machts aber alles nur noch wirrer im Kopf...
__________________
Unkraut ist die Opposition der Natur gegen die Regierung der Gärtner.
ticketbörse


Geändert von dsxs (22.03.2007 um 19:33 Uhr). Grund: Ben wollte noch was melden... :)
dsxs ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 19:32 Nach oben    #16
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Eigentlich hackts ja nur am Login. Alles andere hab ich bis jetzt ganz gut hinbekommen und auch das mit dem GET hab ich geändert :-P

Geändert von bl-25 (22.03.2007 um 19:36 Uhr).
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 21:47 Nach oben    #17
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Zitat:
sondern Smarty - sehr eifnach für den Einstieg
haha sorry, aber ich habe noch keine überladene Software gesehen die für nen Anfänger leicht war.
Ein Anfänger lernt in kleinen Schritten und es bringt ihm nix wenn er weiß dass die Methoden in der Reihenfolge aufgerufen werden muss damit am Ende "Hello World" da steht.
Er muss auch wissen was die Methoden genau machen und wie sie es machen.

Und deswegen finde ich es gut, dass er diese beiden Tutorials als Basis nimmt um es zu lernen.

@bl-25: Poste hier mal den Quellcode den du hast. Dann können wir dir besser helfen Brauchst jetzt aber nicht die Codes vom Loginsystem oder dem Templatesystem zu posten, die haben wir ja
Sondern nur mal den rest, also deine index.php oder was auch immer
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 22:37 Nach oben    #18
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Meine jetzige nicht funktionierende
index.php
PHP-Code:
<?php
session_start
();

// Das Templatesystem einbinden
include("template.class.php");
// Config einbinden
include_once 'admin/config.inc.php';

// Eine neue Instanz der Template Klasse erzeugen
$tpl = new Template();

// Das Template laden
$tpl->load("index.tpl");


/*------------ Login Anfang ------------*/
if( isset($_POST['username'], $_POST['passwort'])
        AND
        
strcmp(trim($_POST['username']),'') != 0
        
AND
        
strcmp(trim($_POST['passwort']),'') != ) {
    

// 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
                           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:'.$_config['domain'].'/index.php?se=loginfehler' );
              exit();
          }
          else {

             
$_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
                              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 

             
header'Location: '.$_config['domain'].'/index.php' );
             exit();
          }

    }
    else {
    
          
header'Location: '.$_config['domain'].'/index.php' );
          exit(); 
    }
    
/*------------ Login Ende ------------*/


//Content-Seite zuweisen
if (isset($_REQUEST['se'])) {
  switch (
$_REQUEST['se']) {
  
    case 
'home'$tpl->assign("content",'{include file="home.tpl"}');
        break;
                
    default:     
$tpl->assign("content",'{include file="nosite.tpl"}');
        break;
    }

else
{
$tpl->assign("content",'{include file="home.tpl"}');
}

// Dem Platzhalter {$titel} den Text "Willkommen" zuweisen
$tpl->assign("title""Willkommen");

// Dem Platzhalter $name den Text "Benutzer" zuweisen
$tpl->assign("name""Benutzer");

// Dem Platzhalter $time den aktuellen Timestamp zuweisen
$tpl->assign("time"time());


// Die Sprachdatei laden

if (isset($_REQUEST['lang'])){
switch (
$_REQUEST['lang']) {

case 
'de'$langs[] = "de/lang_main.php";
break;

case 
'fr'$langs[] = "fr/lang_main.php";
break;

case 
'en'$langs[] = "en/lang_main.php";
break;

default: 
$langs[] = "de/lang_main.php";
    }
}
else{
$langs[] = "de/lang_main.php";}

$lang $tpl->loadLanguage($langs);

// Und das fertige Template ausgeben
$tpl->out();
?>
config.php
PHP-Code:
<?php
    
// Array initialisieren ...
    
$_config = array();

    
// ... und mit Werten füllen

    //Domainname 
    
$_config['domain'] = 'http://XXX.XXX.de';
    
    
//Datenbankserver - Host
    
$_config['host'] = 'XXXX';  

    
//Benutzer
    
$_config['user'] = 'XXXX';        

    
//Passwort.
    
$_config['password']  = 'XXXX'

    
//Name der Datenbank
    
$_config['database'] = 'XXXX';

?>
und nun erschießt mich nicht gleich mit Sprüchen wie "gebs lieber auf" oder ähnliches ich weiß ,dass das auch total falsch sein kann ,dass ist ja nur ein Versuch..
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 22:41 Nach oben    #19
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ich schau mir das an sobald mein xampp runtergeladen ist (pc neu installiert), kann noch dauern, sourceforge ist langsam, aber ich teste dass dann mal und sag dir bescheid

// edit:
10kb/s ... das dauert ne stunde! egal dann bin ich solange baden
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 22:45 Nach oben    #20
Benutzer
 
Registriert seit: 18.03.2007
Beiträge: 38
Standard

Jo lass dir Zeit
bl-25 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen