Variables globales

Marie53000 -  
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,


Environnement utilises : php , mysql, ajax

Objectif : Définir un code unique (codification ) à plusieurs chiffres pour un article.

Dans un formulaire avec un menu en cascade ( fait en JS, php et ajax) qui me permet de sélectionner une famille, puis sous-famille, puis une caractéristique de la sous famille je définis les 3 premiers chiffres de mon code.

En cliquant sur un bouton Save je valide cette sélection et les trois premiers chiffres du code sont créés.

Mon problème est le suivant :

Comment récupérer dans ma page principale ces 3 chiffres pour continuer la création du code et saisir différentes informations qui seront ensuite exploitées pour mettre à jour une base Mysql de liste des articles.

J'ai utilisé une variable de Session mais cela ne marche pas.

Quelqu'un a-t-il une idée?

Code procédure principale
<?php

	session_start() ;    
	............     

  $_SESSION['mavariable'] = 'Y' ;
?> 

<!DOCTYPE HTML> 
<html>
	<head>
		<meta name="description" content="Declare a new product in the database."/>
		<title>New Article </title> 		
		<script type="text/javascript" src="include/autocomplete/jquery.js"></script>
		<script type="text/javascript" src="include/autocomplete/jquery.autocomplete.js"></script>
		<link rel="stylesheet" type="text/css" href="include/autocomplete/jquery.autocomplete.css" />
	</head>
	<body>

	<div id="container">
	<div id="body">
    <div class="mhead"><h2><b>Codification - Selection of parameters</b></h2></div>
		<form id="savecascade" javascript="false">
		<div id="dropdowns">
		<div id="center" class="cascade">
			<?php
				$famquery = "SELECT DISTINCT (f_name), f_code FROM .......... ORDER BY f_code";
				$queryfamilies = mysqli_query($connect_msqli, $famquery);
			?>
     <label>Family:
       <select name="family" id = "drop1">
         <option value="">Please Select</option>
         <?php while ($rs = mysqli_fetch_array($queryfamilies)) { ?>
         <option value="<?php echo $rs["f_code"]; ?>"><?php echo $rs["f_name"]; ?></option>
         <?php } ?>
       </select>
     </label>
     </div>
        <div class="cascade" id="subfamily"></div> 
        <div id="sfvariant" class="cascade"></div> 
      </div>
		<button id="save" class="button_example">Save  Data</button>
    <p>

      <?php
       $codef = $code;
       echo"RES".$codef;
 
      // test si utilisation variable session 
 
      if(isset($_SESSION['mavariable'])) 
      echo 'La variable "variable" existe et vaut: ' . $_SESSION['mavariable']; 

      ?>
    </p>
    
		</form>
    <!-- Ici récuperer dans un champ le code  -->
    </div>
    </div>

	</div>
  <br><br>
	
  <form class="globalForms noPadding" action="" method="post" id="add">
			
	<table class="globalTables leftAlign noHover" cellpadding="0" cellspacing="0">
			<tbody>
      <tr>
				<td class="boldText">
					Product Codification
				</td>
				<td style="width:50%">
        <p><?php
        $codef = $code_id;
        echo"RES".$code_id;
        ?></p>
					<input name="pcode" id="product_code" type="text" size="120" value="<?php if(isset($_POST['submit'])) { echo $_POST['pcode']; } ?>" autofocus tabindex="0"/>
				</td>
			</tr>
						
		</form>


		<!-- END  -->
		
	</div>
	
