8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un problème pour tester mon formulaire qui me permet d'héberger une image en local... Rien ne se passe je ne vois pas le fichier dans le dossier dans lequel je souhaiterais l'héberger.
J'utilise MAMP car je travaille sous MAC et côter programmation j'ai utilisé un évènement lors du clique sur le boutton à fin d'enregistrer des données, ça marche pour le titre et le texte de l'article. (ne tenais pas conte des requêtes SQL, je suis entrain de travailler dessus...) Pour conclure, je voudrais juste savoir comment héberger mon fichier en local, est-ce possible seulement ?


<?php
include('../config.php');
mysql_query("SET NAMES UTF8");

$titreArticle =  $_POST["titreArticle"] ;
$texteArticle = $_POST["texteArticle"] ;
$dateArticle = date("d/m/y à H:i:s") ;

if ( isset ( $_FILES ) ){
	$chemin_destination = '../img/utilisateur/article/';
	move_uploaded_file($_FILES['fichierArticle']['tmp_name'], $chemin_destination.$_FILES['fichierArticle']['name']);
}

$requete = mysql_query( "INSERT INTO article (date_article, titre_article, texte_article) VALUES ( '$dateArticle','$titreArticle','$texteArticle' )");


?>



Titre de l\'article<br>
<input type="text" name="titreArticle"/><br><br>
Texte de l\'article<br>
<textarea cols="50%" rows="20" name="texteArticle"></textarea><br><br>
Image de l\'article<br>
<input type="file" name="fichierArticle"/><br><br>
<input type="button" name="bouttonSaveArticle" value="Enregistrer"/>

Modifié par tonymx15 (04 Oct 2010 - 16:21)
Salut.
Vérifie que tu es ceci dans ta balise formulaire:
enctype="multipart/form-data"

Ensuite pour voir si c'est bien envoyé ou pas inclus des messages d'erreurs pour te situer sinon dur dur:

if(move_uploaded_file($nomTemporaire, $chemin.$nomFichier))
{
     echo $succes_upload = '<br> UPload du Fichier Réussi.<br>' ;
}
else
{
     echo $erreur['upload_fichier'] = 'Le Fichier n\'as pas été Copié !!!' ;
 }

Cordialement.
Modifié par Htb (04 Oct 2010 - 18:11)
Salut,

L'encodage multipart/form-data est bien spécifié dans le formulaire ?
<form action="..." method="post" enctype="multipart/form-data">

Edit:Grillé
Modifié par Eric2A (04 Oct 2010 - 18:14)
Htb, j'ai rajouté le enctype ainsi que la fonction pour vérifier si le transfert à réussi, et ça m'affiche "Le Fichier n'as pas été Copié !!!"...

Sinon, je n'est pas de methode="POST" car j'utilise de l'ajax (un évenement sur le buttonSaveArticle .load() ) pour récupérer les données... ça marche pour le titre et le texte de mon article...


<form enctype="multipart/form-data">
Titre de l\'article<br>
<input type="text" name="titreArticle"/><br><br>
Texte de l\'article<br>
<textarea cols="50%" rows="20" name="texteArticle"></textarea><br><br>
Image de l\'article<br>
<input type="file" name="fichierArticle"/><br><br>
<input type="button" name="bouttonSaveArticle" value="Enregistrer"/>
</form>

Modifié par tonymx15 (04 Oct 2010 - 18:20)
Ça veut dire qu'il ne peut pas déplacer le fichier temporaire vers le nouveau dossier.
Peut être qu'il n'arrive pas à gérer directement $_FILES[]['tmp_name'].
Essaye de mettre dans des variables et affiche les pour voir ce qu'il y a dedans:

echo 'fichier tmp : <br>'.$fichier_tmp = $_FILES['fichierArticle']['tmp_name'];
echo 'chemin : <br>'.$chemin_destination = '../img/utilisateur/article/';
echo 'fichier dest : <br>'.$fichier_dest = $chemin_destination.$_FILES['fichierArticle']['name'];


Apres je ne connais rien a l'ajax, alors peut etre qu'il y a un équivalent a l'enctype.
Modifié par Htb (04 Oct 2010 - 19:32)
Salut,

Tu ne peux pas envoyer de fichier via Ajax. Une requête de type Ajax ne transmet que les données de type texte (je fais simple), rien de plus. C'est une limitatio de l'objet Javascript utilisé pour instancier les requêtes Ajax.

Si tu veux uploader des fichiers sur ton serveur via une méthode "type Ajax", il faut te tourner vers des scripts utilisant un iframe pour la transmission des données. Dans le genre, il y a notamment Ajax upload qui marche pas mal, mais il y en as beaucoup d'autres.
Htb a écrit :
Ça veut dire qu'il ne peut pas déplacer le fichier temporaire vers le nouveau dossier.
Peut être qu'il n'arrive pas à gérer directement $_FILES[]['tmp_name'].
Essaye de mettre dans des variables et affiche les pour voir ce qu'il y a dedans:

echo 'fichier tmp : <br>'.$fichier_tmp = $_FILES['fichierArticle']['tmp_name'];
echo 'chemin : <br>'.$chemin_destination = '../img/utilisateur/article/';
echo 'fichier dest : <br>'.$fichier_dest = $chemin_destination.$_FILES['fichierArticle']['name'];


Apres je ne connais rien a l'ajax, alors peut etre qu'il y a un équivalent a l'enctype.


Voilà le résultat :

fichier tmp :
chemin :
../img/utilisateur/article/fichier dest :
../img/utilisateur/article/
Le Fichier n'as pas été Copié !!!
L'article dede à bien été ajouté.

Sinon MAD's je fais simplement un .load et je lui passe en paramètre le .val() du champ de type file que je récupère dans ma page php, donc je ne pense pas que ça pose problème car j'utilise un load d'une page php, je me trompe ?
Modifié par tonymx15 (04 Oct 2010 - 22:53)
Salut,

tonymx15 a écrit :
je fais simplement un .load et je lui passe en paramètre le .val() du champ de type file que je récupère dans ma page php, donc je ne pense pas que ça pose problème car j'utilise un load d'une page php, je me trompe ?
Ben oui : tu ne fais que passer la chaîne de caractère correspondant au chemin du fichier... mais pas le fichier. Smiley cligne
Ton fichier tmp est vide donc tu ne recupere aucun fichier.
Mais comme tu passe par l'ajax je ne puis t'aider plus que çà, car je ne connais pas l'ajax.