templatesystem - UserProfile und login mit Cookie/Session

kahly

Grünschnabel
Hallo Tutorials Community,
ich ahbe mir hier schon oft hilfe geholt und nun komme ich mit den bestehenden Theman nicht weiter.
es geht um ein eigenens Template system was ich aufbaue(lerne anhan dieses System PhP)

Mein erstes Problem ist der Login,
auf meinen Homeserver(Xampp) geht es sauber mit seesion und cookies,
auf meinem Server (debian5) geht der Login auch aber die Cookies werfen ein error aus,
Header was aleady send,
nunja hier mal der code:
login.php
PHP:
<html>
<head>
<title>Das ist ein test</title>
<?php include 'templates/head.php'; ?>

</head>
<body>
<div id="site">
<?php include 'templates/header.php'; ?>
<?php
if(isset($_SESSION['loggedin']))
{
    die("Du bist schon eingeloggt!");
} // That bit of code checks if you are logged in or not, and if you are, you can't log in again!
if(isset($_POST['submit']))
{

   $username = mysql_real_escape_string($_POST['username']); // The function mysql_real_escape_string() stops hackers!
   $password1 = mysql_real_escape_string($_POST['password']); // We won't use MD5 encryption here because it is the simple tutorial, if you don't know what MD5 is, dont worry!
   $password = md5($password1); //Passwort wird md5 verschlüsselt.
   
   
$sqlusername = 'SELECT username FROM user WHERE username = "'.$username.'"'; //schauen ob es den Usernamen in tabelle user in spalte usernamen gibt.
$resultusername = mysql_query($sqlusername); //ergebnis speichern
$rowsusername = mysql_num_rows($resultusername); //ergebnis bearbeiten
if($rowsusername == 0) //wenn datensatzgefudnen:
   {
     echo "Username und Passwort stimmen nicht überein.";
	 exit;
   }
   
   //password bereits vorhanden?
$sqlusername = 'SELECT password FROM user WHERE password LIKE "'.$password.'"';
$resultusername = mysql_query($sqlusername);
$rowsusername = mysql_num_rows($resultusername);
if($rowsusername == 0)
{
    echo "Username und Passwort stimmen nicht überein.";
	exit;
}
   else {
   

   
   $sql1 = "UPDATE
                        user
                SET
                        

						letzterLogin = '".time()."',
                        IP = '".$_SERVER['REMOTE_ADDR']."'
                        
                        
                WHERE
                        username = '".$username."' AND
                        password = '".$password."'
                ";
        mysql_query($sql1) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
   

 if(isset($_POST['remember'])){
      setcookie("cookname", $username, time()+60*60*24*100, "/");
      setcookie("cookpass", $password, time()+60*60*24*100, "/");
			$sql = "UPDATE
                        user
                SET

                        autoLogin = 1,
						letzterLogin = '".time()."',
                        IP = '".$_SERVER['REMOTE_ADDR']."'
                        
                        
                WHERE
                        username = '".$username."' AND
                        password = '".$password."'
                ";
        mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
   }
      // That snippet checked to see if the number of rows the MySQL query was less than 1, so if it couldn't find a row, the password is incorrect or the user doesn't exist!
   $_SESSION['loggedin'] = "YES"; // Set it so the user is logged in!
   $_SESSION['name'] = $username; // Make it so the username can be called by $_SESSION['name']
   $_SESSION['password'] = $password;
   $name = $_SESSION['name'];
  die("Willkommen $name,<br>danke für deine Anmeldung"); // Kill the script here so it doesn't show the login form after you are logged in!
  

 		
}// That bit of code logs you in! The "$_POST['submit']" bit is the submission of the form down below VV
}
echo "<form type='login.php' method='POST'>
Username: <br>
<input type='text' name='username'><br>
Password: <br>
<input type='password' name='password'><br>
Eingeloggt bleiben?
<input type='checkbox' name='remember'><br>
<input type='submit' name='submit' value='Login'>
</form>"; // That set up the form to enter your password and username to login.
?>
<?php include 'templates/footer.php'; ?>

config.php
PHP:
<?php
$eingeloggt = !isset($_SESSION['loggedin']);
if($eingeloggt)
{ 

}
else {  
$name = "{$_SESSION['name']}";
  }


   if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])){
	  $_SESSION['loggedin'] = "YES";
      $_SESSION['name'] = $_COOKIE['cookname'];
      $_SESSION['password'] = $_COOKIE['cookpass'];
   }

?>
<?php
/*Unsere Seiten*/
$page = array(); 
$page['index'] = 'templates/index.php';
$page['register'] = 'templates/register.php';  
$page['writeregister'] = 'templates/registerwrite.php';  
$page['login'] = 'templates/login.php';
$page['geheim'] = 'templates/geheim.php';
$page['logout'] = 'templates/logout.php';
$page['memberlist'] = 'templates/memberlist.php';
$page['profil'] = 'templates/profil.php';
/* Hier fangen die Variablen an*/
//Verbindung mit Mysql aufbauen.
$verbindung = mysql_connect (
"******", //Ip des Servers.
 "********", //Username.
 "********" //Passwort.
 )
or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch"); // Verbindung fehlgeschlagen?

mysql_select_db("cms") //Datenbank auswählen.
or die ("Die Datenbank existiert nicht."); //Datenbank existiert nicht?


    // Online Status der User aktualisieren
    if(isset($_SESSION['loggedin'])){
        $sql = "UPDATE
                        user
                SET
                        letzteAktion = '".time()."'
                WHERE
                        username = '".$name."'
               ";
        mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
    }
?>

Die seiten werden in eine Index mit get geladen,
index.php
PHP:
<?php 
session_start();
?>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
/*Hier includen wir die config.php in der alle Variablen und Seiten arreys aufgelistet sind.*/ 
include('config.php'); 

/*Hier wird die abfrage der seiten eingegrenzt und die einzelnen seiten geladen*/
if (isset($_GET['page'], $page[$_GET['page']])) {
    include $page[$_GET['page']];
} else {
    include $page['index'];
}
?>

mein 2.es Problem besteht darin das die Userprofile nciht gehen,
ich habe eine memberliste die auch funktioniert möchte nun mit einen weiteren get befehl user profile anbieten,
diese userprofile werden mit der id per get an die url dran gehängt,
leider sagt er mir das die seite nciht existieren würde...

memberlist.php
PHP:
echo "<a href=\"profil.php?id=".$row['ID']."\">".$row['Nickname']."</a>\n";

nunja ich hoffe ihr könnt mir helfen,
da ich anfänger bin hoffe ihr verzeiht mir den code,
er ist nun nicht perfekt aber er funktioniert für den anfang recht gut...


mfg kahly
 
Zuletzt bearbeitet:
Header was aleady send, bedeutet, dass vor dem start der Session schon etwas an den Browser ausgegeben wurde, und sei es nur ein Leerzeichen.
Ich seh grad 2 mögliche Fehlerquellen (ich kenne debian5 und dein Provider nicht)
1) Du hast die Dateien nicht mit FTP hochgeladen sondern über ein Tool auf dem Server neu erstellt. Dabei ist dir ein Leerzeichen oder sowas vorne reingerutscht.
2) Hast du per Zufall ein Gratisprovider der ev. Werbung einblendet? Dann kann es sein, dass da schon was gesendet wird, bevor dein index.php abgeschickt wird.

Zum Zweiten Problem. Bist du sicher dass profil.php auf derselben Ebene wie dein index.php existiert?
Siehe dazu PHP verschachtelte include
 
danke für deine schnelle antwort.
also das ist ein von mir bezahlter vserver von giga-hosting,
es wird ncihts vorher gesendet...

die session alleine funktioniert auch...
also man kann sich komplett einloggen und ausloggen...
wenn ich die checkbox "angemeldet bleiben" aktiviere(remember) dann will das script zusätzlich cookies starten die einen immer automatisch einloggt.
nur leider kann er die cookies nicht erstellen da die fehlermeldung kommt.

