erreur de cookie mais ou ?

Eléphant du PHP | 87 Messages

29 nov. 2006, 18:30

<?php
session_start();
require ("Connect.php");
// on vérifie toujours qu'il s'agit d'un membre qui est connecté
if (!isset($login_user)) {
    // si ce n'est pas le cas, on le redirige vers l'accueil
    header ('Location: login.php');
    exit();
}

// on teste si le formulaire a bien été soumis
if (isset($_POST['go']) && $_POST['go'] == 'Envoyer') {
    if (empty($_POST['destinataire']) || empty($_POST['titre']) || empty($_POST['message'])) {
        $erreur = 'Au moins un des champs est vide.';
    }
    else {
	
        $base = mysql_connect (SERVEUR,NOM,PASSE); 
        mysql_select_db (BASE, $base);
        
        // si tout a été bien rempli, on insère le message dans notre table SQL
        $sql = 'INSERT INTO messages VALUES("", "'.$id.'", "'.$_POST['destinataire'].'", "'.date("Y-m-d H:i:s").'", "'.addslashes($_POST['titre']).'", "'.addslashes($_POST['message']).'")';
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

        mysql_close();

        header('Location: bienvenue.php');
        exit();
    }
}
?>

<html>
<head>
<title>Espace membre</title>
</head>

<body>
<a href="membre.php">Retour à l'accueil</a><br /><br />
Envoyer un message :<br /><br />

<?php

$base = mysql_connect (SERVEUR,NOM,PASSE); 
mysql_select_db (BASE, $base);

// on prépare une requete SQL selectionnant tous les login des membres du site en prenant soin de ne pas selectionner notre propre login, le tout, servant à alimenter le menu déroulant spécifiant le destinataire du message
$sql = 'SELECT user.login_user as nom_destinataire,user.id as id_destinataire FROM user WHERE id <> "'.$_SESSION['id'].'" ORDER BY login_user ASC';
// on lance notre requete SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows ($req);

if ($nb == 0) {
    // si aucun membre n'a été trouvé, on affiche tout simplement aucun formulaire
    echo 'Vous êtes le seul membre inscrit.';
}
else {
    // si au moins un membre qui n'est pas nous même a été trouvé, on affiche le formulaire d'envoie de message
    ?>
    <form action="envoyer.php" method="post">
    Pour : <select name="destinataire">
    <?php
    // on alimente le menu déroulant avec les login des différents membres du site
    while ($data = mysql_fetch_array($req)) {
        echo '<option value="' , $data['id_destinataire'] , '">' , stripslashes(htmlentities(trim($data['nom_destinataire']))) , '</option>';
    }
    ?>
    </select><br />
    Titre : <input type="text" name="titre" value="<?php if (isset($_POST['titre'])) echo stripslashes(htmlentities(trim($_POST['titre']))); ?>"><br />
    Message : <textarea name="message"><?php if (isset($_POST['message'])) echo stripslashes(htmlentities(trim($_POST['message']))); ?></textarea><br />
    <input type="submit" name="go" value="Envoyer">
    </form>
    <?php
}
mysql_free_result($req);
mysql_close();
?>
</select>

<br /><br /><a href="deconnexion.php">Déconnexion</a>
<?php
// si une erreur est survenue lors de la soumission du formulaire, on l'affiche
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
Voila ,si cependant c'est pas lié à l'include et bien j'avale mon chapeau :lol:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

29 nov. 2006, 18:33

Et le contenu de Connect.php ? (genre à la ligne 6 :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 87 Messages

29 nov. 2006, 19:04

<?php
define('NOM',"blabla");
define('PASSE',"code");
define('SERVEUR',"localhost");
define('BASE',"base");
?>
C'est la ligne 6
mais ce qui m'a fait penser que c'etait lié au include c'est que qd j'affiche directement ce fichier ça marche sans rien modifier

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 nov. 2006, 10:35

Et tu n'as absolument pas d'espace ou de retour à la ligne juste après le "?>" ?? :)

dans le message d'erreur il te t'indique (outre le "headers already sent by") l'endroit où le header a été envoyé :
"(output started at /home/local/apache/htdocs/sites/t/www.jmb.com/Connect.php:6)"

D'où mon acharnement pour cette ligne du fichier ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 87 Messages

30 nov. 2006, 16:49

<?php
define('NOM',"blabla"); 
define('PASSE',"code"); 
define('SERVEUR',"localhost"); 
define('BASE',"base");?>  
Si je comprend bien ça c'est correct alors :?:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 déc. 2006, 11:38

Même ceci était correcte :
<?php 

define('NOM',"blabla");  
define('PASSE',"code");  

define('SERVEUR',"localhost");  
define('BASE',"base");

?>
ce qu'il faut c'est qu'il n'y ait rien avant le "<?php" et rien après le "?>" : ni espace, ni retour à la ligne, ni commentaire, ni rien en fait :)
et naturellement aucun print ou echo entre les deux ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 87 Messages

01 déc. 2006, 13:12

Il n'y a absolument rien avant aprés le dernier ?> il y a bien sur une autoroute. il faut mettre le ?> tout a fait en bas à droite? :roll:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 déc. 2006, 14:07

Chuis pas sur de tout saisir à ta question :)

L'objectif, c'est qu'il n'y ai rien d'envoyé au navigateur avant l'appel au header :
<?php // tout première ligne de ton code

... // ici, pas de print, de echo ou de "?>...<?php", sinon tu envoi un flux au navigateur ce qui empêchera le header de fonctionner

header(...);
?>
Après le header, tu peux y aller, tant que tu veux... ;) 
Lorsque tu utilises un include(), require(), etc. c'est comme si tu plaçais le code à l'endroit où à lieu l'inclusion :
fichier_1.php :
<?php

  include("fichier_2.php");

  header(...);
?>

fichier_2.php : 
<?php
  $toto = "xxx";
?>

revient au même que 
<?php

  ?><?php
    $toto = "xxx";
  ?><?php

  header(...);
?>
Donc si dans le fichier inclus, tu as un espace (ou un retour à la ligne) au début ou à la fin du fichier include, après le "?>" tu obtiendrais ceci :
<?php

  ?><?php
    $toto = "xxx";
  ?> <?php // et du coup ici tu envoi du code au navigateur, en l'occurence un espace, et empêche le header de fonctionner :)

  header(...);
?>
C'est y plus clair ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 87 Messages

01 déc. 2006, 14:28

Ok ça j'avais compris :wink:
en fait j'ai essayé toute les solutions et ça marchait pas et j'ai tout remis comme au depart.
Et la ça marche ,il devait y avoir un espace donc.Sauf si mon serveur est hanté :lol:
Enfin merci :wink:
Et je marque pas résolu vu que c'etait pas mon topic