Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Aide compréhension ajaxfileupload


julien88

Messages recommandés

Bonjour à tous,

 

Afin de pouvoir uploader des fichiers d'images sur mon hébergement pour ensuite les redimensionner automatiquement et les enregistrer dans deux dossier distinct (grâce à un script que j'ai déjà fais), j'ai fais appel à un script que j'ai trouvé sur la toile à base de ajax ( et jquery).

 

Malheureusement le script n'enregistre pas les fichiers, il m'affiche juste des information les concernant, je voudrais donc savoir comment faire pour qu'il les enregistre.

 

Voila la page du script : ajaxfileupload

 

Et le script que j'ai inclu dans ma premiere page :

 

		<link rel="stylesheet" type="text/css" href="ajaxfileupload.css"/> 
	<script type="text/javascript" src="jquery.js"></script>
	<script type="text/javascript" src="ajaxfileupload.js"></script>
	<meta http-equiv="Content-type" content="text/html;charset=utf-8"/>
	<script type="text/javascript">
function ajaxFileUpload()
{
	$("#loading")
	.ajaxStart(function(){
		$(this).show();
	})
	.ajaxComplete(function(){
		$(this).hide();
	});

	$.ajaxFileUpload
	(
		{
			url:'doajaxfileupload.php',
			secureuri:false,
			fileElementId:'fileToUpload',
			dataType: 'json',
			success: function (data, status)
			{
				if(typeof(data.error) != 'undefined')
				{
					if(data.error != '')
					{
						alert(data.error);
					}else
					{
						alert(data.msg);
					}
				}
			},
			error: function (data, status, e)
			{
				alert(e);
			}
		}
	)

	return false;

}
</script>	
</head>
<body>
Upload de fichiers : 
<form name="form" action="" method="POST" enctype="multipart/form-data">
	<table cellpadding="0" cellspacing="0" class="tableForm">
	<thead>
		<tr>
			<th>Veuillez selectionner un fichier à envoyer : </th>
		</tr>
	</thead>
	<tbody>	
		<tr>
			<td><input id="fileToUpload" type="file" size="45" name="fileToUpload" class="input"></td>
		</tr>
	</tbody>
		<tfoot>
			<tr>
				<td><button class="button" id="buttonUpload" onclick="return ajaxFileUpload();">Upload</button></td>
			</tr>
		</tfoot>
	</table>
</form>    	
<img id="loading" src="loading.gif" style="display:none;">

 

Et ici le code de la page qui gère les images à partir du formulaire :

 

<?php
$error = "";
$msg = "";
$fileElementName = 'fileToUpload';
if(!empty($_FILES[$fileElementName]['error']))
{
	switch($_FILES[$fileElementName]['error'])
	{

		case '1':
			$error = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
			break;
		case '2':
			$error = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
			break;
		case '3':
			$error = 'The uploaded file was only partially uploaded';
			break;
		case '4':
			$error = 'No file was uploaded.';
			break;

		case '6':
			$error = 'Missing a temporary folder';
			break;
		case '7':
			$error = 'Failed to write file to disk';
			break;
		case '8':
			$error = 'File upload stopped by extension';
			break;
		case '999':
		default:
			$error = 'No error code avaiable';
	}
}elseif(empty($_FILES['fileToUpload']['tmp_name']) || $_FILES['fileToUpload']['tmp_name'] == 'none')
{
	$error = 'No file was uploaded..';
}else 
{
		$msg .= " File Name: " . $_FILES['fileToUpload']['name'] . ", ";
		$msg .= " File Size: " . @filesize($_FILES['fileToUpload']['tmp_name']);
		//for security reason, we force to remove all uploaded file
		@unlink($_FILES['fileUpload']);      

}		
echo "{";
echo				"error: '" . $error . "',\n";
echo				"msg: '" . $msg . "'\n";
echo "}";
?>

 

Apparemment la fin est protégée pour ne pas enregistrer :

 

//for security reason, we force to remove all uploaded file
		@unlink($_FILES['fileUpload']);

 

Mais alors comment faire ? :P

 

merci d'avance :P

Modifié par julien88
Lien vers le commentaire
Partager sur d’autres sites

ben, tu le transfères de ton tmp_dir vers le répertoire qui t'intéresse une fois que tous les tests de contrôle d'upload ont été réalisés

$repertoire = "chemin absolu vers le repertoire de destination"
//Copie le fichier dans le répertoire de destination

$move = move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $repertoire . $_FILES['fileToUpload']['name']);
if($move)
{
 //Le fichier a été déplacé correctement
 echo 'Ok, le fichier '.$_FILES['fileToUpload']['name'].' a été envoyé correctement<br />';
}
else
{
 //Erreur
 echo 'Erreur lors de la copie du fichier<br />';
}

Lien vers le commentaire
Partager sur d’autres sites

Merci pour l'aide rapide que tu m'apporte :P

 

J'ai copié le code à la fin de la page et "l'alert" me renvoie = "SyntaxError: unexpected end of XML source" :P

 

Voila exactement le code que j'ai fais :

 

<?php
$error = "";
$msg = "";
$fileElementName = 'fileToUpload';
if(!empty($_FILES[$fileElementName]['error']))
{
	switch($_FILES[$fileElementName]['error'])
	{

		case '1':
			$error = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
			break;
		case '2':
			$error = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
			break;
		case '3':
			$error = 'The uploaded file was only partially uploaded';
			break;
		case '4':
			$error = 'No file was uploaded.';
			break;

		case '6':
			$error = 'Missing a temporary folder';
			break;
		case '7':
			$error = 'Failed to write file to disk';
			break;
		case '8':
			$error = 'File upload stopped by extension';
			break;
		case '999':
		default:
			$error = 'No error code avaiable';
	}
}elseif(empty($_FILES['fileToUpload']['tmp_name']) || $_FILES['fileToUpload']['tmp_name'] == 'none')
{
	$error = 'No file was uploaded..';
}
else 
{
		$msg .= " File Name: " . $_FILES['fileToUpload']['name'] . ", ";
		$msg .= " File Size: " . @filesize($_FILES['fileToUpload']['tmp_name']);			
}		
echo "{";
echo				"error: '" . $error . "',\n";
echo				"msg: '" . $msg . "'\n";
echo "}";
?>
<?php
// envoie du fichier 

		$repertoire = "machin/"
	  //Copie le fichier dans le répertoire de destination

	  $move = move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $repertoire . $_FILES['fileToUpload']['name']);

	  if($move)
		{
		echo 'Ok, le fichier '.$_FILES['fileToUpload']['name'].' a été envoyé correctement<br />';
		}
	  else
		{
		echo 'Erreur lors de la copie du fichier<br />';
		}

?>

Lien vers le commentaire
Partager sur d’autres sites

et tu as essayé de le copier juste après

msg .= " File Size: " . @filesize($_FILES['fileToUpload']['tmp_name']);

 

sinon en effet le parser risque de braire...

 

$repertoire doit être un chemin absolu relatif au système de fichier (donc commencer à la racine /)

Lien vers le commentaire
Partager sur d’autres sites

Même en effectuant ceci il me renvoie la même erreur :

 

// envoie du fichier 

		$repertoire = "machin/"
	  //Copie le fichier dans le répertoire de destination

	  move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $repertoire . $_FILES['fileToUpload']['name']);

 

:P

Lien vers le commentaire
Partager sur d’autres sites

essaie d'afficher les erreurs PHP dans ton navigateur

ini_set('display_errors', 1);
error_reporting(E_ALL);

tu es certain d'avoir mis un chemin absolu dans ta variable $repertoire?

Lien vers le commentaire
Partager sur d’autres sites

Le problème semble réglé, en effet c'était un problème de chemin absolu :P

 

J'ai donc fais ceci :

 

$repertoire = $_SERVER['DOCUMENT_ROOT']."images_general/img_news/machin/";

 

Sachant que ce n'est qu'un dossier de test, par la suite cela sera permis dans ma zone admin.

 

:P

 

Maintenant que j'ai fais ceci, je vais essayer de faire passer ma variable de lien a la suite de ma page afin de pouvoir permettre son redimensionnement et son enregistrement dans deux autres dossiers :P

 

Je voudrais donc faire passer le nom de l'image dans ma page "img.php" pour l'utiliser ensuite de cette facon :

 

$chemin = "machin/".$nomfichier; // le chemin, de l'image à traiter (en absolu ou en relatif )

 

A partir du formulaire d'envoi de fichier de idximg.php :

 

<form name="form" action="" method="POST" enctype="multipart/form-data">
			<br/>
		<input id="fileToUpload" type="file" size="45" name="fileToUpload" class="input">
		<button class="button" id="buttonUpload" onclick="return ajaxFileUpload();">Upload</button>
</form>

 

Donc je voudrais savoir comment on peu faire passer la variable du nom du fichier dans le load de jquery qui charge img.php :

 

<script>
	$(document).ready(function() {
	$("#imagesgen").hide();
	$("#images").hide();
	  $("#tabcomaction").click(function(){
		$("#tabcom").load("img.php<?php echo '?rand='.$randing.'&rand2='.$randing2 ?>");
		$("#imagesgen").show("slow");	
		$("#images").oneTime("1s", function(){
				$("#images").show("slow");	
			  });
		  });
	});
	</script>

 

Ps : comme vous pouvez le voir, pour ne pas me compliquer la vie j'ai finalement fais passé mes variables rand pour le nomage de mes fichiers par la page idximg.php .

 

<?php echo '?rand='.$randing.'&rand2='.$randing2 ?>

Modifié par julien88
Lien vers le commentaire
Partager sur d’autres sites

J'ai peu être réussi à trouver une piste pour récupérer le nom du fichier à partir du formulaire ici :

 

javascript /données formulaire

 

J'essaie de comprendre avec le peu de connaissances que j'ai :P

 

Si quelqu'un pouvais m'aider :P

 

 

---------------------------------------------------------------------------------------

 

Donc pour le moment j'ai magouillé un peu et sa me donne sa mais sa ne marche pas:

 

<form name="form" action="" method="POST" enctype="multipart/form-data">
			<br/>
		<input id="fileToUpload" type="file" size="45" name="fileToUpload" class="input">
		<button class="button" id="buttonUpload" onclick="return ajaxFileUpload();ch = window.document.form.fileToUpload.value;">Upload</button>
</form>

 

<script>
		$(document).ready(function() {
		$("#imagesgen").hide();
		$("#images").hide();
		  $("#tabcomaction").click(function(){
		$("#tabcom").load("img.php<?php echo '?rand='.$randing.'&rand2='.$randing2.'&nom=';?>"+ ch);
		$("#imagesgen").show("slow");	
		$("#images").oneTime("1s", function(){
				$("#images").show("slow");	
			  });
		  });
	});
	</script>

 

firebug me dit que ch n'est pas défini

 

 

-------------------------------------------------------------------------

 

 

Je suis sur que le problème est simple...si quelqu'un pouvais m'aider :P

 

Je suis sur que c'est juste une petite erreur dans mon javascript.

Modifié par julien88
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...