probleme avec les jointures

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir,

J'ai un formulaire et un formulaire d'upload facultatif que j'affiche avec une boucle en même temps que les données de ma table campings, donc j'ai plusieurs campings et leurs infos avec à chaque fois un lien qui ouvre le formulaire.

Je dois donc relié chaque formulaire à chaque camping, mais je ne sais pas comment faire pour récupérer l'id de la table campings dans mon form puisque je ne sais pas à l'avance lequel est concerné.

Je ne sais plus si je dois faire une jointure et comment, ou si c'est carrément un problème de structure de ma base de données:

départements <== campings <== formulaire <== upload

Bref je suis complètement paumée et j'aurai bien besoin d'un coup de pouce :)

J'espère avoir été claire

Merci pour votre aide

Édité par clenake

+0 -0

J'ai un formulaire et un formulaire d'upload facultatif que j'affiche avec une boucle en même temps que les données de ma table campings, donc j'ai plusieurs campings et leurs infos avec à chaque fois un lien qui ouvre le formulaire.

Je ne comprends pas. Tu as une liste de campings au clic sur lesquels tu ouvres une page contenant un formulaire ? Et tu souhaites, lors de la réception de ce formulaire, savoir sur quel camping on a cliqué ?

Pourquoi y a-t-il deux formulaires ?

Tu devrais expliquer ce que tu souhaites faire.

+0 -0

Dis nous aussi combien de campings tu as en base (et combien tu penses avoir dans le futur). Car si la table est très petite et qu'il n'est pas prévu de grossir, tu pourra peut être tout précharger en une seule request SQL. Ou au contraire faudra aller chercher les info des campings après le clic.

Édité par Orpheo

+0 -0
Auteur du sujet

Salut,

  • Pour le lien ouvrant le formulaire voilà une capture exemple d'affichage infos camping + lien

  • Il y aura plus de 500 campings répartis dans les différents départements.

  • Il y a 2 formulaires parce que j'ai été obligée de mettre mon form d'upload dans une iframe pour ne pas avoir 2 bouton submit dans mon form général (mais ça pose quand même le problème que le form d'up est envoyé avant le form global).

Et donc oui, je dois récupérer l'id du camping où le lien "ajouter" a été cliqué.

Édité par clenake

+0 -0

Bonjour,

  • Il y a 2 formulaires parce que j'ai été obligée de mettre mon form d'upload dans une iframe pour ne pas avoir 2 bouton submit dans mon form général (mais ça pose quand même le problème que le form d'up est envoyé avant le form global).

O_o Passe-nous ton code, tu as dû faire une erreur quelque part. Quand on ajoute un champ file, il n'y a aucun bouton qui se rajoute.

+0 -0
Auteur du sujet

Oui, mais je pense que c'est parce que j'ai une prévisualisation des photos dans mon form global.

Voilà le code du form global (raccourci)

  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
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
<div id="masque">
            <div id="modale">
                <header>
                    <p>Partagez votre expérience de vacances !</p>
                </header>
                <a class="close" title="FERMER" href="#nulle">X</a>

                    <form method="POST" name="modale" action="Modale/traitement.php">
                        <div id="scroll">

                            <div id="haut">
                                <div id="gauche">
                                    <div class="nom">
                                        <label for="nom"> Votre nom : </label> <input type="text" name="name"  placeholder="Ex: Clenake, Sandra" id="nom" autofocus required /> 
                                    </div>
                                    <div class="sejour">
                                        <label for="sejour">Type de séjour : </label>
                                            <select name="sejour" id="sejour" required>
                                                <option value="" >Votre choix</option> <!--Le value vide permet le fonctionnement du requiered sur les balises d'option -->
                                                <option value="famille">Famille</option>
                                                <option value="couple">Couple</option>
                                                <option value="amis">Amis</option>
                                                <option value="solo">Voyage solo</option>
                                            </select>
                                        <label for="herberg">Type d'hébergement : </label>
                                            <select name="heberg" id="heberg" required>
                                                <option value="">Votre choix</option>
                                                <option value="emplacement">Emplacement</option>
                                                <option value="mobile-home">Mobile Home</option>
                                                <option value="tente amenagee">Tente aménagée</option>
                                            </select>
                                        <label for="date">Période du séjour : </label>
                                            <select name="mois" id="mois" required>
                                                <option value="">Mois</option>
                                                <option value="Janvier">Janvier</option>

                                            </select>
                                            <select name="annee" id="annee" required>
                                                <option value="">Année</option>
                                                <option value="2010">2010</option>

                                                </select>
                                    </div>
                                </div>

                                <div id="notation">

                                <p><label class="notation">Acceuil : </label>

                                    <input class="radio" type="radio" name="acceuil" value="10" id="A10" required /> 
                                        <label title="1O/10" for="A10"></label>
                                    class="notation">Hébergement : </label>

                                    <input class="radio" type="radio" name="hebergement" value="10" id="h10" required />

                                <p><label class="notation">Propreté : </label>

                                <p><label class="notation">Services : </label>

                                    <input class="radio" type="radio" name="services" value="10" id="s10" required />

                                <p><label class="notation"> Equipements/Loisirs : </label>

                                    <input class="radio" type="radio" name="loisirs" value="10" id="e10" required />

                                <p><label class="notation">Animations : </label>

                                    <input class="radio" type="radio" name="animations" value="10" id="a10" required />     


                                <p><label class="notation">Rapport Qualité/Prix : </label>

                                    <input class="radio" type="radio" name="prix" value="10" id="r10" required />       

                                </div>
                            </div>  


                            <hr></hr>

                            <!--Formulaire d'upload-->

                            <div class="bloc_photo">
                            <p>Postez vos photos :</p>

                                <iframe name="upload" src="../Campings/Modale/Upload_multiple/Uploads.php" width="700px" height="200px" frameborder="0" scrolling="">
                                </iframe>

                            </div>


                                <hr  class="hr2"></hr>
                            <div id="textarea">
                                <p>
                                    <p class="textarea">Déposez votre avis :</p>
                                    <textarea name="avis" id="avis" placeholder="Laissez votre commentaire ici..." required></textarea>
                                </p>    
                            </div>

                        </div>  

                        <div class="bouton">
                            <input type="submit" name="submit" value="Publiez votre avis" />
                        </div>
                                </div> <!-- fin du masque -->
                    </form>
            </div>

Et le code de l'iframe

  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
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
<?php

$valid_formats = array("jpg", "png", "jpeg", "gif");
$max_file_size = 2000000; 
$max_file_uploads = 5;
$path = "Uploads/";
$count = 0;
if(!empty($_FILES['photos'])){

    foreach ($_FILES['photos']['name'] as $f => $name) {     
        if ($_FILES['photos']['error'][$f] == 4) {
            continue; 
        }          

        if ($_FILES['photos']['error'][$f] == 0 AND $max_file_uploads <= 5) {              
            if ($_FILES['photos']['size'][$f] > $max_file_size) {
                $message[] = "$name est trop gros!.";
                continue; 
            }
            elseif(! in_array(pathinfo(strtolower($name), PATHINFO_EXTENSION), $valid_formats)){
                $message[] = "$name n'est pas un format valide";
                continue; 
            }

            else{ 
                if(move_uploaded_file($_FILES['photos']['tmp_name'][$f], $path.$name)) {
                    $count++; 
                }
            }
        }
    }   
}

}

?>

<!doctype html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>Upload Perso</title>
    <link rel="stylesheet" href="upload.css" />

</head>
<body style="text-align: center;">

        <?php
        // Affichage des Messages d'Erreurs
        if (isset($message)) {
            foreach ($message as $msg) {
                printf("<p class='status'>%s</p></ br>\n", $msg);
            }
        }
        // Affichage des Photos Uploadées

            if($count !=0){

                $dossier = opendir($path); 
                while($image = readdir($dossier))
                {
                    if ($image != "." && $image != "..") $liste_image[] = $image;
                }
                    for ($i = 0; $i < $count; $i++)
                        {   
                            echo '<img id="image" src="Uploads/'.$liste_image[$i].'" />';
                        }
            }

?>
        <!-- Formulaire Upload Multiple-->


        <form id="bloc_photo" action="" method="POST" enctype="multipart/form-data">
            <input id="upload" class="photo" type="file" name="photos[]" multiple="multiple" accept="image/" title="Formats acceptés: jpeg, png, jpg ou gif. Taille maxi: 2Mo.">
            <input class="photo" type="submit" value="Envoyer/Annuler"/>

        </form>

        <?php

        if(!empty($liste_image)){   

        include("../connect_bdd.php");

        $photo_0 = serialize($_FILES['photos']['name'][0]);
        $photo_1 = serialize($_FILES['photos']['name'][1]);
        $photo_2 = serialize($_FILES['photos']['name'][2]); 
        $photo_3 = serialize($_FILES['photos']['name'][3]); 
        $photo_4 = serialize($_FILES['photos']['name'][4]); 

            $req = $bdd->prepare('INSERT INTO upload(photo_0, photo_1,  photo_2, photo_3, photo_4)VALUES(:photo_0, :photo_1, :photo_2, :photo_3, :photo_4)');
            $req->execute(array(
                ':photo_0' => $photo_0,
                ':photo_1' => $photo_1,
                ':photo_2' => $photo_2,
                ':photo_3' => $photo_3,
                ':photo_4' => $photo_4));   
        }
?>

Si je peux éviter l'iframe, ça façiliterait la vie :)

Édité par clenake

+0 -0

Eh bien écoute, je n'ai pas testé, mais si tu précises dans le premier formulaire le enctype=multipart/form-data, et que tu y rajoutes le <input id="upload" class="photo" type="file" name="photos[]" multiple="multiple" accept="image/" title="Formats acceptés: jpeg, png, jpg ou gif. Taille maxi: 2Mo.">, ton formulaire contient tous les champs d'un coup, et tu n'as pas de double bouton envoyé.

Après tu adaptes pour garder la prévisualisation, mais rien de bien sorcier à mon avis. :)

