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

Langage PHP Discussion :

header() fonctionne sous WAMP mais pas sur un site web


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 18
    Points
    18
    Par défaut header() fonctionne sous WAMP mais pas sur un site web
    Bonjour,

    J'ai fait une page php basique, que j'ai testé avec wamp, tout fonctionnait.
    Problème, dés que je l'upload sur le ftp, tout fonctionne sauf la redirection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: site.php');
    exit();
    C'est à dire qu'il passe bien dans le code, doit exécuter la fonction, mais ne le fait pas, donc on reste sur la méme page..

    J'ai essayé de ne mettre que ce code php sur la page ( avec les balises html de base ) sans succès !

    J'ai essayé les solutions ob_start, des espaces avec location et les ":", essayé URL= au lieu de location: , j'ai aussi essayé de rediriger vers http://google.Fr.. etc..

    Je ne trouve plus de solutions sur le net, donc... je viens quérir votre aide

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par skyzomik Voir le message
    J'ai essayé de ne mettre que ce code php sur la page ( avec les balises html de base ) sans succès !
    Salut,

    La fonction header ne peut pas être utilisé si tu à déjà envoyé du contenu, donc si des balises HTML se trouve avant l'appel de cette fonction cela ne marchera pas


    Les boutons et existent, servez-vous en

  3. #3
    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
    Problème, dés que je l'upload sur le ftp, tout fonctionne sauf la redirection:
    La redirection ne fonctionne pas car il y a peut être (voire surement) une erreur avant qui provoquerait un affichage, le retour d'erreur de Php (en HTML) par exemple.

    Mets en commentaire la fonction header() provisoirement, conserves le point d'arrêt (exit), et refait la même manip, et observes le code source HTML de la page (clic droit dans la page Web -> code source de la page), il y a peut être le message d'erreur qui va fournir une piste.

    Si tu remarques cela lors de l'upload sur le FTP, il y a surement une erreur à ce niveau.

    Faut espérer aussi que ce n'est pas ton code lui même qui génère un affichage (un echo qui trainerait dans les parages, etc ...).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par amoiraud Voir le message
    Salut,

    La fonction header ne peut pas être utilisé si tu à déjà envoyé du contenu, donc si des balises HTML se trouve avant l'appel de cette fonction cela ne marchera pas
    Merci.

    Oui, mais j'ai donc aussi testé avec uniquement cette fonction php entre les balises body ! Et ça ne fonctionne toujours pas.
    Méme si vous "aviez raison", pourquoi cela fonctionnerait il sous wamp ? !


    @Runcodephp:
    On s'est mal compris, l'upload php ne génère pas d'erreurs, et aucunes erreur dans le code source lorsqu'il est affiché non plus.
    Par contre, j'utilise des echo avant la redirection, mais ça ne change rien quand je les enlève donc...

  5. #5
    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
    On s'est mal compris
    Pas forcément.
    Dans la majorité des cas une redirection (un header) ne se fait pas car un contenu (HTML, un espace, etc ...) est renvoyé avant l'exécution de cette fonction header().

    Les raisons peuvent être multiples.

    A aucun moment tu n'as évoqué un message d'erreur.
    Dans ce cas là tu devrais avoir quelque chose comme : "Warning ... header already sent ... line xxx".
    Donc si tu n'as pas cela peut être faudrait il activer l'affichage des erreurs (directive display_error du php.ini, mettre à On).


    Oui, mais j'ai donc aussi testé avec uniquement cette fonction php entre les balises body ! Et ça ne fonctionne toujours pas.
    Il ne faut pas la mettre entre les balises <body>, le header() DOIT être exécuté avant le moindre contenu ne soit renvoyé.
    Mettre une balise <body> ou faire un echo revient exactement au même, les 2 renvoient du contenu (du HTML).

    Faut faire comme ceci : (revoir sa structure des pages au besoin)
    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
    <?php
    // Faire tous les traitement ICI
    // Connexion à la Bdd (si c'est le cas)
    // Démarrer la session (si c'est le cas)
     
    // Opération sur la Bdd (Insertion, mise à jour, suppression, etc ...)
    // Récupération des données, etc ...
     
    // Faire la rediretion ICI (avant le moindre contenu)
    header('Location: site.php');
     
     
    // PARTIE INTERFACE / HTML
    ?>
    <doctype ...>
    <html>
    <head>
        <title>
    </head>
    <body>
       <!-- Contenu du corps de la page ici-->
    </body>
    </html>
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Et si tu veux pas t'embêter, tu fais ta redirection en javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo"<script language=\"JavaScript\">document.location.href=\"site.php\" </script>";
    ?>
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  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
    Citation Envoyé par bob633 Voir le message
    Et si tu veux pas t'embêter, tu fais ta redirection en javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo"<script language=\"JavaScript\">document.location.href=\"site.php\" </script>";
    ?>
    Mouais.
    Pourquoi pas pour le coté "ne pas s'embêter".

    C'est quand même dommage d'en arriver là.

    Ceci revient pas loin à :
    Le témoin de température de sa voiture s'allume. Pas de problème, on le débranche.
    Plus de problème.


    Le problème de fond viendrait du déroulement du code, de la structure de la page, faut juste revoir cela, faire les chose dans l'ordre.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Ouais, et si javascript est désactivé, boum

    Bon, l'utilité que j'en ai, c'est bien en plein milieu de code html ( redirection aprés s'étre logé ), il ya a une solution pour ça ?
    Mais j'ai aussi fait des tests sans code justement, pour étre sùr...

    par contre, je ne sais pas trop où modifier les fichiers de config sur un serveur distant, je vais regarder ça

  9. #9
    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
    par contre, je ne sais pas trop où modifier les fichiers de config sur un serveur distant, je vais regarder ça
    Oui, ça peu ce faire à ce niveau, mais à part très rare cas particuliers, ce n'est pas du tout la bonne approche.
    Donc dans la majorité des cas ce sera l'équivalent d'un scotch (ou sparadrap), ceci revient à débrancher une alarme (ce sera ton cas à priori).
    C'est en activant le buffer de sortie, la directive output_buffering (à faire dans le php.ini ou .htaccess).


    Bon, l'utilité que j'en ai, c'est bien en plein milieu de code html ( redirection aprés s'étre logé ), il ya a une solution pour ça ?
    Tout dépend comment est structuré les site dans sa globalité, des concepts effectués.

    S'il présente un défaut, la meilleure (voire la seule) serait de corriger cette erreur afin de faire les choses dans l'ordre.
    Renvoyer un contenu HTML avant de redéfinir une entête (header, session, etc ...) c'est une erreur de logique, ni plus ni moins.
    Faut pas se tromper de problème.


    Cependant, il n'est pas rare, (c'est même très fréquent) que pour des raisons de séparation des taches, comme comme pour le MVC (Model, Vue, Controler), c'est que les vues sont chargées (incluses) avant que tout soit renvoyé.
    Cela cause indirectement un problème car ces fichiers contiennent du HTML.
    Les inclure tel quel au moment où cela est fait aura pour effet de renvoyer ces contenu au mauvais moment.

    Une solution très courante de faire cela c'est d'utiliser les fonctions (buffer) ob_start() et ob_clean() (tout en conservant le buffer de sortie désactivé).

    Mais cela n'est en rien fait pour éviter un plantage dû au header() effectué au mauvais moment (même si cela peu régler ce type de problème indirectement, encore que ...).
    Cela se fait pour toutes autres raisons.


    En faite, contourner un problème ne règle pas le problème.
    Maintenant chacun fait comme il veut.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Je vois ce que tu veux dire..

    Dans mon cas, je suis sur une page où l'on rentre login et password.
    Je vérifie qu'ils sont dans la bdd, si oui, je redirige vers les pages principales du site, sinon, je reste sur la page.
    Depuis que je fais mes études, j'ai toujours fait comme ça, mais j'utilisais toujours wamp, donc ça fonctionnait..

    Et maintenant que je veux l'uploader sur mon serveur, je suis confronté à l'erreur.
    J'activerais l'output buffering lundi

  11. #11
    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
    Poste ton code, s'il n'est pas trop volumineux, complexe, etc ... peut être arrivera t-on a améliorer ce point là.

    Mais dans la manière que tu exposes le problème, activer l'output buffering n'est pas la bonne solution.
    Cependant il est clair que restructurer tout le site comme ça c'est pas possible (faute de temps).

    Depuis que je fais mes études, j'ai toujours fait comme ça, mais j'utilisais toujours wamp, donc ça fonctionnait..
    Ce n'est pas vraiment lié à Wamp (j'utilise Wamp aussi), c'est juste que cette directive était activé, et tu as créé le site ainsi.
    Coté serveur c'est désactivé ... maintenant, paf ... erreur.

    La bonne approche serait de désactiver cette directive coté Wamp pour tester l'ensemble du site en local afin de corriger cela petit à petit (quitte à le remanier/restructurer).
    Le jour où tout sera correcte, testé convenablement, tu pourras alors désactiver cette directive coté serveur.


    Mais j'insiste, chacun gère cela comme il veut.
    Je suis certain que beaucoup active cette directive pour avoir la paix.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Je testerais pour voir si ça marche ne désactivant ça lundi.

    En attendant, c'est un cas trés trés simple au niveau du code..
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
    session_start();
    ?>
     
    <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
        <link rel="stylesheet" href="style.css" type="text/css">
        <title> login </title>
      </head>
     
      <body>
     
    	<div class="logo"> 
    		<img src="./images/xxxx.jpg" height="30%" width="30%" alt="Logo xxx" title="xxxxx" />
    	</div>
     
    	<div class="center"><br>
    		<FORM method=post action="login.php">  
    		login: <INPUT type=text name="login"> <br>
    		Password: <INPUT type=password name="password"> <br>
    		<INPUT type="submit" value="connexion"> <br>  
    		<!-- <a href="#"> <font size="2px" > Mot de passe oublié? </font></a> <br><br> -->
    	</div>
     
     
    	<?php
        if (isset($_POST['login']) AND isset($_POST['password'])   )  { 	 
    		$login= $_POST['login']; 
    		$password= $_POST['password'];
    		$password= md5($password);
     
    		@mysql_connect("xxxxxxxxxxxx") or die ("echec de la connection");
    		@mysql_select_db("xxxxxx") or die ("echec de selection de la base ");
    		$result = mysql_query("SELECT * FROM user WHERE user='$login' AND mdp='$password' ") or die( "Utilisateur ou mot de passe incorrect!" );
     
    		$ligne = mysql_fetch_array($result) ;
    		if ( $ligne !=""){
    			$user= $ligne["user"];
    			$id= $ligne["id"]; 
    			// creation variable de sessin
    			$_SESSION['login'] = $login; 
    			$_SESSION['id'] = $id;
    			// redirection si le login est bon
    			header('Location: site.php');
    			exit();
    		}
    		else {
    			echo "<div class='message'> <div class='message_alerte'> Utilisateur ou mot de passe incorrect! </div> </div>";
    		}
    	}	
    	?> 
        <div class="foot"><br> 
    		<a href=" enregistrement.php" >  Enregistrement </a> <br>
    	</div>  
     
      </body>
    </html>

  13. #13
    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
    Essai comme ceci :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
    // PARTIE TRAITEMENTS
     
    // Démarrage de la session
    session_start();
     
    // SI le formualire a été validé
    $retour_msg = '';
    if (isset($_POST['login'], $_POST['password'])) {
        $login = $_POST['login'];
        $password = $_POST['password'];
        $password = md5($password);
     
        mysql_connect("xxxxxxxxxxxx") or die('echec de la connection');
        mysql_select_db("xxxxxx") or die('echec de selection de la base');
        $result = mysql_query("SELECT * FROM user WHERE user='".mysql_real_escape_string($login)."' AND mdp='".mysql_real_escape_string($password)."'") or die('Utilisateur ou mot de passe incorrect!');
     
        $ligne = mysql_fetch_array($result);
        if ($ligne != '') {
            $user = $ligne['user'];
            $id = $ligne['id']; 
            // creation variable de sessin
            $_SESSION['login'] = $login; 
            $_SESSION['id'] = $id;
            // redirection si le login est bon
            header('Location: site.php');
            exit();
        }
        else {
            $retour_msg = 'Utilisateur ou mot de passe incorrect!';
        }
    }
     
    // PARTIE INTERFACE / HTML
    ?>
    <html>
        <head>
            <meta http-equiv="content-type" content="text/html; charset=UTF-8" />  
            <link rel="stylesheet" href="style.css" type="text/css" />
            <title> login </title>
        </head>
     
        <body>
     
        <div class="logo"> 
            <img src="./images/xxxx.jpg" height="30%" width="30%" alt="Logo xxx" title="xxxxx" />
        </div>
     
    <?php
    if (!empty($retour_msg)) {
    ?>
        <div class="message">
            <div class="message_alerte"><?php echo $retour_msg; ?></div>
        </div>
    <?php
    }
    ?>
     
        <div class="center"><br>
            <form method=post action="login.php">
            login: <input type=text name="login" /> <br />
            Password: <input type=password name="password" /> <br />
            <input type="submit" value="connexion" /> <br />
            <!-- <a href="#"> <font size="2px" > Mot de passe oublié? </font></a> <br><br> -->
            </form>
        </div>
     
        <div class="foot"><br /> 
            <a href=" enregistrement.php">  Enregistrement </a> <br />
        </div>  
     
        </body>
    </html>
    En somme, il n'y a pas lieu de faire tous ces traitements en plein code HTML.
    Certes, quand on débute on ne s'en aperçoit pas, mais le déroulement de Php et celui du HTML n'ont pas vraiment de rapport.
    Calquer le déroulement du code Php par rapport à celui du HTML est une erreur, et pour pleins de raisons, entre autre de faire une redirection à un moment qui n'est pas logique.

    Grosso modo (pour imager), c'est un peu comme le courrier papier.
    On a une enveloppe (entête) et une lettre (le HTML), on met une adresse, la lettre dans l'enveloppe.
    Puis on poste la lettre.
    Puis à un moment on dit que veut modifier l'adresse (l'entête).
    Trop tard, la lettre est partie.

    Donc en toute logique il faut d'abord définir l'entête en 1er, et c'est tout à la fin qu'il faut générer le HTML.
    C'est ce qui est fait dans le code ci-dessus.

    Pour faire cela Php offre tout ce qu'il faut, comme stocker un contenu (un message de retour) dans une variable, tableau, etc ... peu importe pour éviter de faire des echo au mauvais moment, mais pour l'exploiter là où on veut, quand on veut, et autant de fois qu'on veut.

    Donc en procédant ainsi on effectue au moins 2 choses :
    On aura plus ce genre d'erreur.
    Puis on gagne largement plus en souplesse dans la gestion du contenu de la partie HTML.
    En somme on sépare les traitements pure et le contenu.

    L'étape suivante c'est le MVC (Model, vue, controler : séparation en minimum 3 couches).


    En espérant que cela convienne à ce que tu recherche.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 316
    Points : 366
    Points
    366
    Par défaut
    Bonsoir,
    comme l'a dit RunCodePhp, en mettant ton code d'identification avant ton html et mettre un rechargement sur la même page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            <form method=post action="<?php $PHP_SELF ?>">
    ce qui évite un autre fichier pour l'identification
    Emmanuel
    --------------------------------------
    aucune réponse en message privé.
    les discussions doivent profiter à tous.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur Symfony2
    Inscrit en
    Novembre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Symfony2
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2008
    Messages : 48
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Alors merci pour:
    - mysql_real_escape_string: je ne connaissais pas, et heuresement que je la connais maintenant
    - m'avoir fait comprendre comment on peux faire la redirection sans n'avoir rien n'affiché avant, c'est vrais que je n'ai jamais séparé en 3 vues différentes du code web, car j'ai trés peu fait de code web.. Mais sur le principe, ça parait logique

    @notar: merci pour PHP_SELF

    Je teste tout ça Lundi ou mardi, et je te dirais si la redirection fonctionne
    Et puis je vais regarder le MVC pour la programmation web, j'apprendrais probablement des choses!

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Header() affiche une page blanche
    Bonjour,
    j'ai le même problème et je ne trouve pas toujour de solution. S'il vous plait, quelqu'un pour m'aider. Merci d'avance
    voici mon code

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    <?php
        $dbhost = "127.0.0.1";
        $dbuser = "repertoire";
        $dbpassword = "repertoire";
        $dbdatabase = "repertoire";
        $db = mysql_connect($dbhost, $dbuser, $dbpassword);
        mysql_select_db($dbdatabase, $db);
        mysql_query("SET NAMES 'utf8'");
        if(isset($_POST['submit'])) { 
            if(((isset($_POST['validid'])) == TRUE) && ((empty($_POST['validid'])) == FALSE)) {
                    if(is_numeric($_POST['validid']) == FALSE) {
                        $error = 1;
                    }
                    if($error == 1) {
                        header("Location: " . $config_basedir);   
                    }
                    else {
                        $validid = $_POST['validid'];
                   }
            }
           /* Verification si la fonction get_magic_quotes_gpc() est activé sur le Serveur, la fonction mysql_real_escape_string n'est plus utile dans ce cas */
            if(get_magic_quotes_gpc()){
                if($validid) { 
                    $etab_mo_sql = "UPDATE etablissement SET
                        nom = '" . (isset($_POST['nom']) ? ($_POST['nom']): '') .
                        "', sigle = '" . (isset($_POST['sigle']) ? ($_POST['sigle']): '') .
                        "', statut ='" . (isset($_POST['statut']) ? ($_POST['statut']): '')  .
                        "', autre ='" . (isset($_POST['autre']) ? ($_POST['autre']): '')  .
                        "', type_etab = '" . (isset($_POST['type_etab']) ? ($_POST['type_etab']): '')  .
                        "', presentation = '" . (isset($_POST['presentation']) ? ($_POST['presentation']): '') .
                        "', pays ='" . (isset($_POST['pays']) ? ($_POST['pays']): '') .
                        "', ville = '" . (isset($_POST['ville']) ? ($_POST['ville']): '') .
                        "', domaines = '" . (isset($_POST['domaines']) ? ($_POST['domaines']): '') .
                        "', genre_respo = '" . (isset($_POST['genre_respo']) ? ($_POST['genre_respo']): '') .
                        "', nom_respo = '" . (isset($_POST['nom_respo']) ? ($_POST['nom_respo']): '') .
                        "', adresse = '" . (isset($_POST['adresse']) ? ($_POST['adresse']): '') .
                        "', telephone = '" . (isset($_POST['telephone']) ? ($_POST['telephone']): '') .
                        "', couriel = '" . (isset($_POST['couriel']) ? ($_POST['couriel']): '') .
                        "', url = '" . (isset($_POST['url']) ? ($_POST['url']): '') .
                        "', ens_permanant =" . (isset($_POST['ens_permanant']) ? ($_POST['ens_permanant']): '') .
                        ", ens_vacataire = " . (isset($_POST['ens_vacataire']) ? ($_POST['ens_vacataire']): '') .
                        ", etd_fille = " . (isset($_POST['etd_fille']) ? ($_POST['etd_fille']): '') .
                        ", etd_garcon = " . (isset($_POST['etd_garcon']) ? ($_POST['etd_garcon']): '') .
                        ", etd_total = " . (isset($_POST['etd_total']) ? ($_POST['etd_total']): '') .
                    " WHERE id = ". $validid . ";";
     
                    $resultat = mysql_query($etab_mo_sql);
                    if($resultat) {
                        header("Location: " . $config_basedir . "/view_etab.php");
                        exit;
                    }
                    else {
    		    $message  = 'Requête invalide : ' . mysql_error() . "\n";
                        $message .= 'Requête complète : ' . $etab_mo_sql;
                        die($message);
                    }
                }
                else {
                    $etab_sql = "INSERT INTO etablissement(nom, sigle, statut, autre, type_etab, presentation, pays, ville, domaines, genre_respo, nom_respo, adresse, telephone, couriel, url, ens_permanant, ens_vacataire, etd_fille, etd_garcon, etd_total)
                    values('"
                    . (isset($_POST['nom']) ? ($_POST['nom']): '')
                    . "', '" . (isset($_POST['sigle']) ? ($_POST['sigle']): '')
                    . "', '" . (isset($_POST['statut']) ? ($_POST['statut']): '')
                    . "', '" . (isset($_POST['autre']) ? ($_POST['autre']): '')
                    . "', '" . (isset($_POST['type_etab']) ? ($_POST['type_etab']): '') 
                    . "', '" . (isset($_POST['presentation']) ? ($_POST['presentation']): '') 
                    . "', '" . (isset($_POST['pays']) ? ($_POST['pays']): '')
                    . "', '" . (isset($_POST['ville']) ? ($_POST['ville']): '')
                    . "', '" . (isset($_POST['domaines']) ? ($_POST['domaines']): '')
                    . "', '" . (isset($_POST['genre_respo']) ? ($_POST['genre_respo']): '')
                    . "', '" . (isset($_POST['nom_respo']) ? ($_POST['nom_respo']): '')
                    . "', '" . (isset($_POST['adresse']) ? ($_POST['adresse']): '')
                    . "', '" . (isset($_POST['telephone']) ? ($_POST['telephone']): '')
                    . "', '" . (isset($_POST['couriel']) ? ($_POST['couriel']): '')
                    . "', '" . (isset($_POST['url']) ? ($_POST['url']): '')
                    . "', '" . (isset($_POST['ens_permanant']) ? ($_POST['ens_permanant']): '')
                    . "', '" . (isset($_POST['ens_vacataire']) ? ($_POST['ens_vacataire']): '')
                    . "', '" . (isset($_POST['etd_fille']) ? ($_POST['etd_fille']): '')
                    . "', '" . (isset($_POST['etd_garcon']) ? ($_POST['etd_garcon']): '')
                    . "', '" . (isset($_POST['validid']) ? ($_POST['validid']): '') 
                    . "' )";
                    $resultat = mysql_query($etab_sql);
                    if($resultat){
                        header("Location: " . $config_basedir . "/view_etab.php");
                        exit;
                    }
                    else{
                        $message  = 'Requête invalide : ' . mysql_error() . "\n";
                        $message .= 'Requête complète : ' . $etab_sql;
                        die($message);
                    }
                }
            }
            else{
                 if($validid) { 
                    $etab_mo_sql = "UPDATE etablissement SET
                        nom = '" . (isset($_POST['nom']) ? (mysql_real_escape_string($_POST['nom'])): '') .
                        "', sigle = '" . (isset($_POST['sigle']) ? (mysql_real_escape_string($_POST['sigle'])): '') .
                        "', statut ='" . (isset($_POST['statut']) ? (mysql_real_escape_string($_POST['statut'])): '')  .
                        "', autre ='" . (isset($_POST['autre']) ? (mysql_real_escape_string($_POST['autre'])): '')  .
                        "', type_etab = '" . (isset($_POST['type_etab']) ? (mysql_real_escape_string($_POST['type_etab'])): '')  .
                        "', presentation = '" . (isset($_POST['presentation']) ? (mysql_real_escape_string($_POST['presentation'])): '') .
                        "', pays ='" . (isset($_POST['pays']) ? (mysql_real_escape_string($_POST['pays'])): '') .
                        "', ville = '" . (isset($_POST['ville']) ? (mysql_real_escape_string($_POST['ville'])): '') .
                        "', domaines = '" . (isset($_POST['domaines']) ? (mysql_real_escape_string($_POST['domaines'])): '') .
                        "', genre_respo = '" . (isset($_POST['genre_respo']) ? (mysql_real_escape_string($_POST['genre_respo'])): '') .
                        "', nom_respo = '" . (isset($_POST['nom_respo']) ? (mysql_real_escape_string($_POST['nom_respo'])): '') .
                        "', adresse = '" . (isset($_POST['adresse']) ? (mysql_real_escape_string($_POST['adresse'])): '') .
                        "', telephone = '" . (isset($_POST['telephone']) ? (mysql_real_escape_string($_POST['telephone'])): '') .
                        "', couriel = '" . (isset($_POST['couriel']) ? (mysql_real_escape_string($_POST['couriel'])): '') .
                        "', url = '" . (isset($_POST['url']) ? (mysql_real_escape_string($_POST['url'])): '') .
                        "', ens_permanant =" . (isset($_POST['ens_permanant']) ? (mysql_real_escape_string($_POST['ens_permanant'])): '') .
                        ", ens_vacataire = " . (isset($_POST['ens_vacataire']) ? (mysql_real_escape_string($_POST['ens_vacataire'])): '') .
                        ", etd_fille = " . (isset($_POST['etd_fille']) ? (mysql_real_escape_string($_POST['etd_fille'])): '') .
                        ", etd_garcon = " . (isset($_POST['etd_garcon']) ? (mysql_real_escape_string($_POST['etd_garcon'])): '') .
                        ", etd_total = " . (isset($_POST['etd_total']) ? (mysql_real_escape_string($_POST['etd_total'])): '') .
                    " WHERE id = ". $validid . ";"; 
                    $resultat = mysql_query($etab_mo_sql);
                    if($resultat) {
                        header("Location: " . $config_basedir . "/view_etab.php");
                        exit;
                    }
                    else {
                        $message  = 'Requête invalide : ' . mysql_error() . "\n";
                        $message .= 'Requête complète : ' . $etab_mo_sql;
                        die($message);
                    }
                }
                else {
                    $etab_sql = "INSERT INTO etablissement(nom, sigle, statut, autre, type_etab, presentation, pays, ville, domaines, genre_respo, nom_respo, adresse, telephone, couriel, url, ens_permanant, ens_vacataire, etd_fille, etd_garcon, etd_total)
                    values('"
                    . (isset($_POST['nom']) ? (mysql_real_escape_string($_POST['nom'])): '')
                    . "', '" . (isset($_POST['sigle']) ? (mysql_real_escape_string($_POST['sigle'])): '')
                    . "', '" . (isset($_POST['statut']) ? (mysql_real_escape_string($_POST['statut'])): '')
                    . "', '" . (isset($_POST['autre']) ? (mysql_real_escape_string($_POST['autre'])): '') 
                    . "', '" . (isset($_POST['type_etab']) ? (mysql_real_escape_string($_POST['type_etab'])): '') 
                    . "', '" . (isset($_POST['presentation']) ? (mysql_real_escape_string($_POST['presentation'])): '')
                    . "', '" . (isset($_POST['pays']) ? (mysql_real_escape_string($_POST['pays'])): '') 
                    . "', '" . (isset($_POST['ville']) ? (mysql_real_escape_string($_POST['ville'])): '')
                    . "', '" . (isset($_POST['domaines']) ? (mysql_real_escape_string($_POST['domaines'])): '')
                    . "', '" . (isset($_POST['genre_respo']) ? (mysql_real_escape_string($_POST['genre_respo'])): '')
                    . "', '" . (isset($_POST['nom_respo']) ? (mysql_real_escape_string($_POST['nom_respo'])): '')
                    . "', '" . (isset($_POST['adresse']) ? (mysql_real_escape_string($_POST['adresse'])): '')
                    . "', '" . (isset($_POST['telephone']) ? (mysql_real_escape_string($_POST['telephone'])): '')
                    . "', '" . (isset($_POST['couriel']) ? (mysql_real_escape_string($_POST['couriel'])): '')
                    . "', '" . (isset($_POST['url']) ? (mysql_real_escape_string($_POST['url'])): '')
                    . "', '" . (isset($_POST['ens_permanant']) ? (mysql_real_escape_string($_POST['ens_permanant'])): '')
                    . "', '" . (isset($_POST['ens_vacataire']) ? (mysql_real_escape_string($_POST['ens_vacataire'])): '') 
                    . "', '" . (isset($_POST['etd_fille']) ? (mysql_real_escape_string($_POST['etd_fille'])): '')
                    . "', '" . (isset($_POST['etd_garcon']) ? (mysql_real_escape_string($_POST['etd_garcon'])): '')
                    . "', '" . (isset($_POST['etd_total']) ? (mysql_real_escape_string($_POST['etd_total'])): '') 
                    . "' )";
                    $resultat = mysql_query($etab_sql);
                    if($resultat){
                        header("Location: " . $config_basedir . "/view_etab.php");
                        exit;
                    }
                    else{
                        $message  = 'Requête invalide : ' . mysql_error() . "\n";
                        $message .= 'Requête complète : ' . $etab_sql;
                        die($message);
                    }
                }
     
            } 
        }
        ob_end_flush();
    ?>

  17. #17
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Je me suis permis de reprendre ton code complètement, histoire de te montrer qu'il est possible de faire beaucoup plus court et lisible :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <?php
     
    $dbhost = "127.0.0.1";
    $dbuser = "repertoire";
    $dbpassword = "repertoire";
    $dbdatabase = "repertoire";
    $db = mysql_connect($dbhost, $dbuser, $dbpassword);
    mysql_select_db($dbdatabase, $db);
    mysql_query("SET NAMES 'utf8'");
     
    // nettoyage en profondeur des magic_quotes
    if (get_magic_quotes_gpc() && isset($_POST)) {
       array_walk_recursive($_POST, function(&$v, $k) { $v = stripslashes($v); });
    }
     
    // données formatées pour SQL : array(field => value)
    $data = array();
     
    // fonction de récupération et de formatage des données
    $field =
       function($post_key, $type = 'str', $table_field = null) use (&$data)
       {
          $name  = (null === $table_field) ? $post_key : $table_field;
          $value = isset($_POST[$post_key]) ? $_POST[$post_key] : '';
     
          if ($type === 'str') {
             $data[$name] = "$name = '".mysql_real_escape_string($value)."'";
          }
          else
          if ($type === 'int') {
             $data[$name] = $name.' = '.$value;
          }
       };
     
    if (isset($_POST['submit'])) {
       if ( ! empty($_POST['validid'])) {
          if ( ! ctype_digit($_POST['validid'])) {
             // ici tu peux faire un echo $config_basedir pour savoir ce qui est passé
             header("Location: ".$config_basedir);
             ob_end_flush();
             exit;
          }
          $validid = (int)$_POST['validid'];
       }
     
       // valeur des champs communs de la table à partir de $_POST
       $field('nom');
       $field('sigle');
       $field('statut');
       $field('autre');
       $field('type_etab');
       $field('presentation');
       $field('pays');
       $field('ville');
       $field('domaines');
       $field('genre_respo');
       $field('nom_respo');
       $field('adresse');
       $field('telephone');
       $field('couriel');
       $field('url');
       $field('ens_permanant', 'int');
       $field('ens_vacataire', 'int');
       $field('etd_fille', 'int');
       $field('etd_garcon', 'int');
       $field('etd_total', 'int');
     
       if ($validid) {
          $sql = "UPDATE etablissement SET ".implode(', ', $data).' WHERE id = '.$validid;
       }
       else {
          // création de l'enregistrement : la valeur de etd_total est remplacée par validid
          $data['etd_total'] = 'etd_total = '.$validid;
          // syntaxe alternative INSERT pour MySQL
          $sql = 'INSERT INTO etablissement SET '.implode(', ', $data);
       }
     
       if (mysql_query($sql)) {
          header("Location: ".$config_basedir."/view_etab.php");
       }
       else {
          die('Requête invalide : '.mysql_error()."\n".'Requête complète : '.$sql);
       }
    }
    ob_end_flush();
    Code pour PHP 5.3+ et comme toujours je n'ai rien testé, alors croisage des doigts

  18. #18
    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
    Citation Envoyé par nef02
    Header() affiche une page blanche
    Le syndrome de la page blanche
    Active l'affichage des erreurs de Php, ceci devrait permettre d'en savoir plus en cas d'erreur (directive display_error à mettre à On dans le php.ini).

    Tu n'as pas mis de point d'arrêt (un exit) après l'appel à header('Location: ...').
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour et merci pour les réponses.
    Merci à rawsrc pour ce code génialement optimisé Toutefois, le problème n'a pas changé. En fait, je c'est au niveau serveur que j'ai une page blanche et je n'ai pas posé la question à l'hébergeur sur sa configuration. Tout fonctione bien en locale.
    J'ai affiché la variable "$config_basedir " comme m'a suggerer rawsrc et j'ai cet adresse "http://repertoire.onlinewebshop.net" qui est bien l'adresse de ma page d'accueil. En regardant dans ftp, j'ai essayé de changé en utilisant le chemin du dossier de mon site
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $config_basedir = "./repertoire.onlinewebshop.net";
    , mais toujours une page blanche.
    Je ne sais pas si en regardant le comportement après validation du formulaire à ce cette adresse, vous pouvez mieux m'aider.
    Merci

  20. #20
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,

    As tu regardé ceci ?

    Citation Envoyé par RunCodePhp
    Active l'affichage des erreurs de Php, ceci devrait permettre d'en savoir plus en cas d'erreur (directive display_error à mettre à On dans le php.ini).
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/11/2012, 11h44
  2. Réponses: 1
    Dernier message: 18/11/2009, 13h28
  3. Réponses: 0
    Dernier message: 03/08/2009, 21h02
  4. Une Action fonctionne sous FireFox, mais pas sur IE6/7
    Par 19cmos83 dans le forum Struts 1
    Réponses: 1
    Dernier message: 29/10/2008, 19h45
  5. Fonctionne sous oracle mais pas sur mysql ?
    Par dauphin34000 dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/09/2008, 17h27

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