sessions php

Eléphant du PHP | 57 Messages

07 sept. 2009, 08:59

Bonjour,

me voici de retour! (déjà? :evil: )

Cette fois je crois avoir un soucis au niveau des sessions en php :
<?php
session_start();
$_SESSION['name'] = 'john';
echo "Vous avez vu " . $_SESSION['name'] . " dans cette page";
?> 
Sur cette page mon echo me retourne bien 'Vous avez vu john dans cette page'.

En revanche dans la page suivante j'obtiens mon message d'erreur.
<?php 
if(isset($_SESSION['counter']))
      {echo 'La variable "counter" existe et vaut: ' . $_SESSION['counter'];}
else { echo '-- ARg ErroR --';}
?> 

Voyez vous une erreur dans mon code ou bien cela vient-il des paramètres de session fixés par mon hébergeur? (cf fichier joint) Merci d'avance! :mrgreen:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

ViPHP
ViPHP | 2291 Messages

07 sept. 2009, 11:15

Salut,

Je ne voie pas le session_start() dans la deuxième page :?:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 57 Messages

07 sept. 2009, 11:37

Merci dunbar!
Si j'ai bien compris il faut donc que je répercute mon session_start() sur chaque page où j'appelle une variable de session, c'est ça?

Mammouth du PHP | 991 Messages

07 sept. 2009, 11:44

Deux solutions s'offre a toi.

1er : Mettre un fichier de configuration avec un session_start(), les accès a ta base de données , la définition de tes constantes , des tableaux de valeur utile pour toutes tes pages.
Ce fichier sera inclut dans chaque page

2eme: Solution , te taper un session_start() à chaque page , mais j'ai un doute si on a 3 pages et que la 1er et la3eme on un session_start() et pas celle du millieu (2) , j'ai un doute sur le comportement.


Enfin sinon pour utiliser les $_SESSION il te faut OBLIGATOIREMENT un session_start() et TOUT début du document (page principale OU page de configuration), sachant que si tu as deux appel dans la même page il y aura tres certainement une erreurs (encore et toujours un doute ... une flemme magistral de vérifier :D).

Bye Hawk
DevOps, Symfony4, Hoa

ViPHP
ViPHP | 2291 Messages

07 sept. 2009, 14:00

Merci dunbar!
Si j'ai bien compris il faut donc que je répercute mon session_start() sur chaque page où j'appelle une variable de session, c'est ça?
Absolument, sur chaque pages qui utilise les $_SESSION, et avant tout autre code. :wink:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 57 Messages

07 sept. 2009, 15:34

une question que je me pose donc :

si je fais un formulaire d'upload de fichier dans une page qui précède celle qui contient ma déclaration de session, est que je risque de perdre les les données de uploadées?

( en fait c'est ce que je viens d'essayer et malheureusement mon print_r($_FILES); me retourne un array vide...)


edit :

j'ai vu dans un tuto que
Notez que session_start(); est à placer tout au début de votre page, avant tout code HTML, car la session ne peut être démarrée que si le cache du navigateur est vide.


ça voudrait dire que phpstart vide les infos uploadées???

Mammouth du PHP | 991 Messages

07 sept. 2009, 15:53

Non pas du tout , ton erreur doit provenir d'ailleurs ;).

Montre nous le code du formulaire , de la page de reception , et si il y a d'autre page :).

Bye Hawk
DevOps, Symfony4, Hoa

Eléphant du PHP | 57 Messages

07 sept. 2009, 16:06

Ok mais attention, ça va être lourd!

le fichier du formulaire :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="HAPedit 3.1">
<script language="JavaScript" type="text/javascript" src="wyzz.js"></script>
<link href="mainlayout.css" rel="stylesheet" type="text/css">
<link href="recrutement/mainlayout.css" rel="stylesheet" type="text/css">
</head>

<body>
<br>
<div id="container">
	<div id="header"><h1 class="Style2">&nbsp;</h1>
	</div>

  <div id="wrapper">
		<div id="content">
        
            
<form id="form1" name="form1" method="post" action="formail.php">
  <table width="485" border="1">
    <tr>
      <td width="284"><label>
        <span class="Style2">Votre nom :</span><br>
        <br/>
        <input type="text" name="nom" id="nom" />
      </label></td>
    </tr>
    <tr>
      <td><label>
        <span class="Style2">Votre prénom :<br>
        </span><br />
        <input type="text" name="prenom" id="prenom" />
      </label></td>
    </tr>
    <tr>
      <td><label> <span class="Style2">Votre email :</span><br>
      <br />
        <input type="text" name="email" id="email" />
      </label></td>
    </tr>
    <tr>
      <td><label>
        <span class="Style2">Votre téléphone :</span><br>
        <br />
        <input type="text" name="telephone" id="telephone" />
        <br>
      </label></td>
    </tr>
    <tr>
      <td><label>
        <span class="Style2"><br>
              Votre message :</span><br>
        <br />
        <textarea name="message" cols="55" rows="5" id="message"></textarea>
      </label></td>
    </tr>
    
    <tr>
	    <td><label>
        <span class="Style2">Votre CV :</span><br>
        <br/>
        <input type="file" name="nom_du_fichier" id="fileField"/>
        </label>     
        </td>
    </tr>
    
    <tr>
      <td><label>
        <input type="submit" name="envoyer" id="envoyer" value="Valider" />
        <div align="right"></div>
      </label></td>
    </tr>
  </table>
  <p>
    <input name="hiddenreference" type="hidden" id="hiddenField" value="
  			<?php 
  			if(isset($_GET['referenceannonce'])){
			$numeroannonce=$_GET['referenceannonce'];
			}
			echo $numeroannonce;
			?>
  ">
