5568 sujets

Sémantique web et HTML

Bonjour, je suis débutant en Php, et je bosse sur un formulaire ou j'ai créer une liste avec les noms de pays venant directement d'une bdd mysql.
Je vos montre le code :
Contenu table countries :
CREATE TABLE `countries` (
  `id` int(11) NOT NULL,
  `namepays` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `countries` (`id`, `namepays`) VALUES
(1, 'France'),
(2, 'United Kingdom'),
(3, 'China'),
(4, 'Spain'),
(5, 'Russia');


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;


Partie de la page profil :
if(isset($_POST['namepays']) AND !empty($_POST['namepays']) AND $_POST['namepays'] != $donnees['namepays'] = "namepays") {

            bdd_update( 'UPDATE users SET countries_id = :countries_id WHERE id = :id', [
                    'countries_id' => $_POST['namepays'],
                    'id' => $_SESSION['id']
            ] );
             }


Partie de la page profil :

<p><label for=pays>Your pays :</label>
   
 <select name="namepays" id="namepays">
    <option value="namepays">Choisir son pays</option>

    <?php

$reponse = $bdd->query('SELECT * FROM countries');
while ($donnees = $reponse->fetch())

{
 ?>
<option value="<?php echo $donnees['id'];?>"<?php echo(($donnees['namepays']) == $donnees['id']?" selected=\"selected\"":null); ?>>
               <?php echo $donnees['namepays']; ?></option>
          
<?php
}

 $reponse->closeCursor();

?>              
  </select></p>


J'aimerais quand le client choisit son pays il faudrait que le choix qu'il est fait s'affiche directement quand il revient sur sa page.
Si vous pouvez m'aidez dessous car ça fait 1 semaine que je bloque, merci d'avance
Modifié par phoenixiki (26 Jun 2017 - 18:10)
Salut, ton code ne pouvait pas fonctionner car la condition pour que le pays soit sélectionné était que namepays soit égal à id (du pays).
Or l'id et le nom du pays ne peuvent pas être égal.
Dans la requête SQL, j'ai rajouté la table users où l'on vient récupérer l'id du pays de l'utilisateur.
Ensuite, j'ai supprimé plusieurs balises <?php ?> dans ton code car cela le rendait peu lisible.
Tu avais d'ailleurs des fautes de syntaxes dans ton php.
Un seul echo suffit pour toute la ligne. Il suffit d'utiliser la concaténation, on s'en sert avec le point.

<label for="namepays">Votre pays :</label>
<select name="namepays" id="namepays">
  <option value="">Choisir son pays</option>
  <?php
    $reponse = $bdd->query("SELECT c.id, c.namepays, u.countries_id FROM `countries` `c` LEFT JOIN `users` `u` ON u.id = '".$_SESSION['id']."'");
    while($donnees = $reponse->fetch()){
      $selected = ($donnees['namepays'] == $donnees['countries_id']) ? ' selected="selected"' : '';
      echo '<option value="'.$donnees['id'].'"'.$selected.'>'.$donnees['namepays'].'</option>';
    }
    $reponse->closeCursor();
  ?>
</select>

Modifié par taspeur (26 Jun 2017 - 20:03)
J'ai tester ton code, il est bien structurer, d'ailleurs je le garde, mais j'ai toujours ce problème, quand je reviens dessus j'ai toujours le choix des pays alors que je devrais voir apparaître directement le nom du pays. Voici une capture d'écran : upload/1498566982-48550-profil.png
il faut que tu démarres ta session au début de ta page php.

avec la fonction session_start();
http://php.net/manual/fr/function.session-start.php

Comment enregistres tu l'id de l'utilisateur en session ?

PS: par contre "Your pays" ça ne veut rien dire. Ca serait plutot your country ou votre pays
Et adress s'écrit address
Modifié par taspeur (27 Jun 2017 - 20:04)
Modérateur
Bonjour il y a il me semble une boulette dans le code de taspeur ici:


$selected = ($donnees['namepays'] == $donnees['countries_id']) ? ' selected="selected"' : '';

serait plutôt:

$selected = ($donnees['id'] == $donnees['countries_id']) ? ' selected="selected"' : '';


p.s. : Souvent on se sert du code ISO des pays comme id, c'est plus lisible (et pratique pour construire des locales par exemple).
Meilleure solution
taspeur a écrit :
il faut que tu démarres ta session au début de ta page php.

avec la fonction session_start();
http://php.net/manual/fr/function.session-start.php

Comment enregistres tu l'id de l'utilisateur en session ?

PS: par contre "Your pays" ça ne veut rien dire. Ca serait plutot your country ou votre pays
Et adress s'écrit address

Oui je demarre bien avec une session Start()
<?php
session_start();

if ( isset( $_SESSION['id'])) {


Pour pays, c'est un brouillon, mais effectivement ça serait plutôt Your Country
kustolovic a écrit :
Bonjour il y a il me semble une boulette dans le code de taspeur ici:


$selected = ($donnees['namepays'] == $donnees['countries_id']) ? ' selected="selected"' : '';

serait plutôt:

$selected = ($donnees['id'] == $donnees['countries_id']) ? ' selected="selected"' : '';


p.s. : Souvent on se sert du code ISO des pays comme id, c'est plus lisible (et pratique pour construire des locales par exemple).


Merci à vous deux ça marche nickel...
C'est vrai pour le code ISO des pays, je pense que je modifierais
Cordialement.