Page 1 sur 1

Jquery UPLOAD transfert PHP

Posté : 29 déc. 2011, 16:35
par BnKk
Bonjour,

J'ai deux pages sur lesquelles je suis en train d'étudier mais je n'arrive pas à résoudre mon exercice. L'utilisateur peut cliquer sur un bouton et ajouter plusieurs photos qui vont apparaitre dans un tableau dynamique. Dès lors qu'il veut, il peut les uploader. La page appel donc upload.php qui traite la demande. Tout se passe bien mais je voudrais ajouter un enregistrement SQL pour retenir le nom du fichier avec l'id du posteur mais là, je bug je ne sais pas comment faire :/

Auriez vous une idée ? Merci d'avance, & bonnes fêtes.
 if(isset($_POST['id_bien'])) { 

			
			
error_reporting(E_ALL | E_STRICT);

class UploadHandler
{

  
    private $options;
	
    function __construct($options=null) {
        $this->options = array(
            'script_url' => $_SERVER['PHP_SELF'],
            'upload_dir' => dirname(__FILE__).'/photos/large/',
            'upload_url' => dirname($_SERVER['PHP_SELF']).'/photos/small/',
            'param_name' => 'files',
    
            'max_file_size' => null,
            'min_file_size' => 1,
            'accept_file_types' => '/.+$/i',
            'max_number_of_files' => 15,
            'discard_aborted_uploads' => true,
            'image_versions' => array(
                
                'large' => array(
                    'upload_dir' => dirname(__FILE__).'/photos/large/',
                    'upload_url' => dirname($_SERVER['PHP_SELF']).'/photos/large/',
                    'max_width' => 1220,
                    'max_height' => 500
                ),
               
                'thumbnail' => array(
                    'upload_dir' => dirname(__FILE__).'/photos/small/',
                    'upload_url' => dirname($_SERVER['PHP_SELF']).'/photos/small/',
                    'max_width' =>150,
                    'max_height' => 150
                )
            )
        );
        if ($options) {
            $this->options = array_replace_recursive($this->options, $options);
        }
    }
 
	
    private function get_file_object($file_name) {
	
        $file_path = $this->options['upload_dir'].$file_name;
        if (is_file($file_path) && $file_name[0] !== '.') {
            $file = new stdClass();
            $file->name = $file_name;
            $file->size = filesize($file_path);
            $file->url = $this->options['upload_url'].rawurlencode($file->name);
            foreach($this->options['image_versions'] as $version => $options) {
                if (is_file($options['upload_dir'].$file_name)) {
                    $file->{$version.'_url'} = $options['upload_url']
                        .rawurlencode($file->name);
                }
            }
            $file->delete_url = $this->options['script_url']
                .'?file='.rawurlencode($file->name);
            $file->delete_type = 'DELETE';
            return $file;
        }
        return null;
    }
	
	
    
    private function get_file_objects() {
        return array_values(array_filter(array_map(
            array($this, 'get_file_object'),
            scandir($this->options['upload_dir'])
        )));
    }

    private function create_scaled_image($file_name, $options) {
        $file_path = $this->options['upload_dir'].$file_name;
        $new_file_path = $options['upload_dir'].$file_name;
        list($img_width, $img_height) = @getimagesize($file_path);
        if (!$img_width || !$img_height) {
            return false;
        }
        $scale = min(
            $options['max_width'] / $img_width,
            $options['max_height'] / $img_height
        );
        if ($scale > 1) {
            $scale = 1;
        }
        $new_width = $img_width * $scale;
        $new_height = $img_height * $scale;
        $new_img = @imagecreatetruecolor($new_width, $new_height);
        switch (strtolower(substr(strrchr($file_name, '.'), 1))) {
            case 'jpg':
            case 'jpeg':
                $src_img = @imagecreatefromjpeg($file_path);
                $write_image = 'imagejpeg';
                break;
            case 'gif':
                $src_img = @imagecreatefromgif($file_path);
                $write_image = 'imagegif';
                break;
            case 'png':
                $src_img = @imagecreatefrompng($file_path);
                $write_image = 'imagepng';
                break;
            default:
                $src_img = $image_method = null;
        }
        $success = $src_img && @imagecopyresampled(
            $new_img,
            $src_img,
            0, 0, 0, 0,
            $new_width,
            $new_height,
            $img_width,
            $img_height
        ) && $write_image($new_img, $new_file_path);
        // Free up memory (imagedestroy does not delete files):
        @imagedestroy($src_img);
        @imagedestroy($new_img);
        return $success;
    }
    
    private function has_error($uploaded_file, $file, $error) {
        if ($error) {
            return $error;
        }
        if (!preg_match($this->options['accept_file_types'], $file->name)) {
            return 'acceptFileTypes';
        }
        if ($uploaded_file && is_uploaded_file($uploaded_file)) {
            $file_size = filesize($uploaded_file);
        } else {
            $file_size = $_SERVER['CONTENT_LENGTH'];
        }
        if ($this->options['max_file_size'] && (
                $file_size > $this->options['max_file_size'] ||
                $file->size > $this->options['max_file_size'])
            ) {
            return 'maxFileSize';
        }
        if ($this->options['min_file_size'] &&
            $file_size < $this->options['min_file_size']) {
            return 'minFileSize';
        }
        if (is_int($this->options['max_number_of_files']) && (
                count($this->get_file_objects()) >= $this->options['max_number_of_files'])
            ) {
            return 'maxNumberOfFiles';
        }
        return $error;
    }
    
    private function handle_file_upload($uploaded_file, $name, $size, $type, $error) {
        $file = new stdClass();
        $file->name = basename(stripslashes($name));
        $file->size = intval($size);
        $file->type = $type;
        $error = $this->has_error($uploaded_file, $file, $error);
        if (!$error && $file->name) {
            if ($file->name[0] === '.') {
                $file->name = substr($file->name, 1);
            }
            $file_path = $this->options['upload_dir'].$file->name;
            $append_file = is_file($file_path) && $file->size > filesize($file_path);
            clearstatcache();
            if ($uploaded_file && is_uploaded_file($uploaded_file)) {
                // multipart/formdata uploads (POST method uploads)
                if ($append_file) {
                    file_put_contents(
                        $file_path,
                        fopen($uploaded_file, 'r'),
                        FILE_APPEND
                    );
                } else {
                    move_uploaded_file($uploaded_file, $file_path);

                }
            } else {
                // Non-multipart uploads (PUT method support)
                file_put_contents(
                    $file_path,
                    fopen('php://input', 'r'),
                    $append_file ? FILE_APPEND : 0
                );
            }
            $file_size = filesize($file_path);
            if ($file_size === $file->size) {
                $file->url = $this->options['upload_url'].rawurlencode($file->name);
                foreach($this->options['image_versions'] as $version => $options) {
                    if ($this->create_scaled_image($file->name, $options)) {
                        $file->{$version.'_url'} = $options['upload_url']
                            .rawurlencode($file->name);
                    }
                }
            } else if ($this->options['discard_aborted_uploads']) {
                unlink($file_path);
                $file->error = 'abort';
            }
            $file->size = $file_size;
            $file->delete_url = $this->options['script_url']
                .'?file='.rawurlencode($file->name);
            $file->delete_type = 'DELETE';
        } else {
            $file->error = $error;
        }

        return $file;

    }
    
    public function get() {
        $file_name = isset($_REQUEST['file']) ?
            basename(stripslashes($_REQUEST['file'])) : null; 
		
        if ($file_name) {
            $info = $this->get_file_object($file_name);
        } else {
            $info = $this->get_file_objects();
        }
        header('Content-type: application/json');
        echo json_encode($info);
    }
    
    public function post() 
	{
	
        $upload = isset($_FILES[$this->options['param_name']]) ?
            $_FILES[$this->options['param_name']] : array(
                'tmp_name' => null,
                'name' => null,
                'size' => null,
                'type' => null,
                'error' => null
            );
        $info = array();
		
		if (is_array($upload['tmp_name'])) {
		
            foreach ($upload['tmp_name'] as $index => $value) {
                $info[] = $this->handle_file_upload(
                    $upload['tmp_name'][$index],
                    isset($_SERVER['HTTP_X_FILE_NAME']) ?
                        $_SERVER['HTTP_X_FILE_NAME'] : $upload['size'][$index].'-'.time().'.'.strtolower(substr(strrchr($upload['name'][$index], '.'), 1)),
				    isset($_SERVER['HTTP_X_FILE_SIZE']) ?
                        $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index],
                    isset($_SERVER['HTTP_X_FILE_TYPE']) ?
                        $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index],
                    $upload['error'][$index]
				
                );
				

	    }
        } else {
            $info[] = $this->handle_file_upload(
                $upload['tmp_name'],
                isset($_SERVER['HTTP_X_FILE_NAME']) ?
                    $_SERVER['HTTP_X_FILE_NAME'] : $upload['size'][$index].'-'.time().'.'.strtolower(substr(strrchr($upload['name'][$index], '.'), 1)),
                isset($_SERVER['HTTP_X_FILE_SIZE']) ?
                    $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'],
                isset($_SERVER['HTTP_X_FILE_TYPE']) ?
                    $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'],
                $upload['error']
            );
				
        }
			
        header('Vary: Accept');
        if (isset($_SERVER['HTTP_ACCEPT']) &&
            (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) {
            header('Content-type: application/json');
		} else {
            header('Content-type: text/plain');

        }
		
        echo json_encode($info);
	
    }
    

	  public function delete() {
        $file_name = isset($_REQUEST['file']) ? basename(stripslashes($_REQUEST['file'])) : null;
        $file_path = $this->options['upload_dir'].$file_name;
        $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path);
        if ($success) {
            foreach($this->options['image_versions'] as $version => $options) {
                $file = $options['upload_dir'].$file_name;
                if (is_file($file)) {
                    unlink($file);
                }
            }
        }
	    header('Content-type: application/json');
        echo json_encode($success);
    }
}

