> Tous les forums > Forum Forum des Webmasters
 erreur au moment du header location
Ajouter un message à la discussion
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]
t14
  Posté le 13/12/2019 @ 10:39 
Aller en bas de la page 
Petit astucien

Bonjour,

J'ai un site en PHP de suppression et de mise à jour de données dans une base MYSQL.

Pour la suppression, voici le script :

$id = $_GET['id'];

// ---------- suppression des fichiers images/documents -----------------

$select = "SELECT acte_dc_lien FROM individus where id='$id'";

$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

$row = mysql_fetch_array($result);

unlink($row['acte_dc_lien']);

// ---------- suppression des lien_fichiers dans la base -----------------

$result2=mysql_query("UPDATE individus SET acte_dc='' WHERE id='$id'");

$result3=mysql_query("UPDATE individus SET acte_dc_lien='' WHERE id='$id'");

header('Location: modif_indiv.php?id='.$id.'');

mysql_close();

exit;

Lors d'une suppression, j'ai une erreur sur la ligne du header :

Avertissement : impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /mnt/111/sdb/b/a/genfamille/connexion/connexion.php:2) dans / mnt / 111 / sdb / b / a / genfamille / gestion / gestion / supp_acte_dc.php sur la ligne 24

Pour le script de mise à jour, la ligne du header est :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille.'');

Et l'erreur est :

Avertissement : impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /mnt/111/sdb/b/a/genfamille/connexion/connexion.php:2) dans / mnt / 111 / sdb / b / a / genfamille / gestion / gestion / maj_bd_indiv.php à la ligne 592

Je n'arrive pas à résoudre ce problème !!!!!????

Publicité
Jean-Pierre
 Posté le 13/12/2019 à 11:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Comme ça en vitesse je dirais :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille.'');

Un joyeux mélange de simple et double quote...

t14
 Posté le 13/12/2019 à 11:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Jean-Pierre a écrit :

Comme ça en vitesse je dirais :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille.'');

Un joyeux mélange de simple et double quote...

A la fin, c'est 2 simples quotes à la suite

t14
 Posté le 13/12/2019 à 11:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
t14 a écrit :
Jean-Pierre a écrit :

Comme ça en vitesse je dirais :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille.'');

Un joyeux mélange de simple et double quote...

A la fin, c'est 2 simples quotes à la suite

J'ai trouvé une solution : en passant par du javascript.

Mais si quelqu'un a une autre solution, je suis preneur ...............

midnightblue
 Posté le 13/12/2019 à 14:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui, bien sur, on peut passer par une redirection javascript...

En fait, en ce qui concerne PHP ,l'erreur vient probablement du fait que du html est généré avant la fonction header.


MAUVAIS

<?php
echo "<p>j'affiche du html</p>";
if($tache=="supprimer"){header("location:page.php");}
?>

BON

<?php
if($tache=="supprimer"){header("location:page.php");}
echo "<p>j'affiche du HTML</p>";

Donc, normalement, trouver le html avant la fonction header pour le supprimer ou le mettre à la bonne place, c'est résoudre le problème.

*µ*

zoulouman
 Posté le 13/12/2019 à 16:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

On va t'appeler Atila des entêtes, non de dieu !

Tu as fait attention que les headers ne soient pas déjà transmis avant de faire ta redirection ?
Une redirection relative, c'est vraiment pas l'idéal. Il faut que tu définisses l'élément "base" pour éviter les soucis. Pour que le navigateur possède un point de repère.
Et bien entendu, il faut aussi renvoyer un code de status 301 ou 302. Si tu balances un 200 avec une redirection, ça va pas le faire. Enfin pas avec tous les navigateurs...

t14
 Posté le 13/12/2019 à 16:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci beaucoup pour tes explications, mais dans mon script, je n'ai pas de html :

<?php include ('../../connexion/connexion.php');

$id = $_GET['id'];

// ---------- suppression des fichiers images/documents -----------------

$select = "SELECT acte_dc_lien FROM individus where id='$id'";

$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

$row = mysql_fetch_array($result);

unlink($row['acte_dc_lien']);

// ---------- suppression des lien_fichiers dans la base -----------------

$result2=mysql_query("UPDATE individus SET acte_dc='' WHERE id='$id'");

$result3=mysql_query("UPDATE individus SET acte_dc_lien='' WHERE id='$id'");

echo '<script language="javascript">document.location="http://genfamille.free.fr/gestion/index.php?page=fiche_indiv&id='.$id.'"</script>';

mysql_close();

exit;

?>

t14
 Posté le 13/12/2019 à 16:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
zoulouman a écrit :