+0 -0
Auteur du sujet

Bonsoir avec un peu de retard :)

Ton idée est bonne mais comment prévisualiser quelque chose qui n'est pas encore envoyé puisque ce ne sera envoyé qu'avec le bouton submit du form global ?

+0 -0

Si tu n'as pas (trop) envie de te prendre la tête, tu peux aller regarder du côté de Dropzone.js, par exemple (premier exemple trouvé sur Google).

Si tu préfères faire ta propre tambouille, ce qui peut peut-être s'avérer plus simple en fonction de ce que tu veux obtenir, tu peux regarder du côté de l'objet JS FileReader : démo ici qui n'est pas de moi (copiée-collée d'un topic SO).

+0 -0
Auteur du sujet

Comme tu dis c'est bien une tambouille !

Je connais dropzone mais je préférai faire un truc moi même avec php et sans js parce qu'apprendre les 2 en même temps c'est franchement laborieux…

Pas sûre que c'était une bonne idée mais je reviendrai peut être à ce genre de solution.

Si on laisse l'upload de côté, comment je dois faire pour récupérer la valeur de chaque $donnees['id'] dans ma modale ?

J'ai essayé de passer les id dans l'url, ils s'affichent bien en fonction des liens, mais le lien ne m'ouvre plus la modale… J'ai aussi essayé un input hidden avec name=id mais je ne sais pas quoi lui mettre en value puisque le value dépend d'un lien et d'une variable.

+0 -0

Sans JS, tu es effectivement obligé de passer par un double envoi de formulaires. Mais dans ce cas-là, je te déconseille de tenter de faire un "deux en un", à ce niveau-là c'est 100 fois plus simple de faire du JS.

Ce que tu peux faire, c'est ouvrir une popup (ou une nouvelle page) de téléchargement, sur laquelle tu télécharges tes images, puis ensuite tu indiques le lien vers la photo, ou quelque chose du genre. Un peu comme sur ZdS, en fait !

+0 -0
Auteur du sujet

J'ai regardé des exemples et des tutos et je pense pouvoir me débrouiller avec FileReader même sans connaître le js.

Et pour ce qui concerne de lier mon form global aux id de mes campings ?

+0 -0
Auteur du sujet

J'affiche ma liste de campings via la bdd donc j'ai aussi les $donnees['id'] présentes sur la page et quand je clique sur des liens Ajouter un avis, ça m'ouvre une modale qui contient le form.

Le problème c'est que je n'arrive pas à relier l'id du camping à l'ouverture de la modale et donc à enregistrer l'id correspondant dans ma table modale.

En gros, comment je fais pour que $donnees['id'] soit récupérer sue la page de ma modale?

J'ai essayé d'ajouter un champ caché à mon form avec un name=id mais en value, je ne sais pas quoi lui donner pour récupérer $donnees['id'].

Je suis pas sûre d'être très claire :)

+0 -0

Pour ça, tu es obligé de passer par Javascript : quand tu cliques sur le bouton qui ouvre la modale, tu récupères l'id de l'élément cliqué grâce à JS, et tu l'injectes quelque part (typiquement, dans un <input type="hidden">).

+0 -0

Petite précision : tu es obligée de passer au JS si tu affiches effectivement ton formulaire dans une modale. Si tu l'affiches dans une nouvelle page (le cliques sur "donnez un avis", ça t'envoie vers une autre page), alors tu peux évidemment te passer du JS en passant l'id du camping dans l'URL.

Mais si tu veux que le formulaire soit sur la même page, oui, tu es obligée de faire du JS. :)

+0 -0
Auteur du sujet

J'avais bien compris que ça venait du masque, donc si j'essaie un truc "lire la suite" comme sur les articles, le problème sera le même ?

Je vais l'afficher sur une autre page, ce sera plus simple parce que je voudrai bien finir par avancer.

J'ai visé trop compliqué pour moi pour un premier site :)

+0 -0

Qu'est-ce que tu entends par "lire la suite" ? Si le contenu s'affiche directement sur la même page, oui, tu auras besoin de JS (presque rien, si tu veux rester simple). Si le clic n'est qu'un lien vers l'article complet, alors pas besoin de JS.

De façon générale, tu as besoin de JS dès que tu veux que ta page soit animée : si tu veux une animation (affichage automatique d'un formulaire personnalisé, listes déroulantes…), alors tu es obligé de passer par du JS. Parfois c'est pas compliqué, parfois ça l'est un peu plus.

+0 -0
Auteur du sujet

Comme sur cette page :) mais le problème sera le même.

J'ai mis mon form sur une autre page et si je fais un echo $_GET['campings_id'] , l'id s'affiche sur la page. Mais quand j'essaie de l'insérer dans la bdd ça ne fonctionne pas.

J'ai aussi testé en mettant $_GET en value d'un input hidden, mais là ça me dit: Undefined index: campings_id dans ma page traitement.

Franchement j'y comprend plus rien !

EDIT: Je sais pas ce que j'avais foiré mais…

Ca y est !!!!!!!!!!!!!!

:)

Édité par clenake

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte