PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 17-05-2012 14:14:55

philippepetit
Membre
Inscription : 17-05-2012
Messages : 13

[résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Bonjour,

Tout d'abord, veuillez m'excuser si ma question n'est pas au bon endroit, c'est la première fois que j'utilise un forum.

J'ai réussi (laborieusement, car je suis débutant) à construire une ébauche d'enquête PHP/mysql avec entre autre une case à cocher de type oui/non. Quand l'utilisateur remplit l'enquête, toutes les données sont correctement enregistrées dans ma base y compris celles de la case à cocher.
L'utilisateur doit pouvoir reprendre ou modifier son enquête par le biais d'un fichier edit_infos.php. Ce fichier fonctionne parfaitement pour tous les champs sauf pour les cases à cocher qui restent non cochées.

Je pense qu'il y a une erreur de syntaxe au niveau de la récupération des valeurs oui ou non de la base de données mais je ne vois pas où.

Merci par avance de toute aide que pourriez m'apporter.

Philippe

<?php
include('config.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
        <title>Modifier son enquete</title>
    </head>
    <body>
      <div class="header">
          <a href="<?php echo $url_home; ?>"><img src="<?php echo $design; ?>/images/logo.png" alt="Enquete" /></a>
      </div>
<?php
//On verifie si lutilisateur est connecte
if(isset($_SESSION['username']))
{
  //On verifie si le formulaire a ete envoye
  if(isset($_POST['username'], $_POST['password'], $_POST['passverif'], $_POST['email'], $_POST['avatar'], $_POST['question']))
  {
    //On enleve lechappement si get_magic_quotes_gpc est active
    if(get_magic_quotes_gpc())
    {
      $_POST['username'] = stripslashes($_POST['username']);
      $_POST['password'] = stripslashes($_POST['password']);
      $_POST['passverif'] = stripslashes($_POST['passverif']);
      $_POST['email'] = stripslashes($_POST['email']);
      $_POST['avatar'] = stripslashes($_POST['avatar']);
      $_POST['question'] = stripslashes($_POST['question']);
    }
    //On verifie si le mot de passe et celui de la verification sont identiques
    if($_POST['password']==$_POST['passverif'])
    {
      //On verifie si le mot de passe a 6 caracteres ou plus
      if(strlen($_POST['password'])>=6)
      {
        //On verifie si lemail est valide
        if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
        {
          //On echape les variables pour pouvoir les mettre dans une requette SQL
          $username = mysql_real_escape_string($_POST['username']);
          $password = mysql_real_escape_string($_POST['password']);
          $email = mysql_real_escape_string($_POST['email']);
          $avatar = mysql_real_escape_string($_POST['avatar']);
          $question = mysql_real_escape_string($_POST['question']);
          //On verifie sil ny a pas deja un utilisateur inscrit avec le pseudo choisis
          $dn = mysql_fetch_array(mysql_query('select count(*) as nb from table_tice where username="'.$username.'"'));
          //On verifie si le pseudo a ete modifie pour un autre et que celui-ci n'est pas deja utilise
          if($dn['nb']==0 or $_POST['username']==$_SESSION['username'])
          {
            //On modifie les informations de lutilisateur avec les nouvelles
            if(mysql_query('update table_tice set username="'.$username.'", password="'.$password.'", email="'.$email.'", avatar="'.$avatar.'", question="'.$question.'" where id="'.mysql_real_escape_string($_SESSION['userid']).'"'))
            {
              //Si ca a fonctionne, on naffiche pas le formulaire
              $form = false;
              //On supprime les sessions username et userid au cas ou il aurait modifie son pseudo
              unset($_SESSION['username'], $_SESSION['userid']);
?>
<div class="message">Vos informations ont bien été modififée. Vous devez vous reconnecter.<br />
<a href="connexion.php">Se connecter</a></div>
<?php
            }
            else
            {
              //Sinon on dit quil y a eu une erreur
              $form = true;
              $message = 'Une erreur est survenue lors des modifications.';
            }
          }
          else
          {
            //Sinon, on dit que le pseudo voulu est deja pris
            $form = true;
            $message = 'Un autre utilisateur utilise déjà le nom d\'utilisateur que vous désirez utiliser.';
          }
        }
        else
        {
          //Sinon, on dit que lemail nest pas valide
          $form = true;
          $message = 'L\'email que vous avez entré n\'est pas valide.';
        }
      }
      else
      {
        //Sinon, on dit que le mot de passe nest pas assez long
        $form = true;
        $message = 'Le mot de passe que vous avez entré contien moins de 6 caractères.';
      }
    }
    else
    {
      //Sinon, on dit que les mots de passes ne sont pas identiques
      $form = true;
      $message = 'Les mot de passe que vous avez entré ne sont pas identiques.';
    }
  }
  else
  {
    $form = true;
  }
  if($form)
  {
    //On affiche un message sil y a lieu
    if(isset($message))
    {
      echo '<strong>'.$message.'</strong>';
    }
    //Si le formulaire a deja ete envoye on recupere les donnes que lutilisateur avait deja insere
    if(isset($_POST['username'],$_POST['password'],$_POST['email'],$_POST['question']))
    {
      $username = htmlentities($_POST['username'], ENT_QUOTES, 'UTF-8');
      if($_POST['password']==$_POST['passverif'])
      {
        $password = htmlentities($_POST['password'], ENT_QUOTES, 'UTF-8');
      }
      else
      {
        $password = '';
      }
      $email = htmlentities($_POST['email'], ENT_QUOTES, 'UTF-8');
      $avatar = htmlentities($_POST['avatar'], ENT_QUOTES, 'UTF-8');
      $question = htmlentities($_POST['question'], ENT_QUOTES, 'UTF-8');
    }
    else
    {
      //Sinon, on affiche les donnes a partir de la base de donnee
      $dnn = mysql_fetch_array(mysql_query('select username,password,email,avatar,question from table_tice where username="'.$_SESSION['username'].'"'));
      $username = htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8');
      $password = htmlentities($dnn['password'], ENT_QUOTES, 'UTF-8');
      $email = htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8');
      $avatar = htmlentities($dnn['avatar'], ENT_QUOTES, 'UTF-8');
      $question = htmlentities($dnn['question'], ENT_QUOTES, 'UTF-8');
    }
    //On affiche le formulaire
?>
<div class="content">
    <form action="edit_infos.php" method="post">
        Vous pouvez modifier vos informations:<br />
        <div class="center">
            <label for="username">Nom d'utilisateur</label><input type="text" name="username" id="username" value="<?php echo $username; ?>" /><br />
            <label for="password">Mot de passe<span class="small">(6 caractères min.)</span></label><input type="password" name="password" id="password" value="<?php echo $password; ?>" /><br />
            <label for="passverif">Mot de passe<span class="small">(vérification)</span></label><input type="password" name="passverif" id="passverif" value="<?php echo $password; ?>" /><br />
            <label for="email">Email</label><input type="text" name="email" id="email" value="<?php echo $email; ?>" /><br />
            <label for="avatar">Image perso<span class="small">(facultatif)</span></label><input type="text" name="avatar" id="avatar" value="<?php echo $avatar; ?>" /><br />


<label for="question">OUI ou NON</label><input type="radio" name="question" value="oui" <?php if (isset($_POST['question']) && $_POST['question'] == "oui") echo 'checked="checked"'; ?> /><br />
<label for="question">OUI ou NON</label><input type="radio" name="question" value="non" <?php if (isset($_POST['question']) && $_POST['question'] == "non") echo 'checked="checked"'; ?>/><br />
 
      <input type="submit" value="Envoyer" />
        </div>
    </form>
</div>
<?php
  }
}
else
{
?>
<div class="message">Pour accéder à cette page, vous devez être connecté.<br />
<a href="connexion.php">Se connecter</a></div>
<?php
}
?>
    <div class="foot"><a href="<?php echo $url_home; ?>">Retour à l'accueil</a> - <a href="http://philippe.petit.free.fr/index.php">Accueil Enquete</a></div>
  </body>
</html>

Hors ligne

#2 17-05-2012 16:16:29

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Bonjour,

L'attribut checked="checked" s'applique uniquement à des balises <input type="checkbox" ..> et non à des boutons radio. De plus les boutons radio d'un même groupe gèrent automatiquement leur affectation de valeur. C'est à dire que si vous avez 3 boutons radios et que vous mettez à jour la valeur d'un à true, la valeur des 2 autres sera automatiquement mis à jour sans code supplémentaire. Par contre dans le cas de checkbox ceci n'est pas vrai et il faut mettre à jour la valeur de chaque checkbox comme cela a été fait dans votre code.
Il vous faut donc changer votre type="radio" en type="checkbox" si vous souhaitez que votre code actuel fonctionne. Un souci cependant, dans le cas où les deux cases à cocher ne doivent pas être cochées en même temps, il vous faudra rajouter le code qui gère cela en javascript.

Cordialement,

Jc.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 18-05-2012 13:50:45

philippepetit
Membre
Inscription : 17-05-2012
Messages : 13

Re : [résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Bonjour,

Merci de votre réponse rapide.
J'ai changé "radio" en "checkbox" mais le résultat n'est pas probant. je ne récupère toujours pas la coche dans mon fichier edit_infos.php. Je pense donc que le problème vient d'ailleurs. Je n'ai pas de variables dans mon traitement, peut-être est-ce là le problème. Peut-être faut-il un champ spécifique dans la BDD. Je vais continuer de chercher des exemples de traitement des boutons radio car je ne suis pas programmeur.

Excusez moi de vous avoir fait perdre votre temps.

Et merci encore

Philippe

Hors ligne

#4 18-05-2012 14:15:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Bonjour,

Vous ne m'avez pas fait perdre mon temps, mais normalement l'attribut value d'une checkbox cochée est "checked" et non "oui". Vérifiez tout de même en base de données car selon la façon dont c'est traité en code sous-jacent il se peut que la valeur stockée soit différente de celle envoyée par le formulaire.
De plus quand la valeur n'est pas modifiée et qu'elle est "oui" ou "non", c'est "yes" et "" qui sont envoyés par le formulaire pas "oui" et "non".

Dernière modification par Jc (18-05-2012 14:19:40)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 18-05-2012 16:43:43

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Saluton,
Une petite astuce pour les programmeurs débutants, en phase de développement vous pouvez regarder le contenu de $_POST en entrée du script PHP de traitement de vos formulaires avec les fonctions print_r($_POST) ou var_dump($_POST) (ça vaut aussi avec $_GET évidemment).


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 18-05-2012 18:11:19

philippepetit
Membre
Inscription : 17-05-2012
Messages : 13

Re : [résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Bonjour,

Merci de vos réponses. Je vais étudier vos suggestions afin de trouver une solution côté code ou base de données.

Philippe

Hors ligne

#7 19-05-2012 19:12:10

philippepetit
Membre
Inscription : 17-05-2012
Messages : 13

Re : [résolu]Bouton radio coché enfonction des résultats d'une base mysql ?

Bonjour,

Je reviens vers vous pour vous faire savoir qu'après recherche sur différents forums, je pense avoir trouvé la solution à mon problème. En fait, 'checked="checked"' s'applique bien aussi aux boutons radios, afin de récupérer la coche en fonction de la bdd mysql. Je faisais simplement une erreur de syntaxe. La bonne syntaxe est :

<label for="question">question</label>
<input type="radio" name="question" value="<? echo "$question"; ?>"<?php if ($question=='oui') echo 'checked="checked"'; ?>/> oui
<input type="radio" name="question" value="<? echo "$question"; ?>"<?php if ($question=='non') echo 'checked="checked"'; ?>/> non<br />

et ceci quel que soit le type de champ de la bdd mysql (dans mon cas, un simple champ text.

Je ne sais pas comment mettre un "résolu" dans le fil, désolé.

Merci encore de vos précieux conseils. J'attaque maintenant le traitement des checkbox et ne manquerai pas de vous demander conseil si j'ai des soucis.

Philippe

Hors ligne

Pied de page des forums