Partage
  • Partager sur Facebook
  • Partager sur Twitter

DEFINE BASEURL

Anonyme
    20 janvier 2017 à 14:17:41

    define('BASEURL', $_SERVER['DOCUMENT_ROOT'].'/mon-interface/');
    //dans mon helpers 
    function login($visit_id){
    	$_SESSION['SVisit'] = $visit_id;
    	global $maBd;
    	$date = date("Y-m-d H:i:s");
    	$maBd->query("UPDATE utilisateurs SET user_last_logged = '$date' WHERE utilisateurId = '$visit_id'") ;
    	$_SESSION['success_flash'] = 'Vous êtes à présent connecté';
    	header("Location: index.php");
    //Dans mon ficher connection
    require_once BASEURL.'helpers/helpers.php';


    Bonjour à vous,

    Je rencontre un probllème de header fonctionnant en local mais plus en hébergement.

    Je m'explique a la racine site :  connection à la base. helpers (regroupant function et message d'erreurs) puis un répertoire de backend avec un login .php.

    Les functions messages erreurs marchent parfaitement dans mon backend. Ce qui ne fonctionne pas c'est juste le header vers l'index.

    J'ai codé un define BASEURL à la racine.

    Je précise que ma connection marche puisque que lorsque je vais via la barre d'adresse à index backend, j'ai bien les éléments et je peux me déconnecter.

    C juste le header vers l'index qui ne fonctionne pas.

    J'espère avoir été suffisamment claire.

    -
    Edité par Anonyme 20 janvier 2017 à 14:24:57

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2017 à 14:23:51

      Parce qu'il y a une sortie avant ? Et ça marche en local parce que tu as un output_buffering qui cache l'erreur sous le tapis ?

      Je ne comprends pas le lien que tu fais entre header et ton BASEURL.

      -
      Edité par julp 20 janvier 2017 à 14:26:57

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        20 janvier 2017 à 14:25:42

        try {
            $maBd = mysqli_connect($hostname, $username, $password, $database);
            $maBd->set_charset('utf8');
        //Serait ce le session start ? idem quand je baisse le session start sous le define 
           session_start();
            //echo "Bien connecté"; Verif OK
            }
        catch(mysqli_sql_exception $ex) {
        //Serait la ligne suivante ?
           echo "Erreur SQL : " . $ex->getMessage();
        }


        NOn pourtant il n'y a pas de sortie avant.

        Lien que je fais entre mon BASEURL et mon header :
        Puisque lorsque je vais sur l'index via la barre d'addresse navigateur, ca marche.... Je me dis que le soucis est sur l'header

        avant j'ai mon code relatif à la connection et un session_start

        -
        Edité par Anonyme 20 janvier 2017 à 14:34:14

        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2017 à 14:29:50

          C'est toi qui le dit ... Il suffit d'un espace, saut de ligne ou même un BOM (y compris "hérité" d'un fichier inclus avant) ! Si les erreurs sont désactivées (ce qui doit être le cas sur tout environnement de production), tu ne le verras pas (par la bien connue warning: headers alreay sent ...).

          Si tu mets :

          if (headers_sent($file, $line)) {
              printf('Sortie en %s, ligne %d', $file, $line);
          }
          

          Juste avant header, ça donne quoi ?

          -
          Edité par julp 20 janvier 2017 à 14:39:11

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            20 janvier 2017 à 14:36:12


            J'ai pourtant vérifié les espaces.

            Je replacé tes lignes de codes ou tu m'as dit et rien --> aucun message.

            puisqu'une fois le formulaire remplie correctement, je ne passe pas à la page index codée via mon header, j'ai tenté de me rendre sur mon index directement via la barre de nav et là je suis connectée normalement.

            C'est pourquoi j'en déduisais que mon define n'était pas porteur

            -
            Edité par Anonyme 20 janvier 2017 à 15:01:47

            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2017 à 17:52:54

              Si tu mets un echo après cet header, le vois-tu ? (il manque d'ailleurs un exit; derrière ton header('Location: ...)

              Par rapport au require_once :

              • si le script n'est pas trouvé, c'est fatal donc ça devrait se voir par une erreur (enfin pas en prod : même chose, si tu mets un echo après, le vois-tu ?)
              • si le script a déjà été inclus avant, l'instruction est ignorée mais est-ce que ça joue ? Mais, en dév, je pense que tu l'aurais vu si ça devait être problématique.

              Mais au lieu de chercher, n'as-tu pas, sur ledit hébergeur, accès aux logs ou au moins la possibilité d'activer temporairement toutes les erreurs ? (display_errors à on + error_reporting à E_ALL). Quitte éventuellement à le faire par du code :

              ini_set('display_errors', TRUE);
              error_reporting(-1);
              

              Parce que ce sont les seules raisons qui me viennent avec ce que tu donnes et toutes se traduisent par l'apparition d'une erreur.

              -
              Edité par julp 20 janvier 2017 à 17:54:49

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                21 janvier 2017 à 14:36:05

                Sortie en /../../../htdocs/monrepertoire/includes/head.php, ligne 21


                Bonjour et merci d'être là,

                Toujours en recherche sur ce sujet.

                Indication : si je met 1 exit derrière mon header --> mon form ne se réaffiche pas alors que l'action est bien codé vers la page.

                Ce que donnes ton code juste avant le header..... souci avec un include le head.

                la ligne 21 c'est l'ouverture d'un div Wrapper;

                -
                Edité par Anonyme 21 janvier 2017 à 14:40:20

                • Partager sur Facebook
                • Partager sur Twitter
                  21 janvier 2017 à 16:18:13

                  Le code complet de la page ? Parce que là, impossible de recoller les morceaux ni avoir une vue d'ensemble.

                  la ligne 21 c'est l'ouverture d'un div Wrapper;

                  Tu balances donc bien du HTML avant une fonction d'entête, elle n'est donc plus censée fonctionner.

                  Quelque part ça n'a pas de sens de toute façon d'envoyer du HTML avant une redirection : les navigateurs suivent directement la redirection, ils n'affichent pas le corps de la page au client quand elle a un statut de redirection (301/302). Il n'y a que les clients qui ne les suivent pas (robots mal foutus essentiellement) qui le lirait (si encore ça a un intérêt pour eux).

                  Comme toujours, il y a deux "solutions" :

                  • la rustine : sur ton environnement de production, tu caches l'erreur de conception sous le tapis comme en développement en activant l'output_buffering (ou en utilisant un ob_start - à éviter à moins de vraiment ne pas avoir le choix)
                  • tu corriges réellement ce problème de sorties en les identifiant et corrigeant. C'est parfois pas grand chose (un BOM, un saut de ligne entre ?> et <?php) sinon c'est du code à réorganiser (faire le traitement avant l'affichage du html) - mais c'est plutôt le second cas ici

                  -
                  Edité par julp 21 janvier 2017 à 16:41:22

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    24 janvier 2017 à 11:30:18

                    Bonjour,

                    Sur mon environnement de production, les erreurs sont activées et pas d'erreurs. c'est pourquoi j'ai ouvert ce sujet.

                    Je ne veux pas utiliser obj_start.... je veux un code correct et je cherche toujours ou est le probleme et s'il y a une facon de faire remonter les erreurs .

                    -
                    Edité par Anonyme 27 janvier 2017 à 15:06:05

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      27 janvier 2017 à 16:40:16

                      julp a écrit:

                      Mais au lieu de chercher, n'as-tu pas, sur ledit hébergeur, accès aux logs ou au moins la possibilité d'activer temporairement toutes les erreurs ? (display_errors à on + error_reporting à E_ALL). Quitte éventuellement à le faire par du code :

                      ini_set('display_errors', TRUE); error_reporting(-1); 

                      Parce que ce sont les seules raisons qui me viennent avec ce que tu donnes et toutes se traduisent par l'apparition d'une erreur.

                      -
                      Edité par julp 20 janvier 2017 à 17:54:49


                      Peux-tu m'indiquer comment mettre cela en place chez mon hébergeur ? Je ne comprend pas bien bien la

                      Merci à toi

                      Indice : Lorsque je code des exit(); derrière mes différents header, je retombe sur une page blanche
                      plusieurs header vers la même page.

                      Ce que j'ai du mal à comprendre c'est que tout fonctionne en local et que les erreurs sont activées.


                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 janvier 2017 à 17:06:40

                        Je ne comprends pas sur quoi tu bloques : qu'est-ce qui t'empêche de copier ces 2 lignes/instructions de code en début du ou des scripts concernés ? Elles ne dépendent pas de l'environnement, serveur, version de PHP ou ... (à moins qu'ini_set ne soit vraiment blacklistée via disable_functions)

                        Ce que j'ai du mal à comprendre c'est que tout fonctionne en local et que les erreurs sont activées.

                        output_buffering ou pas en local ? [En local] Regardes la sortie d'un phpinfo, c'est écrit (le deuxième grand tableau). S'il est à on (ou toute valeur numérique), édites ton php.ini, mets-le à off, redémarres Apache et retestes ton code. Les fameux warning: headers already sent devraient apparaître, les mettant ainsi en évidence.

                        -
                        Edité par julp 27 janvier 2017 à 17:13:28

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          27 janvier 2017 à 17:25:43

                          Bonjour Julp,

                          Output_buffering en local est déjà sur off et je n'ai aucune erreur, ma page s'articule avec les headers comme souhaité.

                          Juste des soucis sur le serveur hébergement.

                          AYES j'obtiens mes erreurs chez l'hébergeur. Je vais tenter de m'en sortir. Merci.

                          Erreur également comme il était signalé au début avec un div qui s'ouvre en fin de head et qui se referme après tout le html juste avant le footer.

                          Ce que je ne comprend pas c'est que lorque j'essaie de coder les head et la nav sans les includes, cela ne marche pas. J'ai besoin d'un break  je reprendrai cela plus tard parce que là je bloque de chez bloque.

                          -
                          Edité par Anonyme 27 janvier 2017 à 18:48:45

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            29 janvier 2017 à 20:41:14

                            Bonjour,

                            Je crois avoir compris ce qui ce passe :

                            Contexte : page codée en deux partie  un tableau /données récapitulatif avec direction via heder vers serconde partie : formulaire ajout ou modif. Tout est codé sur la même page le header revient sur le tableau selon que l'on ajoute ou que l'on modifie.

                            Les balises head et la navigation sont en includes (le "head" démarre au doctype") ---> Ne serait pas cela qui provoque une erreur à chaque direction header.

                            Par contre, je ne comprend toujours pas pourquoi tout marche en local et pas sur le serveur alors output buffering est paramétré pour donner les erreurs.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            DEFINE BASEURL

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown