Voici comment créer un système d’upload d’image à la volée avec jQuery et php. Ce module vous donne la possibilité d’envoyer des images en ligne depuis votre ordinateur sans recharger la page.
Vous pouvez consulter la démonstration ici : Démo
Fichier HTML :
<div id="wrapAll"> <div id='preview'> </div> <form id="uploadForm" method="post" enctype="multipart/form-data" action='ajaximage.php'> Sélectionner les images : <div id='uploadStatus' style='display:none'><img src="loader.gif" alt="Uploading...."/></div> <div id='imgUploadBtn'> <input type="file" multiple="multiple" name="imgUpload[]" id="imgUpload" accept="image/*" /> </div> </form> </div>
Code Javascript :
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript" src="jquery.form.bassm.js"></script> <script type="text/javascript" > $(document).ready(function() { $('#imgUpload').on('change', function(){ $("#uploadForm").ajaxForm({ target: '#preview', //clearForm: true, resetForm: true, beforeSubmit:function(){ $("#uploadStatus").show(); $("#imgUploadBtn").hide(); }, success:function(){ $("#uploadStatus").hide(); $("#imgUploadBtn").show(); }, error:function(){ $("#uploadStatus").hide(); $("#imgUploadBtn").show(); } }).submit(); }); }); </script>
Voici le fichier jquery.form.bassm.js utilisé dans le script.
Fichier ajaximage.php :
<?php //Répertoire ou seront placés les images $pathTo = "uploads/"; $maxSize = '0.2'; //en Mo // récupère l'extension du fichier function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); $ext = strtolower($ext); return $ext; } function cleanFileName ($chaine, $extension) { setlocale(LC_ALL, 'fr_FR'); $chaine = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $chaine); $chaine = preg_replace('#[^0-9a-z]+#i', '-', $chaine); while(strpos($chaine, '--') !== false) { $chaine = str_replace('--', '-', $chaine); } $chaine = trim($chaine, '-'); $chaine = strtolower($chaine); $chaine = preg_replace("@(-$extension)@", "", $chaine); //pour afficher l'extension return $chaine; } $valid_formats = array("jpg", "jpeg", "png", "gif", "bmp"); $valid_formats = array("image/gif", "image/jpeg", "image/pjpeg", "image/png", "image/bmp"); if(isset($_POST) AND $_SERVER['REQUEST_METHOD'] == "POST") { $images = $_FILES['imgUpload']; $count = count($images['name']); $msgError = $msgSuccess = ''; $error = 0; $uploaded = 0; for ($i=0; $i < $count; $i++) { # code... $type = $images['type'][$i]; $name = $images['name'][$i]; $size = $images['size'][$i]; if(strlen($name)) { $ext = getExtension($name); if(in_array($type,$valid_formats)) { // Vérification de la taille de l'image if($size < (1024* (1024 * $maxSize)) ) { $newImageUploaded = cleanFileName($name, $ext).'-'.time().'.'.$ext; $tmp = $images['tmp_name'][$i]; if(move_uploaded_file($tmp, $pathTo.$newImageUploaded)) { $msgSuccess .= "<img src='uploads/".$newImageUploaded."' class='preview'>"; $uploaded = 1; } else { $error = 1; $msgError .= "Erreur"; } } else { $error = 1; $msgError .= "L'image ne doit pas dépasser la taille de ". 1000 * $maxSize ."Ko"; } } else { $error = 1; $msgError .= "Format de fichier invalide ...\n"; } } } if ($uploaded == 1) { echo $msgSuccess; } else if ($uploaded == 0 && $error == 1) { echo $msgError; } else { //echo $msgSuccess; } exit(); } ?>
Fichier CSS :
#wrapAll { width: 1000px; margin: 0 auto;} #preview img { max-width: 150px; max-height: 150px; padding: 5px; margin: 5px; border: 1px solid #e1e1e1; }
Bien entendu ce script peut être amélioré en ajoutant une interaction avec une table user pour ajouter une photo de profil par exemple.
A noter que si vous utilisez une version de jQuery antérieure à 1.9 vous pouvez remplacer .on() par .live()
//$('#imgUpload').on('change', function(){ $('#imgUpload').live('change', function(){
Si vous souhaitez ajouter les images une par une voici ce qu’il faut changer dans le code javascript
<!--<input type="file" multiple="multiple" name="imgUpload[]" id="imgUpload" accept="image/*" />--> <input type="file" name="imgUpload[]" id="imgUpload" accept="image/*" />
Vous pouvez consulter la démonstration ici : Démo
salut ! , les codes ne marche pas chez moi
Est ce que vous pouvez indiquez l’erreur qui s’affiche ?
l’erreur est de la forme
Not Found
The requested URL /upload avec ajax/ajaximage.php was not found on this server.
je besoin de voir votre page ajaximage.php
Je vous envois le fichier par email
svp est sque tu peut méttre un fichier a télécharger qui contient le code et déja tester et fonctionne, merci
Bonjour
J’ai la même erreur que glm pourrait-je avoir le fichier ajaximage.php. merci
Bonjour,
Vous pouvez télécharger le fichier ajaximage.php depuis mon dropboox
https://db.tt/Y5kG5GmZ
salut, j’ai essayé mais désolé, votre script est incomplet. il me donne l’erreur:
»
Not Found
The requested URL /test/uploader/ajaximage.php was not found on this server.
»
si vous pouvez m’envoyer le script de la page ajaximage.php !
merci !
les codes ne marche pas chez moi :/ aussi
Oui il manquait le contenu du fichier ajaximage.php, je viens de m’en apercevoir. Je viens de l’ajouter dans l’article.
Vérifiez et dites moi si cela fonctionne.