Cookies werden nicht gesetzt

Grunge

Erfahrenes Mitglied
EDIT: ich hab jetzt mal error reporting angestellt, und dabei hab ich die Fehlermeldung bekommen "cannont modify header...."
Mir ist klar was dieser Fehler bedeutet, nur wie kann ich ihn in meinem Fall verhindern ?
Ich schicke das Formular im Login Bereich per JS ab, damit die Seite sich nicht neu lädt. habe dort also viele Html Elemente vor und nach dem setcookie().

Huhu Leute,

Ich bastel an nem Login Script, nur leider funktioniert es nicht ganz so wirklich wie es soll.

Also: Ich hab ne Index.php die prüft, ob man eingeloggt ist (also wenn ein Cookie gesetzt ist), andererseits soll die Login Datei inkludiert werden. Die Cookies werden gesetzt und auch angezeigt, wenn ich sie direkt nach dem setzen ausgebe, aber an der Stelle wo sie gebraucht werden, sind sie nicht mehr vorhanden !?

Hier mal der Code (ich verzichte auf den ganzen Teil mit dem Html und dem Inhalt, da die index.php ca. 1400 Zeilen hat ):

Code:
<html>
.
.
.
error_reporting(-1);
include "_functions.php";
include "_config.php";

//Hier wird der Cookie überprüft
if(isset($_COOKIE['UserID'])){
.
.
.
}else{
include "login.php";
}

Code:
$getuser="SELECT * FROM users WHERE usr_nick = '".$_POST['login_usr']."'";
                            $gu_result=$db->query($getuser);
                         
                            $anzahl=$gu_result->num_rows;
                            if($anzahl == 0){
                                echo "Es wurde kein User mit diesen Daten gefunden";
                            
                            }else{
                            $gu_row = $gu_result->fetch_assoc()){
                            $id=$gu_row['usr_id']; 
                            $pw=$gu_row['usr_pw'];
                         
                            }
                            //Login korrekt?
                            if(md5($_POST['login_pw']) == $pw){
                                echo "Login erfolgreich. Du wirst weitergeleitet ...";
                                setcookie('UserID', $id, strtotime("+1 month"));
                                setcookie('Password', $pw, strtotime("+1 month"));
                                $_COOKIE['UserID'] = $id; // fake-cookie setzen
                                  $_COOKIE['Password'] = $pw; // fake-cookie setzen
                                //echo $_COOKIE['UserID'];
//Funktion zum Weiterleiten
                                weiterleiten("index.php?section=&login=correct&id=".md5($id),"3");
                            }
Wie gesagt wenn ich den Cookie ausgebe in der login.php zeigt er ihn mir korrekt an, nur lässt er sich halt nich mehr abfragen
Hoffe ihr wisst weiter - danke euch !
 
Zuletzt bearbeitet:
Hallo,

Ich würde dir empfehlen deinen HTML und PHP Code besser zu trennen und würde versuchen Dateien relativ kurz zu halten. Das ist auch etwas persönliche Einstellung aber ich persönlich finde 1400 Zeilen für eine Datei viel zu viel. Die Mischung macht es zusätzlich auch sehr schwer Fehler zu finden und später Änderungen vorzunehmen.
Soll es in einer Datei bleiben, würde ich wenigstens empfehlen am Anfang einen PHP-Block zu setzen, in dem alle notwendigen Daten ermittelt werden.

Zum Beispiel so in diese Richtung:

PHP:
<?php
include '_functions.php';
include '_config.php';

// Login prüfen
$login = true; // Wenn Login erfolgreich sonst false
...
...
// Daten für den Inhalt setzen
$action = 'home';
$pageTitle = 'Meine Seite.. ';
?>

<html>
  <head>
    <title><?= $pageTitle ?></title>
  </head>
  <body>
    <?php if('home' === $action) : ?>
        HTML für Home
   <?php elseif('login' === $action):
       include 'login.php';
   endif;
  </body>
<html>

Konkreter Lösungsvorschlag für dein Problem:
Du musst dafür sorgen, dass deine login.php eingebunden wird, bevor die erste Ausgabe von HTML stattfindet. Das heißt du musst das ein wenig umstrukturieren. Ohne das gesamte zu kennen, kann ich da aber keinen konkreten Vorschlag machen
 
Zurück