8797 sujets

Développement web côté serveur, CMS

Bonjour,
je viens de passer sous easyphp1.8 et mes formulaires et session de marche plus Smiley bawling
voici le code mon formulaire

<?php session_start(); 
//la page formulaire va permettre de recolter les infos de l'internaute on utilise des variables de session, 
// on doit donc commencer la page par un session_start() pour ouvrir/continuer une session

//include ('librairie/lib.error.reporting.php');  on charge la page lib.error.reporting.php qui gere l'affichage des erreurs

// si dans la l'url la variable raz est à yes, alors on désenregistre et on détruit les différentes
// variables de session	
	if($_GET['raz']=='yes') 
		{
		session_unregister($civilite);
		session_unregister($nom);
		session_unregister(prenom);
		session_unregister(email);
		session_unregister(commentaire);
		unset($civilite,$nom,$prenom,$email,$commentaire); 
		}
?>
<html>
<head>
<title>Formulaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<div align="center"> 
  <div align="right">
<div align="left">
      <table width="92%" border="0">
        <tr>
          <td>&nbsp;</td>
          <td height="179"> 
            <div align="left">
              <p><font size="2"><em> Organisations </em> </font></p>
              </div>
            <p align="left"><font size="2"><em>M. Pdfgdhg<br>
              <br>
              <br>
              </em></font></p>
            <p align="left"><font size="2"><em>tel (hb)<br>
              xxxxxxx (dom)<br>
              xxxxxxxxx</em></font></p>
            </td>
          <td><font color="#336600" size="+3" face="Times New Roman, Times, serif"><span class="lien1">Demande 
            de renseignement</span></font></td>
        </tr>
        <tr> 
          <td width="4%">&nbsp;</td>
          <td width="40%" height="21"> 
            <div align="left"></div>
            </td>
          <td width="56%"><div align="left"><font color="#FF3300" size="3" face="Times New Roman, Times, serif">
              <?php 
			// GESTION DES ERREURS
			if($_GET['erreur']=='civilite') echo'<p><font color="#FF0000"><strong>Vous avez oublié de renseigner le champ CIVILITE.</strong></font></p>';
			if($_GET['erreur']=='nom') echo'<p><font color="#FF0000"><strong>Vous avez oublié de renseigner le champ NOM.</strong></font></p>';
			if($_GET['erreur']=='prenom') echo'<p><font color="#FF0000"><strong>Vous avez oublié de renseigner le champ PRENOM.</strong></font></p>';
			if($_GET['erreur']=='email') echo'<p><font color="#FF0000"><strong>Vous avez oublié de renseigner le champ E-MAIL.</strong></font></p>';
			if($_GET['erreur']=='commentaire') echo'<p><font color="#FF0000"><strong>Vous avez oublié de renseigner le champ COMMENTAIRE.</strong></font></p>';
			?>
              </font></div></td>
        </tr>
      </table>
      
    </div>
  </div>
  <form name="form_vs" method="post" action="pages/email/mail.php">
    <table width="80%" border="0" cellspacing="3" cellpadding="0">
      <tr>
        <td width="20%">&nbsp;</td>
        <td width="20%"><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>* 
          </strong></font><strong><font color="#FF3300">Civilit&eacute;</font></strong></span><strong><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp;</font><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          </font></strong></td>
        <td width="80%"> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <input type="radio" name="civilite" value="Madame" <?php if($_POST["civilite"]=='Madame') echo'checked'; ?>> 
          <span class="lien2">Madame</span> <input type="radio" name="civilite" value="Mademoiselle" <?php if($_POST["civilite"]=='Mademoiselle') echo'checked'; ?>> 
          <span class="lien2">Mademoiselle </span> <input type="radio" name="civilite" value="Monsieur" <?php if($_POST["civilite"]=='Monsieur') echo'checked'; ?>> 
          <span class="lien2">Monsieur</span></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>*</strong></font><strong><font color="#FF3300"> 
          Nom</font></strong></span></td>
        <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <input name="nom" type="text" id="nom" value="<?php if(!empty($_POST["nom"])) echo($_POST["nom"]); ?>">
          </font></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>* 
          </strong></font><strong><font color="#FF3300">Pr&eacute;nom</font></strong></span></td>
        <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <input name="prenom" type="text" id="prenom" value="<?php if(!empty($_POST["prenom"])) echo($_POST["prenom"]); ?>">
          </font></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>*</strong></font><strong><font color="#FF3300"> 
          E-mail</font></strong></span></td>
        <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <input name="email" type="text" size="35" value="<?php if(!empty($email)) echo($email); ?>">
          </font></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>*</strong></font><strong><font color="#FF3300"> 
          Commentaire</font></strong></span></td>
        <td valign="middle"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <textarea name="commentaire" cols="55"><?php if(!empty($commentaire)) echo($commentaire); ?></textarea>
          </font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&nbsp; 
          </font></td>
      </tr>
    </table>
    <table width="75%" border="0">
      <tr> 
        <td></td>
        <td></td>
      </tr>
    </table>
    <table width="80%" border="0">
      <tr> 
        <td width="54%" height="45"><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>* 
          </strong></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">:<font color="#FF3300"> 
          <em><strong>champ obligatoire</strong></em></font></font></td>
        <td width="46%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <input name="Submit" type="submit" id="Submit" value="Envoyer">
          </font></td>
      </tr>
    </table>
  </form>
</div>
</body>
</html>


Les erreurs sont les suivantes :
1/ warning session_start() cannot send session cache limiter headers already only (output started at s:\eaysphp\.....\index.php:7) in s:\easyphp\...\formu.php on line 1
or session start ne commence qu'a partir de cette page???? il n'y est pas dans index.php
2/ notice use of undefined constant nom - assumed 'nom' in s:\easyphp\...\formu.php on line 11
3/ idem 2 pour les variables prenom, civilité email et commentaire
4/undefined index erreur in s:\easyphp\...\formu.php on line 55
5/ idem pour line 56 - 57 - 57 - 58- 59 relatif a la gestion des erreurs
6/ undefined index civilite in s:\easyphp\...\formu.php on line 75
7/ idem pour ligne 76 - 77 relatif au choix dans la civilité


j'avoue que je suis perdu car sous easyphp1.6 tout marchait nickel
quelqu'un a t il une idée pour une ame en peine
d'avance merci
sandrine
Modifié par sand (03 Mar 2008 - 10:30)
Hello Sandrine Smiley cligne ,

c'est normal car contrairement à la version 1.6, la directive register_globals (dans le php.ini) est à off. En clair, toute variable que tu utilises doit d'abord être déclarée en précisant notamment d'où elle provient. Par exemple :
<?php
$mavar = 333;
$page = $_GET['page'];
$pseudo = $_POST['pseudo'];
etc...
?>
Cela permet de mieux sécuriser tes scripts et c'est donc une bonne habitude à prendre Smiley langue !

Cela dit tu peux toujours modifier le php.ini et la repasser à on mais ce serait dommage !

En passant, je te conseille d'utiliser de préférence WAMP à EasyPhP car ce dernier n'est plus maintenu depuis déjà un bon moment...

A+ Smiley smile
Modifié par Heyoan (13 Feb 2008 - 07:02)
bonjour
merci pour l'info
effectivement il faut declarer les variables en $_post et faire une verif "si pas vide " et la ca marche
mais il me reste les erreurs suivantes :
1/ warning session_start() cannot send session cache limiter headers already sent (output started at s:\eaysphp\.....\index.php:7) in s:\easyphp\...\formu.php on line 1
2/ warning session_start() cannot send session cookie headers already sent by (output started at s:\eaysphp\.....\index.php:7) in s:\easyphp\...\formu.php on line 1

Or je n'ai mis mon session_start que dans formu et il n'y a rien avant????

quelqu'un peut il m'aider

ps : j'hesite a passer sous wamp car du coup avec easyphp 1.8 il me met les erreurs alors que sous wamp non!!
Puisque tu as ce warning, il y a forcément un ou des caractère(s) avant le <?php et si tu ne vois rien, il y a de fortes chances pour qu'il s'agisse d'espace(s) ou même de ligne(s) vide(s) Smiley cligne !

Sinon il faudra regarder du côté de la BOM...

Pour ce qui est de WAMP, il suffit de décocher le register_globals : clic gauche sur l'icône dans la barre des tâches et Configuration PHP.
Modifié par Heyoan (13 Feb 2008 - 22:16)
bonjour, merci pour ta reponse mais il n'y a rien avant le session_start
par contre je l'ai mis dans la page index.php
et l'ai supprimer partout ailleurs je n'ai plus d'erreur