</p>
</form>
</div>
	</div>



</body>
</html>
et celui de la page de reception (qui doit fournir la BD et envoyer un mail ! et oui, tout ça en même temps!)
<?php

session_start();



	$_SESSION['nom'] = $_POST['nom']; 
	$_SESSION['prenom'] = $_POST['prenom']; 
	$_SESSION['email'] =  $_POST['email']; 
	$_SESSION['telephone'] = $_POST['telephone'];
	$_SESSION['message'] = $_POST['message'];
	$_SESSION['nomducv'] = $_FILES['nom_du_fichier']['name'];
	$_SESSION['numeroannonce'] = $_POST['hiddenreference'];

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="HAPedit 3.1">
<link href="mainlayout.css" rel="stylesheet" type="text/css">
<link href="recrutement/mainlayout.css" rel="stylesheet" type="text/css">
</head>

<body>
<br>
<div id="container">
	<div id="header"><h1 class="Style2">&nbsp;</h1>
	</div>

	<div id="wrapper">
		<div id="content">
        
		  			<span class="centralizer">
                    
<?php

$nom = $_SESSION['nom']; 
$prenom	 = $_SESSION['prenom'];
$email = $_SESSION['email'];
$telephone = $_SESSION['telephone'];
$message = $_SESSION['message'];
$nomducv = $_SESSION['nomducv'];
$numeroannonce = $_SESSION['numeroannonce'];

echo $nom;
echo $prenom;
echo $email;
echo $telephone;
echo $message;
echo $numeroannonce;





	$db = mysql_connect('localhost', '****', '****');
	mysql_select_db('****',$db);
	
	$req = "INSERT INTO candidatures (nom,prenom,reference,email,message,telephone) VALUES('$nom','$prenom','$numeroannonce','$email','$message','$telephone')";
  	mysql_query($req); 

	mysql_close();
	
	
	$dest_dossier = './lescvs/';
	
	$dest_fichier = basename($_FILES['nom_du_fichier']['name']);
	move_uploaded_file($_FILES['nom_du_fichier']['tmp_name'], $dest_dossier . $dest_fichier);
	
	$identite = $prenom." ".$nom;
	
	$liencv = "http://www.***********.fr/recrutement/lescvs".$nomducv;

     $headers ='From: "*********"<'.$email.'>'."\n";
     $headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
     $headers .='Content-Transfer-Encoding: 8bit';
	 
	 $contenu = "R&eacute;f&eacute;rence : ".$numeroannonce."<p>Nom : ".$identite."<br>"."T&eacute;l&eacute;phone :".$telephone."<br>CV : <a href =".$liencv.">t&eacute;l&eacute;charger</a></p><br>".$message; 
	 

     if(mail('[email protected]', 'contact recrutement', $contenu, $headers))
	      {
		  header('Location: http://www.*******.fr/recrutement/');

     }
     else
     {
          echo 'Erreur : candidature non transmise.';

	}
	
 session_destroy();

?> 
        </span>
        <p></p>

		</div>
	</div>

</body>
</html>

en espérant que ça vous parle... :priere:


Merci beaucoup! :mrgreen:

Mammouth du PHP | 991 Messages

07 sept. 2009, 16:26

Une erreur que j'ai vu dans l'entete du formulaire, cela devrait avoir au minimum ceci : <form action="cible_envoi.php" method="post" enctype="multipart/form-data">.
Ensuite sur la page de reception met en suivant le session_start() :
var_dump($_FILES);

Bye hawk
DevOps, Symfony4, Hoa

Eléphant du PHP | 57 Messages

07 sept. 2009, 16:32

Ok merci, je teste ça tout de suite! :D

Eléphanteau du PHP | 27 Messages

07 sept. 2009, 21:12

Attention à ne pas confondre $_SESSION et $_FILES...

Les variables de sessions sont accessibles de toutes les pages ou session_start() a été renseigné en début de fichier (ou via fichier de conf bien sur).
La variable $_FILES fonctionnes comme $_POST.

Lors de l'envoi d'un formulaire, les données sont stockées dans $_POST et les fichiers dans $_FILES. Ces données ne sont accessibles que dans le fichier qui reçoit ces données du formulaire.