Page 1 sur 2

Problème bouton radio et SQL

Posté : 20 févr. 2012, 16:01
par banban55
Bonjour à tous.

Je rencontre des difficultés pour mettre en place un système d'option( via bouton radio )pour les annonces de mes véhicules. Voici comment je procède, dans un premier temps j'ai un formulaire d'ajout du véhicule( marque, modèle, année, couleur, description, km....) ensuite apres validation du formulaire j'arrive sur une page qui récapitule l'annonce. Une fois la validation de l'annonce celle-ci s'ajoute à ma table " annonce ". Jusque là aucun soucis.

Dans la 2eme partie de l'ajout d'une annonce, je récupère le dernier " id " de ma table annonce pour faire le choix des options du véhicule. J'ai donc un nouveau formulaire avec des boutons radio de toutes les options dispo.

J'aimerai cocher les bouton radio des options dispo de la table " options " dans le véhicule et les mettre dans une nouvelle table " option_vehicule ".

exemple:
vehicule 1 option 3
vehicule 1 option 2
vehicuel 1 option 5
vehicule 2 option 3

voici ma page du formulaire pour le choix des options:
<?php

	// On démarre la session 
	session_start();
	
	if (isset($_SESSION['modele']))
		{
		$ajout_modele = $_SESSION['modele'];
		$marque = $_SESSION['marque'];
		$etat = $_SESSION['etat'];
		$couleur = $_SESSION['couleur'];
		$description = $_SESSION['description'];
		$km = $_SESSION['km'];
		$date = $_SESSION['date'];
		$motorisation = $_SESSION['motorisation'];
		$nb_main = $_SESSION['nb_main'];
		$prix = $_SESSION['prix'];
		}
	elseif (isset($_SESSION['ajout_modele']))
		{
		$ajout_modele = $_SESSION['ajout_modele'];
		$marque = $_SESSION['marque'];
		$etat = $_SESSION['etat'];
		$couleur = $_SESSION['couleur'];
		$description = $_SESSION['description'];
		$km = $_SESSION['km'];
		$date = $_SESSION['date'];
		$motorisation = $_SESSION['motorisation'];
		$nb_main = $_SESSION['nb_main'];
		$prix = $_SESSION['prix'];
		}
		
	if (empty($_SESSION['marque']) & empty($_SESSION['etat']) & empty($_SESSION['couleur']) & empty($_SESSION['logo']) & empty($_SESSION['description']) & empty($_SESSION['km']) & empty($_SESSION['date']) & empty($_SESSION['motorisation']) & empty($_SESSION['nb_main']) & empty($_SESSION['prix']))
				{
				$resultat = "Erreur d'ajout de l'annonce";
				}
			else 
				{
				//connection à la base de données
				require_once '../_inc/_connexion.php';
			
				$requ_ajout = ("INSERT INTO annonce (
							`id_annonce` ,
							`id_type_annonce` ,
							`id_marque_annonce` ,
							`id_modele` ,
							`couleur_annonce` ,
							`description_annonce` ,
							`motorisation_annonce` ,
							`date_annonce` ,
							`proprietaire_annonce` ,
							`km_annonce` ,
							`prix_annonce`)
							VALUES (
							NULL ,  '$etat',  '$marque',  '$ajout_modele', '$couleur', '$description',  '$motorisation',  '$date',  '$nb_main',  '$km', '$prix'
							
							)");
				mysql_query($requ_ajout) or die('Erreur SQL !'.$requ_ajout.'<br>'.mysql_error()); 
			
			
				$recup_dernier = ("SELECT id_annonce FROM  `annonce` ORDER BY  `annonce`.`id_annonce` DESC LIMIT 1");
				$resultat_last_id = mysql_query($recup_dernier);
				$last_id = mysql_fetch_array($resultat_last_id);
			
				$_SESSION['last_id'] = $last_id['id_annonce'];
				$resultat = "annonce ajouter";
				}
			
		
		
	
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="keywords" content="greg-auto, voitures neuves, voitures d'occasion, import automobile" />
<meta name="description" content="Bienvenue sur le site Greg-auto" />

<link href="admin.css" rel="stylesheet" type="text/css" />

<title>Administraton-Greg-auto</title>
</head>

<body>
	<div id="logo"><a href="index.php" border="0"><img src="../images/greg_auto.png" border="0" width="473" height="163"></a></div>
		<?php include("_menu.php") ;?>
		<div id="sous_menu_annonce">
			<ul>
				<li><a href="_gestion_annonce.php">Listes des annonces</a></li>
				<li><a href="_ajout_annonce.php">Ajout d'une annonce</a></li>
				<li><a href="_editeur_pdf.php">Impression d'une fiche PDF</a></li>
			</ul>
		</div>
		<div id="cadre_centre">
			<form id="ajout_annonce1" name="ajout_annonce" method="post" action="traitement_option.php">
				<fieldset class="ajout_auto">
					<legend>Etape 5 - Choix des options</legend>
							<div id="contenu_option">
							<?php
								//connection à la base de données
								require_once '../_inc/_connexion.php';

								// affichage de toutes les options dispo
			
								$requ_option = ("SELECT * FROM options ORDER BY id_option ASC");
								$option = mysql_query($requ_option);
									while ($row_option = mysql_fetch_array($option))
										{
										echo '<div id="options"><input type="checkbox" name="'.$row_option['id_option'].'" id="option '.$row_option['id_option'].'" /><p title="'.$row_option['description_option'].'">'.$row_option['titre_option'].'</p></div>';
										}
							?>
							</div>
					</div>
					
				</fieldset>
				<input type="hidden" name="'.$_SESSION['last_id'].'" id="last_id" />
			<div id="bouton_form"><input class="bouton_submit" name="envoyer" type="submit" value="Etape suivante -> Ajout des photos" /></div>
			</form>	
		</div>
			
        
</body>
</html>

Pouvez vous me mettre sur une piste ? J'aimerai que les options cocher s'ajoute directement dans la table "option_vehicule".

Je ne trouve pas la méthode pour faire la requête sql en fonction des options cocher...

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 16:06
par xTG
Qu'est ce qui te pose souci ? C'est la même chose que ce que tu fais actuellement avec l'annonce.
Où bloques-tu ?

Par contre au niveau html un attribut name ne doit pas être un numérique, ce doit être une chaîne de caractères.
Enfin tu as un énorme problème avec ton script d'ajout d'annonce... On rafraichit la page et on insère un doublon. ;)

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 16:32
par banban55
Qu'est ce qui te pose souci ? C'est la même chose que ce que tu fais actuellement avec l'annonce.
Où bloques-tu ?

Par contre au niveau html un attribut name ne doit pas être un numérique, ce doit être une chaîne de caractères.
Enfin tu as un énorme problème avec ton script d'ajout d'annonce... On rafraichit la page et on insère un doublon. ;)

Un énorme problème sur le script d'ajout ?? pourtant il tourne à merveille...
Mon blocage c'est la facon la requete sql qui va ajouter les options dans la table .... car si il y a plusieurs options de cocher il faut donc plusieurs requete ?

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 16:36
par xTG
Cela dépend de ce que tu veux faire.
C'est un ajout ou une modification ?
Un n-uplet ou plusieurs ?

Concernant le gros problème, rafraichis la page et tu pourras constater que tu as deux fois la même annonce.
Car pour que ta requête d'insertion soit lancée il faut juste que des données soient en session.
Et après la requête ta session a toujours ces données.
Donc on rafraichit la page et on retourne au même point sauf qu'on a déjà le n-uplet dan la table, donc de nouveau un ajout => doublon d'annonce.

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 16:45
par banban55
oui exacte pour les doublons... je vais faire de l'ordre :?

pour revenir à mon plus gros soucis, je souhaite juste que quand je coche une option il y est une requête (ou plusieurs si il y a plusieurs case de cocher) qui ajout dans ma table option_vehicule. Car lors de l'ajout de l'annonce dans la premier temps il y a uniquement les infos du vehicule sans les options. C'est pourquoi je recupere le dernier id de la table annonce pour faire un ajout des options de celui-ci.

table option_vehicule:
CREATE TABLE IF NOT EXISTS `option_vehicule` (
  `id_option_vehicule` int(11) NOT NULL AUTO_INCREMENT,
  `vehicule_id` int(11) NOT NULL,
  `option_id` int(11) NOT NULL,
  PRIMARY KEY (`id_option_vehicule`),
  KEY `vehicule_id` (`vehicule_id`)
)
table annonce:
CREATE TABLE IF NOT EXISTS `annonce` (
  `id_annonce` int(11) NOT NULL AUTO_INCREMENT,
  `id_type_annonce` int(11) NOT NULL,
  `id_marque_annonce` int(11) NOT NULL,
  `id_modele` int(11) NOT NULL,
  `couleur_annonce` varchar(10) NOT NULL,
  `description_annonce` text NOT NULL,
  `motorisation_annonce` int(11) NOT NULL,
  `date_annonce` date NOT NULL,
  `proprietaire_annonce` int(11) NOT NULL,
  `km_annonce` varchar(255) NOT NULL,
  `prix_annonce` varchar(255) NOT NULL,
  PRIMARY KEY (`id_annonce`),
  KEY `type_annonce` (`id_type_annonce`)
)
table options:
CREATE TABLE IF NOT EXISTS `options` (
  `id_option` int(11) NOT NULL AUTO_INCREMENT,
  `titre_option` varchar(200) NOT NULL,
  `description_option` text NOT NULL,
  PRIMARY KEY (`id_option`)
)

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 17:28
par xTG
Tu peux utiliser une notation tableau pour les options.

Exemple :
foreach($mesOptionsDeMaTable as $option){
  echo $option['titre'] . ' : <input type="checkbox" name="option[' . $option['id'] . ']" /><br />';
}
Cela renverra un tableau dont l'index sera l'id de l'option et tu auras en valeur la chaîne checked et aucun index pour les checkbox non cochée si je me souviens bien.
Donc avec ça tu n'as plus qu'à refaire une boucle avec une requête INSERT dedans utilisant l'id de l'option et l'id de ton véhicule.

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 18:14
par banban55
c'est encore tres flou... mon formulaire est donc bon ? le code que tu me proposes il sera nécessaire pour le traitement uniquement ?

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 18:32
par xTG
Non tu n'as pas de notation tableau dans ton formulaire (cf l'attribut name).

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 18:41
par banban55
Alors je suis perdu. Je comprends pas ma méthode que tu me propose.

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 18:55
par xTG
Notation tableau :
<input type="text" name="text[0]" value="1" />
<input type="text" name="text[1] value="2" />
Résultat récupéré ($_POST['text']) :
Array(
0 => 1,
1 => 2
)

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 19:07
par banban55
Donc pour revenir un peu en arrière,

J'ai ma boucle qui affiche toutes les options
foreach($mesOptionsDeMaTable as $option){
  echo $option['titre'] . ' : <input type="checkbox" name="option[' . $option['id'] . ']" /><br />';
}
ensuite pour la traitement je récupère à valeur ( sous forme d'un tableau avec toutes les cases cocher) de $_POST que j'ajoute à ma requête INSERT ?

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 21:51
par xTG
Oui tu boucles sur la variable $_POST['option'] qui est un array et dans ta boucle tu mets ta requête INSERT.
A chaque itération de la boucle tu auras une insertion.

Re: Problème bouton radio et SQL

Posté : 20 févr. 2012, 22:49
par banban55
Ok. J'ai compris le principe, j'ai autre petite question, à quoi correspond la variable $MesOptionDeMaTable ?

Re: Problème bouton radio et SQL

Posté : 21 févr. 2012, 07:58
par moogli
Cette variable est la pour l'exemple, elle indique que tu doit utiliser les valeurs issu de ta requête SQL. (donc final il y a des chances que tu utilise un while plutôt qu'un foreach mais c'est la même chose.

Petit nuance sur le code html, si tu ne veux pas t'emmerder passe la valeur de l'id en value de la Checkbox et non en index du tableau ceci pour éviter d'avoir un tableau indexé par les valeurs mais sans données.
De toute façon les Checkbox non cochée ne sont pas envoyée.

@+

Re: Problème bouton radio et SQL

Posté : 21 févr. 2012, 20:58
par banban55
me voici de retour pour la suite des aventures des cases à cocher...

je pense que mon formulaire doit être bon maintenant, j'aimerai juste avoir confirmation.
<form id="ajout_annonce1" name="ajout_annonce" method="post" action="traitement_option.php">
				<fieldset class="ajout_auto">
					<legend>Etape 5 - Choix des options</legend>
							<div id="contenu_option">
							<?php
								//connection à la base de données
								require_once '../_inc/_connexion.php';

								// affichage de toutes les options dispo
			
								$requ_option = ("SELECT * FROM options ORDER BY id_option ASC");
								$option = mysql_query($requ_option);
									while ($row_option = mysql_fetch_array($option))
									{
									echo $row_option['titre_option'] . ' : <input type="checkbox" name="option[' . $row_option['id_option'] . ']" /><br />';
									}
							?>
							</div>
					</div>
					
				</fieldset>
				<input type="hidden" name="<?php echo $_SESSION['last_id']; ?>" id="last_id" />
			<div id="bouton_form"><input class="bouton_submit" name="envoyer" type="submit" value="Etape suivante -> Ajout des photos" /></div>
			</form>