IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Variables de session avec un site Free


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut Variables de session avec un site Free
    Bonjour,

    j'ai de nouveau un problème avec mes variables de session sur mon site perso hébergé chez Free.

    Le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <?php
     
    	if (isset($_SESSION)){
    	session_destroy();
    	}
    	include 'haut.html';
    	echo '
    	<br/><br/>
    	<div align=center id=connexion>
    		<h2>Espace connexion </h2>
    		<br/>
    		<form name="connexion" method="post" action="connexion.php">
    			<table align=center>
    				<tr>
    					<td align=center>Nom d\'utilisateur : </td>
    					<td align=center><input type="text" name="pseudo" value="" size="30"></td>
    				</tr>
    				<tr align=center>
    					<td align=center>Mot de passe : </td>
    					<td align=center><input type="password" name="mdp" value="" size="30"></td>
    				</tr>
    			</table>
    			<br/>
    			<input type=submit name="connection" value="Connection">
    		</form>
    		<br/><br/>
    		<img src="mediatheque.jpg" alt="mediatheque">
    	</div>
    	</body>
    	';
    	include 'bas.php';
    ?>

    qui dirige donc vers :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    	session_start();
    	include 'fonctionBDD.php';
    	if ($_POST["pseudo"] == "" || $_POST["mdp"] == "")
    	{
    		echo '
    			<br/><br/><br/>
    			<div align=center>
    				Veuillez remplir les champs avant d\'essayer de vous connecter !
    				';
    				include 'index.php';
    				echo'
    			</div>
    
    		';
    	}
    	else
    	{	
    		$requete = "SELECT pseudoUtilisateur, motDePasse, fonctionUtilisateur FROM utilisateur WHERE pseudoUtilisateur = '".$_POST["pseudo"]."' and motDePasse = '".$_POST["mdp"]."';";
    		$resultat = mysql_query( $requete, $base );
    		$row = mysql_fetch_assoc($resultat);
    		if ($_POST["pseudo"] != $row["pseudoUtilisateur"])
    			{
    				echo '<br/><br/>';
    				echo '<h3 align="center"> Mauvais nom d\'utilisateur </h3>';
    				include 'index.php';
    			}
    		else
    			{
    				echo '<br/><br/>';
    				echo '<h2 align="center"> Vous êtes maintenant connecté ! </h2>';
    				$_SESSION['nom'] = $row['pseudoUtilisateur'];
    				$_SESSION['type'] = $row['fonctionUtilisateur'];
    				echo '<br/>';	
    				echo '<div align=center>';
    				echo '<p>Vous allez maintenant être redirigé vers le menu.<br/>';
    				echo '<a href="menu.php">Cliquez ici si votre navigateur ne vous redirige pas automatiquement.</a></p>';
    				echo '</div>';
    				$delai=3; 
    				$url='menu.php';
    				header("Refresh: $delai;url=$url");
    			}
    	}
    ?>

    dans ces 2 pages, j'appelle haut.html qui contient les balises de début d'une page html, fonctionBDD.php qui contient la connexion à la base de données et bas.php qui contient les balises fermantes.

    Et après m'être loggé, j'ai ces messages d'erreur :

    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php:1) in /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php:1) in /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php on line 2

    Warning: Cannot modify header information - headers already sent by (output started at /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php:1) in /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php on line 41
    J'ai déjà enlevé l'include de haut.html dans index.php, sans effet. J'ai également enlevé la redirection par header de connexion.php, les 2 premiers messages d'erreurs restent.

    Si quelqu'un a déjà eu un problème similaire, merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    chez free, il faut créer un dossier nommer "sessions" à la racine du site.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Exact, j'en ai un, j'avais oublié de le préciser

  4. #4
    Invité
    Invité(e)
    Par défaut
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php:1) in /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php on line 41
    La ligne 41 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				header("Refresh: $delai;url=$url");
    Tu ne peux pas lancer un header(...) alors que tu as déjà affiché des données avec echo ... (ou quoi que ce soit)

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Erf, comment je peux effectuer la redirection alors ? Je ne connais que cette technique et celle du submit mais elle ne s'applique pas ici (à moins qu'il y ait un tour de "passe-passe" a effectuer ?).

    Merci pour ton aide.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    J'ai trouvé cette fonction php pour rediriger vers une autre page :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function redirige($url)
        {
           die('<meta http-equiv="refresh" content="0;URL='.$url.'">');
        }
    redirige("menu.php");

    et la redirection fonctionne.

    Par contre, j'ai toujours les messages d'erreurs :
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php:1) in /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php:1) in /mnt/154/sdc/a/9/monSite/Mediatheque - Free/connexion.php on line 2
    Après la redirection, j'ai le message d'informations qui informe l'utilisateur qu'il est sur la page sans être connecté (donc sans les infos de session).

    Ce qui fait que les infos ne passent pas.

    Une idée ?



    EDIT : j'ai enlevé le dans la page menu.php et je n'ai plus les erreurs (enfin, elles apparaissent mais disparaissent dès que la redirection est effective).
    J'ai ensuite uniquement le message d'infos qui signale que l'utilisateur n'est pas connecté. ça avance, ça avance :p

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Le code que tu as effectué dernièrement est une manière pas très zen de contourner ton problème, du coup ça ne résout rien, on peu même dire qu'on enfonce le clou un peu plus dans l'erreur.

    Cette erreur "... headers already sent by ..." (qui est l'une des erreurs les plus courante) si on l'a traduit veut dire : ... une entête a déjà été envoyée ...

    La doc de Php dit concernant cette fonction header() :
    La doc : header()http://fr2.php.net/manual/fr/function.header.php (Envoie un en-tête HTTP)
    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 affichages 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 produiront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html>
    <?php
    /* Ceci produira une erreur. Notez la sortie si dessus,
     * qui se trouve avant l'appel à la fonction header() */
    header('Location: http://www.example.com/');
    ?>
    Et dans ton code tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo '</div>';
    $delai=3; 
    $url='menu.php';
    header("Refresh: $delai;url=$url");
    Du renvoie de HTML avant d'appeler cette fonction header().

    Par ailleurs, il n'y a pas que un header() où on peu rentrontrer cette erreur, mais toutes les fonctions qui spécifies une entête, comme : session_start(), setcookie(), etc ...


    Il faut comprendre que lorsqu'on utilise ces fonction qui agissent au niveau de l'entête, et bien elles doivent être exécuter avant le renvoie du moindre contenu : Html, et même un espace.


    Il te faut revoir la manière dont tu effectue le déroulement de ton code.
    La meilleure manière est de séparer la partie pure traitement de Php et la partie interface (le HTML).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
    // PARTIE TRAITEMENT
    session_start();
    include 'fonctionBDD.php';
     
    $erreur = FALSE;
    if ($_POST["pseudo"] == "" || $_POST["mdp"] == "") {
        $erreur = TRUE;
    }
    else {
        // Ici la redirection fonctionnera sans erreur
        // car il n'a pas eu le moindre revoie de contenu avant
        header('Location: page_de_redirection.php'):
    }
     
    // PARTIE INTERFACE
    ?>
    <!doctype html>
    <html>
     
    ... etc ...
     
    <?php
    if ($erreur === TRUE) {
    ?>
    <div>
    Veuillez remplir les champs avant d\'essayer de vous connecter !
    </div>
    <?php
    }
    ?>
    ... etc ...
    </html>
    En somme, on évite de trop mélanger du code Php et le HTML.

    C'est l'erreur que font tous ceux qui débutent en Php :
    Le déroulement de votre code Php est en total relation, totalement calqué sur celui du HTML.
    Or, Php est interprété coté serveur, et le code Html (que Php génère en partie d'ailleurs) lui sera interprété coté client (par un navigateur).
    La différence est de taille.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    D'accord, donc il faut plus se baser sur une architecture MVC pour éviter ce genre de problèmes donc.

    Très bien, merci pour ton aide, je vais essayer d'adapter mon code à ta solution.

Discussions similaires

  1. problème de variables de session avec Jpgraph
    Par fat dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2007, 16h26
  2. [Cookies] variables de session avec JpGraph ?
    Par mnem0 dans le forum Langage
    Réponses: 8
    Dernier message: 04/06/2007, 14h05
  3. Réponses: 2
    Dernier message: 30/05/2007, 16h08
  4. Comment recuperer la valeur d'une variable de session avec du javascript
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2006, 10h40
  5. Création d'une variable de session avec un ID
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 18/10/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo