Associer une image à un bouton radio

Eléphanteau du PHP | 13 Messages

14 mai 2011, 15:08

Bonjour, (Je suis un peu débutant :? )

J'ai créer un espace membre, et je voudrais que les personnes qui s'inscrivent choisissent leur sexe : "Homme / Femme" avec deux boutons radios et que dans leur profil, la valeur récupérée soit une image qui correspond au sexe.

Pouvez-vous m'aidez :cry:

(J'ai déjà créer la variable $sexe dans ma base de donnée)
Nicolas Tual

Eléphant du PHP | 241 Messages

14 mai 2011, 15:18

Salut,

il suffit simplement de remplir la valeur dans la bdd par le chemin de l'image que tu souhaite (exemple : www/images/sexe_homme.jpg) au lieu de homme ou femme

Eléphanteau du PHP | 13 Messages

14 mai 2011, 16:23

Comment je dois procéder ?
Je dois entrer dans ma base de donnée et créer deux variables : "homme" et "femme" et je leur atribut le chemin des images ?
Nicolas Tual

ViPHP
AB
ViPHP | 5818 Messages

14 mai 2011, 16:27

Oui ou encore tu donne traditionnellement la valeur 1 pour masculin et la valeur 2 pour féminin que tu enregistre dans ta bdd et ensuite en fonction de cette valeur tu fais afficher l'image correspondante.
Ce sera mieux par rapport à la solution précédente dans le sens où cela te fais moins de données dans ta bdd et surtout tu pourras changer l'adresse des images sans avoir à mettre à jour ta bdd.

Eléphanteau du PHP | 13 Messages

14 mai 2011, 17:15

Merci pour ces réponses, comment je dois procéder en détail pour entrer les nouvelles valeurs homme et femme : text ou varchar ?
Ensuite comment récupérer ces valeurs en php dans la page membre ?
Peut tu me donner des exemples ?

Merci
Nicolas Tual

ViPHP
AB
ViPHP | 5818 Messages

14 mai 2011, 17:33

Dans ta base de donnée tu ajoute une colonne nommée par exemple "sexe". Et dans cette colonne tu met 1 ou 2 suivant le sexe.

Comment fais-tu pour qu'un membre se connecte ? Montres nous la requête que tu fais et je la compléterai par un exemple.

Eléphanteau du PHP | 13 Messages

14 mai 2011, 17:41

Je te prépare ça =)
Nicolas Tual

Eléphanteau du PHP | 13 Messages

14 mai 2011, 18:28

En fait, c'est à l'inscription que je souhaite que les personnes choisissent leur sexe donc
Je joins :

le formulaire d'inscription
la page "inscription.php" qui traite le formulaire
la page membre "home.php" pour afficher les images selon le sexe :

Exemple pour les hommes Image

Formulaire d'inscription :
<form>
...
Homme : <input type="radio" name="sexe" value="Homme" />
Femme : <input type="radio" name="sexe" value="Femme" />
...
</form>

Page d'inscription "inscription.php" :
<?php
session_start(); //On demarre une session parce que j'ai envi ^^
require("conf.php3"); //On insert le fichier qui contient les informations

$mail = htmlentities($_POST['mail']);

    if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail)) //Verifie que l'email entrée n'est pas une fausse.
    {
		$chaine = "abcdefghijklmnopqrstuvwxyz0123456789"; 
		$confirm = str_shuffle($chaine); //On créé le code de confirmation
		
		$pseudo = htmlentities($_POST['pseudo']); //On recupère les infos
		$mdp = htmlentities($_POST['mdp']);
		$verif_mdp = htmlentities($_POST['verif_mdp']);
		$nom = htmlentities($_POST['nom']);
		$prenom = htmlentities($_POST['prenom']);
		$pays = htmlentities($_POST['pays']);
		$website = htmlentities($_POST['website']);
		$born = htmlentities($_POST['born']);
		$sexe = htmlentities($_POST['sexe']);
		
		/*On Fait la variable contenant le mail de confirmation*/
	
		$message1 = '<html><body><img src="http://www.web-astronomie.com/images/entete-mail.png"></br><br>';
		$message1 .= '<font face="Tahoma" color="#3b5998" size="2">Bonjour<b> ' . $prenom . ' ' . $nom . ' </b>et bienvenue sur<b> ' .$nom_site. '</b></br>';
		$message1 .= 'Toute l\'équipe de Web Astronomie vous remercie de votre inscription.<br><br>';
		$message1 .= 'Vos identifiants (conserver les précieusement) : <br>';
		$message1 .= '</br>';
		$message1 .= 'Votre pseudo : <b>' . $pseudo .'</b><br>';
		$message1 .= 'Votre mot de passe : <b>' . $mdp .'</b><br>';
		$message1 .= '</br>';
		$message1 .= 'Votre profil : </br>';
		$message1 .= '</br>';
		$message1 .= 'Votre mail : <b>' . $mail .'</b></br>';
		$message1 .= 'Votre nom : <b>' . $nom .'</b><br>';
		$message1 .= 'Votre prenom : <b>' . $prenom .'</b><br>';
		$message1 .= 'Votre sexe : <b>' . $sexe .'</b></br>';
		$message1 .= 'Votre pays : <b>' . $pays .'</b><br>';
		$message1 .= 'Votre date de naissance : <b>' . $born .'</b><br><br>';									
		$message1 .= 'Pour modifier vos infos, rendez-vous dans votre compte<br>';
		$message1 .= '</br>';
		$message1 .= 'Cliquez sur le lien ci-dessous pour activer votre compte :</br>';
		$message1 .= '</br>';
   		$message1 .= '<a href="http://www.web-astronomie.com/confirm.php?login=' . str_replace(' ','%20',$pseudo) . '&confirm=' . $confirm . '">';
		$message1 .= 'Cliquez ici pour activer</a>';
		$message1 .= '</br></br>';
		$message1 .= 'Nous vous remercions de votre fidélité<br>';
		$message1 .= 'L\'équipe de <b>Web Astronomie</b></font></body></html>';

		$sql = connect_sql(); //On se connecte à MySQL
		
		$verification = mysql_query("SELECT COUNT(*) FROM pdf_membre WHERE pseudo='$pseudo' OR mail='$mail'") or die (mysql_error());
		$donnees = mysql_fetch_array($verification)or die (mysql_error());

		if($donnees['COUNT(*)'] >= 1) //On verifie que le pseudo n'existe pas déjà
		{ 
			echo "<script>alert(\"Votre pseudo est déjà pris !\")</script>";
			echo '<script language="Javascript">document.location.replace("javascript:history.back(1)");</script>';
		}
		else
		{	
			if( empty($pseudo) || empty($mdp) || empty($verif_mdp) || empty($mail) || empty($nom) || empty($prenom) || empty($born) || empty($sexe)) //On verifie que les variables précédentes ne soient pas vide
			{
				echo "<script>alert(\"Un ou plusieurs champs ne sont pas remplis !\")</script>";
				echo '<script language="Javascript">document.location.replace("javascript:history.back(1)");</script>';
			}
			elseif( $mdp != $verif_mdp) //On verifie que les 2 pass sont identiques
			{
					echo "<script>alert(\"Le deux mots de passe ne sont pas identiques !\")</script>";
					echo '<script language="Javascript">document.location.replace("javascript:history.back(1)");</script>';
			}
			else //Si tout est bon on entre les données dans la BDD et on envoye le mail
			{
				mysql_query("INSERT INTO pdf_membre VALUES ('','$pseudo', '$mdp', '$mail', '$confirm', '$nom', '$prenom', '$pays', '$born', '$website', '$sexe')");
				echo "<script>alert(\"Félicitation, vous êtes maintenant inscrit sur Web Astronomie ! Vous allez recevoir un email pour activer votre compte\")</script>";
				echo '<script language="Javascript">document.location.replace("index.php");</script>';
				$entete = "MIME-Version: 1.0\r\n";
				$entete .= "Content-type: text/html; charset=iso-8859-1\r\n";
				$entete .= "From: Web Astronomie <$email_admin>\r\n";
				$entete .= "Reply-To: $email_admin\r\n";
				mail($mail,'Bienvenue sur ' .$nom_site. ' ' . $login .'' , $message1, $entete);
			}
		}
		
		mysql_close($sql); //On se deconnecte
	}
	else //Reponse si l'adresse e-mail est une fausse
	{
		echo "<script>alert(\"Votre adresse email n\'est pas correcte !\")</script>";
		echo '<script language="Javascript">document.location.replace("javascript:history.back(1)");</script>';
		
	} 	




?>

Page membre "home.php" :
<?php
session_start(); //On ouvre la session pour pouvoir verifier si le membre est connecté
require("conf.php3"); //Commme d'ab

if (!isset($_SESSION['pseudo'])) //Le code pour verifier qu'une session existe
{
	echo "<script>alert(\"Vous devez vous connecter pour voir cette page\")</script>"; //Si non, on arrete le script et on affiche un message
	echo '<script language="Javascript">document.location.replace("index.php");</script>';

}

$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$requete = mysql_query("SELECT * FROM pdf_membre WHERE `pseudo`='$pseudo_membre'"); 
$result = mysql_fetch_array ($requete);

$id = $result['id'];
$pseudo = $result['pseudo'];
$mail = $result['mail'];
$born = $result['born'];
$nom = $result['nom'];
$prenom = $result['prenom'];
$pays = $result['pays'];
$sexe = $result['sexe'];
/* On peut recuperer plus d'info si besoin */

?>
<?php include('protect/accueil.html'); ?>
Peux tu aussi m'indiquer les détails pour la base de donnée pour la variable $sexe : (Le nom de la colonne / Type / Interclassement / Null etc...) pour que je ne fasse pas d'erreurs :?
Voila, redis moi si il manque des éléments à t'envoyer ! :D
Merci
Nicolas Tual

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mai 2011, 20:53

Salut,

Pour le champ sql plusieurs école :
- les possibilités de SQL tendent a utiliser un domaine spécifique (mais pas implanter partout)
- mysql offre le type enum (énumération) qui pourrait convenir mais cela n'est pas standard ;)
- utiliser un booléen mais implémenté dans tous les sgbd
- utiliser un entier non signer est une solution correct dans le cas indiqué (smallint) et parfaitement suffisant il ne devra pas être null (sauf si tu sauf souhaite laisser la possibilité de ne pas répondre auquel cas null devra être la valeur par défaut. Sinon tu doit prendre le partir de que le defaut c'est 1 ou c'est 2 (c'est arbitraire et n'en change rien)

Il va falloir modifier ton formulaire car les input doivent avoir en "value" 1 ou 2

Dans le cas que tu prévu sur ton formulaire il faut que utilise champ text ou un type enum (le must c'est un domaine mais bon :/) tu ne pourra pas mettre de valeur par defaut dans ton champs et si j'ai bien vue, le premier qui met koala ou androgyne va pourrir ta table ;) avec un type enum ou un domaine qui va bien pas de soucis ;)

Pour l'interclassement et tout le reste je dirais faut mettre la même chose que pour le reste pour pas mettre le brin dans la table ;)
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 13 Messages

14 mai 2011, 21:06

Merci de ta réponse.
Et dans la page inscription.php, il y a des choses a rajouter ?
Nicolas Tual

ViPHP
AB
ViPHP | 5818 Messages

14 mai 2011, 22:25

Merci de ta réponse.
Et dans la page inscription.php, il y a des choses a rajouter ?
$verification = mysql_query("SELECT COUNT(*) FROM pdf_membre WHERE pseudo='$pseudo' OR mail='$mail'") or die (mysql_error());
                $donnees = mysql_fetch_array($verification)or die (mysql_error());

                if($donnees['COUNT(*)'] >= 1)
à remplacer par
$verification = mysql_query("SELECT COUNT(*) as nb FROM pdf_membre WHERE pseudo='$pseudo' OR mail='$mail'") or die (mysql_error());
                $donnees = mysql_fetch_array($verification)or die (mysql_error());

                if($donnees['nb'] >= 1)
