Jquery UPLOAD transfert PHP
Posté : 29 déc. 2011, 16:35
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.
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é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épassant upload_max_filesize
{{else error === 2}} Fichier dépassant MAX_FILE_SIZE
{{else error === 3}} Fichier partiellement envoyé
{{else error === 4}} Aucun fichier envoy&aecute;
{{else error === 5}} Dossier introuvable - prévenez le support
{{else error === 6}} Accès au serveur impossible - prévenez le support
{{else error === 7}} Fichier stoppé
{{else error === 'maxFileSize'}}Fichier trop volumineux
{{else error === 'minFileSize'}}Fichier trop petit
{{else error === 'acceptFileTypes'}}Extension non accepté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é
{{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>