Php:probleme dans le refresh de la page ????

Bonjour, à vous tous

J'ai une partie admin service ,qui contient les emails envoyer par les citoyen , tu doit d'abord identifier par le nom de service le login et mot de passe ---> GesmailService.php: la liste des emails sélectionner par le service en suite pour répondre à un mail -->GesmailDetail.php : formulaire pour repondre au email et enregistre dans la base avec refresh(Gesmail_enregisaisie.pfp) en fin affichage des email aprés mis à jours dans GesmailService.php.

En faite mon probleme c que quand je fait l'enregistrement de la réponse et la redirection dans la page GesmailService.php où il y a tt la liste des email :des msg d'erreur apparaissent:

Notice: Undefined index: service in c:\xxx\xxx\gesmailsservice.php on line 11

Notice: Undefined index: login in c:\xxx/xxx/\gesmailsservice.php on line 12

Notice: Undefined index: password_serv in c:\xxx\gesmailsservice.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at c:\xxx\gesmailsservice.php:11) in c:\xxx\gesmailsservice.php on line 31

Merci de me répondre

5 réponses

  1. Bonjour,

    J'ai rencontré ce problème plusieurs fois ... Parce que je mettais la fonction header() au milieu de la page, sachant que les headers sont déjà envoyé.

    Je te conseille de faire une redirection en Javascript ou HTML ça te posera moins de problèmes.
    1. Merci hardmehdi mais mon grand souci c au niveau :
      Notice: Undefined index:service in c:\xxx\xxx\gesmailsservice.php on line 11

      Notice: Undefined index: login in c:\xxx/xxx/\gesmailsservice.php on line 12

      Notice: Undefined index: password_serv in c:\xxx\gesmailsservice.php on line 13
    2. Ce que je peux te dire à propos de ces 3 erreurs, c'est que tu les appelles mais eux elles existent pas, alors vérifie l'ordre de ton script, et vérifie comment tu les envois de page à page.
    3. si je les ai utiliser dans mes 3 page en utilisant le type hiden !!!!
  2. Alors mes amis???
    1. Je pense qu'il faut soumettre ton formulaire avant de faire la redirection ! C'est pour ça que les variables $service $login $password n'existent pas, essaie de soumettre en Javascript ton formulaire et après rediriger ... Sinon envoi les infos dans un lien que tu récupères avec $_GET[], ou enfin, utilise les $_SESSION[].
  3. Salut,

    Si tes problemes sont les

    Notice: Undefined index:service in c:\xxx\xxx\gesmailsservice.php on line 11

    Notice: Undefined index: login in c:\xxx/xxx/\gesmailsservice.php on line 12

    Notice: Undefined index: password_serv in c:\xxx\gesmailsservice.php on line 13

    Ce n'est "pas tres grave", cela veut juste dire que tu ne vérifies pas s'il y a quelque chose dans tes variables cf : https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index

    Tu peux aussi désactiver les Notice en modifiant ton php.ini en mettant : error_reporting = E_ALL & ~E_NOTICE

    Mais ce n'est pas propre.. il vaut mieux les corriger.
    1. voila la page GesMailService.php:
      <?php
      // Ligne pour la compatibilit avec l'ancienne version de php installe sur le serveur
      
      if (!isset($_POST)) $_POST=$HTTP_POST_VARS;
      if (!isset($_GET)) $_GET=$HTTP_GET_VARS;
      
      	require("../xx.xx.php"); 
      	require("../xx/db_connect.inc.php");
      	require_once('../xx/xxx.php');
      	
          $services=$_POST["service"];
          $loginPost=$_POST["login"];
          $MdpPost=$_POST["password_serv"];
         
          $connexion=db_connexion();
      	
          $resultat = "SELECT * FROM services WHERE id_serv='$services' and password_serv='$MdpPost' and login_serv='$loginPost'";
          $Inscrit=mysql_query($resultat);
      	$ligne = mysql_num_rows($Inscrit);
      	if ($ligne != 0) { 
      	    $row_Inscrit=mysql_fetch_array($Inscrit);
      		$login = $row_Inscrit["login_serv"]; 
      		$mdp = $row_Inscrit["password_serv"];
      		$services= $row_Inscrit["id_serv"];
      	    $query ="SELECT contact.*,services.lib_serv_fr From contact,services where contact.id_serv=services.id_serv and contact.id_serv='".$services."'";
      	    $result=mysql_query($query) or die("query failed");
      				
      	 }
      	
         else{
       header("Location: erreurlogin.html");
       }
      		 
      ?>
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <meta name="description" content="Espace d'administration" />
      <link rel="stylesheet" type="text/css" href="xx/administration.css" />
      <title> - Espace d'administration</title>
      <style type="text/css">
      <!--
      .Style1 {
      	color: #26c;
      	font-size: 14px;
      	font-weight: bold;
      }
      -->
      </style>
      </head>
      
      
      <style type="text/css">
      <!--
      .warning { color: red; }
      .Sommaire {font-family: Verdana ;font-size: 18px}
      -->
      </style>
      
      <body>
      <div id="main">
        <div id="logo"> 
          <h1><a href="index.php" accesskey="4"><img src="img/logo.gif" border="0" width="190" height="120" /></a></h1>
        </div>
      <div id="intro">
      <h2><a id="maincontent"></a> <br /><br /><br /><br /> &nbsp;&nbsp;Espace d'administration <br /><br /></h2>
      <p></p>
      </div><div class="clear"></div>
      
      <link href="css/administration.css" rel="stylesheet" type="text/css" />
      <style type="text/css">
      <!--
      .Style1 {color: #26c}
      -->
      </style>
      <h4 style="text-align:left; padding-left:5px; color:#0066FF">Nombre de visiteurs  partir du 28 Octobre 2010 :<span style="font-weight:bold">
      <?php
      $fp = fopen("../compteur.txt","r+"); // 1.On ouvre le fichier en lecture/criture
      $nbvisites = fgets($fp,11);       // 2.On rcupre le nombre dans le fichier
                // 5.On crit dans le fichier le nouveau nb
      fclose($fp);                      // 6.On ferme le fichier
      echo("$nbvisites");    // 7.On affiche le compteur  l'cran
      ?></span>
      </h4>
      
      <h3 class="headerstyle" align="left">  Gestion des E-mails </h3>
      
      <table width="880" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
            <td align="left" style=" xpadding:20px">
      	   <?php  $ligne = mysql_num_rows($result);
      	   
      	    //  echo "".$ligne;
      	          if ($ligne != 0) {  ?>
          <table width="880" border="0" align="center" cellpadding="0" cellspacing="0">
      	  <thead id="thead">
                    <tr>
      			
                      <td width="15%" align="center" valign="middle">Date d'enregistrement</td>
      				<td width="10%" align="center" valign="middle">Service</td>
                      <td width="10%" align="center" valign="middle">Nom </td>
                      <td width="11%" align="center" valign="middle">Prnom</td>
                      <td width="14%" align="center" valign="middle">E_mail</td>
                      <td width="11%" align="center"  valign="middle">Objet</td>
                      <td width="14%" align="center" valign="middle">Message</td>
      				<td></td>
                      <td width="16%" align="center" valign="middle">Etat<br />
                        (valide/non valide)</td>
                      <td width="6%" align="center" valign="middle">&nbsp;</td>
                      <td width="3%" align="center" valign="middle"></td>
                    </tr>
                  </thead>
      			
      
      			<tbody>
      	<?php
      		   $i = 0 ;
         while ($Enreg=mysql_fetch_array($result)) {
      
               $dateEnregistrement=$Enreg['date_enregistrement'];
      		 
      		
       		if ($i % 2 == 0)	$bgColor = "";
      		else				$bgColor = "#CCCCCC";
      		$i++;
      
         ?>          
       	          <tr>
                      <td align="center" valign=middle><?=date("d/m/Y",strtotime($dateEnregistrement))?></td>
      				<td align="center" valign=middle><?php print $Enreg["lib_serv_fr"];?></td>
                      <td align="center" valign=middle><?php print $Enreg["nom"];?></td>
                      <td align="center" valign=middle><?php print $Enreg["prenom"];?></td>
                      <td align="center" valign=middle><?php print nl2br($Enreg["email"]); ?></td>
                      <td align="center" valign=middle><?php print $Enreg["objet"]; ?></td>
                      <td align="center" valign=middle><?php print $Enreg["message"]; ?></td>
      				
      			    <td> <input type="hidden" name ="reponse" value="<?php $Enreg["reponse"];?>"></td>
      				<?php /*?><input type="hidden" name ="id" value="<?php $Enreg["id"];?>"><?php */?>
      				 
      				 <input type="hidden" name ="services" value="<?php $_POST["service"];?>">
      				 <input type="hidden" name ="loginPost" value="<?php $_POST["login"];?>">
      				 <input type="hidden" name ="MdpPost" value="<?php $_POST["password_serv"];?>">
      			   
         
      				<td align="center" valign=middle><?php print Etat($Enreg["etat"]); ?></td>
      			    <td><a href="GesMails_Details.php?Num=<?php print $Enreg["id"];?>"><img src="img/voir.gif" border=0 /></a></td>
      			    <td><a href="GesMails_Supprime.php?Num=<?php print $Enreg["id"];?>" onclick="return confirm('Voulez-vous supprimer ce mail ?')"><img src="img/supprimer.gif" border=0 /></a></td>  
      		 </form>
                    </tr><br>
      			 </tbody>
                 <?php
      		    }
      		  ?>
                </table>
      		   <?php  } else { echo "
              <b>Il n'y a aucun mail dans ce service.</b> ";
            }?>
      	  </td>
          </tr>
        </table>
      	
       <p>&nbsp;</p>
      

      <div align="center"><p class="internallink"><a class="liendeco" href="deconnexion.php">Déconnexion</a>
      </p>
      </div>
      </div>

      </body>
      </html>
      <p> </p>
      </div>

      </body>
      </html>
      1. Si tu n'as plus l'erreur du header already sent modifie juste la partie php par

        
        <?php
        // Ligne pour la compatibilit avec l'ancienne version de php installe sur le serveur
        
        if (!isset($_POST)) $_POST=$HTTP_POST_VARS;
        if (!isset($_GET)) $_GET=$HTTP_GET_VARS;
        
        	require("../xx.xx.php"); 
        	require("../xx/db_connect.inc.php");
        	require_once('../xx/xxx.php');
        
        if (isset($_POST["service"]) && isset($_POST["login"]) && isset($_POST["password_serv"]))
        {
            $services=$_POST["service"];
            $loginPost=$_POST["login"];
            $MdpPost=$_POST["password_serv"];
           
            $connexion=db_connexion();
        	
            $resultat = "SELECT * FROM services WHERE id_serv='$services' and password_serv='$MdpPost' and login_serv='$loginPost'";
            $Inscrit=mysql_query($resultat);
        	$ligne = mysql_num_rows($Inscrit);
        	if ($ligne != 0) { 
        	    $row_Inscrit=mysql_fetch_array($Inscrit);
        		$login = $row_Inscrit["login_serv"]; 
        		$mdp = $row_Inscrit["password_serv"];
        		$services= $row_Inscrit["id_serv"];
        	    $query ="SELECT contact.*,services.lib_serv_fr From contact,services where contact.id_serv=services.id_serv and contact.id_serv='".$services."'";
        	    $result=mysql_query($query) or die("query failed");
        				
        	 }
        	
           else{
         header("Location: erreurlogin.html");
         }
        		 
        ?>
        


        Par contre j'espere que c'est que du local et que c'est pas un site de prod.. car niveau securite et injection SQL tu peux pas faire pire..

        Pense a protéger tes variables $_POST avec des addslashes etc..
        1. Merci chico200987 j'ai utilisé les isset mais l'erreur existe encore !!!
          NB j'ai utilisé le type hidden dans les 3 page php
          <input type="hidden" name ="services" value="<?php $_POST["service"];?>">
          <input type="hidden" name ="loginPost" value="<?php $_POST["login"];?>">
          <input type="hidden" name ="MdpPost" value="<?php $_POST["password_serv"];?>">
        2. Dans ce cas :

          <input type="hidden" name ="services" value="<?php (isset($_POST['service'])) ? $_POST['service'] : ''; ?>" /> 
          <input type="hidden" name ="loginPost" value="<?php (isset($_POST['login'])) ? $_POST['login'] : ''; ?>" /> 
          <input type="hidden" name ="MdpPost" value="<?php (isset($_POST['password_serv'])) ? $_POST['password_serv'] : ''; ?>" /> 
          
          


          Devrait passer..

          Par contre encore une fois, pas tres sécurisé de ramener le password au formulaire \surtout s'il est en clair meme si le champs est cache il sera parfaitement lisible dans le code source ;)
        3. non pour le moment je travail en local et je suis pas trop professionnel pour développer en php
          mais j'essaye de faire un chose Merci encore :)
          bon j'ai mis les isset en hidden mais :( malheuresement sa na pas fonctionner
          pffff je suis dans se probleme depuis 3 jrs .
        4. C'est quoi qui ne marche pas exactement ?

          C'est bien la suppression des notices undefine index ou tu as toujours le "header already sent" ?
        5. je veux dire les erreur sont tjrs là meme le :Warning: Cannot modify header information - headers already sent by (output started