L'affichage des erreurs est un peu laborieuse avec javascript
echo "<script>alert(\"Votre pseudo est déjà pris !\")</script>";
                        echo '<script language="Javascript">document.location.replace("javascript&#058;history.back(1)");</script>';
avec cette méthode tu ne pourras afficher qu'une erreur à la fois. Il serait plus optimisé d'enregistrer les erreurs dans un tableau php puis de faire afficher ce tableau en php.

Du genre :
<?php

session_start(); //On demarre une session parce que j'ai envi ^^
require("conf.php3"); //On insert le fichier qui contient les informations

if (isset($_POST['envoyer']))
{
	$chaine = "abcdefghijklmnopqrstuvwxyz0123456789";
	$confirm = str_shuffle($chaine); //On créé le code de confirmation
	
    $mail = htmlentities($_POST['mail']);
	$pseudo = htmlentities($_POST['pseudo']); //On recupère les infos
	$mdp = htmlentities($_POST['mdp']);
	$verif_mdp = htmlentities($_POST['verif_mdp']);
	$nom = htmlentities($_POST['nom']);
	$prenom = htmlentities($_POST['prenom']);
	$pays = htmlentities($_POST['pays']);
	$website = htmlentities($_POST['website']);
	$born = htmlentities($_POST['born']);
	$sexe = htmlentities($_POST['sexe']);
   
	/*On Fait la variable contenant le mail de confirmation*/

	$message1 = '<html><body><img src="http://www.web-astronomie.com/images/entete-mail.png"></br><br>';
	$message1 .= '<font face="Tahoma" color="#3b5998" size="2">Bonjour<b> ' . $prenom . ' ' . $nom . ' </b>et bienvenue sur<b> ' .$nom_site. '</b></br>';
	$message1 .= 'Toute l\'équipe de Web Astronomie vous remercie de votre inscription.<br><br>';
	$message1 .= 'Vos identifiants (conserver les précieusement) : <br>';
	$message1 .= '</br>';
	$message1 .= 'Votre pseudo : <b>' . $pseudo .'</b><br>';
	$message1 .= 'Votre mot de passe : <b>' . $mdp .'</b><br>';
	$message1 .= '</br>';
	$message1 .= 'Votre profil : </br>';
	$message1 .= '</br>';
	$message1 .= 'Votre mail : <b>' . $mail .'</b></br>';
	$message1 .= 'Votre nom : <b>' . $nom .'</b><br>';
	$message1 .= 'Votre prenom : <b>' . $prenom .'</b><br>';
	$message1 .= 'Votre sexe : <b>' . $sexe .'</b></br>';
	$message1 .= 'Votre pays : <b>' . $pays .'</b><br>';
	$message1 .= 'Votre date de naissance : <b>' . $born .'</b><br><br>';                                                                  
	$message1 .= 'Pour modifier vos infos, rendez-vous dans votre compte<br>';
	$message1 .= '</br>';
	$message1 .= 'Cliquez sur le lien ci-dessous pour activer votre compte :</br>';
	$message1 .= '</br>';
	$message1 .= '<a href="http://www.web-astronomie.com/confirm.php?login=' . str_replace(' ','%20',$pseudo) . '&confirm=' . $confirm . '">';
	$message1 .= 'Cliquez ici pour activer</a>';
	$message1 .= '</br></br>';
	$message1 .= 'Nous vous remercions de votre fidélité<br>';
	$message1 .= 'L\'équipe de <b>Web Astronomie</b></font></body></html>';

	$sql = connect_sql(); //On se connecte à MySQL
   
	$verification = mysql_query("SELECT COUNT(*) FROM pdf_membre WHERE pseudo='$pseudo' OR mail='$mail'") or die (mysql_error());
	$donnees = mysql_fetch_array($verification)or die (mysql_error());


	$info_formulaire = array();
	
	
	if($donnees['nb'] >= 1) //On verifie que le pseudo ou le mail n'existe pas déjà
		{
			$info_formulaire[] ="Votre pseudo est déjà pris !";
		}
		  
						
	if( empty($pseudo) || empty($mdp) || empty($verif_mdp) || empty($mail) || empty($nom) || empty($prenom) || empty($born) || empty($sexe)) //On verifie que les variables précédentes ne soient pas vide
		{
			$info_formulaire[] ="Un ou plusieurs champs ne sont pas remplis !";
		}
	
	
	if( $mdp != $verif_mdp) //On verifie que les 2 pass sont identiques
		{
			$info_formulaire[] ="Le deux mots de passe ne sont pas identiques !";		  
		}
						   
	
	if (!preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $mail)) //Verifie que l'email entrée n'est pas une fausse.
		{
			$info_formulaire[] ="Votre adresse email n\'est pas correcte !";
		}
		
		
	if(isset($info_formulaire) && count($info_formulaire) == 0)
	{	
		mysql_query("INSERT INTO pdf_membre VALUES ('','$pseudo', '$mdp', '$mail', '$confirm', '$nom', '$prenom', '$pays', '$born', '$website', '$sexe')");
			
		$info_formulaire[] ="Félicitation, vous êtes maintenant inscrit sur Web Astronomie ! Vous allez recevoir un email pour activer votre compte";
									   
		$entete = "MIME-Version: 1.0\r\n";
		$entete .= "Content-type: text/html; charset=iso-8859-1\r\n";
		$entete .= "From: Web Astronomie <$email_admin>\r\n";
		$entete .= "Reply-To: $email_admin\r\n";
		mail($mail,'Bienvenue sur ' .$nom_site. ' ' . $login .'' , $message1, $entete);
				 
			
		   
		mysql_close($sql); //On se deconnecte
	}
}
?>

<form action="#" method="post">
<div>
...
Homme : <input type="radio" name="sexe" value="1" />
Femme : <input type="radio" name="sexe" value="2" />
...

<input type = "submit" name = "envoyer" value = "Envoyer" />
</div>
</form>

<?php if (isset($info_formulaire) && count($info_formulaire) > 0)
{
foreach ($info_formulaire as $value) echo '<p>- '.$value.'</p>';
}
?>
Tu trouves pas ça plus simple ?

Eléphanteau du PHP | 13 Messages

14 mai 2011, 22:54

Oui c'est plus simple mais tu ne m'a pas expliqué comment faire pour associé deux images : Image et Image à deux boutons radios pour valeur $sexe et comment les affichés dans la page membre.php
Et dans la base de donnée comment je pourrais faire ??

Merci
Nicolas Tual

ViPHP
AB
ViPHP | 5818 Messages

14 mai 2011, 23:36

Ben teste et tu verras bien le résultat dans ta bdd. Normalement si tu coche masculin tu devrais avoir 1 dans le champ sexe.

Ensuite
<?php
$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$requete = mysql_query("SELECT * FROM pdf_membre WHERE `pseudo`='$pseudo_membre'");
$result = mysql_fetch_array ($requete);

$id = $result['id'];
$pseudo = $result['pseudo'];
$mail = $result['mail'];
$born = $result['born'];
$nom = $result['nom'];
$prenom = $result['prenom'];
$pays = $result['pays'];
$sexe = $result['sexe'];

$adresse_image =  $sexe ==1 ? repertoire_image/image_sexe_masculin.jpg : repertoire_image/image_sexe_feminin.jpg;
/* On peut recuperer plus d'info si besoin */

?>
<?php include('protect/accueil.html'); ?>

<img src="<?php echo $adresse_image ?>"/>
Modifié en dernier par AB le 15 mai 2011, 17:43, modifié 2 fois.

Eléphanteau du PHP | 13 Messages

14 mai 2011, 23:49

Merci =)
Dans ma base de donnée je met "sexe" en nom de la colonne, mais le type de la colonne (text, varchar, ou enum ?) ainsi que l'interclassement, not null ou null etc....
Nicolas Tual

ViPHP
AB
ViPHP | 5818 Messages

15 mai 2011, 00:08

moogli a déjà répondu.
Mets smallint comme type et par défaut not null si ce champ doit toujours être renseigné.