5568 sujets

Sémantique web et HTML

Bonjour je reviens vers vous sur un nouveau problème, toujours sur mon formulaire : j'ai crée une liste d'un select venant d'une bdd mysql:

Contenu table contents_languagess:
CREATE TABLE `contents_languages` (
  `id` int(11) NOT NULL,
  `namelang` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `country` varchar(2) NOT NULL,
  `language` varchar(2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `contents_languages` (`id`, `namelang`, `country`, `language`) VALUES
(1, 'Français', 'fr', 'Fr'),
(2, 'English', 'en', 'Uk'),
(3, 'Chinese', 'zh', 'Zh'),
(4, 'Spanish', 'es', 'Es'),
(5, 'Russian', 'ru', 'Ru');

Contenu table users:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `mail` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `name` varchar(60) NOT NULL,
  `firstname` varchar(30) NOT NULL,
  `phone` int(20) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `adress` text,
  `zipcode` int(11) DEFAULT NULL,
  `city` varchar(200) DEFAULT NULL,
  `countries_id` int(11) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Contenu table users_languages:
CREATE TABLE `users_languages` (
  `id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `contents_languages_id` int(11) DEFAULT NULL,
  `default_lang` tinyint(1) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Partie de la page profil :
if ( isset($_POST['languages']) && is_array($_POST['languages']) AND isset($donnees['namelang']) AND (in_array($namelang, $languages))) {
   
    $languages = implode(",", $_POST['languages']) ;
    $i=$_POST['languages'];
    for ($i=0;$i<count($languages);$i++){
        $languages = $languages[$i];
}
        bdd_insert( 'INSERT INTO users_languages (contents_languages_id, default_lang, user_id) VALUES (:contents_languages_id, :default_lang, :user_id)', [
        'contents_languages_id' => $languages,
        'default_lang' => 0,
        'user_id' => $_SESSION['id']
    ] );

}else{
    echo "La langue par défaut n'est pas sélectionner";
    }

}





Partie de la page profil :
<p><label for=language>Your language :</label> 
          <select name="namelang" id="namelang">
  <option value="">Langue par default</option>
  <?php
    $reponse = $bdd->query("SELECT c.id, c.namelang, u.user_id FROM `contents_languages` `c` LEFT JOIN `users_languages` `u` ON u.id = '".$_SESSION['id']."'");
    while($donnees = $reponse->fetch()){
      $selected = ($donnees['id'] == $donnees['namelang']) ? ' selected="selected"' : '';
      echo '<option value="'.$donnees['id'].'"'.$selected.'>'.$donnees['namelang'].'</option>';
    }
    $reponse->closeCursor();
  ?>
</select>
 </p>
            <p><label for=version>Version of turistics<br> information :</label> <br><br>

            <input type="checkbox" name="languages[1]" id="lang" value="1" 
            <?php if(isset($_POST['languages'][1])) echo 'checked="checked"';?>/>English

            <input type="checkbox" name="languages[2]" id="lang" value="2" 
            <?php if(isset($_POST['languages'][2])) echo 'checked="checked"';?>/>French

            <input type="checkbox" name="languages[3]" id="lang" value="3" 
            <?php if(isset($_POST['languages'][3]))echo 'checked="checked"';?>/>Chinese

            <input type="checkbox" name="languages[4]" id="lang" value="4" 
            <?php if(isset($_POST['languages'][4])) echo 'checked="checked"';?>/>Spanish

            <input type="checkbox" name="languages[5]" id="lang" value="5" 
            <?php if(isset($_POST['languages'][5])) echo 'checked="checked"';?>/>Russian</p></p>


Le problème c'est que dans le select je veux choisir la langue par defaut, et la checkbox permet de mettre différente version. Tout ce fait dans La table "users_languages", si la langue choisi dans le select est français, il faut que le français soit choisit dans la chechbox, et ainsi mettre 'default_lang' dans la colonne à 1.

Voici l'image correspondant du formulaire :
upload/1498739685-48550-lang.png

Si vous avez une idée pour m'orienter...
Cordialement
Modifié par phoenixiki (29 Jun 2017 - 14:36)
Modérateur
Bonjour,

tu souhaites refléter le fonctionnement en javascript?

Lorsqu'on change la valeur de la liste, la checkbox correspondante est automatiquement sélectionnée puis désactivée?
kustolovic a écrit :
Bonjour,

tu souhaites refléter le fonctionnement en javascript?

Lorsqu'on change la valeur de la liste, la checkbox correspondante est automatiquement sélectionnée puis désactivée?


Non pas du tout, ce que je veux c'est choisir ma langue par défaut dans le select, ainsi que les langues dans la checkbox, pour alimenter ma table "users_languages".
Dans la table 'users_languages' ma langues par défaut sera sur 1 dans ma colonne 'default_lang'
Modérateur
Je ne comprends pas trop, où se situe le problème, qu'est-ce qui ne fonctionne pas comme souhaité?
Hé bien si je choisit "Français" par exemple en langue par défaut, je n'arrive pas a alimenter ma table "users_languages" correctement et la colonne 'default_lang' devrait etre à 1, de plus les autre langues dans checkbox ne sont pas implémenter.
J'ai ca:
upload/1498745090-48550-lang2.png
je devrais avoir ca :
upload/1498745390-48550-lang3.png
Modifié par phoenixiki (29 Jun 2017 - 16:11)
Modérateur
Alors je ne suis pas exactement sûr de ce que fait la fonction bdd_insert (mais j'ai un doute):

mais effectivement c'est bien le résultat attendu:

    $languages = implode(",", $_POST['languages']) ;  // donc $language == '1,2,4' par exemple
    $i=$_POST['languages']; // ne sert à rien ???
    for ($i=0;$i<count($languages);$i++){ // boucle une seule fois ($language est une chaine de caractères)
        $languages = $languages[$i]; // $languages devient le premier caractère de '1,2,4'
}
        bdd_insert( 'INSERT INTO users_languages (contents_languages_id, default_lang, user_id) VALUES (:contents_languages_id, :default_lang, :user_id)', [
        'contents_languages_id' => $languages, // 1 comme expliqué ci-dessus
        'default_lang' => 0, // toujours 0?
        'user_id' => $_SESSION['id']
    ] );

Modifié par kustolovic (29 Jun 2017 - 16:31)
Modérateur
Je ne comprends pas trop la structure non plus, un utilisateur peut avoir plusieurs langue par défaut?

la langue par défaut ne devrait pas être définie dans la table users?
le bdd_insert :

function bdd_insert( string $query, array $params = [] ) : int {
  require 'pdo.php';

  if ( $params ) {
    $req = $bdd->prepare( $query );
    $req->execute( $params );
  }
  else {
    $req = $bdd->query( $query );
  }

  $inserted = $req->rowCount();

  return $inserted;
}
kustolovic a écrit :
Je ne comprends pas trop la structure non plus, un utilisateur peut avoir plusieurs langue par défaut?

la langue par défaut ne devrait pas être définie dans la table users?


Non, il a une seul langue par défaut, mais ensuite quand il va vouloir rédiger ses news, il peut le faire en plusieurs langue. le formulaire indique via la checkbox les différentes traduction qu'il a choisit. Donc la langue par defaut est directement dans la colonne 'default_lang'.
Modérateur
phoenixiki a écrit :

Non, il a une seul langue par défaut, mais ensuite quand il va vouloir rédiger ses news, il peut le faire en plusieurs langue. le formulaire indique via la checkbox les différentes traduction qu'il a choisit. Donc la langue par defaut est directement dans la colonne 'default_lang'.

Donc elle devrait être dans la table user (et non dans la table de liaison)

ça simplifiera grandement l'insertion, la lecture et la modification.