IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Gestion de plusieurs formulaires type=file [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut Gestion de plusieurs formulaires type=file
    Bonjour, comment gérer 3 input "files" de façon facultative ? je veux dire sans qu'on soit obligé de remplir les trois ? Je bloque lors de mon query... comment faire un query selon si telle ou telle variable 'isset' ?

    Voici comment je gère si un champs et vide, pour éviter d'effacer l'ancienne valeur dans la DB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_FILES['photo1']) && ($_FILES['photo1']['error'] != 4){
    mais après, pour mon query je bloque total ! je vais quand même pas mettre en condition toutes les combinaisons possibles, si ?

    Merci de votre aide !

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Tu peux donner la structure de ta table ? et un exemple de requête ?

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    C'est très simple il suffit de faire ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $sql_str = 'UPDATE matable SET';
    if (isset($_FILES['photo1']) && ($_FILES['photo1']['error'] != 4){
        //move_uploaded_file
        $sql_str .= ' photo1="'.$filename1.'",';
    }
     
    if (isset($_FILES['photo2']) && ($_FILES['photo2']['error'] != 4){
        //move_uploaded_file
        $sql_str .= ' photo2="'.$filename2.'",';
    }
     
    if (isset($_FILES['photo3']) && ($_FILES['photo3']['error'] != 4){
        //move_uploaded_file
        $sql_str .= ' photo3="'.$filename3.'",';
    }
    $sql_str .= " WHERE id=11";
    mysql_query($sql_str) || die(mysql_error());

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Ou quelque chose dans le genre pour éviter le petit
    désagrément lié à '",' en fin de la chaine $sql_str suivant
    les cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    foreach($_FILES as $key=>$info) {
      if ($info['error'] != 4) {
        //move_uploaded_file
        $fields[] = "$key='$filename'";
      }
    }
    if($fields) {
      $sql_str = 'UPDATE matable SET '.implode(',', $fields).' WHERE id=11';
      mysql_query($sql_str) || die(mysql_error()); 
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Merci à tous, j'ai trouvé la réponse entre temps, qui ressemble fort bien à celle de ThomasR.

    Le problème était que je ne connaissais pas la concaténation de cette façon la (seulement dans les chaines de caractère.... pas comme : .= ).

    Donc voici le résultat final (avec une complexité au niveau de l'appel d'une fonction qui génère des miniatures)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    		function genere_mini($var) {
    			switch ($var) {
    				case 'photo1' :
    					$tmp_name 	= $_FILES['photo1']['tmp_name'];
    					$name		= $_FILES['photo1']['name'];
    					break;
    				case 'photo2' :
    					$tmp_name 	= $_FILES['photo2']['tmp_name'];
    					$name		= $_FILES['photo2']['name'];
    					break;
    				case 'photo3' :
    					$tmp_name 	= $_FILES['photo3']['tmp_name'];
    					$name		= $_FILES['photo3']['name'];
    					break;
    			}
    				$largmax	= 220;
    				$hautmax 	= 140;
    			    include('modules/catalogue/generateur_mini.php');
    				return $imagelink;
    		}
     
     
    	if (isset($_POST['valide'])) {
     
    		$titre	= $_POST['titre'];
    		$desc	= $_POST['desc'];
     
    			//On vérifie que les photos sont soumises, validée et miniatures crées avant de les entrer dans la BDD
     
    			$photo				= '';
     
    			if (isset($_FILES['photo1']) && ($_FILES['photo1']['error'] != 4)) {
    				$cheminPhoto 	= genere_mini('photo1'); //crée la miniature et retourne son chemin
    				$photo	 		= ", `photo1`='". $cheminPhoto ."'";
    			}
     
    			if (isset($_FILES['photo2']) && ($_FILES['photo2']['error'] != 4)) {
    				$cheminPhoto 	= genere_mini('photo2'); //crée la miniature et retourne son chemin
    				$photo	 		.= ", `photo2`='". $cheminPhoto ."'";
    			}
     
    			if (isset($_FILES['photo3']) && ($_FILES['photo3']['error'] != 4)) {
    				$cheminPhoto 	= genere_mini('photo3'); //crée la miniature et retourne son chemin
    				$photo	 		.= ", `photo3`='". $cheminPhoto ."'";
    			}
     
    		$desc = addslashes(htmlentities($desc));
     
    		$sprint	= "UPDATE ". DB_PREFIX ."pages SET `titre` = '%s', `description` = '%s' %s  WHERE `id`=%u";
    		$sql	= sprintf($sprint,$titre,$desc,$photo,$id);
    		$query	= mysql_query($sql) or die ('Erreur : '. $desc . mysql_error());
    merci pour votre aide à tous !

    Marcha, très élégante comme solution, mais en le mettant avant, le problème ne se pose pas je crois... (je n'ai pas procédé excatement de la même manière que ThomasR

    Bonne journée, problême résolu ! bravo à tous

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Au passage,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql_str .= ' photo1="'.$photo1.'"';
    est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql_str = $sql_str.' photo1="'.$photo1.'"';

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    ah oui, j'aurais pu y penser comme ça aussi... merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion de plusieurs formulaires
    Par Kevin27CH dans le forum jQuery
    Réponses: 7
    Dernier message: 02/01/2014, 18h05
  2. Réponses: 1
    Dernier message: 28/11/2012, 16h40
  3. Réponses: 2
    Dernier message: 21/05/2010, 11h54
  4. Gestion de plusieurs formulaires
    Par ni-ni13 dans le forum Langage
    Réponses: 8
    Dernier message: 13/09/2009, 12h27
  5. INSERT INTO et le formulaire type="file"
    Par abdellah63 dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2008, 17h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo