8768 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

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)
Merci, pour ta patience. Item = t dans mon code

J'ai pigé !!!

($('#item').val()) Je le met ou dans ?

<script type="text/javascript">
    $(function(){
      var form = $('#form'),
          family_select = $('#r'),
          url = form.attr('action'),
          items_container = $('#t');

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


J'ai un modèle pour te montrer ce que je veux faire, ça sera plus simple pour toi.
http://api.jquery.com/val/ ( Single: Single Multiple: Multiple3 ) C'est exactement ce que je veux obtenir. On voit bien que la valeur sélectionné est bien affiché à coté !!! L'exemple est un peu compliqué pour moi pour modifier. Le principe de fonctionnement est là. Smiley murf
Modifié par Tintin75 (17 Apr 2016 - 16:40)
Tu peux le mettre après le premier event.
J'affiche le résultat dans une <div id="result">.
N'oublie pas d'ajouter un id="item" dans le <select> du fichier data.php.

EDIT : j'ai mis à jour le script en ligne : http://alsacreations.matthieurebillard.fr/024/
<?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){
            $('#result').text('');
            items_container.html(data);
          }
        );
      });

      $('body').on('change', '#item', function(){
        var result,
            item = $(this).val(),
            family = $('#family').val();
        if(item != ''){
          result = 'L\'item ' + item.toLowerCase() + ' est un ' + family.toLowerCase() + '.';
          $('#result').text(result);
        }
      });
    });
  </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>
  <div id="result"></div>
</form>
</body>
</html>

Modifié par MatthieuR (17 Apr 2016 - 16:45)
Fichier data.php :
<?php
require_once('Gestion/CBDD/connection.inc.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 n'ai pas à l'écran item. J'ai mis les mêmes codes que toi pour faciliter le programme.
Je bloque : N'oublie pas d'ajouter un id="item" dans le <select> du fichier data.php.
Modifié par Tintin75 (17 Apr 2016 - 18:06)
J'arrive à afficher le message Smiley cligne avec la valeur du sélecteur Smiley biggrin
Modifié par Tintin75 (17 Apr 2016 - 20:16)
Juste un truc : item je fais comment pour le passer en variable php ?

Ca fonctionne mais je n'arrive pas à récupérer la valeur affiché dans le texte.

Merci pour tout ce que tu as fait pour moi.

Je suis le boulet de l'année Smiley bawling . Pas moyen de récupérer item Smiley confused

J'ai beau chercher, mais là je tourne en rond !!! Si j'arrive à récupérer item sous sous forme de variable php, je suis sauvé Smiley murf
Modifié par Tintin75 (17 Apr 2016 - 20:17)
Tu veux récupérer la valeur d'item pour en faire quoi ? Je ne comprends pas ton problème...
Si tu veux utiliser la valeur d'item en PHP, il faut que tu soumettes ton formulaire, elle sera disponible dans $_POST['item'].
Tu peux faire un traitement classique en changeant le "action" de ton <form> et avoir ta valeur dispo sur la nouvelle page ou bien en AJAX et mettre à jour une session par exemple...

QUE VEUX-TU FAIRE AVEC CETTE VALEUR EN PHP ?
Tintin75 a écrit :

Je bloque : N'oublie pas d'ajouter un id="item" dans le <select> du fichier data.php.

Tu cherches ta balise <select> dans ton fichier data.php, c'est facile tu n'en as qu'une Smiley langue . Ensuite tu ajoutes un attribut id="item" à cette balise :
<select id="item">...</select>

Ça permet ensuite de le sélectionner simplement en JS.
Ah ok, j'ai compris. On peut pas le passer sous forme de variable Smiley decu Ca aurait été top !!!

Récupérer la valeur du sélecteur. Je l'ai fait mais pas pas avec ce type code qui est complexe pour moi avec Jquery.

C'est pas grave. Merci pour ton aide et tes conseils.
Modifié par Tintin75 (17 Apr 2016 - 20:25)
Bah si, on peut la passer sous forme de variable, c'est même basique, c'est une donnée d'un formulaire Smiley ohwell
Tu as bien un bouton "Ajouter au panier" ou un truc comme ça si tu dois ajouter un article dans un panier d'achat ? Que fait actuellement ce bouton ? C'est un bouton submit du form ?
Avec un panier d'achat tu dois sans doute gérer une session, tu dois avoir des codes produits...

Honnêtement, tu me fais un peu peur à faire un panier d'achat (et donc je suppose un cycle complet d'achat) avec de telles lacunes techniques.
C'est pas vraiment un panier d'achat, j'ai pas le niveau pour le faire mais une liste de subjection, ou article à noter. Je vais revoir ma copie. Hier j'étais fatigué, et je me suis énervé bien que le code fonctionne parfaitement grâce à ton aide. Reste à récupérer la valeur affiché sous forme de variable. J'ai pigé le truc, c'est effectivement basique. Je te remercie pour ton aide.

J'arrive à récupérer $family sans problème ça fonctionne nickel mais pas avec $item. Smiley decu
Modifié par Tintin75 (18 Apr 2016 - 09:27)
Je ne comprends toujours pas pourquoi tu veux récupérer la variable sous la forme $item...
Elle n'est pas disponible dans ta page index.php, sauf en JS ou bien si tu soumets le formulaire.
D'ailleurs comment récupères-tu $family ? Cette variable n'est pas non plus disponible... (à moins que tu fasses un extract($_POST) dans data.php).

As-tu un bouton d'action dans ta page ? Comment soumets-tu le formulaire ?

J'ai un peu l'impression de me répéter là...
Dans data.php

echo $family;

Ca s'affiche bien.

Je change de sélecteur et le titre du sélecteur change bien. Je veux que le résulta du sélecteur change aussi. Ca se fait en dynamique.

Aye j'ai pas de bouton sur ma page. Smiley ohwell

A mon avis c'est pas possible, c'est pas la peine que je t'ennui avec ce code. J'ai pas le niveau c'est tout. Merci encore pour ta grande patience avec moi.
Modifié par Tintin75 (18 Apr 2016 - 10:03)
Bon allez, dernière tentative...
QUE VEUX-TU FAIRE AVEC CETTE VARIABLE $ITEM ? (qui n'existe pas en tant que telle pour le moment...). Soit je pige vraiment pas, soit tu n'arrives pas à expliquer clairement ce que tu veux faire.

Plusieurs possibilités, je t'en liste quelques unes mais si ça se trouve tu veux encore en faire autre chose :
- tu veux l'afficher ?
- tu veux l'enregistrer en base de données ?
- tu veux l'enregistrer en session ?
- tu veux qu'elle te fasse le café ?

Si tu ne peux pas répondre à cette question, en effet ça ne sera pas possible de t'aiguiller...
Tu peux faire un dessin si tu veux, ça peut peut-être aider...
Ou bien, tu utilises la technique du canard en plastique (ça n'est pas une blague).
Je veux afficher $item sous forme "Salut les copains voici ma trouvaille :" . <?php $item ?>

Tu es très patient avec moi.

Je veux en gros l'afficher ou l'enregistrer en session.

Te casse pas la tête pour moi.

Je résume :

La personne choisit une paire de chaussure -> On affiche les couleurs disponibles

Ca fonctionne très bien. Je veux récupérer la couleur des chaussures sous forme d'une variable.

La couleur s'affiche bien à l'écran. Mais je veux la récupérer sous forme d'une variable pour la passer sur une autre page. Pour pouvoir afficher $item sur la page Copain.php par exemple.
Modifié par Tintin75 (18 Apr 2016 - 10:35)
Bon, je vais me remettre au travail après, mais j'aimerais que tu arrives à faire ce que tu veux, d'autant que c'est pas compliqué.
Enfin tu me dis ce que tu veux en faire.
Comme je te le dis depuis un moment, si tu veux avoir ta variable (la couleur et le modèle de tes chaussures) sur une autre page, il faut soit enregistre tout en session ou bien poster ton formulaire.

Dans les 2 cas il te faut un bouton qui va déclencher l'action (enregistrement en session et/ou soumission du formulaire) ou alors, mais je te le déconseille, l'action est déclenchée à la sélection de ta couleur.

Ton message "Salut les copains..." est envoyé par email ou autre chose ?
Si c'est juste affiché sur la page copain.php, alors une simple soumission de formulaire suffit (en modifiant l'attribut "action" de ton form par "action='copain.php'") : sur cette page la valeur de ta couleur sera disponible dans $_POST['item'].
Du coup, il te faut un bouton "submit" et modifier ton JS pour mettre à jour l'URL du traitement AJAX (data.php) : tu peux l'écrire directement comme ça dans ton JS : url = 'data.php' au lieu de récupérer la valeur de l'attribut "action".
Merci pour ton explication.

Pour l'action est déclenchée à la sélection de ta couleur, on évite donc le bouton ?

Ca peut être sympa Smiley smile
Modifié par Tintin75 (18 Apr 2016 - 12:11)
Pages :