On va t'appeler Atila des entêtes, non de dieu !

Tu as fait attention que les headers ne soient pas déjà transmis avant de faire ta redirection ?
Une redirection relative, c'est vraiment pas l'idéal. Il faut que tu définisses l'élément "base" pour éviter les soucis. Pour que le navigateur possède un point de repère.
Et bien entendu, il faut aussi renvoyer un code de status 301 ou 302. Si tu balances un 200 avec une redirection, ça va pas le faire. Enfin pas avec tous les navigateurs...

Oupppssssssssss , j'ai du mal à te suivre .......

Jean-Pierre
 Posté le 14/12/2019 à 12:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Je me pose un question : pourquoi cette concaténation vide après ta variable $famille ?

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille.'');

JP

Publicité
t14
 Posté le 14/12/2019 à 18:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Jean-Pierre a écrit :

Je me pose un question : pourquoi cette concaténation vide après ta variable $famille ?

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille.'');

JP

Après $famille, c'est deux côtes. Celle de Location et celle de $famille

Jean-Pierre
 Posté le 14/12/2019 à 19:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

?

Mais ça ne sert à rien puisque tu ne concatènes rien après $famille.

Ai-je raison ?

Pour t'en convaincre teste :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille);

Et ça fonctionnera aussi bien.

D'ailleurs j'ai aussi remarqué cette "coquille" à d'autres niveaux.

t14
 Posté le 15/12/2019 à 10:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour Jean-Pierre,

Pour mon script de suppression, si je redirige comme tu me le dis :

header('Location: ../index.php?page=fiche_indiv&id='.$id);

j'ai l'erreur :

Avertissement : impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /mnt/111/sdb/b/a/genfamille/connexion/connexion.php:2) dans / mnt / 111 / sdb / b / a / genfamille / gestion / gestion / supp_acte_dc.php à la ligne 25

Ligne 25 qui correspond au header.

Pour mon script de mise à jour de la base, si je redirige comme tu me le dis :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille);

j'ai l'erreur :

Avertissement : impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /mnt/111/sdb/b/a/genfamille/connexion/connexion.php:2) dans / mnt / 111 / sdb / b / a / genfamille / gestion / gestion / maj_bd_indiv.php à la ligne592

Ligne 592 qui correspond au header.

Ce qui est bizarre, ce sont des scripts que j'ai repris à l'identique sur un de mes autre sites. Et ces précédents fonctionnent très bien !!!!????



Modifié par t14 le 15/12/2019 10:45
Jean-Pierre
 Posté le 15/12/2019 à 12:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Je te parlais seulement de :

header('Location: ../gestion/index.php?page=fiche_indiv&id='.$id.'&famille='.$famille);

ce dont tu parles vers le bas de ta réponse d'ailleurs.

Là... aux fruits de tes tests, je sèche lamentablement car en PHP une concaténation ne servant strictement à rien et évitant un message d'erreur ; c'est mystérieux...

Au fait, je te propose à cet effet de tester et identifier la différence de cette concat d'une string vide à l'aide d'un simple echo comme ceci :

echo 'Version entière : ' .$id.'&famille='.$famille.'');

echo '<br />';

echo 'Version épurée : ' .$id.'&famille='.$famille);

Ceci dit, n'oublie pas les réponses de mes deux petits camarades en amont de ce message concernant :

.../... impossible de modifier les informations d'en-tête - en-têtes déjà envoyés .../...

.

Pour ta question finale :

Ce qui est bizarre, ce sont des scripts que j'ai repris à l'identique sur un de mes autre sites. Et ces précédents fonctionnent très bien !!!!????

Je pense fortement que cela provient de la version PHP des serveurs respectifs.

t14
 Posté le 16/12/2019 à 11:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

J'ai rajouté une parenthèse en début des lignes pour éviter une remontée d'erreur :

echo ('Version entière : ' .$id.'&famille='.$famille.'');

echo '<br />';

echo ('Version épurée : ' .$id.'&famille='.$famille);

Et le résultat qui remonte dans les deux cas est correct et identique .........

Mais maintenant je ne sais plus comment je dois interpréter ces résultat !!!!!



Modifié par t14 le 16/12/2019 11:55
Jean-Pierre
 Posté le 16/12/2019 à 16:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Arffff ma parenthèse ouvrante oubliée ; c'est vrai Ou bien j'ai ajouté en trop la parenthèse finale...

Donc tu as la preuve que c'est identique en path et que la sting vide ne sert à rien.

Partant de là, nous avançons comme dirait ma petite Licette ...

Tu pourrais déjà rectifier en ce sens la fin de ton header JS

Si tu confirmes que tout est OK (en header sauce JS) ; ce serait déjà bien et peut-être le signe que priorité est donnée en JS par rapport en PHP suivant tes messages d'erreurs retournés et les commentaires dito.

midnightblue
 Posté le 16/12/2019 à 17:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci beaucoup pour tes explications, mais dans mon script, je n'ai pas de html :

<?php include ('../../connexion/connexion.php');

$id = $_GET['id'];

// ---------- suppression des fichiers images/documents -----------

etc.

D'après mon humble avis, il se pourrait que le HTML soit généré dans la page connexion.php appelée par include en tête du script.

*µ*

Jean-Pierre
 Posté le 16/12/2019 à 20:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Bien vu

Publicité
t14
 Posté le 17/12/2019 à 10:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
midnightblue a écrit :

Merci beaucoup pour tes explications, mais dans mon script, je n'ai pas de html :

<?php include ('../../connexion/connexion.php');

$id = $_GET['id'];

// ---------- suppression des fichiers images/documents -----------

etc.

D'après mon humble avis, il se pourrait que le HTML soit généré dans la page connexion.php appelée par include en tête du script.

*µ*

Voici mon script connexion.php :

<?php

$host = 'sql.free.fr';

$user = '****';

$pass = '****';

$db = 'genfamille';

$link = mysql_connect ($host,$user,$pass) or die ('Erreur1 : '.mysql_error() );

mysql_select_db($db) or die ('Erreur2 :'.mysql_error()

?>

midnightblue
 Posté le 17/12/2019 à 12:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Le cas échéant die(Erreur1) génère du HTML : "Erreur1" (et Erreur2 à la ligne suivante)...Peut être la forme sans commentaire serait préférable : die().

*µ*



Modifié par midnightblue le 17/12/2019 12:56
t14
 Posté le 17/12/2019 à 15:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
midnightblue a écrit :

Le cas échéant die(Erreur1) génère du HTML : "Erreur1" (et Erreur2 à la ligne suivante)...Peut être la forme sans commentaire serait préférable : die().

*µ*

Si pour la connexion j'écris :

$link = mysql_connect($host,$user,$pass);

mysql_select_db($db);

if (!$link)

{echo('Connexion base échouée: ' . mysql_error());}

J'ai toujours le même message d'erreur, soit : Avertissement : impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (sortie démarrée à /mnt/111/sdb/b/a/genfamille/connexion/connexion.php:2) dans / mnt / 111 / sdb / b / a / genfamille / gestion / gestion / supp_acte_dc.php à la ligne 25, avec le "Header Location".

midnightblue
 Posté le 17/12/2019 à 22:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Avec echo ('truc') on génère aussi du HTML...

Essaie un truc du style :

$link = mysql_connect ($host,$user,$pass) or die ();

*µ*

t14
 Posté le 18/12/2019 à 10:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
midnightblue a écrit :

Avec echo ('truc') on génère aussi du HTML...

Essaie un truc du style :

$link = mysql_connect ($host,$user,$pass) or die ();

*µ*

Pareil !

Jean-Pierre
 Posté le 18/12/2019 à 13:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Bon... de guerre lasse, si vraiment ton header passe via une pincée de JS, et si tu préfères éviter cela, dis-toi bien que tous les "sites" bâtis autour de WordPress et équivalents s'écrouleraient do-facto sans JS !

Alors console-toi avec cet argument si personne n'arrive à arranger ton affaire.

midnightblue
 Posté le 18/12/2019 à 15:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Le message d'erreur signale un problème à la ligne 25 de supp_acte_dc.php... Que dit cette ligne ?

*µ*



Modifié par midnightblue le 18/12/2019 15:18
t14
 Posté le 18/12/2019 à 16:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
midnightblue a écrit :

Le message d'erreur signale un problème à la ligne 25 de supp_acte_dc.php... Que dit cette ligne ?

*µ*

La ligne 25 c'est : header('Location: ../index.php?page=fiche_indiv&id='.$id);

midnightblue
 Posté le 18/12/2019 à 19:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Très bien. Vérifier maintenant si aucun HTML n'est généré avant cette ligne 25. Donc voir les lignes de 1 à 24.

*µ*

Publicité
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Message d' erreur au moment du dl [resolu]
commander un onglet par survol au lieu du clic
HTTP 500 Erreur interne au serveur
erreur du code
erreur du code
placer le corps du tableau au bon endroit
Promotion du web au Cameroun (Afrique)
aide pour une photo au passage du curseur
Index of s'affiche au lieu du site
au sujet du référencement
Plus de sujets relatifs à erreur au moment du header location
 > Tous les forums > Forum Forum des Webmasters