[RESOLU] Tableaux communiquants et double-clic sur un tableau

jodorowsky
Invité n'ayant pas de compte PHPfrance

16 févr. 2015, 11:11

Bonjour à tous,

Je suis bloqué sur le développement d'une interface.

Pour simplifier, j'ai une liste de livres affichée par un tableau côté gauche de mon écran et sur laquelle on doit pouvoir double-cliquer pour ajouter les livres souhaités à un second tableau côté droit, à l'image d'un panier, le tout sur un même écran et qui se met à jour dynamiquement au fur et à mesure de la sélection.

Je n'arrive pas à exploiter le double-clic de façon à ce que les numéros de livres soient mémorisés et affichés dans mon second tableau.

Comment devrais-je m'y prendre ?

Merci par avance

Mammouth du PHP | 737 Messages

16 févr. 2015, 12:35

Bonjour,

Rien que pour votre pseudo je vais tenter de vous aider ;)

Simple question : voulez-vous recharger la page à chaque double clic ou non ?

Mega
;)
Dyslexics are teople poo

jodorowsky
Invité n'ayant pas de compte PHPfrance

16 févr. 2015, 12:45

Bonjour,

Je renvoie le compliment concernant le pseudo ;)
Simple question : voulez-vous recharger la page à chaque double clic ou non ?
Lorsque je double-clique non, autant si possible éviter mais ai-je le choix si mon second tableau doit être MAJ simultanément ?

Mammouth du PHP | 737 Messages

16 févr. 2015, 17:50

Re :)

Utilisez-vous une base de données ? Comment voulez/comptez -vous stocker les infos qui découlent des actions ? Session ? Base (one more time) ? etc...

Si vous voulez faire sans recharger la page il va falloir utiliser jquery/ajax sinon PHP (mais là on recharge la page)..?

On va le faire progressivement ;)

Mega
Dyslexics are teople poo

Mammouth du PHP | 688 Messages

16 févr. 2015, 18:27

http://www.w3schools.com/jsref/event_ondblclick.asp pour la partie spécifique au double click.

jodorowsky
Invité n'ayant pas de compte PHPfrance

16 févr. 2015, 19:20

Utilisez-vous une base de données ? Comment voulez/comptez -vous stocker les infos qui découlent des actions ? Session ? Base (one more time) ? etc...

Si vous voulez faire sans recharger la page il va falloir utiliser jquery/ajax sinon PHP (mais là on recharge la page)..?
Oui, j'utilise une base de données, une variable de session de type tableau devrait suffire pour stocker les identifiants à mémoriser, avec idéalement un affichage plus complet dans mon tableau de droite en réinterrogeant la base à partir de ces identifiants. Il y a sans doute plus simple ?

Le fait de recharger la page ne me pose pas de problème tant que cela reste transparent pour l'utilisateur et pas trop lourd.
J'avais déjà consulté ce lien mais sans résultat, je vais essayer de creuser davantage, merci !

Mammouth du PHP | 737 Messages

17 févr. 2015, 10:25

Bonjour,

Pour le stockage, c'est $_SESSION ou base de données.

Au niveau du comportement, si tu te fous de recharger ta page, tu postes tes valeurs via un formulaire et tu ré-interroges tes variables de session ou ta base. (je déconseille de passer par des variables GET)

Si c'est impératif pour toi de ne pas recharger la page => AJAX/JQUERY.

Après voici un exemple simple et efficace pour ton caddie ou panier virtuel

Si tu veux des solutions pré-faites : Magento, Prestashop, Woocommerce...

Mais commence par le tuto, il est vraiment bien fait (simple avis :))

Mega
;)
Dyslexics are teople poo

jodorowsky
Invité n'ayant pas de compte PHPfrance

17 févr. 2015, 12:07

Hello

Je ne cherche pas de solutions pré-faites, je veux vraiment réussir à faire fonctionner cette interface ;)

Lorsque je double-clique sur ma ligne de tableau à gauche, j'appelle ma fonction. Cette fonction doit pouvoir alimenter mon panier, qui est une variable de session (tableau) et qui va me servir à l'affichage de la partie droite de mon interface.

Mais comme il s'agit d'une variable de session PHP, comment la traiter dans cette fonction ?

Mammouth du PHP | 737 Messages

17 févr. 2015, 13:25

Re,

Ok bah quand tu ajoutes, modifies ou supprimes, tu joues sur les valeurs de ta session.

Pour l'affichage tu as juste à parcourir tes éléments de session.

Regarde le tuto :
<?php 
/* Démarrage ou prolongation de la session */ 
session_start(); 
/* Article exemple */ 
$select = array(); 
$select['id'] = "phlevis501"; 
$select['qte'] = 2; 
$select['taille'] = "56"; 
$select['prix'] = 84.95; 

/* On vérifie l'existence du panier, sinon, on le crée */ 
if(!isset($_SESSION['panier'])) 
{ 
    /* Initialisation du panier */ 
    $_SESSION['panier'] = array(); 
    /* Subdivision du panier */ 
    $_SESSION['panier']['qte'] = array(); 
    $_SESSION['panier']['taille'] = array(); 
    $_SESSION['panier']['prix'] = array(); 
} 

/* Ici, on sait que le panier existe, donc on ajoute l'article dedans. */ 
array_push($_SESSION['panier']['id_article'],$select['id']); 
array_push($_SESSION['panier']['qte'],$select['qte']); 
array_push($_SESSION['panier']['taille'],$select['taille']); 
array_push($_SESSION['panier']['prix'],$select['prix']); 

/* Affichons maintenant le contenu du panier : */ 
?> 
<pre> 
<?php 
var_dump($_SESSION['panier']); 
?> 
</pre>
Et dans tes array_push tu mets tes valeurs.

$select['id'] -> ton id
$select['qte'] -> ta quantité
etc...

et derrière tu parcours ton array avec for, un while ou un foreach.
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    echo $value;//ancienne
    $value = $value * 2;
    echo $value;//nouvelle
}
// $arr vaut maintenant array(2, 4, 6, 8)
unset($value); // Détruit la référence sur le dernier élément
?>
Ca doit t'afficher 12243648 si je dis pas de bêtises.

Fais tes premières manip en dur et ensuite tu l'adaptes à ton contexte.

Mega
;)
Dyslexics are teople poo

jodorowsky
Invité n'ayant pas de compte PHPfrance

17 févr. 2015, 15:34

Re,

Ce qu'il me manque notamment, c'est de comprendre comment sur l''événement ondblclick de mon <tr> je peux appeler une fonction qui contient les instructions PHP de type array_push comme dans ton exemple. C'est un événement qui ne peut appeler que du Javascript, non ? C'est là où je vais devoir utiliser AJAX ?

Mammouth du PHP | 737 Messages

17 févr. 2015, 15:58

Si tu n'utilises pas Ajax, sur ton événement ondbclick, tu lui indiques de poster ton formulaire.

Ces valeurs sont ensuite envoyées :
- Soit à une autre page chargée de la mise à jour.
- Soit dans la même page (tu détecter si une valeur a été envoyée ou non) puis tu traites ta (nouvelle) session.

Mega
;)
Dyslexics are teople poo

jodorowsky
Invité n'ayant pas de compte PHPfrance

19 févr. 2015, 09:11

Hello

Je poste mon formulaire, mais je ne sais pas récupérer le numéro de la ligne sur laquelle j'ai double-cliqué.

Mammouth du PHP | 737 Messages

19 févr. 2015, 10:54

Slt,

Pour récupérer une valeur postée. Il faut connaitre le "name" de l'input, du select, de la case a cocher ou autre, s'assurer que le formulaire est bien à minima en method POST.

Si ton champ s'appelle nom. Tu récupères l'info en faisant $_POST["nom"];

Mega
;)
Dyslexics are teople poo

jodorowsky
Invité n'ayant pas de compte PHPfrance

19 févr. 2015, 11:02

Oui,

je n'ai pas de souci avec le fait de poster des formulaires et de récupérer les valeurs, mais là je n'ai pas de bouton qui déclenche le post, je souhaite que cela se fasse sur le double-clic d'une ligne de mon tableau, tout en mémorisant l'identifiant de cette ligne pour utiliser sa valeur.

Mammouth du PHP | 737 Messages

19 févr. 2015, 13:21

Si on reste en mode formulaire il faut encadrer la valeur dans un form.

Et sur l'événement faire un document.forms["lenomduformulaire"].submit();

On peut même mettre ça dans une fonction ou exécuter ça autrement mais voilà l'idée est là.

Mega
;)
Dyslexics are teople poo