$upload_handler = new UploadHandler();

header('Pragma: no-cache');
header('Cache-Control: private, no-cache');
header('Content-Disposition: inline; filename="files.json"');
header('X-Content-Type-Options: nosniff');

switch ($_SERVER['REQUEST_METHOD']) {
    case 'HEAD':
    case 'GET':
        $upload_handler->get();
        break;
    case 'POST':
        $upload_handler->post();
		break;
    case 'DELETE':
        $upload_handler->delete();
        break;
    default:
        header('HTTP/1.0 405 Method Not Allowed');
}
}
<div style="width:750px; min-height:400px; margin-top:20px;">
 <div id="fileupload">
    <form action="upload.php" method="POST" enctype="multipart/form-data">
        <div class="fileupload-buttonbar">
            <label class="fileinput-button">
                <span>-- Ajouter photo(s) --</span>
				<input type="hidden" name="id_bien" value="<?php echo $_GET['id_bien']; ?>">
				<input type="hidden" name="id_" value="<?php echo $_SESSION['id_m']; ?>">
                <input type="file" name="files[]" multiple>
            </label>
            <button type="submit" class="start">Commencer l'envoi</button>
            <button type="reset" class="cancel">Stopper l'envoi</button>
           
        </div>
    </form>
    <div class="fileupload-content">
        <table class="files"></table>
        <div class="fileupload-progressbar"></div>
    </div>
