Variables globales

Fermé
Marie53000 - 14 avril 2016 à 17:10
NHenry Messages postés 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 - 15 avril 2016 à 11:44
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 jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
Modifié par gardiendelanuit le 14/04/2016 à 17:35
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 jeudi 14 avril 2016 Statut Membre Dernière intervention 13 mai 2016
14 avril 2016 à 17:46
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 jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
14 avril 2016 à 17:50
As-tu des logs?
Es-tu sûr qu'initialement, $code contient bien quelque chose?
0
Marie53000 Messages postés 4 Date d'inscription jeudi 14 avril 2016 Statut Membre Dernière intervention 13 mai 2016 > gardiendelanuit Messages postés 1770 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016
15 avril 2016 à 09:00
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 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 345
14 avril 2016 à 18:11
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 jeudi 14 avril 2016 Statut Membre Dernière intervention 13 mai 2016
15 avril 2016 à 09:18
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 15164 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 novembre 2024 345
15 avril 2016 à 11:44
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