profil.php befindet sich in /templates

also index ist im hauptordner und liest alles aus dem unterordner templates aus...
dürfte es das problem lösen wenn ich profil zu dem index in den hauptordner lege?

und doch ich lade alles per FTP hoch
 
du siehst doch oben die config.php da ist es ja drin,
ausserdem gehen die ganzen seiten ja auch,
profil kann ich auch aufrufen,
allerdings nur die standart profil seite das ich der link ohne id hinter der url ungültig ist...
denn die seite baut sich dadrauf auf das hinter dem link noch ?id="id" kommt nur da das templatesytem ja sowieso mit einem get arbeitet aber die profilseite auch,
befürchte ich das es so nciht klappen wird...
deswegen bitte ich um hilfe...
schau dir bitte mal die codes oben an da soltlest du alles nötige erfahren,
und dazu siehste hier: http://www.knights-of-glory.de/kahly/php/ nochmal die seite so wie sie jetzt ist....


mfg kahly
 
ALso, deine Seite wird über index.php aufgerufen. Also 'läuft' die Seite im Pfad von index.php.
Nun hat deine Seite einen HTML-Link auf profil.php. Dieser wird also von da gesucht, wo dein index.php ist. Wenn es tiefer ist, dann musst du im relativen Link den Pfad angeben. Das hat ja nix mit include zu tun, sondern ganz einfach mit HTML-Link
PHP:
echo "<a href=\"templates/profil.php?id=".$row['ID']."\">".$row['Nickname']."</a>\n";
 
ouhhh-.-
dadran hab ich ja so agrnicht gedacht,
danke das du mich dadrauf bringst^^

ich probiere es nacher mal aus :)

edit: ich habe des mal mit templaets/profil.php versucht,
leider ist da das problem das er ja dann die url /templates/profil.php öffnen möchte,
allerdigs soll es ja ein template system werden das die links so öffnet: index.php?page=index

also habe ich die verlinkung so angepasst ie ich auch die adneren seiten verlinke,
index.php?page=profil
dann hängt ads script da die id hinter aber das script öffnet dann die index seiet da er die seite nicht finden kann....

kann mir da einer helfen?
 
Zuletzt bearbeitet:
Könntest du dich bitte an die Forumsregel halten die besagt, dass wir hier auch Grossschreibung usw. verwenden? Danke.

dann hängt ads script da die id hinter aber das script öffnet dann die index seiet da er die seite nicht finden kann....
Sorry, bin Schweizer und nicht so gut in Deutsch. Kann mir das jemand übersetzen?

Und wie sieht die Fehlermeldung aus? Oder gibts keine? Wie ist dann das Verhalten des Scriptes?
 
sorry,
also:
die index.php im Hauptordner öffnet alle seiten über die get funktion,
so sieht dann die seite memberlist so aus: index.php?page=memberlist
wenn ich also ein profil auffrufen möchte muss ich die verlinkung so machen :
PHP:
echo "<a href=\"index.php?page=profil?id=".$row['ID']."\">".$row['Nickname']."</a>\n";

also soll dann die Profilseite aufgerufen werden,
allerdings wird dann die url dann die id des Users dran gehängt.
Leider gibt es dannd ie Nachricht:
Seite nicht gefunden,
oder seite existiert nicht...
aber wenn ich nur die Profil seite öffne dann wird diese auch gefunden....
 
Das ist keine "GET-Funktion" sondern ein URL-Parameter den Du dran hängst. Da Du mehrere URL-Parameter hast, musst Du diese mit einem HTML-kodierten kaufmännischem Und verknüpfen, nicht mit einem Fragezeichen. Also:

PHP:
echo "<a href=\"index.php?page=profil&amp;id=".$row['ID']."\">".$row['Nickname']."</a>\n";
 

Neue Beiträge

Zurück