[RESOLU] initualisation input type file

Eléphanteau du PHP | 13 Messages

04 sept. 2013, 13:11

Bonjour à tous,
J'ai un souci de traitement d'image sur wordpress.

j'ai un formulaire permettant aux visiteur de laisser un post.
Le visiteur doit pouvoir charger son image à la une en cliquant sur le bouton parcourir ou en prenant une photo depuis sa webcam.
je bloque effectivement au niveau webcam, la photo est bien prise, enregistrée sur le serveur et je souhaite initialisé la valeur de input[type=file] avec ce chemin afin que lorsque je clic sur le bouton envoyer que le traitement se passe sans problème.

Déjà j'ai fait une simulation et je pense que le souci restant est au niveau de la valeur de $_FILES[]['tmp_name'].

Alors si quelqu'un à une idée ou une autre solution je suis preneur! Merci!

ViPHP
xTG
ViPHP | 7331 Messages

04 sept. 2013, 13:13

C'est quoi le rapport avec le input file si le fichier est déjà côté serveur ?

Eléphanteau du PHP | 13 Messages

04 sept. 2013, 13:18

tout simplement parceque mon formulaire à un champ type file et que la webcam ne sauvegarde pas le hier en utilisant move_upload_file();
donc je ne peux pas déclencher le traitement de worpdress

ViPHP
xTG
ViPHP | 7331 Messages

04 sept. 2013, 16:41

Donc si je décortique bien, ton formulaire renvoie bien le fichier pris par la webcam mais tu ne sais pas comment le transférer depuis l'espace temporaire vers ton système de fichier ?

Après tu parles du traitement de la webcam... Et de wordpress.
Ce sont deux choses différentes donc du coup je m'y perd faute d'explications.

Ce n'est pas à la webcam de faire le move_upload_file() car elle est côté client (navigateur), c'est à ton script sous wordpress de le faire après soumission du formulaire.

Un bon article à lire : http://antoine-herault.developpez.com/t ... hp/upload/

Eléphanteau du PHP | 13 Messages

04 sept. 2013, 17:30

Merci pour le lien mais c'est ne pas la mon problème.

Pour mieux comprendre le fonctionnel, voici l'url de test : http://teasing.crystals-hosting.com/

pour le formulaire, j'utilise le plugin : user-submitted-posts que j'ai ajouté les fonctionnalités
pour la prise e photo, j'utilise le plugin : wp-facethumb qui marche très bien car il permet de faire une galerie photo. dès que la photo est prise, elle est publiée instantanément.

donc ce que je souhaite c'est lorsque je prends la photo. lors de la saisie de mon formulaire, que je puisse traiter cette image donc je connais le chemin absolue comme si j'avais cliquer sur le bouton parcourir. car l'image doit s'enregistre comme une image à la une du post.

ViPHP
xTG
ViPHP | 7331 Messages

04 sept. 2013, 18:50

Je n'ai pas de webcam pour tester, je n'ai pas le temps non plus de me faire une installation de wordpress et de ces plugins.

Le plugin webcam remplie-t-il le formulaire ? Ou bien upload-t-il tout seul la photo dans son coin ?

Que te donnes un var_dump($_FILES) après soumission du formulaire ?

Eléphanteau du PHP | 13 Messages

04 sept. 2013, 19:29

le plugin webcam upload la photo seul dans son coin et sa sa fait par ajax. alors j'ai ajouté des instructions au plugins pour retourner le chemin du fichier une fois celui si chargé. que je sauvegarde dans un champ de type hidden. alors une fois que je fais un submit sur le formulaire mon champ type file est vide donc $_FILES n'a rien.

Alors j'ai pensé à formater le contenu de la variable $_FILES comme ceci :

Code : Tout sélectionner

$dirimage = isset($_POST['imagewebcam'])?stripslashes($_POST['imagewebcam']):''; //var_dump($_FILES); if (isset($_FILES['user-submitted-image']) && ($_FILES['user-submitted-image']['name'][0]!='')) { $fileData = $_FILES['user-submitted-image']; } elseif($dirimage){ $fileData=array( 'name' => array(0 => array_pop(explode('/', $dirimage))), 'type' => array(0 =>'image/jpeg'), 'tmp_name' => array(0 =>$dirimage), 'error' => array(0=>'0'), 'size' => array(0 => filesize($dirimage)), ); $_FILES['user-submitted-image']=$fileData; //die('rr'); }else { $fileData =''; }
Dans la suite de traitement sa déclenche une erreur et je pense bien que c'est lié au tmp_name de $_FILES car par défaut php attribut un nom tempoarire par exemple localisé dans c:\\wamp\tmp\phpjhdsfd.tmp vu que j'utilise wamp

Donc en résumé n'y aurait-il pas un autre moyen de faire sa si ma méthode ne marche pas.
Je suis à court d'idée!

ViPHP
xTG
ViPHP | 7331 Messages

04 sept. 2013, 21:34

Ah ok tu tentes de recréer le $_FILES...
C'est pas vraiment la meilleur façon de faire.

Le mieux est en effet de traiter deux codes distincts MAIS traiter au final une seule variable contenant l'url finale du fichier.
$chemin_image = '';
if( condition )
{
  // ici on traite le input de type file avec move_uploaded_file
  // ..... code .....
  $chemin_image = $chemin_final_du_move_uploaded_file;
}
else
{
  // ici on traite le input type hidden
  $chemin_image = $_POST['hidden'];
}

// le reste de ton traitement qui est commun aux deux cas

Eléphanteau du PHP | 13 Messages

05 sept. 2013, 00:27

Merci pour l'approche. je vais essayé de faire deux traitement et voir ce que sa donne bien que je sens déjà beaucoup de code supplémentaire car les fonctions de wordpress se chargeait déjà de faire le move_upload_file et d’insérer dans la table et me renvoyer uniquement l'ID

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 sept. 2013, 14:05

si wp fait tout le bouzin, stock l'id en session php et utilise le ensuite dans la validation du formulaire lorsque $_FILES ne contient pas d'infos.

au pire un champ de formulaire caché mais ça c'est plutôt crade et source d'emmerde vu que tu ne maîtrise pas la valeur ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 13 Messages

05 sept. 2013, 16:13

Impossible de gérer ce cas avec l'input de type file,

J'ai du faire deux script, l'un avec move_upload_file et l'autre avec une copy de fichier vu que je connais le chemin absolu et ensuite faire tout le traitement manuellement pour avoir le bon ID du post.

Merci pour les conseils!