probleme de sessions entre 2 pages?

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 : probleme de sessions entre 2 pages?

par heddicmi » 26 sept. 2005, 17:39

C'est souvent mon cas aussi :D

Bonne continuation ;)

par ruly » 26 sept. 2005, 17:24

ok merci ca marche nickel

j'avais pas penser a cette solution mais c'est tout simple et pas complique a faire en faite..

je cherchais trop compliquer comme tjrs...


merci beaucoup pour ton aide...

par heddicmi » 26 sept. 2005, 16:40

Avant tout ta partie mi php, mi htaml, tu devrais controler l'existence d'ne saisie valide... Si elle est valide, alors tu insert les variables sessions, puis tu créés une page html vide avec le body onLoad qui recharge l'opener et ferme la pop-up...
Si la saisie n'est pas valide, tu affiches une page html avec les messages d'erreur adéquat...

par ruly » 26 sept. 2005, 15:58

code de la pop up N°3......

Code : Tout sélectionner

<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Ajout par Article</title> <script language="javascript"> function page_parent() { opener.location.href = opener.location; self.close(); } </script> <style type="text/css"> <!-- body { background-color: #EBEBEB; } --> </style></head> <body > <?php if (isset($_POST['type'])) { $insertOk = true; if ($_POST['type'] <= 0) { $insertOk = false; echo '<div align="center">vous devez selectionner un type de produit.'.'<br>'; echo '<a href="ajout_article.php">Retour.</a></div>'; exit(); } if ($_POST['produit'] <= 0) { $insertOk = false; echo '<div align="center">vous devez selectionnez un produit.'.'<br>'; echo '<a href="ajout_article.php">Retour.</a></div>'; exit(); } if (empty($_POST['quantite'])) { $insertOk = false; echo '<div align="center">la quantité est obligatoire.'.'<br>'; echo '<a href="ajout_article.php">Retour.</a></div>'; exit(); } if (!is_numeric($_POST['quantite'])) { $insertOk = false; echo '<div align="center">la quantite doit être numerique.'.'<br>'; echo '<a href="ajout_article.php">Retour.</a></div>'; } if ($insertOk) { $_SESSION['produit'] = $_POST['produit']; $_SESSION['quantite'] = $_POST['quantite']; echo $_POST['produit'].'<br>'; echo $_POST['quantite'].'<br>'; } } ?> </body> </html>
manque le onload dans la balise body

par heddicmi » 26 sept. 2005, 15:51

tu peux montrer le code au niveau de la popup ?

par ruly » 26 sept. 2005, 15:46

j'ai fait usur body onload avec un petit javascript.... mais a ce moment les tests que j'ai fait pour voir si les donnees sont selectionnees, ne sert a rien.. en otut cas il les prend pas en compte et referme direct la fenetre.

comment puis je remedier a ceci???

ex: la quantite est obligatoire...

par heddicmi » 26 sept. 2005, 15:37

Les données, elles sont dans les variables sessions... Donc accessible n'importe où, pour peu que tu commence ta page par un session_start() :p

Je pense que l'organisation de la dernière page de la pop-up, doit se faire comme ceci :
- code php de création des variables sessions
- début du code html avec dans le BODY onLoad :

-- Ouverture (ou rafraichissement de la page principale (opener))
-- et directement ensuite, la fermeture de la pop-up...

Pour ces 2 --, c'est donc un petit peu de javascript...

dans la page principale qui se recharge, tu mets en place une vérification de l'existence des variables sessions et, si elles existent, tu les utilisent comme bon te semble...

par ruly » 26 sept. 2005, 15:16

bon un dernier soucy... (enfin j'espere)

voila mes variables de sessions sont bien definit quant je passe a la page n°3...

mais comment puis je faire pour que la fenetre n°3 execute son code et se referme directement pour rafraichir le page n°1 avec les nouvelles donnees??

par ruly » 26 sept. 2005, 14:29

a ok j'avais pas penser a faire une ppage n°3 pour justement faire la validation du formulaire t mettre mes variables en sessions....

je vais tester comme ca et je te tiens au courant.

merci du conseil :wink:

par heddicmi » 26 sept. 2005, 13:13

Voici le cheminement comme je le conçois...

Tu as ta page principale P1 qui ouvre une pop-up avec la page P2...

Dans P2, tu fais ton formulaire que tu valides et transmets à la page P3...

Dans P3, tu récupères les variables nécessaires du formulaire que tu inserts dans des variables sessions...

Puis tu recharges la page principale P1... Dans celle-ci, tu retrouves alors tes variables de sessions... C'est bien comme ça qque tu fonctionnes ?

Sinon, propose le code, des différentes page en définissant laquele et laquelle...

par ruly » 26 sept. 2005, 12:12

La ligne session_register n'est pas nécessaire...
Qu'est-ce que tu as si tu fais un echo $_SESSION['produit'] juste après :
$_SESSION['produit'] = $_GET['produit']; ?
j'ai rien justement...

comme je redirige ma page il n'a pas fait le $_get a mon avis c pour ca que c'est vide.

mais comment le forcer a mettre ma variable $_session['produit'] avec le produit selectionne???


code javascritp:

Code : Tout sélectionner

<script language="javascript"> function page_parent() { opener.location.href = opener.location; self.close(); } function recherche() { with (document.ajout) { val=type.options[type.selectedIndex].value; } window.location.replace("ajout_article.php?type_produit_id="+val);//chemin= chemin + fichier.php } </script>



code php:
<?php 
$type_produit_id = '';		if (!empty($_GET['type_produit_id'])) $type_produit_id = $_GET['type_produit_id'];
$produit = '';				if (!empty($_POST['produit'])) $produit = $_POST['produit'];
$quantite = '';				if (!empty($_POST['quantite'])) $quantite = $_POST['quantite'];

$sql_type = "select distinct (type_produit.type_produit_id), type_produit_nom from type_produit, produit where type_produit_actif = 1 
												and produit.type_produit_id =  type_produit.type_produit_id
												order by 2";
$req_type = mysql_query($sql_type) or die('Erreur SQL !<br>'.$sql_type.'<br>'.mysql_error());
$cols_type = mysql_num_rows($req_type); 

?>
&nbsp;
<p>&nbsp;</p>
<form name="ajout" method="post" action="nouveau.php">
  <table width="100%" >
    <tr>
      <td width="30%"><strong>Type d'article </strong></td>
      <td width="11%"><strong>D&eacute;signation</strong></td>
      <td width="59%"><strong>Quantit&eacute;</strong></td>
    </tr>
    <tr>
      <td><select name="type" onChange="recherche()">
	  	<option value="-1">Choisissez un type d'article</option>
			<?php
					for ($i=0;$i<$cols_type;$i++) {
						$type_id = mysql_result($req_type,$i,0);
						$type_nom = mysql_result($req_type,$i,1);
						if ($type_produit_id === $type_id) {
							echo "<option selected value="$type_id">$type_nom</option>";	
						}
						else {
							echo "<option value="$type_id">$type_nom</option>";	
						}
					}
	 if(isset($_GET['type_produit_id'])) {
	 	//$type_produit_id=$_GET['type_produit_id'];
		$sql_produit = "select produit_id, produit_designation from produit where produit_actif = 1
								and type_produit_id = '".$type_produit_id."'
								order by 2";
		$req_produit = mysql_query($sql_produit) or die('Erreur SQL !<br>'.$sql_produit.'<br>'.mysql_error());
		$cols_produit = mysql_num_rows($req_produit); 

			?>		

	  </select></td>
      <td><select name="produit">
	  	<option value="-1">Choisissez une désignation</option>
			<?php
					for ($i=0;$i<$cols_produit;$i++) {
						$produit_id = mysql_result($req_produit,$i,0);
						$produit_nom = mysql_result($req_produit,$i,1);
						if ($produit === $produit_id) {
							echo "<option selected value="$produit_id">$produit_nom</option>";	
						}
						else {
							echo "<option value="$produit_id">$produit_nom</option>";	
						}
					}
			?>		
      </select></td>
	  <?php }?>
      <td><input type="text" name="quantite" maxlength="10" value="<?php echo $quantite?>"></td>
    </tr>
    <tr>
      <td colspan="2"><div align="right">
        <p>&nbsp;          </p>
        <p>
		  <input type="submit" name="Submit" value="Ok" onClick="page_parent()">
            </p>
      </div></td>
      <td><p>&nbsp;
        </p>
        <p>
          <input name="" type="button" onClick="window.close()" value="Cancel">
        </p></td>
    </tr>
  </table>
</form>
je vois pas trop comment faire pour mettre ma variable $_session['produit'] avec le produit choisi... :roll:

par heddicmi » 26 sept. 2005, 12:05

La ligne session_register n'est pas nécessaire...
Qu'est-ce que tu as si tu fais un echo $_SESSION['produit'] juste après :
$_SESSION['produit'] = $_GET['produit']; ?

par ruly » 26 sept. 2005, 11:46

mais dans ma session il faut que j'ai une variable avec l'id du produit, une varibale avec la quantite....

et ca je dois pas les declarer comme $_SESSION['produit'] et $_SESSION['quantite'] ????

par mere-teresa » 26 sept. 2005, 11:42

Un session_start() devrait suffire

par ruly » 26 sept. 2005, 11:27

ok j'ai reussi a faire un passage de l'un vers l'autre

Code : Tout sélectionner

function page_parent() { opener.location.href = opener.location; self.close(); }
mais dans ma session il n'y a plus de variables...

la session existe mais pas les variables...

voicy mon code de pop up:

Code : Tout sélectionner

session_start(); $_SESSION['produit'] = $_GET['produit']; session_register($_SESSION['produit']);
et mon code javascropt ya juste ce qu'il y a en haut... faut il rajouter qqch pour lui dire de prendre mes variables de sessiones???