Variable de session + Ajax

Eléphanteau du PHP | 16 Messages

22 juil. 2016, 09:03

Bonjour,

J'essaie d'implémenter un bouton qui mettrait à jour une variable de session en utilisant ajax et l'événement onclick.
<?php
	session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="style.css"/>
<script language="JavaScript">

	function createInstance()
	{
        var req = null;
		if (window.XMLHttpRequest)
		{
 			req = new XMLHttpRequest();
		} 
		else if (window.ActiveXObject) 
		{
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e)
			{
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) 
				{
					alert("XHR not created");
				}
			}
	        }
        return req;
	};

	function storing(data, element)
	{
		element.innerHTML = data;
	}

	function submitForm(element)
	{ 
		var req =  createInstance();

		req.onreadystatechange = function()
		{ 
			if(req.readyState == 4)
			{
				if(req.status == 200)
				{
					storing(req.responseText, element);	
				}	
				else	
				{
					alert("Error: returned status code " + req.status + " " + req.statusText);
				}	
			} 
		}; 
		req.open("GET", "ajax-get.php", true); 
		req.send(null); 
	} 
</script>
</head>
<body>
<p> <span id="storage"> </span></p>
<form name="ajax" method="post" action="">
	<p>
	<input type="button" value="Envoyer"  onclick="submitForm(document.getElementById('storage'))">
	</p>
</form>	 
<?php
if(isset($_POST['download'])){	
	$_SESSION['stop_upload']=0;
        echo $_SESSION['stop_upload'];
        while($_SESSION['stop_upload']==0){
                   traitements
                   echo $_SESSION['stop_upload'];
        }
        echo $_SESSION['stop_upload'];
}	
</body>
Et voici le fichier ajax-get.php :
<?php
	$_SESSION['stop_upload'] = 1;
	echo $_SESSION['stop_upload'];
?>
J'ai réalisé des tests. Quand j'appuie sur le bouton pendant l'execution de la boucle, le fichier ajax-get.php me renvoie 1 mais le fichier principal continue de me renvoyer 0.

J'espère avoir été clair.
Merci d'avance pour vos aides et conseils.

PS : Je ne mets pas le code du formulaire qui me renvoi la méthode $_POST['download'] car sans importance pour mon problème.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 juil. 2016, 09:25

Bonjour,

Il te manque un session_start() dans le fichier ajax, sans lui, la variable de session ne peut pas être mise à jour :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 16 Messages

22 juil. 2016, 09:35

<?php
  session_start();
  $_SESSION['stop_upload'] = 1;
  echo $_SESSION['stop_upload'];
?>
J'ai essayé mais cela ne fonctionne toujours pas.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

22 juil. 2016, 09:48

A mon avis, tu as un problème d'architecture, faire une boucle infinie en PHP pour l'affichage d'une page en attendant une action est une erreur.

Qu'est-ce que tu cherches à faire ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 16 Messages

22 juil. 2016, 10:10

Le but serait que l'utilisateur puisse arrêter le traitement dans la boucle while quand il le souhaite. Pour être plus précis, la boucle while permet un upload de fichiers via ftp, ainsi l'utilisateur pourrait arrêter cette upload avant la fin.