Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3097 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec fonction header() + syntaxe.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec fonction header() + syntaxe.

n°1899019
Profil sup​primé
Posté le 25-06-2009 à 10:36:10  answer
 

Bonjour à tous,
 
J'ai de nouveau un ptit souci ( :o ) avec la fonction header(). J'ai fais une appli que j'ai développé en local. J'ai décidé de la mettre sur mon ftp afin de voir ce que ça donne et là première erreur qui n'était jamais apparu:
 

Warning:  Cannot modify header information - headers already sent by (output started at /home/aemaethe/public_html/index.php:9) in /home/aemaethe/public_html/modules/connexion.php on line 23


Donc via php.net je me renseigne sur la fonction header() et je m'apperçois qu'il faut qu'elle soit lancée avant tout code HTML. Sinon badaboom le programme.
 
Mon problème c'est que j'ai une page connexion.php qui doit rediriger l'admin vers la partie admin de l'appli. Mais cette page connexion.php est appelé via un include depuis la page index.php (Comme indiqué dans le message d'erreur en gros  :o ²).
 
Donc moi, jeune noob de mon état ( [:cerveau nerd] ) je ne sais pas comment faire pour arranger ce problème. Faut-il faire une vérification depuis l'index.php  :??:  
 
Merci pour votre aide  :jap:

mood
Publicité
Posté le 25-06-2009 à 10:36:10  profilanswer
 

n°1899022
pataluc
Posté le 25-06-2009 à 10:37:22  profilanswer
 

il faut juste t'assurer que rien n'est envoyé avant le header, même pas d'espaces qui seraient juste avant ton "<?".

n°1899032
Profil sup​primé
Posté le 25-06-2009 à 10:46:05  answer
 

Voilà ma page connexion.php pour vous faire voir.
Donc en gros mon header serait mal positionné en l'occurrence ? Ce que je ne pige pas c'est qu'en local tout marche bien. Et pas sur mon ftp. J'aimerai bien comprendre  :??:  
Connexion.php:
 


<?php
$_SESSION['connect'] = 0;
?>
<h3>Identification</h3>
<form action="index.php?m=connexion" method="POST">
    <label for="nom">Identifiant:</label><input type="text" name="login"/><br/>
    <label for="mdp">Mot de passe:</label><input type="password" name="pass"/><br/><br/>
    <input type="submit" value="Se connecter" name="envoyer"/><input type="reset" value="Annuler"/>
</form>
<?php
mysql_connect('localhost','root','');
mysql_select_db('logiciel');
 
$sql = mysql_query("SELECT login, pass FROM utilisateur" );
 
while($data = mysql_fetch_array($sql))
{
if(isset($_POST)&&!empty($_POST['login']) && !empty($_POST['pass'])&&$_POST['login'] == $data['login'] && $_POST['pass']==$data['pass'])
    {
    $_SESSION['nom'] = $_POST['login'];
    $_SESSION['mdp'] = $_POST['pass'];
    $_SESSION['connect'] = 1;
    header('location:admin/admin.php');
    }
elseif (!empty($_POST['envoyer']))
    {
    echo '<span class="erreur_mdp">'.'Mauvais identifiants'.'</span>';
    }
}
?>


Message édité par Profil supprimé le 25-06-2009 à 10:49:44
n°1899131
pataluc
Posté le 25-06-2009 à 12:31:53  profilanswer
 

http://www.php.net/manual/fr/function.header.php

 

tu ne dois avoir AUCUN contenu avant l'appel à header. et la, des lignes 4 à 9, ya du contenu.

 

voila ce que je te propose:

Code :
  1. <?php
  2. $_SESSION['connect'] = 0;
  3. if (isset($_POST)&&!empty($_POST['login']) && !empty($_POST['pass']))
  4. {
  5.     mysql_connect('localhost','root','');
  6.     mysql_select_db('logiciel');
  7.     $sql = mysql_query("SELECT login, pass FROM utilisateur" );
  8.     while($data = mysql_fetch_array($sql))
  9.     {
  10.         if($_POST['login'] == $data['login'] && $_POST['pass']==$data['pass'])
  11.         {
  12.             $_SESSION['nom'] = $_POST['login'];
  13.             $_SESSION['mdp'] = $_POST['pass'];
  14.             $_SESSION['connect'] = 1;
  15.             header('location:admin/admin.php');
  16.         }
  17.         elseif (!empty($_POST['envoyer']))
  18.         {
  19.             echo '<span class="erreur_mdp">'.'Mauvais identifiants'.'</span>';
  20.         }
  21.     }
  22. }
  23. else
  24. {
  25. ?>
  26. <h3>Identification</h3>
  27. <form action="index.php?m=connexion" method="POST">
  28.     <label for="nom">Identifiant:</label><input type="text" name="login"/><br/>
  29.     <label for="mdp">Mot de passe:</label><input type="password" name="pass"/><br/><br/>
  30.     <input type="submit" value="Se connecter" name="envoyer"/><input type="reset" value="Annuler"/>
  31. </form>
  32. <?php
  33. }
  34. ?>
 

ca me parait cohérent vis à vis de ton appli:
- si le POST contient des infos de connexion, on vérifie si elles sont bonnes (requete en base, + test derrière)
- sinon (je suppose que cela signifie qu'il n'a pas encore entré ces identifiants) je lui envoie le formulaire pour le faire.

 

après accessoirement, 2 remarques:
- les pwd semblent être en clair dans ta base... pas top
- je me demande si c'est pas mieux d'envoyer coté sql le user et password, et de simplement vérifier le nombre de lignes que cela renvoie: 0 -> user/pwd ne matchent pas, 1 -> user/pwd matchent.


Message édité par pataluc le 25-06-2009 à 12:32:27
n°1899153
Profil sup​primé
Posté le 25-06-2009 à 13:37:46  answer
 

Ok j'avais mal compris en fait pour les espaces avant le header().
 
En fait quand j'ai débuté mon appli je n'avais aucune connaissance en sécurité. Donc je vais repasser à la fin pour tout resécurier contre les injonctions SQL et mettre du sha1 pour le mot de passe  ;)
 
Sinon pour ton truc c'est pas mal, mais comme je l'avais précisé dans mon 1er post, ma page connexion.php est appelé via index.php.  
index.php:
 

<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <title>Création de fiche intervention</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
    <link rel="shortcut icon" href="http://www.votresite.com/favicon.ico" type="image/x-icon" />
</head>
<body>
<div id="global">
 
    <div id="top"> </div>
 
    <div id="header">  
        <?php include ('modules/header.php');?>
    </div>
 
    <div id="menu">
        <ul>
            <span class="gauche"><li><a href="index.php?m=accueil">Accueil</a></li></span>
            <span class="gauche"><li><a href="index.php?m=intervention">Demander une intervention</a></li></span>
            <span class="gauche"><li><a href="index.php?m=aide">Aide</a></li></span>
            <span class="gauche"><li><a href="index.php?m=contact">Contact</a></li></span>
            <span class="droite"><li><?php
        if(isset($_SESSION['connect']) && $_SESSION['connect'] == 1)
            {
            echo 'Bonjour '.'<i>'.$_SESSION['nom'].'</i>';
            echo '<a href="index.php?m=deconnexion">Se déconnecter</a>';
            }
        else
            {
            echo 'Vous n'êtes pas connecté.'.' '.' '.' ';
            echo '<a href="index.php?m=connexion">Se connecter</a>';
            }
        ?></li></span>
 
        </ul>
    </div>


Connexion.php:
 
 
 

<?php
$_SESSION['connect'] = 0;
?>
<h3>Identification</h3>
<form action="index.php?m=connexion" method="POST">
    <label for="nom">Identifiant:</label><input type="text" name="login"/><br/>
    <label for="mdp">Mot de passe:</label><input type="password" name="pass"/><br/><br/>
    <input type="submit" value="Se connecter" name="envoyer"/><input type="reset" value="Annuler"/>
</form>
<?php
mysql_connect('localhost','root','');
mysql_select_db('logiciel');
 
$sql = mysql_query("SELECT login, pass FROM utilisateur" );
 
while($data = mysql_fetch_array($sql))
{
if(isset($_POST)&&!empty($_POST['login']) &&!empty($_POST['pass'])&&$_POST['login'] == $data['login']&& $_POST['pass']==$data['pass'])
    {
    $_SESSION['nom'] = $_POST['login'];
    $_SESSION['mdp'] = $_POST['pass'];
    $_SESSION['connect'] = 1;
    header('location:admin/admin.php');
    }
elseif (!empty($_POST['envoyer']))
    {
    echo '<span class="erreur_mdp">'.'Mauvais identifiants'.'</span>';
    }
}
?>


 
 
 
Donc j'crois que là j'suis dans un vrai merdier  [:tinostar]  
 
PS: Y a pas moyen de faire une redirection en javascript si le mot de passe est bon ? J'ai vu que des redirections permanente à mettre dans le Head en JS  [:transparency]

Message cité 1 fois
Message édité par Profil supprimé le 25-06-2009 à 14:22:27
n°1899253
Profil sup​primé
Posté le 25-06-2009 à 17:33:31  answer
 

non mais en fait, avant header, c'est ZÉRO sortie, aucun texte, code html, ou espace, ou saut de ligne.

n°1899256
pataluc
Posté le 25-06-2009 à 17:37:17  profilanswer
 


 
ou ca? ya pas d'appel à connexion.php dans ce que tu as mis.

n°1899264
Profil sup​primé
Posté le 25-06-2009 à 18:25:05  answer
 

Je l'appel ici
 


echo '<a href="index.php?m=connexion">Se connecter</a>';


Message édité par Profil supprimé le 25-06-2009 à 18:30:22
n°1899306
pataluc
Posté le 25-06-2009 à 23:40:41  profilanswer
 

non t'appelle rien la, tu mets juste un lien vers index.php?m=connexion. ou alors c'est que tu nous a pas mis un assez gros bout de ton fichier index.php...

n°1899330
Profil sup​primé
Posté le 26-06-2009 à 08:45:43  answer
 

Ok donc c'est moi qui ai fait une erreur de vocabulaire  :sweat:

 

Bon je re test ce que tu m'as mis plus haut et je te redis tout ça  :jap:

 

edit: Ok ça marche impec. Merci


Message édité par Profil supprimé le 26-06-2009 à 11:01:58
mood
Publicité
Posté le 26-06-2009 à 08:45:43  profilanswer
 

n°1959457
mafarette
bonne annee 2010
Posté le 21-01-2010 à 16:09:08  profilanswer
 

bonjour  
j'ai le probleme de redirection
if(send_sms($cible,$message,$image))  {echo("sms ok au : $cible"
   header('http://localhost:8888/MMS/p3.php');  
    }  else echo("Impossible de trouver le token ou message trop long. Message non transmis. Mauvais logins ?" );

n°1963579
philippe06
Posté le 06-02-2010 à 11:51:16  profilanswer
 

agromthor> tu peux aussi éviter de toucher aux headers et faire la redirection avec un meta-refresh. Ou eventuellement charger en dur ta page d'admin avec un require.
 
mafarette> c'est pas plutôt header('Location: http://localhost:8888/MMS/p3.php'); qui marcherait?


---------------
Aimer les femmes intelligentes est un plaisir de pédéraste. (Charles Baudelaire) - Vous vulgarisez :o (Jean-Kevin Dubois)
n°1963584
akileos
En recherche d'emploi
Posté le 06-02-2010 à 12:14:28  profilanswer
 

Ou mettre un ob_start(); au début de ta page qui apelle les autres.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec fonction header() + syntaxe.

 

Sujets relatifs
Sessions problème de débutantProbleme pour lire un fichier xml
PB Count (Résolu) et un souci de lien de paginationProbléme pour récuperer le nom du Fichier API Windows
Problème de connexion à ma base de donnéeProblème intégration menu en flash dans une page HTML
Probleme de surcharge operateur <<Passer en paramètre un fonction?
Problème requête UPDATE SQLProblème d'alignement CSS dans les balises
Plus de sujets relatifs à : Problème avec fonction header() + syntaxe.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR