8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Je veux en gros :

Si je sélectionne dans mon champ = UMP que ça affiche Sarkozy et que si je sélectionne PS ça affiche Hollande.

UMP et PS sont dans la colonne r et Sarkozy et Hollande dans la colonne t

La personne à rien à taper, juste à sélectionner dans mon sélecteur pour voir la réponse sur la page. J'ai pris un exemple simple comme modèle. Smiley cligne

Avez vous un modèle de code ?

Mon code :

<form id="form" method="post" action="Equivalence.php">
<p>
                   
          <select name="r" id="r">Recherche
          <?php
         $req = $connexion->query('SELECT r FROM Equivalence GROUP BY r');
				 		 															 
	  	$req->execute();
		
			while ($data = $req->fetch())
			echo "<option value=\"".$data['r']."\">".$data['r']."</option>";
		  ?>
          </select>
          
        <?php
		$r = (isset($_POST['r']) ? $_POST['r'] : ""); 

		$req=$connexion->query('SELECT r,t FROM Equivalence WHERE (r="'.$r.'")'); 
		$data = $req->fetch(); 
		$req->closeCursor(); 
		
		echo $data['t'];
	
		?>


Merci d'avance.
Modifié par Tintin75 (13 May 2016 - 13:14)
Salut,

En fait quelle est ta question ?
Tu veux qu'au moment de la sélection, un texte dans ta page se mette à jour ?
En gros je veux que faire un selecteur avec équivalence dans une BDD.

La personne tape banane = fruit ou melon = légume.

Banane est dans r de ma bdd et t est dans fruit.

Le but est de faciliter la vie de l'utilisateur, il sélectionne un article et il a la liste des couleurs par exemple.

Basket = bleu, vert, rouge
Sandalle = gris, violet, jaune.

Les données sont dans la BDD via deux colonnes. On appel un article et on a le résultat via un sélecteur.
Modifié par Tintin75 (16 Apr 2016 - 14:19)
Ok, tu veux donc que quand tu sélectionnes une donnée dans <select>, les valeurs d'un autre <select> se mettent à jour, c'est ça ?

Dans ce cas il faut que tu utilises de l'AJAX : du Javascript qui appelle des données depuis ton serveur (en l'occurence via PHP et MySql).

Pour faire simple, tu peux utiliser jQuery, qui dans ce cas d'utilisation d'AJAX va vraiment te simplifier la vie. Commence à regarder comment fonctionne ce principe et je te fait un petit exemple.
Merci beaucoup. Je regarde, merci d'avance pour l'exemple Smiley smile

Mon selecteur :

Basket
Tennis
Sandalle

Dans bdd :

basket = rouge
tennis = rose
sandalle = bleu

Lorque l'on sélectionne tennis je veux avoir à l'écran tennis est rose.

Les données sont dans la bdd et non dans le selecteur en html.
Modifié par Tintin75 (16 Apr 2016 - 14:53)
Bonjour,
Si j'ai bien compris la question, le besoin est de pouvoir disposer d'un ensemble de données de type clé / valeur, pourvant être appelé ensuite via la clé.
En complément de ce qui a été dit précédemment, et si le nombre d'entrées n'est pas trop élevé, tu peux également envisager un stockage en JSon, sans forcément recourir à une base de données si celle-ci n'a pas déjà été mise en place pour d'autres besoins.
Dès lors, tu récupères les données dans un tableau associatif, l'accès se résumant ensuite à rechercher la clé saisie par l'utilisateur.
M'enfin, c'est juste une idée Smiley smile
Merci, dans mon idée c'était de créer une base de donnée car je risque d'avoir pas mal de champ.

Le code fonctionne mais sauf que j'ai à l'écran en retour soit la 1ère ligne de la bdd ou les 2 vue que c'est en test et que je n'ai que 2 ligne dans ma bdd.

J'ai sandalle = rose ou basket = bleu.

Si je sélectionne un type de chaussure je veux la couleur qui correspond à mon sélecteur. Il doit y avoir un moyen à mon avis. Il est vraie que je ne suis pas très doué !!! Smiley decu
Je viens de virer le sélecteur ça fonctionne nickel, il faut taper basket ou sandalle.

Reste à faire fonctionner avec le sélecteur Smiley decu
Il faut que je fasse donc un appel AJAX pour que ça fonctionne ?

Reste à trouver le bon script !!!

Un petit exemple serait sympa Smiley smile

  <select name="r" id="r">
           <?php
		  
	    $req = $connexion->query('SELECT r FROM Equivalence GROUP BY t');
				 		 															 
	  	$req->execute();
		
			while ($data = $req->fetch())
			echo "<option value=\"".$data['r']."\">".$data['r']."</option>";
			 ?>
  </select>


Reste à afficher la valeur t dans la page ... Là je sèche, il faut un coup d'ajax, mais là je plane ... Smiley bawling J'ai bien lue les deux liens ci-dessus, mais vue mon niveau c'est une peu costaux pour moi. Avec une exemple, ça me parle plus.
Modifié par Tintin75 (16 Apr 2016 - 17:48)
MatthieuR a écrit :
Ok, tu veux donc que quand tu sélectionnes une donnée dans &lt;select&gt;, les valeurs d'un autre &lt;select&gt; se mettent à jour, c'est ça ?

Dans ce cas il faut que tu utilises de l'AJAX : du Javascript qui appelle des données depuis ton serveur (en l'occurence via PHP et MySql).

Pour faire simple, tu peux utiliser jQuery, qui dans ce cas d'utilisation d'AJAX va vraiment te simplifier la vie. Commence à regarder comment fonctionne ce principe et je te fait un petit exemple.


Honnêtement, je ne m'en sort pas du tout. J'ai pigé le truc, il faut utiliser ajax pour afficher de manière dynamique le résultat. On sélectionne tic et ça affiche tac, sur la page. Il faut donc un coup d'ajax. Le truc c'est que je pige pas comment ça fonctionne, pas moyen de trouver une exemple qui correspond à mon problème qui est ultra basique. Je veux faire une équivalence via une bdd. Vis = tournevis, clou = marteaux. ...

Les valeurs sont dans ma bdd. Le sélecteur fonctionne bien avec ma bdd mais je bloque pour afficher le résultat.

Je sélectionne tic et j'ai pas tac qui s'affiche Smiley bawling

Merci de votre patience ... Smiley ohwell
Bon, j'ai été pris un peu cet après-midi on est revenu de la plage... donc me revoici avec le script d'exemple que j'ai écrit pour te montrer comment ça peut fonctionner.
Tu peux voir la démo là : http://alsacreations.matthieurebillard.fr/024/
Tu dois avoir 2 fichiers : index.php sur lequel tu as ton formulaire et ton premier <select> et data.php qui est appelé en AJAX qui renvoie ici du HTML contenant ton nouveau <select> avec les donnée complémentaires.
Je ne sais pas exactement ce que tu veux faire, mais c'est une manière de faire.
data.php pourrait sinon renvoyer du JSON contenant des données brutes et traiter l'affichage dans index.php en JS.
index.php :
<?php
require_once 'connexion.php';
$req = $connexion->query('SELECT family FROM items GROUP BY family');
$req->execute();
$families = $req->fetchAll();
?>
<!DOCTYPE html>
<html>
<head>
  <title>Test de select AJAX</title>
  <meta charset="utf8">
  <script type="text/javascript" src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
  <script type="text/javascript">
    $(function(){
      var form = $('#form'),
          family_select = $('#family'),
          url = form.attr('action'),
          items_container = $('#items');

      $('body').on('change', '#family', function(ev){
        $.post(
          url,
          form.serializeArray(),
          function(data){
            items_container.html(data);
          }
        );
      });
    });
  </script>
</head>
<body>


<form id="form" method="post" action="data.php">  
  <div id="families">
    <label for="family">Famille : </label>
    <select name="family" id="family">
      <option value="">--</option>
      <?php foreach( $families as $family) : ?>
      <option value="<?php echo $family['family']; ?>"><?php echo $family['family']; ?></option>
      <?php endforeach; ?>
    </select>
  </div>
  <div id="items"></div>
</form>
</body>
</html>

data.php
<?php
require_once 'connexion.php';

if( !isset($_POST['family']) || empty($_POST['family'])){
  echo '';
  return;
}

$family = htmlspecialchars($_POST['family']);

$sql = 'SELECT item FROM items WHERE family LIKE :family ORDER BY item';

$req = $connexion->prepare($sql);
$req->execute(array(':family' => $family));
$data = $req->fetchAll(PDO::FETCH_ASSOC);

$output = '<label for="item">Elément : </label>';
$output .= '<select name="item">';
$output .= '<option value="">--</option>';
foreach ($data as $item) {
  $output .= '<option value="' . $item['item'] . '">' . $item['item'] . '</option>';
}
$output .= '</select>';

echo $output;
return;
?>

Je te laisse revenir pour demander plus d'infos et d'éclaircissements, je n'ai pas commenté le code...

EDIT : j'ai oublié le dump de la db :
--
-- Structure de la table `items`
--

CREATE TABLE IF NOT EXISTS `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `family` varchar(255) CHARACTER SET latin1 NOT NULL,
  `item` varchar(255) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--
-- Contenu de la table `items`
--

INSERT INTO `items` (`id`, `family`, `item`) VALUES
(1, 'Légume', 'Courgette'),
(2, 'Fruit', 'Fraise'),
(3, 'Fruit', 'Orange'),
(4, 'Fruit', 'Banane'),
(5, 'Légume', 'Navet'),
(6, 'Légume', 'Betterave');

Modifié par MatthieuR (16 Apr 2016 - 21:57)
Merci, beaucoup je regarde.

Bon dimanche.

Ca marche nickel, j'ai arrangé ça à ma sauce !!!!

Sans toi, j'aurai pas réussit. Merci encore à toi Smiley smile

Je lève mon verre à MatthieuR Smiley murf
Modifié par Tintin75 (17 Apr 2016 - 10:03)
Est il possible de récupérer la valeur du sélecteur "Fraise" sous forme de variable ? ( dans l'exemple )

Genre $Fraise ?

Ca marche parfaitement, mais je pense que je peux faire plus que mon idée d'origine ...

Le sélecteur affiche Fraise ou Banane, Orange, et le but est de récupérer la valeur du sélecteur pour a la traiter.

Merci d'avance.
Modifié par Tintin75 (17 Apr 2016 - 13:43)
La valeur est disponible à la soumission du formulaire, c'est un <select> classique donc tu peux récupérer la valeur via $_POST['item']...
Je ne comprends pas trop ton souci pour traiter cette valeur ?
<?php
require_once('Gestion/CBDD/connection.inc.php');

if( !isset($_POST['r']) || empty($_POST['r']))
{
  echo '';
  return;
}

$r = htmlspecialchars($_POST['r']);
$t = htmlspecialchars($_POST['t']);

$sql = 'SELECT t FROM Equivalence WHERE r LIKE :r ORDER BY t';

$req = $connexion->prepare($sql);
$req->execute(array(':r' => $r));
$data = $req->fetchAll(PDO::FETCH_ASSOC);

$output = '<label for="t"><b><u>Voici le types</u> :</b> </label>'. "<br /><br />";
$output .= '<select name="t">';
$output .= '<option value="">-- Liste --</option>';

foreach ($data as $t) 
{
  $output .= '<option value="' . $t['t'] . '">' . $t['t'] . '</option>';
}
$output .= '</select>';

echo $output;

echo $t;

return;

?>


Je souhaite afficher la valeur qui est dans le sélecteur ( t ). Oh je suis fatigué ce week-end. Smiley bawling

Et un peu concon sur les bords !!! Smiley lol
Modifié par Tintin75 (17 Apr 2016 - 15:22)
Attention, la méthode utilisée ici, doit-être adaptée pour poster ton formulaire.
Soit tu modifies la valeur de "action" pour mettre le fichier de traitement du formulaire et transmettre l'url du fichier data.php ailleurs (genre un attribut data-get-select-url="data.php") ou alors tu modifies ton data.php pour qu'il traite de manières différentes les requêtes qui lui sont envoyées en fonction d'un paramètre envoyé en AJAX.
C'est pour faire de l'affichage pas pour envoyer un formulaire.

Merci encore pour ton aide.

Le programme fonctionne bien j'ai bien à l'écran Fraise.

Je veux récupérer Fraise du sélecteur pour le passer en variable php sous forme $Fraise.

Exemple :

Vos fruits :

Cerise ( dans le sélecteur )
Fraise <- Je veux récupérer la valeur de Fraise.
Banane ( dans le sélecteur )

Ton code fonctionne très bien. Sauf que si je pouvais récupérer Fraise ça serait mieux. Smiley lol $Fraise

Avec ma Fraise je peux faire ce que j'en veux pour la traiter par la suite.

Je suis dans data.php

Si je tape $t;

J'ai un Array Smiley decu
Modifié par Tintin75 (17 Apr 2016 - 15:39)
Avant toute chose, ça serait quand même plus pratique de renommer tes variables, tes "name" et tes colonnes pour avoir des noms plus explicites car "t" ou "r" on peut vitte ne plus savoir de quoi tu parles, alors que si on avait "couleur" ou "modele" ça serait plus clair Smiley biggrin

Sinon, tu l'as ta valeur de $t dans $_POST['t'], il faut cependant que tu envoies tes données du formulaire par AJAX au "change" de ton nouveau <select> (dans mon exemple c'est #item).

Ensuite tu traites ton form dans data.php et si tu as qqchose dans $_POST['t'] tu renvoies un truc différent.

Ou alors plus simple, au "change" de #item, tu récupères simplement la valeur ($('#item').val()) et tu l'affiches où tu veux.

Comme je ne comprends toujours pas exactement ce que tu veux faire exactement, ma réponse ne sera forcément pas des plus précise... mais le principe est là...

EDIT : je n'avais pas vu que tu as complété ton précédent post, je vais regarder ce complément
Modifié par MatthieuR (17 Apr 2016 - 15:43)
Pages :