Pbm avec header() malgré verifs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pbm avec header() malgré verifs

re- Fin

par Invité » 02 juin 2008, 17:42

Salut Ryle,
Merci beaucoup, c'est simple mais je n'y avais pas pensé !

Je te remercie encore, je vais sauvegarder tout ça et je vais conseillé ce forum à mes collègues du CNAM (en cours par correspondance).
Franchement heureusement qu'il y a des forums comme celui- ci !

Peut être à bientôt.

Cdt.

par Ryle » 02 juin 2008, 00:08

Tu n'as pas à t'excuser, c'est tout l'intérêt de ces forums de pouvoir poser des questions :)

En fait, plutôt que d'initialiser ta variable avec une valeur vide (et du coup de l'écraser si elle est déjà définie), ce que tu devrais faire c'est tester ta variable à l'aide de isSet() pour voir si elle est ou non déjà définie. Ainsi tu n'afficherais le message que si la variable a bien été passée en get, sinon tu ne l'affiches pas, évitant ainsi l'avertissement comme quoi elle ne serait pas définie :)

par Invité » 01 juin 2008, 20:02

Ok j'ai essayé ça marche !
Quand je renvoie la page inscription.php c'est nickel j'arrive à afficher le message qui est dans la variable $varInscript.
Par contre au 1er affichage de la page incription.php (avant que j'envoie le formulaire par le POST) étant donné que je n'ai pas déclaré la variable $varInscript auparavant , j'ai un bon message d'erreur suivant :

Code : Tout sélectionner

Notice: Undefined index: varInscript in c:\program files\easyphp1-8\www\pages\inscription.php on line 91
je l'ai donc bien ensuite initialisée au début de la page inscription.php en $varInscript=""; mais forcément quand la page se recharge ensuite, la valeur de $varInscript revient à 0.
Je ne vois pas trop comment faire, en variable globale ?
excuse encore c'est la dernière....
<td colspan="2" class="CellVerte"><br>
        Les champs avec un asterix (*) sont obligatoires. <br>
		<?php echo '<font color="#FF0000">'.$_GET['varInscript'].'</font>';?> 
	</td>
Merci.

par Ryle » 01 juin 2008, 18:24

Pour passer des valeurs dans l'url, il te faut les transmettre sous la forme variable=valeur. Ton header devrait donc ressembler à :
header('Location: ../Pages/Inscription.php?varInscript='.$varInscript); 
Tu pourras alors récupérer la variable $_GET['varInscript'], qui aura pour valeur celle contenue dans $varInscript :)

Une petite remarque : une variable à l'intérieur d'une chaine n'est interprétée que si la chaine est délimitée par des guillemets :
$var = 'world';
echo "Hello $var"; // affiche : Hello world
echo 'Hello $var'; // affiche : Hello $var
Il vaut donc mieux prendre l'habitude de sortir les variables des chaines, en les concatenant à l'aide du "." pour éviter de se tromper :)

Enfin, certains navigateurs ne font pas la différence entre majuscule et minuscule, mais d'autres si. Il vaut donc mieux respecter la syntaxe du header en mettant un "L" majuscule à "Location" :)

Ok merci--Autre chose

par romca » 01 juin 2008, 16:13

Ok merci c'est clair. Je vais copier ce tuto et me le garder. Ca me resservira sûrement !

Je m'excuse mais pendant que j'y suis j'ai essayé de renvoyer également la variable $varInscript par le header pour que la page Inscripion.php le récupère et puisse ensuite l'afficher pour indiquer le problème qu'il y a eu.
mais voilà la redirection est ok mais le contenu de la variable $varInscript ne s'affiche pas une fois que la page Inscription.php apparaît.
c'est le même code mais j'ai modifié le header comme ci dessous et je te donne aussi un bout du code de la page Inscription php. pas
Si tu as une idée.. merci.
//Controle des blancs dans les champs obligatoires-----------------------------------------------------

	if (($nomUser=="") || ($passwordUser=="") || ($emailUser==""))
	{
		$varInscript="Erreur, un des champs obligatoires est vide.'<br>'.
		Veuillez refaire une saisie SVP";
		//redirection vers la page d'inscription avec la variable $varInscript. Attention ne pas fare de echo 
		//ou laisser un espace vide avant le < de "?php" sinon le header() ne fonctionnera pas.
		header('location: ../Pages/Inscription.php?$varInscript');
		//echo $varInscript.'<br>'; test visuel mais à faire sans le header()
		exit();
	}
	else
	{
		// Cryptage du mot de passe (hachage)
		md5 ($passwordUser);
		
	}
Bout du code de Inscription.php
<!--Boutons Enregistre et Effacer-->
    <tr>
      <td class="CellVerte" width="50%"><br>
          <input type="submit" name="Inscription" value="Valider">
          <br></td>
      <td class="CellVerte" width="50%"><br>
          <input type="reset" name="Effacer" value="Recommencer">
          <br>
      </td>
    </tr>
    <!-- Légende-->
    <tr>
      <td colspan="2" class="CellVerte"><br>
        Les champs avec un asterix (*) sont obligatoires. <br>
		<?php echo '<font color="#FF0000">'.$varInscript.'</font>';?> 
	</td>
    </tr>
    <tr>

par Ryle » 01 juin 2008, 15:51

En fait, il ne faut pas oublier que ton code php se trouve à l'intérieur d'une page html. Si tu laisses des sauts de lignes ou des espaces avant les balises <?php ?>, ils sont alors présents dans ta page html et sont du coup envoyés au navigateur pour qu'il les affiches.

Ca a pour effet de provoquer une erreur lorsque tu demandes de modifier l'entête (via un header() par ex), puisque des données affichables (que ce soit un espace ou un retour charriot) ont déjà été envoyées au préalable :)

Re

par romca » 01 juin 2008, 15:08

Salut,
merci oui il y avait une espace j'ai donc modifié le script:
<?php 
include ("ConnectBDD.php"); 


// Recupération des variables formulaire-------------------------------------
if (isset ($_POST["Inscription"])) // si le formulaire a été envoyé, on faite le traitement, sinon rien.
{...............
J'avais aussi en plus dans "ConnectBDD.php" (l'include) un espace avant.
Pourquoi il ne faut pas d'espace avant ?

Merci.

par Ryle » 01 juin 2008, 14:48

output started at c:\program files\easyphp1-8\www\scriptsp\testinscription.php:2
D'après le message d'erreur, l'envoi de données à commencé à la ligne 2 du script testinscription.php. T'aurais pas des lignes vides ou un espace avant le "<?php" ?

Pbm avec header() malgré verifs

par romca » 01 juin 2008, 14:43

Bonjour à tous,
J'utilise dans le script ci dessous de vérification d'inscription une redirection avec header().
Mais j'ai l'erreur
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\scriptsp\testinscription.php:2) in c:\program files\easyphp1-8\www\scriptsp\testinscription.php on line 33


Je ne comprend pas dans le script j'ai pourtant enlevé tous les envois via HTTP (les "echo") mais idem.

Merci à vous.

A+
<?php 

include ("ConnectBDD.php"); 


// Recupération des variables formulaire-------------------------------------
if (isset ($_POST["Inscription"])) // si le formulaire a été envoyé, on faite le traitement, sinon rien.
{
	$nomUser=$_POST["nomUser"];
	$prenomUser=$_POST["prenomUser"];
	$passwordUser=$_POST["passwordUser"];
	$serviceUser=$_POST["serviceUser"];
	$telUser=$_POST["telephoneUser"];
	$emailUser=$_POST["emailUser"];


/* Test----------------------------------
echo $nomUser;echo'<br>';
echo $prenomUser;echo'<br>';
echo $passwordUser;echo'<br>';
echo $serviceUser;echo'<br>';
echo $telUser;echo'<br>';
echo $emailUser;echo'<br>';
*/

//Controle des blancs dans les champs obligatoires-----------------------------------------------------

	if (($nomUser=="") || ($passwordUser=="") || ($emailUser==""))
	{
		$varInscript="Erreur, un des champs obligatoire est vide.'<br>'.
		Veuillez refaire une saisie SVP";
		header('location: ../Pages/Inscription.php');
		//echo $varInscript.'<br>';
		exit();
	}
	else
	{
		// Cryptage du mot de passe (hachage)
		md5 ($passwordUser);
		
	}

//controle du champ eMail-------------------------------------------------------------------

	if ($emailUser)
	{
		$resultat=eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$emailUser);
		if(!$resultat)
		{
		$varInscript="Veullez retaper votre adresse EMail, la syntaxe est mauvaise";
		header('location: ../Pages/Inscription.php');
		//echo $varInscript.'<br>';
		exit();
		}
		
	}

//Declaration des requetes-----------------------------------------------------------------------------------------------------
	$query="INSERT INTO user (nomUser,prenomUser,passwordUser,serviceUser,telUser,emailUser) 
	VALUES ('$nomUser','$prenomUser','$passwordUser','$serviceUser','$telUser','$emailUser')"; 
	 
	 $result =mysql_query($query); 
	 if (!$result) 
	 { 
		$varInscript="Votre inscription a échouée: ".mysql_error(); 
		header('location: ../Pages/Inscription.php');
		//echo $varInscript.'<br>';
		exit();
	 } 
	else
	{
		$varInscript="Votre inscription a bien été enregistrée";
		header('location: ../Pages/Inscription.php');
		//echo $varInscript.'<br>';
		exit();
		 
	}

mysql_close($connect_serveur); 

}
?>