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 :

Boucle qui me répète les données


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut Boucle qui me répète les données
    Bonjour,

    Pour afficher un camp d'upload, je demande à l'administrateur de renseigner la balise title et la balise ALT en français et en anglais.

    Ces champ sont générés via la base de données.

    Donc 2 langues = 2 champs ALT + 2 champs TITLE + 1champ upload pour chaque fichier et je désire en autoriser 5.

    Cependant, quand je fais ma boucle while cela double mes champs d'upload...

    Quelqu'un pourrait m'aider avec le code ci-dessous?

    Code php : 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
    $sql_lg = DbConnect::getInstance()->query("SELECT * FROM language_lang JOIN
        language ON id_language=language.id_language_lang 
        WHERE language_lang.code='".$_SESSION['lang']."' 
        GROUP BY language.code 
        ORDER BY language.code ASC");
    while($row = $sql_lg->fetch()){
        echo '<div class="col col3">'."\n";
        echo'<input type="file">'."\n";
        echo'</div>'."\n";
        echo '<div class="col col9">'."\n";
        echo 'preview';
        echo'</div>'."\n";
        echo '<div class="col col6">'."\n";
        echo '<label for="title_'.$row->code.'" class="block">'.TXT_TITLE_PIC.' '.$row->name.'</label>'."\n";
        echo '<input type="text" name="title_'.$row->code.'" id="title_'.$row->code.'">'."\n";
        echo'</div>'."\n";
        echo '<div class="col col6">'."\n";
        echo '<label for="alt_'.$row->code.'" class="block">'.TXT_ALT_PIC.' '.$row->name.'</label>'."\n";
        echo '<input type="text" name="alt_'.$row->code.'" id="alt_'.$row->code.'">'."\n";
        echo'</div>'."\n";
    }

    Merci d'avance,
    David

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ta requete renvoit 1 ou 2 résultats ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci Sabotage.

    elle me revoie le bon nombre de champs pour alt et tile des images mais me met 2 fois le champ input file suite au code de mon premier message.
    Je ne sais pas comment tourner cette requete

    Or, on est bien d'accord que je peux avoir 15 langues, je n'ai besoin que d'un champ input file...

    Merci d'avance

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Bonjour,

    normalement $_SESSION['lang'] aurait du être la clé étrangère, la je suis perdu...

    dans cette requete pas de clause WHERE ? ca retourne une table complète de traductions ? il y a un pas un problème de conception alors ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Bonsoir PAPAJOKER,
    Oui j'ai bien une clause WHERE .

    La session lang est la lang choisie par l'utilisateur et / ou admin

    Non je ne pense pas que ce soit une probleme de structure de table...

    Avec les ressouces que je possède, je peux me permettre de faire correctement des tables intermédiaires dont j'ai l'utilité.
    La structure actuelle est amenée à évoluer donc je prévois le coup directement dans mes requetes.

    Ma tabl language est avec cette structure:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE IF NOT EXISTS `language` (
      `id_language_lang` int(11) NOT NULL AUTO_INCREMENT,
      `flag_url` varchar(80) DEFAULT NULL,
      `code` varchar(2) DEFAULT NULL,
      `active_back` int(11) DEFAULT NULL,
      `active_front` int(11) DEFAULT NULL,
      PRIMARY KEY (`id_language_lang`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

    Et ma table Language_lang(avec les traductions)

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE IF NOT EXISTS `language_lang` (
      `id_language_lang` int(11) NOT NULL AUTO_INCREMENT,
      `id_language` int(11) NOT NULL,
      `name` varchar(45) DEFAULT NULL,
      `code` varchar(2) DEFAULT NULL,
      PRIMARY KEY (`id_language_lang`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

    Tout cela fonctionne parfaitement jusqu'à présent. Mon souci suite à mon premier post c'est que quand je fais ma boucle while, il m'affiche PARTAIEMENT ce que je demande mais ma requete me mets 2 file input. mais j'en désire qu'un seul...

    Merci d'avance

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Désolé je ne comprend strictement rien

    le plupart du temps un systeme de traduction est du type :

    lang_code, key, value
    fr , 'titre_image', 'Le titre de l'image'
    en,'titre_image', 'picture title'
    fr, 'ouvrir', 'ouvrir'
    en, 'ouvrir', 'open'
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT value from table WHERE lang_code=$_SESSION['lang'] AND key='ouvrir'

    avec toi, je ne comprend pas le contenu de language_lang et quel est la clé étrangère id_language ou code ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Par défaut
    Je prends la discussion en cours mais si ta requête à deux lignes, tu passes deux fois dans le while donc forcément vu que tu fais un echo de ton input file dans ce while il va l'afficher deux fois.

    Pourquoi tu ne sors pas simplement:
    echo'<input type="file">'."\n"; de ton while ?

    Sinon tu mets tes résultats dans un tableau et tu fais un foreach et tu affiches le input file que lors du premier passage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach($MesLignes AS $key => $OneLigne){
         if($key == 0){
                      echo '<div class="col col3">'."\n";
                      echo'<input type="file">'."\n";
                      echo'</div>'."\n";
         }
         etc...
    }
    Mais encore une fois j'en vois pas l'intérêt, il suffirait de sortir la div du input file du while.

    PS: ça sert à rien de faire des echo à toutes les lignes, on peut concaténer...

  8. #8
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Bonjour,

    je reviens sur mon problème suis à vos divers messages.

    Une image vaut mieux qu'un long discours donc voici ce que je désire:



    Sur cette image, cela ne concernant qu'un fichier. Et je dédire en autoriser 5.
    Le problème c'est que dans ma boucle, comment lui dire qu'il ne doit pas mettre un champ file input pour chaque langue mais bien SEULEMENT pour chaque photo?

    merci d'avance,
    David

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Vatican

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 144
    Par défaut
    pkoi tu ne sors pas le input de ta boucle while?

    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
     
    $sql_lg = DbConnect::getInstance()->query("SELECT * FROM language_lang JOIN
        language ON id_language=language.id_language_lang 
        WHERE language_lang.code='".$_SESSION['lang']."' 
        GROUP BY language.code 
        ORDER BY language.code ASC");
     
    echo '<div class="col col3">'."\n";
        echo'<input type="file">'."\n";
        echo'</div>'."\n";
    while($row = $sql_lg->fetch()){
     
        echo '<div class="col col9">'."\n";
        echo 'preview';
        echo'</div>'."\n";
        echo '<div class="col col6">'."\n";
        echo '<label for="title_'.$row->code.'" class="block">'.TXT_TITLE_PIC.' '.$row->name.'</label>'."\n";
        echo '<input type="text" name="title_'.$row->code.'" id="title_'.$row->code.'">'."\n";
        echo'</div>'."\n";
        echo '<div class="col col6">'."\n";
        echo '<label for="alt_'.$row->code.'" class="block">'.TXT_ALT_PIC.' '.$row->name.'</label>'."\n";
        echo '<input type="text" name="alt_'.$row->code.'" id="alt_'.$row->code.'">'."\n";
        echo'</div>'."\n";
    }

  10. #10
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci ;-) J'ai dit dans mon message précédent que je désire poster 5 photos. C'est là mon probleme...
    car quand je fais une boucle for cela double mes champs

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    donc tu désires ?

    1 fichier avec 2(ou +) langes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $langs= requete sql ( liste_langes );
    for ($i=1; $i<6; $i++) {
       echo '<input type="file" name="fichier['.$i.']">'.
            '<input><input name="titre['.$i.']">';
      for ($langs as $lan){
        echo '<label>'.$lang.'</label>';
      }
    }
    1 fichier avec 1 langue ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $lang= requete sql ( session('lang') );
    for ($i=1; $i<6; $i++) {
       echo '<input type="file" name="fichier['.$i.']">'.
               '<label>'.$lang.'</label><input><input name="titre['.$i.']">';
    }

  12. #12
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci .

    Alors je désire 1 input file + 1 alt en français +1 alt en anglais + 1 title en français + 1 title en anglais. Exactement comme sur mon image dans mon message précédent. Cependant, je désire avoir 5 blocs de champs.

    Je n'y arrive pas.

    Merci d'avance

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par andaman Voir le message
    Exactement comme sur mon image dans mon message précédent.
    pas vu d'image en fait elle est cassée

    Donc c'est bien ma solution no1

    Le probleme c'est que dans ta requete le seul parametre que tu passes c'est session(lang) : je suppose "fr"
    Tu n'as pas une table de traduction par page ? normalement on passe a un systeme de traduction la langue + une clé sur l'élément que l'on désire, comme je t'ai montré plus haut.
    Et dans ton cas, puisque tu désires afficher toutes les langues alors pourquoi passer en parametre la langue dans la session ?

    Pour moi, il y a vraiment un probleme de conception... je serais curieux de voir un peu de contenu de ta table language_lang

  14. #14
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci papajoker.
    Voici à nouveau mon image



    voilà ma structure de language_lang

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE IF NOT EXISTS `language_lang` (
      `id_language_lang` int(11) NOT NULL AUTO_INCREMENT,
      `id_language` int(11) NOT NULL,
      `name` varchar(45) DEFAULT NULL,
      `code` varchar(2) DEFAULT NULL,
      PRIMARY KEY (`id_language_lang`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

    Et voici ce que j'ai dedans:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO `language_lang` (`id_language_lang`, `id_language`, `name`, `code`) VALUES
    (1, 1, 'Français', 'fr'),
    (2, 1, 'French', 'en'),
    (3, 2, 'Anglais', 'fr'),
    (4, 2, 'English', 'en');

    Je préise que ce site est amené à comporter davantage de langues.

    Merci d'avance de vos lumières

  15. #15
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    vu image

    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
     
    $pdo = DbConnect::getInstance();
    		$sql="SELECT language_lang.name , language.code as code
    FROM language_lang
    JOIN language ON language_lang.id_language = language.id_language_lang
    WHERE language_lang.code = :lang";
     
    // trouve francais,anglais 
     
    $sql_lg = $pdo->prepare($sql);
    $sql_lg->execute(array(':lang'=>$_SESSION['lang']));
    $langs= $sql_lg->fetchall(PDO::FETCH_OBJ);
     
    for ($i=1; $i<6; $i++) {
       echo '<input type="file" name="fichier['.$i.']">'.
     
      for ($langs as $lan){
        echo '<label>'.$lang->name.'</label>';
           '<input name="alt['.$lang->code.']['.$i.']">
            <input name="titre['.$lang->code.']['.$i.']">';
      }
    }

  16. #16
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci !

    Que veux tu dire par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $langs= requete sql ( liste_langes );
    Ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = $row->fetch();
    P.S: L'image est bien là ! or j'ai une connexion en 256 k au Cambodge

  17. #17
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Excuses moi mais je ne saisis pas ta ligne:

    $langs= requete sql ( liste_langes );

  18. #18
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    le code est ici
    http://www.developpez.net/forums/d13...s/#post7567481

    l'autre code + haut , j'avais pas encore fait la requete car non comprise

  19. #19
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci ! Je vaisis essayer ce soir si possible car il est tard ici. Que dis tu de la structure de table? Un conseil?

Discussions similaires

  1. Boucle qui teste sur les paramètres
    Par ameura1 dans le forum WinDev
    Réponses: 12
    Dernier message: 05/09/2014, 11h24
  2. Réponses: 4
    Dernier message: 23/10/2009, 09h36
  3. Réponses: 5
    Dernier message: 20/07/2008, 18h31
  4. [AJAX] N'importe qui peut voir les données de mon fichier XML
    Par KoosMos dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/11/2007, 11h48
  5. Boucle qui parcourt tout les ligne d'un fichier text
    Par accro-macro dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 10/05/2007, 20h21

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