ouvrir une page

Eléphanteau du PHP | 23 Messages

03 nov. 2006, 16:49

Bonjour à tous,

Voilà je voudrais ouvrir une nouvelle page .php à partir d'une page .php:

Code : Tout sélectionner

if(test==1) { header("Location: http://www.monsite.com/membre.php/"); } else { echo "vous n'êtes pas autorisé à rentrer!" }
voilà l'erreur affichée :
Warning: Cannot modify header information - headers already sent

quelqu'un sait-il m'aider? merci.

Eléphant du PHP | 193 Messages

03 nov. 2006, 16:52

Pour utiliser header(), il faut que rien n'ait été envoyé au client (echo, print, etc...), pas même un petit espace.

Eléphanteau du PHP | 23 Messages

03 nov. 2006, 16:57

ok je comprend. comment puis je alors faire pour ouvrir une nouvelle page à partir du code ci-dessus?

Eléphant du PHP | 193 Messages

03 nov. 2006, 17:07

ok je comprend. comment puis je alors faire pour ouvrir une nouvelle page à partir du code ci-dessus?
Ben comme dit, le mettre avant tout envoi d'affichage vers le poste client, tu comprends? Il ne faut pas que tu aies d'echo, de print, ou tout autre fonction d'affichage avant, ni d'html.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2006, 17:09

Peux-tu nous montrer le code de ta page ?

Eléphanteau du PHP | 23 Messages

03 nov. 2006, 17:25

mais puisque je dois faire un test IF avant, je ne saurais pas le mettre avant. je suis perdue là

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2006, 17:30

Ce n'est pas le IF qui est en cause.
On peut tout à fait effectuer un test avant de rediriger une page avec un header.

Avec ton code, ce sera tout de même lus facile pour t'expliquer...

Eléphanteau du PHP | 23 Messages

03 nov. 2006, 17:39

Code : Tout sélectionner

<?php session_start(); require ('connect.php'); ?> <html> <head> <title><?php echo $connexion ?></title> </head> <body> <?php // on récupère les données pour la connexion $nom = $_GET['Nom']; $query_connexion = "SELECT * FROM GENERALISTE WHERE nom='$nom' "; $mysql_result = mysql_query($query_connexion) or die(mysql_error()); if ($ligne = mysql_fetch_array($mysql_result)) { // on récupère les infos du membre connecté $_SESSION['nom'] = ($ligne["nom"]); if(test==1) { header("Location: http://www.monsite.com/membre.php/"); } else { echo "vous n'êtes pas autorisé à rentrer!" }

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2006, 17:49

Pour utiliser header(), il faut que rien n'ait été envoyé au client (echo, print, etc...),
pas même un petit espace.
ok je comprend
Quand je vois ton code, je ne suis pas certain que tu aies bien compris...

La règle est : Ne rien envoyer au client avant l'appel du header() !

Et ça alors ? [-X
<html>
<head>
<title><?php echo $connexion ?></title>
</head>
<body>
:idea: Un truc : Place toujours le script contenant un header au sommet de ta page.
Tu verras, ça marche beaucoup mieux... ;)

Eléphanteau du PHP | 23 Messages

03 nov. 2006, 18:04

oui en effet, c'est une erreur de ma part. tt à l'heure jai essayé en supprimant le echo. et ca n'a rien changé. c'est pourquoi je l'ai ensuite remis.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2006, 18:21

Visiblement, on ne se comprend pas...

Certes, un echo avant un header() provoque une erreur.
Mais la présence de la moindre balise HTML (<html>, <head>, <body>, etc.),
le moindre saut de ligne ou la moindre espace provoque aussi une erreur !

C'est donc toute la partie du code que j'ai recopiée dans mon message précédent qui pose problème.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

03 nov. 2006, 18:27

Pour aller plus vite, voici ton code corrigé.
Regarde bien les commentaires que j'y ai insérés...
<?php
session_start();
require ('connect.php');
$nom = $_GET['Nom'];
$query_connexion = "SELECT * FROM generaliste WHERE nom='".$nom."'"; // On extrait les variables de la chaîne de caractères
$result = mysql_query($query_connexion) or die(mysql_error()); // mysql_result est un mot réservé, il ne peut être utilisé pour nommer une variable
if ($ligne = mysql_fetch_array($mysql_result))
   { $_SESSION['nom'] = ($ligne["nom"]); // Où se ferme cette accolade ?
     if (test==1)
        { header("Location: http://www.monsite.com/membre.php/");
        }
        else
        { echo "vous n'êtes pas autorisé à rentrer!"
        }
?>

<html>

<head>
<title><?php echo $connexion ?></title>
</head>

<body>
...
PS : Le SELECT * est à proscrire...