8797 sujets

Développement web côté serveur, CMS

Et encore un problème!!! Décidement ce forum m'aura beaucoup servi pour faire mon site! Merci en tout cas de cette entraide!

Le problème:
J'ai au début de ma page un session_start(); et au milieu une redirection.
J'ai d'abord essayé une redirection avec header:location puis une en javascript (window.location.replace)
Et aucune ne fonctionne car il y a un problème de header.
Le session_start modifie le header et donc ensuite la redirection ne se fait pas.
EDIT: En fait apparement le problème vient plutot d'un
@import url("feuille1024.css") ; Que j'ai sur ma feuille principale!
y a t'il une alternative à cela?
le <link ....> bugue!

Est ce un problème incorrigeable (ou ible) ou une erreur dans mon code?
Le voici

<?
session_start();
require_once('connexion.php');

 // début de session

if (isset($_POST['login'])){ // execution apres envoi du formulaire
    $login = $_POST['login'];
    $pass = md5($_POST['pass']);
    
// requete sur la table administrateurs (on récupère les infos de la personne)
mysql_select_db($database_dbprotect, $dbprotect);
$verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'"); // requête sur la base administrateurs
$verif = mysql_query($verif_query, $dbprotect) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$utilisateur = mysql_num_rows($verif);

    
    if ($utilisateur) { // On teste s'il y a un utilisateur correspondant
        session_register("authentification"); // enregistrement de la session
        
        // déclaration des variables de session
        $_SESSION['id_user'] = $row_verif['id_user'];
        $_SESSION['privilege'] = $row_verif['privilege'];
        $_SESSION['nom'] = $row_verif['nom'];
        $_SESSION['article'] = $row_verif['article'];
        $_SESSION['login'] = $row_verif['login'];

         ?>
        <script>window.location.replace("index2.php?page=sommaire"); </script> <?
          // redirection si OK

    }
    else {
        ?>
        <script>window.location.replace("index2.php?page=#"); </script> <? // redirection si utilisateur non reconnu
    }
}

?>

Modifié par Pops83 (24 Jun 2005 - 11:30)
oui je sais mais non!!
J'ai vérifié et apparement ça vient du @import !!!
Alors là je sais pas comment faire
Le code que tu as fournis c'est celui de ta page principale?

La page est accessible pour qu'on regarde?
non c'est pas la page principale, c'est une page à charger dans la partie centrale de mes div (pseudo frame)

voila la page principale:
<HTML>
<HEAD>
<LINK href="favicon.ico" rel="SHORTCUT ICON">
<TITLE>RSI</TITLE>
<NOSCRIPT>
<meta http-equiv="refresh" content="0;URL=http://www.google.fr">
</NOSCRIPT>
<script language="javascript">
        var agent = navigator.userAgent.toLowerCase();
        var ver = parseInt(navigator.appversion);
        if (navigator.appName=="Microsoft Internet Explorer")
           document.write('<link href="css/feuille1024IE.css" rel="stylesheet" type="text/css">');
        else
            document.write('<link href="css/feuille1024.css" rel="stylesheet" type="text/css">');
</script>

</HEAD>
<body>
<div class="gauche">
     <?include 'menu.php';?>
</div>
<div class="haut">
     <?include 'banniere.php'?>
</div>

<div class="milieu">
     <?
     // Contrôle du paramètre passé via l'URL
        $includePage="horaires.html";

        if (isset($_GET["page"])) {
          switch ($_GET["page"]) {
               case "sage":
                    $includePage = "sage.php";
               break;
               case "espace":
                    $includePage = "espace/index.php";
               break;
               case "liens":
                    $includePage = "liens.html";
               break;
               case "plan":
                    $includePage = "plan2.php";
               break;
               case "indexb":
                    $includePage = "espace/indexb.php";
               break;
               case "sommaire":
                    $includePage = "espace/sommaire.php";
               break;
               default :
                    $includePage="horaires.html";
               break;
          }
     }

     // Inclusion de la page demandée
    include  $includePage;
?>
</div>

</body>
</HTML>
Ça veut dire que tu envoies le début de ta page avant d'appeler ton script qui tente de modifier le header ?

Extrait de la doc php au cas où tu répondrais par l'affirmative :
a écrit :
N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichges PHP. Une erreur très classique est de lire un fichier avec include() ou require(), et de laisser des espaces ou des lignes vides, qui génèreront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.