Bonjour,
Pour gérer son compte et son profil, le membre inscrit doit pouvoir entre autres uploader/modifier un avatar via le plugin Plupload.
Seulement,dans le fichier upload.php,lors de l'update de la bdd, j'ai besoin de l'id utilisateur donné par la variable de session $_SESSION['auth'].
Cette variable existe bien dans la page profile.php: un var_dump(session $_SESSION['auth']) donne :
C:\wamp\www\graf\profile.php:24:
object(stdClass)[1]
public 'id' => string '22' (length=2)
public 'username' => string 'johndoe' (length=6)
public 'email' => string 'john@doe.com' (length=17)
public 'password' => string '$2y$10$nwS.6Plxyz82QnRuPdRJnuLKLMJK/gzmcWoazYz5Uk3SOk95DELQ.' (length=60)
public 'confirmation_token' => null
public 'confirmed_at' => string '2016-11-29 12:27:40' (length=19)
public 'reset_token' => null
public 'reset_at' => null
public 'remember_token' => null
public 'avatar' => string 'John-Doe.png' (length=12)

Mais je n'arrive pas à la transmettre à upload.php. Éclairez-moi svp.

profile.php:

<?php
    if(session_status() == PHP_SESSION_NONE){ session_start(); }
    require_once('inc/functions.php'); 
    require_once('inc/db.php');
    reconnect_from_cookie();
?><!DOCTYPE html>
<html > 
<head>
    <meta charset="utf-8"/>
    <title>Profil Membre</title>
    <link href="css-up/style.css" rel="stylesheet" type="text/css"  />
    <script src="js-up/jquery-1.11.3.js" type="text/javascript" ></script>
</head>
<body>
    <div id="plupload">        
        <div id="droparea">
            <p>Déposez vos fichiers ici</p>
            <span class="or">ou</span>
            <a href="#" id="browse">Parcourir</a>
        </div>
        <div id="filelist">
            <?php foreach(glob('uploads/*.*') as $v):?>
            <div class="file">                
                <img src="<?php  echo $v; ?>">
                <?php  echo basename($v); ?>                
                <div class="actions">
                    <a href="<?php  echo basename($v) ?>" class="del">&times;</a>
                </div>
            </div>
            <?php endforeach; ?>
        </div>
    </div>    
    <script src="js-up/plupload/plupload.full.min.js" type="text/javascript" ></script>
    <script src="js-up/plupload/moxie.js" type="text/javascript" ></script>
    <script src="js-up/main.js" type="text/javascript" ></script> 
</body>
</html> 

main.js :

    //var sessId = '<?php echo $_SESSION['auth']['id'] ; ?>';    
    var uploader = new plupload.Uploader({
        runtimes          : 'html5,flash',
        container         : 'plupload',
        browse_button     : 'browse',
        drop_element      : 'droparea',
        url               : 'upload.php',
        flash_swf_url     : 'js-up/plupload/Moxie.swf',
        multi_selection   : false,
        multipart         : true,
        urlstream_upload  : true,
        multipart_params  : {directory:'test'},
        max_file_size     : '1mb',
        resize            : {width:320,height:240,quality:90},
        filters           : [{ title: 'images', extensions:'JPEG,JPG,PNG,GIF'}]

    });

    uploader.bind('Init',function(up, params){  
        if(params.runtime!='html5'){
            $('#droparea').css('border','none').find('p,span').remove();
        }
    });

    uploader.bind('UploadProgress',function(up, file){
        $('#'+file.id).find('.progress').css('width',file.percent+'%');
    });

    uploader.init();   

    uploader.bind('FilesAdded',function(up,files){    
        var filelist=$('#filelist');
        for(var i in files){
            var file= files[i];
            filelist.prepend('<div id="'+file.id+'" class="file">'+file.name+' ('+plupload.formatSize(file.size)+')'+'<div class="progressbar"><div class="progress"></div></div></div>');
        }
        $('#droparea').removeClass('hover');
        uploader.start();
        uploader.refresh(); 

    }); 

    uploader.bind('Error',function(up,err){
        alert(err.message);
        $('#droparea').removeClass('hover');
        uploader.refresh();
    });
    uploader.bind('FileUploaded',function(up, file, response){    // upload terminé
        data = $.parseJSON(response.response);
        if(data.error){
            alert(data.message);
            $('#'+file.id).remove();
        }else{
            $('#'+file.id).replaceWith(data.html);
            /*
            $.ajax({
                type: "POST",
                cache: false,
                url: "upload.php",
                data: "sessId="+sessId
            }); 
            */            
        }
    });

    jQuery(function($){ 
        $('#droparea').bind({
            dragover:function(e){
                $(this).addClass('hover');
            },
            dragleave:function(e){
                $(this).removeClass('hover');
            }
        });

        $('.del').on('click',function(e){   
            e.preventDefault();
            var elem =$(this);
            if(confirm('Voulez-vous vraiment supprimer cette image ?')){
                $.get('upload.php', {action:'delete',file:elem.attr('href')});
                elem.parent().parent().slideUp();
            }
            return false;

        });

    });

upload.php :

<?php 
    if(session_status() == PHP_SESSION_NONE){ session_start();  }

    if(isset($_GET['action']) && $_GET['action']== 'delete'){
        unlink('uploads/'.$_GET['file']);
        die();
    }
    require_once('inc/functions.php'); 
    require_once('inc/db.php');
    reconnect_from_cookie();

    $extensions_allowed = array('.JPEG','.jpg', '.PNG','.GIF' ); 
    $extension = strrchr($_FILES['file']['name'], '.');  
    if(!in_array($extension, $extensions_allowed))  {      
        alert('Seuls les fichiers au format png, gif, jpg ou jpeg sont autorisés ');        
    }else{        
        $file=$_FILES['file'];    
        $name=$file['name'];
        if(filesize($file['tmp_name']) > 1000000){
            die('{"error":true, "message": "Le fichier est trop volumineux. Veuillez télécharger une image inférieure à  1 Mo."}');
        }        
        if(file_exists('uploads/'.$name)){
            die('{"error":true, "message": "L\'image existe déjà"}');
        }  

        $name = strtr($name,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','~');        
        $name = preg_replace('/([^.a-zA-Z0-9]+)/i', '-', $name);        
        $u = mt_rand(0,1000000)."_".$name;
        move_uploaded_file( $_FILES['file']['tmp_name'],'uploads/'.$u );

        //Cette requête marche
        $pdo->prepare("UPDATE users SET avatar=? WHERE id=22 ")->execute([$u]) ;  
        $pdo = null;        
        /* Celle-ci ne marche pas
        $pdo->prepare("UPDATE users SET avatar=? WHERE id='$sessId' ")->execute([$u]) ;
        $pdo = null;
        */
        $v='uploads/'.$u;
        $html='<div class="file"><img src="'.$v.'" />'.basename($v).'<div class="actions"><a href="'.basename($v).'" class="del" >&times;</a></div></div>';
        $html=str_replace('"','\\"',$html);
        die('{"error":false, "html": "'.$html.'"}');

    }

?> 

3 réponses


JeremieMeunier
Réponse acceptée

Passe le sujet en résolu ! Et de rien c'est normal !

Bonsoir,

Tu sait qu'il ne faut rien écrire avant session_start() ?

amdawb
Auteur

je suis vraiment désolé. J'ai enlevé le if(session_status() == PHP_SESSION_NONE){ ,et mis directement session_star().
Et avec une requête comme suit l'update de la table marche :

$user=$_SESSION['auth'] ;
$pdo->prepare("UPDATE users SET avatar=? WHERE id=? ")->execute([$u,$user->id]) ;
$pdo = null;

Merci JeremieMeunier.
Sujet résolu