</div>
<script id="template-upload" type="text/x-jquery-tmpl">
    <tr class="template-upload{{if error}} ui-state-error{{/if}}">
        <td class="preview"></td>
        <td class="name">${name}</td>
        <td class="size">${sizef}</td>
        {{if error}}
            <td class="error" colspan="2">Erreur:
                {{if error === 'maxFileSize'}} Fichier trop volumineux
                {{else error === 'minFileSize'}} Fichier trop petit
                {{else error === 'acceptFileTypes'}} Extension non accept&eacute;e
                {{else error === 'maxNumberOfFiles'}} Vous avez atteint le nombre maximum de photos par bien
                {{else}}${error}
                {{/if}}
            </td>
        {{else}}
            <td class="progress"><div></div></td>
            <td class="start"><button>Commencer</button></td>
        {{/if}}
        <td class="cancel"><button>Arrêter</button></td>
    </tr>
</script>
<script id="template-download" type="text/x-jquery-tmpl">
    <tr class="template-download{{if error}} ui-state-error{{/if}}">
        {{if error}}
            <td></td>
            <td class="name">${name}</td>
            <td class="size">${sizef}</td>
            <td class="error" colspan="2">Erreur:
                {{if error === 1}} Fichier d&eacute;passant upload_max_filesize 
                {{else error === 2}} Fichier d&eacute;passant MAX_FILE_SIZE 
                {{else error === 3}} Fichier partiellement envoy&eacute;
                {{else error === 4}} Aucun fichier envoy&aecute;
                {{else error === 5}} Dossier introuvable - pr&eacute;venez le support
                {{else error === 6}} Acc&egrave;s au serveur impossible  - pr&eacute;venez le support
                {{else error === 7}} Fichier stopp&eacute;
                {{else error === 'maxFileSize'}}Fichier trop volumineux
                {{else error === 'minFileSize'}}Fichier trop petit
                {{else error === 'acceptFileTypes'}}Extension non accept&eacute;e
                {{else error === 'maxNumberOfFiles'}}Vous avez atteint le nombre maximum de photos par bien
                {{else error === 'uploadedBytes'}} Trop volumineux
                {{else error === 'emptyResult'}} Aucun fichier envoy&eacute;
                {{else}}${error}
                {{/if}}
            </td>
        {{else}}
            <td class="preview">
                {{if thumbnail_url}}
                    <a href="${url}" target="_blank"><img src="${thumbnail_url}"></a>
                {{/if}}
            </td>
            <td class="name">
                <a href="${url}"{{if thumbnail_url}} target="_blank"{{/if}}>${name}</a>
<?php 

?>
			</td>
            <td class="size">${sizef}</td>
            <td colspan="2"></td>
        {{/if}}
        <td class="delete">
            <button data-type="${delete_type}" data-url="${delete_url}">Supprimer</button>
        </td>
		
    </tr>

</script>

</div>
<script src="./js/jquery.js"></script>
<script src="./js/jquerytpl.js"></script>
<script src="./js/jqueryui.js"></script>
<script src="./js/jquery.iframe-transport.js"></script>
<script src="./js/jquery.fileupload.js"></script>
<script src="./js/jquery.fileupload-ui.js"></script>
<script src="./js/application.js"></script>

Re: Jquery UPLOAD transfert PHP

Posté : 30 déc. 2011, 14:19
par moogli

Re: Jquery UPLOAD transfert PHP

Posté : 30 déc. 2011, 17:54
par Invité
Bonsoir,

Je pense que je me suis mal exprimé, autant pour moi :). Je sais faire une requête SQL et ça fonctionne correctement. Cependant, voici le code ci-dessous qui ne fonctionne pas.

[Logique car le ${name} n'est pas lu par php mais je l'ai mis pour bien comprendre ce que je cherche à faire]
<script id="template-download" type="text/x-jquery-tmpl">
    <tr class="template-download{{if error}} ui-state-error{{/if}}">
        {{if error}}
            <td></td>
            <td class="name">${name}</td>
            <td class="size">${sizef}</td>
            <td class="error" colspan="2">Erreur:
                {{if error === 1}} Fichier d&eacute;passant upload_max_filesize 
                {{else error === 2}} Fichier d&eacute;passant MAX_FILE_SIZE 
                {{else error === 3}} Fichier partiellement envoy&eacute;
                {{else error === 4}} Aucun fichier envoy&aecute;
                {{else error === 5}} Dossier introuvable - pr&eacute;venez le support
                {{else error === 6}} Acc&egrave;s au serveur impossible  - pr&eacute;venez le support
                {{else error === 7}} Fichier stopp&eacute;
                {{else error === 'maxFileSize'}}Fichier trop volumineux
                {{else error === 'minFileSize'}}Fichier trop petit
                {{else error === 'acceptFileTypes'}}Extension non accept&eacute;e
                {{else error === 'maxNumberOfFiles'}}Vous avez atteint le nombre maximum de photos par bien
                {{else error === 'uploadedBytes'}} Trop volumineux
                {{else error === 'emptyResult'}} Aucun fichier envoy&eacute;
                {{else}}${error}
                {{/if}}
            </td>
        {{else}}
            <td class="preview">
                {{if thumbnail_url}}
                    <a href="${url}" target="_blank"><img src="${thumbnail_url}"></a>
                {{/if}}
            </td>
            <td class="name">
                <a href="${url}"{{if thumbnail_url}} target="_blank"{{/if}}>${name}</a>
<[php]?php 
$nom = [b]${name};[/b]
$resultat = $connexion->query('INSERT INTO photos_biens (id, id_bien, id_m, nom) VALUES ("","'.$_GET['id_bien'].'", "'.$_SESSION['id_m'].'", "'.$nom.'") '); ?>[/php]
			</td>
            <td class="size">${sizef}</td>
            <td colspan="2"></td>
        {{/if}}
        <td class="delete">
            <button data-type="${delete_type}" data-url="${delete_url}">Supprimer</button>
        </td>
		
    </tr>

</script>

Re: Jquery UPLOAD transfert PHP

Posté : 30 déc. 2011, 23:34
par moogli
pour être franc je ne vois où est le problème.

si ta moulinette fonctionne il n'y a qu'un chose a faire : ajouter la requête d'insertion juste après la copie du fichier.

@+