par contre un probleme avec mes variables de formulaire qui ne s'enregistre plus
je poste un nouveau sujet avec les codes

merci d'y jeter un oeil pour m'eclairer
sand a écrit :
bonjour, merci pour ta reponse mais il n'y a rien avant le session_start
par contre je l'ai mis dans la page index.php
et l'ai supprimer partout ailleurs je n'ai plus d'erreur

par contre un probleme avec mes variables de formulaire qui ne s'enregistre plus

Smiley rolleyes Euh... Ben oui forcément ! On ne met pas session_start juste pour faire joli et on ne le retire pas juste pour ne plus avoir de warnings Smiley biggol !

Si tu enlèves les session_start tu ne peux tout simplement plus utiliser tes variables de session. Il faut donc obligatoirement les garder et chercher (un peu) pourquoi tu as un warning (ou avertissement en français).

Si tu es bien sûre d'être sûre de n'avoir aucun caractère avant, il s'agit peut-être d'un include que tu fais (du coup le session_start se retrouve au beau milieu d'une page). Et si ce n'est toujours pas ça on se rapproche de plus en plus d'un problème de BOM.

En passant, il est inutile de créer un nouveau sujet puisque le problème est toujours le même Smiley cligne .
Modifié par Heyoan (14 Feb 2008 - 07:13)
euh Smiley confused
ben oui j'ai un index.php qui contient un include centre.php
qui lui meme contient un switch
donc du coup j'ouvre ma session dans mon index

Smiley confus

ma solution n'est donc pas la bonne ????
sand a écrit :
personne pour m'aider Smiley bawling Smiley bawling
Si, si Smiley lol ! Bon alors en reprenant depuis le début :

la fonction PHP session_start (comme les fonctions header, setcookie et peut-être d'autres que j'oublie) a cette particularité qu'elle doit être utilisée avant qu'aucun caractère html n'ait été écrit sous peine d'avoir droit au fameux warning ... headers already sent . Cela inclut les caractères non visibles (espaces, tabulations, retours à la ligne, etc...) ainsi que le sournois caractère BOM Smiley biggol .

Un grand classique pour avoir ce warning est également de faire un include d'une page PHP qui contient un session_start alors que du code html a déjà été écrit. Par exemple :
[b]index.php[/b]
<!DOCTYPE ...>
<html>
    ...
<head>
    ...
</head>
<body>
<?php
include(page.php);
?>
...
</html>

[b]page.php[/b]
<?php
session_start();
...
?>
...
Dans ce cas, la solution est toute simple : il suffit de mettre le session_start au début de la page index.php et de le supprimer de toutes les pages incluses.

Par contre il ne faudra pas oublier de le mettre au début de toutes les pages non incluses (celles qui sont dans le action des formulaires et celles qui sont dans les <a href="..." >.

Voili voilou !

A+ Smiley smile
Modifié par Heyoan (15 Feb 2008 - 03:18)
Parce qu'il y a au moins une des pages finales qui, pour une raison ou pour une autre, ne commence pas par session_start(); Smiley cligne !
Modifié par Heyoan (16 Feb 2008 - 14:57)
bonjour,
ben j'ai bien verifier sur mes pages formu, mail et afficher il y a bien session_start ();
mais dans le afficher.php si je fais "modifier" je reviens sur mon formu avec mes champs VIDES !!!!
cf les codes des pages
ici
la je comprends plus rien !!!
help me please !!
Modifié par sand (17 Feb 2008 - 18:39)
bouh ça en fait du code a regarder.... et je n'ai pas lu tous tes echanges avec heyoan.

1/ un conseil en cas de disparation de variables faire des echo en debut de page.
pour savoir quand elle disparaisse et donc comprendre

ou meme des var_dump de $_POST,$_GET et de $_SESSION. ou alors de $_REQUEST qui les englobe tous les 3.

2/ maintenant dans ici .

ne pourrait tu pas mettre une version plus a jour?

comment dire ça me laisse perplexe Smiley biggol tu envoies les données vers une page mail.php qui ne contient que des tests de validité.

comment vas tu faire pour envoyer ces données au 3 eme code? il n'y a rien dedans ni renvoie par post ou get des données ni par session. comment ainsi les données pourrait-elles être transmise a la page suivante ? Smiley sweatdrop

une solution (entre autre ) : les variables sessions
mais dans ce cas tu dois non seulement mettre des session_start (c'est obligatoire ,sauf s'il y en a deja dans un fichier includer peut-etre)
mais aussi initialiser les variables sessions genre $_SESSION['nom'] = $_POST['nom'];

pour pouvoir les récuperer dans $_SESSION['nom'] dans toutes les pages commençant par $_SESSION.

dsl si c'est pas ça la solution a ton probleme mais voyant le code montré je voulais souligné cette quasi evidence ( pas si evidente pour celui qui debute peut-être ).
Modifié par CPascal (17 Feb 2008 - 23:08)
bon reprenons je met un session start au debut de mes pages
j'essaye de definir les $_SESSION mais rien ne se passe
j'ai fait un formu restreint pour des tests :
formu.php

<?php session_start();
//la page formulaire va permettre de recolter les infos de l'internaute on utilise des variables de session, 
// on doit donc commencer la page par un session_start() pour ouvrir/continuer une session

//include ('librairie/lib.error.reporting.php');  on charge la page lib.error.reporting.php qui gere l'affichage des erreurs

// si dans la l'url la variable raz est à yes, alors on désenregistre et on détruit les différentes
?>
<html>
<head>
<title>Formulaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<div align="center"> 
  <div align="right">
    <div align="left"> </div>
  </div>
  <form name="form_vs" method="post" action="test.php">
    <table width="80%" border="0" cellspacing="3" cellpadding="0">
      <tr> 
        <td width="20%"><span class="lien3"><font color="#FF3300" size="2" face="Verdana, Arial, Helvetica, sans-serif"><strong>*</strong></font><strong><font color="#FF3300"> 
          Nom</font></strong></span></td>
        <td width="80%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> 
          <input name="nom" type="text" id="nom" value="<?php if (!empty($_POST["nom"])) {echo $_POST["nom"];}?>">
          </font></td>
      </tr>
      <tr>
        <td> </td>
        <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
          <input name="Submit" type="submit" id="Submit" value="Envoyer">
          </font></td>
      </tr>
    </table>
    </form>
</div>
</body>
</html>

et test.php pour le traitement

<?php session_start();?>
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<table width="93%" border="0">
    <tr> 
      <td width="4%" height="200"> </td>
      <td width="68%"><p><font color="#336600" size="+3" face="Times New Roman, Times, serif"><span class="lien1">RESULTAT</span></font></p>
        </td>
   </tr>
  </table>
  
<table width="650" border="0" cellspacing="3" cellpadding="0">
  <!--DWLayoutTable-->
  <tr> 
    <td width="165" rowspan="3"><div align="left"> 
        <p> </p>
      </div>
      <p align="left"><font size="2"></font></p></td>
  <tr> 
    <td><span class="lien3"><font color="#FF3300"><strong>NOM :</strong></font></span></td>
    <td> 
      <?php if (!empty($_POST['nom'])) {echo $_POST['nom'];}?>
    </td>
  </tr>
  <tr> 
    <td height="24" valign="top"> <form name="form1" method="post" action="formu.php">
        <div align="center"> 
          <input type="submit" name="Submit" value="Modifier">
            </div>
      </form></td>
    <td height="24" valign="top"><form name="form2" method="post" action="?page=envoi">
        <input type="submit" name="Submit2" value="Envoyer">
      </form></td>
</table>
</body>
</html>

la variable post dans test.php affiche bien la valeur mais si je fais modifier tout s'annule
je n'y comprends plus rien
en mettant $_session['nom'] rien ne s'affiche or je croyais (d'apres ce que j'ai lu) qu'en mettant un session start la variable $_SESSION['xxx'] etait active

bref je suis perdue!!
Coucou !

Bon ben en fait le problème vient de ce que tu ne sais pas comment fonctionnent les sessions Smiley cligne ! Tu pourrais jeter un oeil sur cette page et sur cette autre.

Pour résumer (et toujours à cause du register_globals) toutes tes variables pour être utilisables doivent être déclarées. Or je ne vois nulle part comment tu alimentes $_SESSION['nom']. Par exemple avec :
<?php
session_start();
if (isset($_POST['nom'])) {
	$_SESSION['nom'] = $_POST['nom'];
} else {	
	$_SESSION['nom'] = '';
}
?>

A+
merci pour votre aide mon probleme est résolu apres avoir CORRECTEMENT declaré mes variables Smiley confused