include et header qui cohabitent mal

include et header qui cohabitent mal - PHP - Programmation

Marsh Posté le 08-11-2005 à 22:41:30    

Je rencontre un bug que je n'arrive pas à comprendre.
 
J'ai un fichier PHP de traitement de données qui alimente une base MySQL puis se redirige vers une autre page. Ce fichier marche très bien si un des include de la page est remplacé par sa source. Dans le cas contraire, le traitement est bien effectué (mise à jour de la base), mais le header ne fonctionne pas, ce qui me donne une page vierge de tout code, donc blanche.
 
Ci dessous le code, et celui du fichier inclus.
include '../general/securisation.php';
 
Script PHP

Code :
  1. <?php
  2. /* Ce script permet le traitement des données sans affichage
  3. *  d'écrans intermédiaires. En cas d'erreur, une page affiche
  4. *  l'erreur en question*/
  5. // Déclaration du niveau d'autorisation requis pour cette page
  6. $autorisation = 4;
  7. $url = 'x.php';
  8. include '../general/securisation.php';
  9. // Déclaration des paramètres de connexion
  10. include '../general/connexion.php';
  11. // Connexion au serveur
  12. mysql_connect(hote, utilisateur, motdepasse) or die("erreur de connexion au serveur" );
  13. mysql_select_db(bdd) or die("erreur de connexion a la base de donnees" );
  14. // Récupération des paramètres
  15. $action = $_GET["action"] ;
  16. $id = $_GET["id"] ;
  17. // Suppression
  18. if ($action == 'supprimer'){
  19.  $requete ='DELETE from adherents WHERE id='.$id;
  20.  $resultat = mysql_query($requete);
  21.  if(!$resultat) {
  22.   echo 'Erreur lors de la suppression dans la base de
  23.    donn&eacute;es. />';
  24.  }
  25.  else {
  26.   mysql_close();
  27.   header('location: listes.php');
  28.   exit();
  29.  }
  30. }
  31. // Archivage
  32. if ($action == 'archiver'){
  33. // Sélection des informations dans la première table
  34.  $requete = 'SELECT id, nom, prenom, unite, numad, naissance, adresse,
  35.   cp, ville, tel1, tel2, tel3, email, email2, commentaires
  36.   FROM adherents WHERE id="'.$id;
  37.  $resultat = mysql_query($requete);
  38.  while($ligne = mysql_fetch_array($resultat)){
  39.   $id = $ligne[0];
  40.   $nom = $ligne[1];
  41.   $prenom = $ligne[2];
  42.   $unite = $ligne[3];
  43.   $numad = $ligne[4];
  44.   $naissance = $ligne[5];
  45.   $adresse = $ligne[6];
  46.   $cp = $ligne[7];
  47.   $ville = $ligne[8];
  48.   $tel1 = $ligne[9];
  49.   $tel2 = $ligne[10];
  50.   $tel3 = $ligne[11];
  51.   $email1 = $ligne[12];
  52.   $email2 = $ligne[13];
  53.   $commentaires = $ligne[14];
  54.  }
  55. // Insertion des informations dans la table d'archive
  56.  $requete1 = "INSERT  INTO archivead (nom, prenom, unite, numad, naissance,
  57.   adresse, cp, ville, tel1, tel2, tel3, email, email2, commentaires)
  58.   VALUES ( '$nom', '$prenom', '$unite', '$numad', '$naissance', '$adresse',
  59.   '$cp', '$ville', '$tel1', '$tel2', '$tel3', '$email1', '$email2','$commentaires')";
  60.  $requete2 ='DELETE from adherents WHERE id='.$id;
  61.  $resultat1 = mysql_query($requete1);
  62.  $resultat2 = mysql_query($requete2);
  63.  if(!$resultat1 || !$resultat1) {
  64.   echo 'Erreur lors de l\'insertion dans la base de
  65.    donn&eacute;es. />';
  66.  }
  67.  else {
  68.   mysql_close();
  69.   header('location: listes.php');
  70.   exit();
  71.  }
  72. }


 
Fichier inclus

Code :
  1. <?php
  2. session_start();
  3. if(!isset($_SESSION['login'])) {
  4.  header('location: id.php?url='.$url);
  5.  exit;
  6. }
  7. $niveau = ($_SESSION['niveau']);
  8. if($niveau < $autorisation) {
  9.  header('location: red.php?url='.$url);
  10.  exit;
  11. }
  12. ?>


 
Je précise que sur les scripts PHP ne faisant pas appel à la fonction header tout se passe sans problèmes


Message édité par bepimaco le 08-11-2005 à 22:43:12

---------------
Bepimaco
Reply

Marsh Posté le 08-11-2005 à 22:41:30   

Reply

Marsh Posté le 09-11-2005 à 09:54:36    

Je comprends pas trop. Ton include est fait en tout début de script, et pourtant tu dis

Citation :

le traitement est bien effectué (mise à jour de la base), mais le header ne fonctionne pas, ce qui me donne une page vierge de tout code, donc blanche.

. Pour moi là si y'a un header qui se fait via ton securisation.php, y'a aucun traitement qui s'effectue avant. :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 09-11-2005 à 10:30:17    

Le premier include permet de vérifier si un utilisateur a le droit d'afficher la page. S'il ne l'a pas, il est redirigé vers une autre page. Jusque là, tout va bien et tout fonctionne.
 
En revanche, si l'utilisateur dispose des droits nécessaires, le script PHP se déroule jusqu'au bout. A la ligne 82, il devrait y avoir redirection vers une autre page. Mais cette redirection n'est pas effectuée. Le résultat est une page totallement blanche : normal puisqu'aucune sortie HTML n'est effectuée.
 
Ma question, pourquoi cette redirection ne fonctionne pas si la fonction include de la ligne 9 est là, alors qu'il n'y a aucun problème si le code est développé ?


---------------
Bepimaco
Reply

Marsh Posté le 09-11-2005 à 11:22:53    

Ca a souvent été dit sur le forum : il faut toujours mettre le chemin complet quand on fait une redirection par un header.
EDIT : D'ailleur, t'as eu de la chance que ton premier header de redirection fonctionne.


Message édité par omega2 le 09-11-2005 à 11:24:07
Reply

Marsh Posté le 09-11-2005 à 12:15:48    

merci de cette précision, mais ce n'est apparement pas le problème ...


Message édité par bepimaco le 09-11-2005 à 12:18:27

---------------
Bepimaco
Reply

Marsh Posté le 09-11-2005 à 13:17:56    

Si tu mets un echo entre le header (ligne 82) et le exit, il te l'affiche ? Et l'affichage reste ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed