IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Variable] Portée d'une variable en include


Sujet :

Langage PHP

  1. #1
    Leoxp
    Invité(e)
    Par défaut [Variable] Portée d'une variable en include
    Salut à tous !

    Je travail actuellement sur un module d'upload multiple pour un site internet. Ce module est sous flash et, pour chaque fichier ajouté, il appelle une page PHP qui va s'occuper d'inclure le fichier dans une base de données (MySQL), de déplacer le fichier en le compressant et de faire un retour au module flash.

    Seulement, mon insertion dans la base de données s'effectue bien hormis une variable dont la portée semble s'arrêter à l'intérieur de mon fichier...

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <?
    	include ("../php/connect.php3");
    	include ("../php/login.php3");
    	include ("../php/lib/jpegcompresseur.php");  
     
    	$userId=$logUserId;
      	$sql="insert into images values ('','','$userId','".time()."','".addSlashes(@$_GET['idDossier'])."','',0)";
     
    	if (isset($_FILES["Filedata"])) {
    		if($_FILES["Filedata"]['error'] == 0){ 
    			$save_path = "../../images/galerie/";
    			if (isset($_GET['dossierup'])) $save_path.=$_GET['dossierup'].'/';		
     
    			if (file_exists($save_path.$_FILES['Filedata']['name'])) {
    			    echo utf8_encode('Un fichier portant ce nom est déjà en attente de traitement');
    	  		} 
    			else {
    				if ($result=$cbd->dbQuery($sql)) {
    					$id=$cbd->dbInsertId();
    					if (JPEGCompresseur($_FILES["Filedata"]["tmp_name"],$save_path.$id.".jpg",850,150)) {
    			        	echo utf8_encode("1");
    				    } 
    					else {
    				    	echo utf8_encode('Erreur d\'écriture');
    				    }		     	
    				}
    				else {
    					echo utf8_encode('Impossible de créer les données correspondantes');
    				}
    			}
    		} 
    		else {
    		  switch ($_FILES["Filedata"]['error']) {
      		  case 1:
      		  echo 'Fichier trop volumineux';
      		  break;
      		  case 2:
      		  echo 'Fichier trop volumineux';
      		  break;
      		  case 3:
      		  echo 'Fichier incomplet';
      		  break;
      		  case 4:
      		  echo 'Pas de fichier';
      		  break;
      		  case 5:
      		  echo 'Erreur inconnue';
      		  break;
      		  case 6:
      		  echo 'Erreur serveur'; //pas de dossier tmp
      		  break;
      		  case 7:
      		  echo utf8_encode('Erreur d\'écriture');
      		  break;
      		  case 8:
      		  echo 'Extension incorrecte';
      		  break;
      		  default:
      		  echo 'Erreur inconnue';
      		  break;
    		  }
    		}
    	} 
    	else {
    	  echo utf8_encode("Pas de fichiers envoyés");
    	}
    	echo utf8_encode('.');
    ?>
    • Le fichier "connect.php3", comme vous l'aurez deviné, contient simplement la connexion à la base de données et créé ainsi un objet : $cbd.
    • Le fichier "login.php3" se charge de retrouver le cookie associé au compte utilisateur et créé plusieurs variable dont $logUserId qui contient l'identifiant de l'utilisateur.
    • Enfin, le fichier "jpegcompresseur.php" est juste la définition d'une fonction "JPEGCompresseur" qui va se charger de redimensionner le fichier et le copie vers sa destination.



    Tout se passe bien sauf que, quand je vais voir dans ma BD, il semblerait que la variable $userId soit égale à 0...

    Je ne comprends pourtant pas. J'utilise la même disposition pour d'autres pages et ça marche parfaitement bien. J'ai essayé d'enlever mon JPEGCompresseur et mettre un simple move_uploaded_file mais ça ne marche toujours pas.

    Si je met en clair dans le script

    La ça fonctionne.

    Si quelqu'un à une idée car j'y planche depuis hier soir et rien à faire...

    Merci

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    t'a variable $userId doit etre mal interprètées dans ta chaine sql, un conseil fait comme pour les fonctions pour tes variables ca évite tous soucis d'interprétation
    cf ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="insert into images values ('','','".$userId."','".time()."','".addSlashes(@$_GET['idDossier'])."','',0)";
    sinon une chose me chagrin c'est tes includes en .php3, a tu une raison pour forcer l'exécution en php3?

    dernière chose une variable gardera sa porté même si elle provient d'un fichier include (préfère include_once), les problèmes de porté se pose pour les fonctions et classes

    edit:
    possible qu'il faille enlevé les simple quote autour de $userId c'est un int et non une string

  3. #3
    Leoxp
    Invité(e)
    Par défaut
    Merci Helfima d'avoir répondu site vite.

    J'avais en fait déjà testé ta solution. Mais ça n'a rien fait de plus

    Sinon mon choix en .php3 remonte à mes débuts en php. Mais j'ai créé tellement d'autres pages depuis que si je change cette extension, je vais devoir modifier tous mes autres fichiers...
    Mais tu as raison, un simple .php devrait suffire.

    Penses-tu que l'erreur puisse venir de là ?

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    tu as du écrire quand je corrigeai mon texte précédent ca vient du type du champ pour userId dans la base de données, essai sans les simples quotes autour de userId
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="insert into images values ('','',".$userId.",'".time()."','".addSlashes(@$_GET['idDossier'])."','',0)";

  5. #5
    Leoxp
    Invité(e)
    Par défaut
    Et non hélas, ça n'a rien changé...

    Je continue à regarder mon code de A à Z mais je ne comprends vraiment pas ce qu'il se passe. Je crois que je vais être obligé de lire mon cookie à même le script mais ça me saoule de pas comprendre

    Edit : En fait j'ai l'impression que les pages appelées par mon application flash n'arrivent pas à lire les cookies. Car lorsque je test le cookie directement dans mon script, il ne me renvoi rien... Une piste de plus à explorer...
    Dernière modification par Leoxp ; 06/03/2009 à 16h48.

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    fait un echo de $sql
    récupère la ligne sql et passe la dans phpmyadmin ou ton gestionnaire mysql et test ta ligne sql ca vient généralement de la et sourtout tu verra sur $userId est bien null, si c'est le cas pose des echo "userId=".$userId dans ton code et remonte le au fur et à mesure dans code pour voir ou tu perds ta valeur si tant est qu'elle a une valeur un jour

  7. #7
    Leoxp
    Invité(e)
    Par défaut
    J'avais affiché la variable de ma requête et à l'intérieur était bien affiché "0" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into images values ('','',0,12345678,'123','',0)
    La valeur de mon $logUserId se perd dès le début du script en fait. J'ai l'impression que c'est le cookie que mon script flash n'arrive pas à lire. Je suis en train de me renseigner sur le net pour la lisibilité des cookies par flash.

  8. #8
    Leoxp
    Invité(e)
    Par défaut
    Je viens d'insérer le code suivant dans mon scrit (celui qui est lu par mon application flash) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $logId = @$_COOKIE['logMonSite'];
    if ( (@isSet($logId))&&($logId) ) {
    	$tab=explode("|",$logId);
    	$logUser=$tab[0];
    	$logPassword=$tab[1]; 
    	$logUserId=$tab[2];
    	$sql="select * from users where pseudo='".strToLower($logUser)."' and mdp=md5('$logPassword') and actif in (-1,1)";
    	$result=$cbd->dbQuery($sql);		
    	if ($cbd->dbResult($result)) $logValide=1; else $logValide=0;
    }
    else $logValide=0;
    Visiblement il ne trouve aucune existance du cookie "logMonSite" alors que sur les autres pages du site il le trouve parfaitement. J'ai l'impression que lorsque le script est appelé depuis mon appli flash, le site interdit la lecture du cookie par l'appli.

    Est-ce que quelq'un sait pourquoi ?

  9. #9
    Leoxp
    Invité(e)
    Par défaut
    Bon visiblement c'est plus "grave" que ça... A présent il me marque un $logUserId dans ma requête. Il est égal à 1 et ce, même quand je change d'utilisateur !

    Je pense donc qu'il doit s'agir d'un problème de cache. Je vais me documenter sur tout ça.


    Edit: Effectivement c'est bien ça. Lorsque je suis sous IE tout marche bien. Et sous firefox il faut que je vide le cache pour que ça prenne le bon pseudo. A suivre. 1h19 du mat et toujours à plancher la dessus. Fait ch@~#
    Dernière modification par Leoxp ; 07/03/2009 à 01h19.

  10. #10
    Leoxp
    Invité(e)
    Par défaut
    J'ai mis les lignes suivantes dans mes fichiers php en lien avec l'anim flash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
    header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Pragma: no-cache');
    Ainsi que ces lignes dans mon fichier flash :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idA=Math.random();
    selectedFile.upload("../scripts/upload.php?idA="+idA+"&idDossier="+_level0.idDossier+"&"+varget+_root.vargetgoupload+_root.vargetsessions);
    Tout marche bien sous IE (mais ça marchait déjà sous IE... pour une fois !) mais pas sous Firefox où il s'obstine à reprendre l'ID d'un précédent user (cache).

  11. #11
    Leoxp
    Invité(e)
    Par défaut
    J'ai contourné le problème en ajoutant la variable USER à l'appel du fichier swf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var so = new SWFObject("<?=$root?>include/flash/HPNasUploader1.swf?<?=rand()?>&idUser=<?=$logUserId?>&idDossier=<?=$idDossier?>", "nasuploader", "550", "400", "8");
    Dans le fichier FLASH :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selectedFile.upload("../scripts/upload.php?idA="+((Date()).getTime())+"&idDossier="+_level0.idDossier+"&idUser="+_level0.idUser+"&"+varget+_root.vargetgoupload+_root.vargetsessions);
    Et je le récupère dans le script php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="insert into images values ('','','".@$_GET['idUser']."','".time()."','".addSlashes(@$_GET['idDossier'])."','',0)";
    Et ça marche.

    Mais ça n'est pas DU TOUT sécurisé. N'importe qui peut bidouiller l'ID et du coup ajouter des données avec le nom d'un autre utilisateur !

    Et tout ça à cause d'une co#@$&*ù de mise en cache !

    Ça fait plus de 24h que je planche sur ce problème sans réelle solution.

Discussions similaires

  1. Portée d'une variable tableau dans une fonction JS
    Par renaud26 dans le forum jQuery
    Réponses: 7
    Dernier message: 02/08/2011, 10h24
  2. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  3. Réponses: 1
    Dernier message: 20/04/2007, 09h12
  4. [PHP-JS] mettre une variable javascript dans une variable php
    Par Mounr dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2007, 09h09
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo