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.
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
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);
}
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
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 :
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
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 .
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 :
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.
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.
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.
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.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli