Déclencher un input file par une commande Javascript

Résolu
janmar Messages postés 154 Statut Membre -  
 Utilisateur anonyme -
Bonsoir,

J'ai trouvé un truc sur un forum qui me plaît bien, mais que je n'arrive pas à maîtriser. Je cherche à déclencher un input file par le clic sur une image. J'ai deux comportements que je n'explique pas :

1°) la commande Java Script se comporte comme un bouton submit.

2°) le fichier sélectionné n'est pas envoyé.

Voici mon code :

HTML :

<head>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>


HTML
<form method = "post" action = "modifs.php" enctype="multipart/form-data">
<input type="image" src ="<?php echo $chemin;?>" name ="Mr" alt ="Mr." style="vertical-align: middle;border:solid 1px silver;border-radius:10px; width:60px;height:60px;background-color:#CCC;" onclick="$('#InputFileM').click();"/>
<input type="file" id="InputFileM" name = "monfichier" style="visibility:hidden"/>
<label for="prenom">Prénom : </label><input class ="champs" type="text" name="prenom" style="background-color:#00FFFF;" value = "<?php echo $donnees['Prenom'];?>" /><br>
<label for="nom">Nom : </label><input class ="champs" type="text" name="nom" style="background-color:#00FFFF;" value = "<?php echo $donnees['Nom'];?>" /><br>
<INPUT class ="champs" type="submit" value="Valider vos modifications" /><?php


Le click sur l'image de fond de l'input type="image" déclenche bien l'input file d'id InputFileM et de nom "monfichier".

En cliquant sur le fichier choisi, cela équivaut à un submit et redirige sur modifs.php ???????? et le fichier n'est pas envoyé.

modifs.php

if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0){
    echo 'il y a un fichier ';
}else{
    echo 'Il n\'y a pas de fichier';
}


J'obtiens toujours : pas de fichier.

Quelqu'un peut-il m'aider ? merci d'avance.

EDIT : Ajout du langage dans les balises de code.

2 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Ce n'est pas une commande javascript qui se comporte comme un bouton submit, c'est input image.
    C'est normal que l'input type = image se comporte comme un bouton submit : c'est exactement son rôle dans un formulaire
    https://www.w3schools.com/tags/att_input_type.asp
    Pour obtenir le comportement que tu désires, il suffit de l'empêcher de jouer ce rôle dans en ajoutant un "return false" dans son événement click :
    <input type="image" src ="<?php echo $chemin;?>" name ="Mr" alt ="Mr." style="vertical-align: middle;border:solid 1px silver;border-radius:10px; width:60px;height:60px;background-color:#CCC;" onclick="$('#InputFileM').click(); return false;"/>
    1
    1. janmar Messages postés 154 Statut Membre 3
       
      Un grand merci pour cet ajout : return false.
      Le problème est effectivement réglé. Tout marche correctement.
      Je n'avais pas bien compris l'action de l'input = image
      0
      1. Utilisateur anonyme > janmar Messages postés 154 Statut Membre
         
        De rien :-)
        0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,
    la commande Java Script se comporte comme un bouton submit.
    [...]
    En cliquant sur le fichier choisi, cela équivaut à un submit et redirige sur modifs.php


    Ah ?
    Lequel (de code) ?
    par ce que le seul code JS que je vois est :
     onclick="$('#InputFileM').click();"
    

    qui revient à cliquer sur le champ de type file et de donc de faire "parcourir"

    edit:les input type "image" font un submit.
    https://www.w3schools.com/tags/att_input_type.asp


    Par contre.. dans ton fichier PHP .. tu pourrais déjà commencer par faire des PRINT de tes variables pour voir ce qui arrive ...
    <?php
    echo "<br> POST :<br>";
    print_r($_POST);
    echo "<br> FILES :<br>";
    print_r($_FILES);
    
    if (isset($_FILES['monfichier']) && !$_FILES['monfichier']['error']){
        echo "il y a un fichier ";
    }else{
        echo "Il n'y a pas de fichier";
    }
    


    Cordialement,
    Jordane
    0
    1. janmar Messages postés 154 Statut Membre 3
       
      Merci pour ta contribution.
      La réponse est ci-dessus, ça marche parfaitement.
      Bien cordialement
      0