JAVASCRIPT DANS PHP

Eléphanteau du PHP | 12 Messages

15 déc. 2005, 21:51

Bonjour,

Je suis un peu limité en connaissance javascript et voila mon probléme.

J'ai crée un script javascript, c'est une barre de progression et cette barre je voudrais m'en servir dans un script PHP.

C'est là le probleme, la barre s'affiche une fois l'execution du script PHP fini.

Aidez-moi svp !

Voici comment se passe mon script

//   MON SCRIPT JAVASCRIPT AVEC MA FONCTION POUR LA BARRE

<script language="JavaScript" type="text/javascript">
function progress_update()
{
    // .... j'ai coupé volontairement
}
</script>

// ICI Y A DU HTML POUR LA BARRE .... j'ai coupé volontairement


// et voici mon script php je l'ai simplifier volontairement, autrement c'est de la creation d'image

<?PHP


$nb_img = 400;

while( $x != $nb_img )
{
	$x++;
	echo "<br /><script>progress_update();</script>";
}

?>
Voila tout, comment faire pour executer du javascript et PHP en meme temps ? La est mon probleme, ma barre JS marche trés bien seule, mon script PHP aussi, mais les 2 ensembles c'est la cata !!

Merci d'avance

Mammouth du PHP | 19672 Messages

16 déc. 2005, 00:11

Tout simplement parce que les deux ne peuvent pas être exécuté simultanément : le PHP sera exécuté obligatoirement AVANT coté serveur pour envoyer le JavaScript qui sera quant à lui interprété coté client.
Pour avoir un semblant de simultanéité afin qu'il y ait un début d'interprétation coté client avant la fin de l'exécution coté serveur, explore la fonction ob_flush()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 12 Messages

16 déc. 2005, 00:37

merci, je vais me pencher sur le sujet la, j'éspere ne rencontrer aucune autre difficulté.

Merci encore

Eléphanteau du PHP | 12 Messages

16 déc. 2005, 01:28

Je n'arrive pas à faire fonctioner avec ob_start();

Voila ce que donne le script PHP.
<?php
$nb_img = 400;
$x = 0;
while( $x != $nb_img )
{
	$x++;
	ob_start();
	echo $x."<br /><script>progress_update();</script>";
	$stock_ob = ob_get_contents();
	echo $stock_ob;
	ob_end_clean();
}
?>
Est-ce que mes fonctions, ob_start(), ob_get_contents(), ob_end_clean(), sont bien placées et servent-elles à quelque chose? ma barre de ne progresse pas.

Merci d'avance

Mammouth du PHP | 1776 Messages

16 déc. 2005, 02:09

ne pas oublier que ob_start, tout comme session_start doit être mis avant tout affichage....
Donc je te conseille de le mettre en première ligne de ton fichier que tu appelles :wink:

Eléphanteau du PHP | 12 Messages

16 déc. 2005, 11:48

Je ne comprend toujours pas le systeme des buffers, j'ai regardé le manuel et y a plein de fonction ce ressemble. Je ne sais pas les qu'elles prendre.

Revoici mon code. Tout est dans une seule page !

// mon javascript avec ma function progress_update();

// du html

<?php

include "class/class_thumbs.php";

$thumbs = new thumbs;

$thumbs->min_mh = "470";
$thumbs->min_mv = "400";
$thumbs->min_px = "75";
$thumbs->min_in = "min";
			
$pathdir = "galerie/bosgpx";
$open= opendir($pathdir);
			
while( $img = readdir($open) )
{
	if( preg_match("/\.(gif|png|jpe?g)$/i", $img) )
	{
		if( !file_exists("$pathdir/min/$img") )
		{
			$thumbs->resize_picture($img, $pathdir);
			ob_start();
			echo "<br /><script>progress_update();</script>";
			ob_get_flush();
		}
	}
}

closedir($open);
?>

Merci de votre aide.

Eléphant du PHP | 70 Messages

18 déc. 2005, 15:35

Afficher une barre de progression d'une action dans une page web n'est pas facile !
Il faut faire communiquer autrement que par un GET ou un POST (cas classique PHP->HTML et donc JAVASCRIPT) et pour celà, il faut utiliser les technologies AJAX, c'est -à-dire utiliser dans un JAVASCRIPT les objets XMLHTTPREQUEST par exemple.
Sans vouloir te décourager, tu t'es attaqué à un gros morceau !
Quelques exemples un peu partout sur le WEB ...
Pour ma part, j'utilise ces fonctions pour mettre à jour des inputs d'un formulaire (quelques exemples sur mon site)
voir http://lemoineo.free.fr/developpements
Mais ce n'est pas du temps réel, aucun lien avec le temps qui passe.
Toi tu cherche à faire afficher une barre en fonction d'un évènement du serveur (taille d'un fichier uploadé par exemple)
Regarde du côté de XMLRAD, ils ont développé quelques trucs de ce genre, mais tu devra un peu fouiller !!!

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

19 déc. 2005, 08:44

bonjour

il existe une classe tres bien se trouvant sur phpclasses.org qui fait exactement ce que tu souhaites faire.
en ce qui concerne la bufferisation, tu peux placer les fonctions de demarrage et de de fin de bufferisation n'importe ou. ob_start doit etre appelé avant le code que tu veux bufferiser, et non pas avant chaque envoi.
bien cordialement,