<script src="include/jquery-1.9.0.min.js"></script>
<script>	
$(document).ready(function(){
$("#savecascade").submit(function(){
var get_data=$("#savecascade").serialize();
$.ajax({
			type: "POST",
			url: "inser_data.php",
			data: {"csc":get_data},
			cache: false,
			success: function(html) {    
				alert(html);
			}
		});
return false;
});

$("select#drop1").change(function(){

	var family_id =  $("select#drop1 option:selected").attr('value');
		
// alert(family_id);	
	$("#subfamily").html( "" );
	$("#sfvariant").html( "" );
	if (family_id.length > 0 ) { 
		
	 $.ajax({
			type: "POST",
			url: "create_product_subfamilies.php",
			data: "family_id="+family_id,
			cache: false,
			beforeSend: function () { 
				$('#subfamily').html('<img src="img/loader.gif" alt="" width="24" height="24">');
			},
			success: function(html) {    
				$("#subfamily").html( html );
			}
		});
	} 
});
});
</script>

		
</body>
	
</html>



Code procédure où le code est élaboré

<?php

session_start () ;

if(isset($_POST['csc'])){
  parse_str($_POST['csc'],$arr);
  if(isset($arr['sfvariant']) && $arr['sfvariant'] !=''){
    $obj = New casCade();
    $obj->insert_user_data($arr,$connect_msqli);

    $code =  $arr['family'] . $arr['subfamily'] . $arr['sfvariant'];

    // le code est OK - informtion à récupérer 
    // pour verification - 
    echo "Your Data Successfully Saved.";
    echo "<script>var code_id = $code</script>";

    $_SESSION['mavariable'] = $code ; 

  }else{
    echo "Please select all details.";
  }
}

class casCade{

function insert_user_data($arr,$connect_msqli){
  $sfvariant =$arr['sfvariant'];
  $subfamily =$arr['subfamily'];
  $family =$arr['family'];    


  $connect_msqli->close();
}
 

}


Merci d'avance

3 réponses

gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
Bonjour,

Je ne comprend pas bien ton problème. Tu veux récupérer et stocker une donnée entre deux pages?
Dans ce cas oui, tu peux utiliser
$_SESSION
et l'incorporer dans la vue HTML par la suite où bon te semble (champ input en attribut value par exemple).

Qu'est-ce qui te pose problème?

EDIT: create_product_subfamilies.php contient bien un
session_start()
si tu utilises
$_SESSION
, non?

Merci de mettre "Résolu" quand le problème est réglé!
La connaissance c'est comme la confiture: moins on en a et plus on l'étale.
0
Marie53000 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

Mon problème c'est la récupération du contenu de la variable de session initialisée dans la 2ème procédure dans ma procédure principale.

Quand je fais le test avec echo dans la procédure principale la variable ne contient pas le code créé dans la procédure secondaire.
Donc je ne peux pas continuer et mettre cette variable dans un champ.

Oui dans tous mes php je fais un session_start ();
0
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
As-tu des logs?
Es-tu sûr qu'initialement, $code contient bien quelque chose?
0
Marie53000 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   > gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour

merci de regarder ce post.
j'ai modifié le code de la procédure d'élaboration du code comme suit pour editer le contenu de la variable de session et du code :

$code =  $arr['family'] . $arr['subfamily'] . $arr['sfvariant'];


// le code est bon il faut le transferer 

echo "Your Data Successfully Saved.";
echo "<script>var code_id = $code</script>";
 
$_SESSION['mavariable'] = $code ; 
echo "SESS".$_SESSION['mavariable'];
return $_SESSION['mavariable'];
 


voici le résultat :

Your Data Successfully Saved.<script>var code_id = 153</script>SESS153

donc oui le code est bien rempli.
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention  
 
Regardes le mot glé "global" il est un peu spécial à utiliser :

Hors de toute fonction/classe :
global $MaVariable;

Puis dans les fonctions :
global $MaVariable;
$MaVariable="toto"

0
Marie53000 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Ma première approche avait été d'utiliser une variable avec le mot clé Global.
Je rencontrais le même problème c'est pourquoi j'ai utilisé une variable de session.

Merci pour ton idée
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention  
 
Pour les variable auto générées ($_GET, $_POST, $_SESSION, ...), il faut impérativement les redéclarer en global dans la fonction (pas besoin hors de celles-ci) pour pouvoir les utiliser dans celles-ci.
0