Bonjour à tous,

Je suis de retour parmi vous pour poser une question concernant mon nouveau projet de caisse enregistreuse liée à ma base de données.
Prévu pour écran tactile.

Le contexte :
1. J'ai une liste de produits (d'une catégorie : "Soft - Eaux" ou "Bières" ou ... 6 au total pour l'instant)
2. Pour chaque produit j'ai quelques informations, dont son nom, la quantité, le prix de vente, etc ...
3. Il y un champs <input> avec la quantité pour la commande
4. Cette quantité peut déjà être introduite via un clavier virtuel en JS un léger rien modifié (je crois que le code original est sur ce forum, mais comme il a été partagé sur plusieurs forum, je ne suis pas à 100% certain)

Mon souhait :
Pouvoir ajouter +1 à la quantité du produit en cliquant sur son nom, en plus du clavier JS.

Voici le JS du clavier virtuel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
	var activeinput
 
	function populateTd(){
	var tdcollection=document.getElementsByTagName('table')[0].getElementsByTagName('td')
	for (i=0;i<tdcollection.length;i++){
			tdcollection[i].indice=i
			tdcollection[i].onmouseover=function(){this.className='over'}
			tdcollection[i].onmouseout=function(){this.className='up'}
			tdcollection[i].className='up'
			tdcollection[i].onmousedown=function(){this.className='down'}
			tdcollection[i].onmouseup=function(){this.className='up'}
 
			tdcollection[i].onclick=function(){if (!!activeinput){ if(this.indice<11){activeinput.value+=this.innerHTML;}
																   if(this.indice==11){activeinput.value=activeinput.value.substr(0,activeinput.value.length-1)}
																   if(this.indice==12){activeinput.value=""}
																   }
												}
 
			}
		}
 
	function highlightActive(obj){
		var inputcollection=document.getElementsByTagName('input')
		for(i=0;i<inputcollection.length;i++){
 
			inputcollection[i].style.backgroundColor=(inputcollection[i]==obj)?"lime":"white"
		}
	}
Voici le code de ma liste, prévu pour 2 pages différentes avec des fonctionnalités différentes, seul le " $mode=='Caisse' " doit faire +1 :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
$article_existe=0;
$session_array_cat=$_SESSION[$cat_save];
 
if ($mode=='Caisse') { $where_actif="&& prod_actif='oui'"; $form_action="index.php?Panier"; }
	else { $where_actif=''; $form_action="index.php?Gestion_article"; }
 
$reponse_article_bar = mysqli_query($conn_cecs, "SELECT data1_nom, data2_nom, prod_achat_htva, prod_actif, prod_nbr_piece, prod_quantite, prod_prix_mbr, id_produit, type_nom, tva.data_tva_taux AS tauxTvaVente, tva2.data_tva_taux AS tauxTvaAchat 
	FROM 07_stock_produit prod
		INNER JOIN 07_stock_type type ON prod.id_type_prod=type.id_type 
		INNER JOIN 07_stock_data1 data1 ON prod.id_data1_prod=data1.id_data1 
		INNER JOIN 07_stock_data2 data2 ON prod.id_data2_prod=data2.id_data2
		INNER JOIN 01_data_tva tva ON prod.id_tva_prod=tva.data_tva_id 
		INNER JOIN 01_data_tva tva2 ON prod.id_tva_achat_prod=tva2.data_tva_id 
	WHERE prod_bar_cat='$cat_article_db' $where_actif
	ORDER BY type_nom") or die(mysqli_error($conn_cecs)); 
while ($in=mysqli_fetch_array($reponse_article_bar)) {
	$id_article=$in['id_produit'];
	$nom_article=$in['type_nom'];
	$nom_article_data1=$in['data1_nom'];
	$nom_article_data2=$in['data2_nom'];
	$nbr_article_stock=$in['prod_quantite'];
	$nbr_article_stock_pieces=$in['prod_nbr_piece'];
	$prix_article_htva=$in['prod_prix_mbr'];
	$prix_article_tva=$in['tauxTvaVente'];
	$prix_achat_htva=$in['prod_achat_htva'];
	$prix_achat_tva=$in['tauxTvaAchat'];
	$actif_article=$in['prod_actif'];
 
	$nbr_article_existe ++;
	$nbr_article_stock_pieces_tot=$nbr_article_stock*$nbr_article_stock_pieces;
	$nom_article_complet=str_replace('_',' ',$nom_article.' - '.$nom_article_data1.' - '.$nom_article_data2);
	$nom_article=str_replace('_',' ',$nom_article);
	$prix_article=$prix_article_htva*(1+($prix_article_tva/100));
	$prix_article=sprintf("%.2f",$prix_article); 
 
	print "<div style=\"float: left; width: 150px;\">";
		print "<form name=\"$id_article\" id=\"$id_article\" method=\"post\" action=\"$form_action\" >";
			$z++;
 
			// --------------- Mise en forme des nom des POSTS
			$post_id_article=$nbr_article_existe.'-id_article';
			$post_nom_article=$nbr_article_existe.'-nom_article';
			$post_nom_article_complet=$nbr_article_existe.'-nom_article_complet';
			$post_nbr_article=$nbr_article_existe.'-nbr_article';
			$post_nbr_piece=$nbr_article_existe.'-nbr_piece';
			$post_nbr_pieces_stock=$nbr_article_existe.'-nbr_pieces_stock';
			$post_prix_article_htva=$nbr_article_existe.'-prix_article_htva';
			$post_prix_article_tva=$nbr_article_existe.'-prix_article_tva';
			$post_prix_achat_htva=$nbr_article_existe.'-prix_achat_htva';
			$post_prix_achat_tva=$nbr_article_existe.'-prix_achat_tva';
			$post_prix_article_tvac=$nbr_article_existe.'-prix_article_tvac';
			$post_actif_article=$nbr_article_existe.'-actif_article';
			//$post_type_produit=$nbr_article_existe.'-type_produit';
 
			// --------------- Envoi des données utiles
			print "<input type=\"hidden\" name=\"$post_id_article\" value=\"$id_article\" />";
			print "<input type=\"hidden\" name=\"$post_nom_article\" value=\"$nom_article\" />";
			print "<input type=\"hidden\" name=\"$post_nom_article_complet\" value=\"$nom_article_complet\" />";
			print "<input type=\"hidden\" name=\"$post_nbr_article\" value=\"$nbr_article_stock\" />";
			print "<input type=\"hidden\" name=\"$post_nbr_piece\" value=\"$nbr_article_stock_pieces\" />";
			print "<input type=\"hidden\" name=\"$post_nbr_pieces_stock\" value=\"$nbr_article_stock_pieces_tot\" />";
			print "<input type=\"hidden\" name=\"$post_prix_article_htva\" value=\"$prix_article_htva\" />";
			print "<input type=\"hidden\" name=\"$post_prix_article_tva\" value=\"$prix_article_tva\" />";
			print "<input type=\"hidden\" name=\"$post_prix_article_tvac\" value=\"$prix_article\" />";
			print "<input type=\"hidden\" name=\"$post_prix_achat_htva\" value=\"$prix_achat_htva\" />";
			print "<input type=\"hidden\" name=\"$post_prix_achat_tva\" value=\"$prix_achat_tva\" />";
			print "<input type=\"hidden\" name=\"$post_actif_article\" value=\"$actif_article\" />";
			//print "<input type=\"hidden\" name=\"$post_type_produit\" value=\"$type_produit\" />";
			print "<input type=\"hidden\" name=\"cat_article\" value=\"$cat_article\" />";
			print "<input type=\"hidden\" name=\"envoi_produit\" value=\"oui\" />";
 
			// --------------- Recherche nbr produit déjà envoyé
			if (isset($session_array_cat)) {
				foreach ( $session_array_cat AS $commande1) {
					$id_article_foreach=$commande1[id_article];
					$nbr_article_foreach=$commande1[nbr_article];
 
					if ($id_article==$id_article_foreach) { $nbr_article=$nbr_article_foreach; break; }
						else { $id_article_foreach=''; $nbr_article=''; }
				}
			}
 
			// --------------- Mise en forme des textes
			if ($nbr_article_stock<=0) { $class_nom_article='module_nom_article_rouge'; }
			else { $class_nom_article='module_nom_article'; }
 
			if ($prix_article<=0) { $class_module_prix='module_prix_rouge'; }
			else { $class_module_prix='module_prix'; }
 
			if ($actif_article=='oui') { $class_module_nombre='module_nbr_gestion_stock'; }
			else { $class_module_nombre='module_nbr_gestion_stock_rouge'; }
 
			// --------------- Affichage
			if ($mode=='Gestion_stock' && $id_article==$id_article_modif) { print "<div class=\"module_article\" align=\"center\">"; }
			else { print "<div class=\"module_article\" style=\"background-color: $couleur_bar_type_module; \" align=\"center\">"; }
				print "<div>";
					if ($mode=='Caisse') { print "<input class=\"module_nbr_article\" name=\"$post_nbr_article\" value=\"$nbr_article\" size=\"3\" onfocus=\"activeinput=this\" />"; }
						else { print "<div class=\"$class_module_nombre\" align=\"center\"><b>$nbr_article_stock_pieces_tot</b></div>"; }
					print "<div class=\"$class_module_prix\" align=\"center\"><b>$prix_article €</b></div>";
					print "<div class=\"div_clear_3\">&nbsp;</div>";
					if ($mode=='Caisse') { print "<div class=\"$class_nom_article\" align=\"center\"> <b>$nom_article</b></div>"; } // ----- endroit à cliquer pour faire +1 à la quantité ci-dessus
						else { 
							print "<input type=\"hidden\" name=\"envoi_gestion_stock\" value=\"$nbr_article_existe\" />";
							print "<div class=\"$class_nom_article\" align=\"center\"><b>$nom_article</b><input type=\"submit\" class=\"submit_gestion_article\" value=\"Modifier\" /></div>";
							print "</form>";
						}
				print "</div>";
 
			print "</div>";
 
	print "</div>";
	unset ($id_article_foreach, $nbr_article, $nbr_article_foreach);
	print "<div class=\"col_article_space\">&nbsp;</div>";
	if ($z==5) { print "<div class=\"div_clear_10\">&nbsp;</div>"; $z=0; }
}
if ($mode=='Caisse') {		
		print "<input type=\"hidden\" name=\"article_existe\" value=\"$nbr_article_existe\" />"; // ----- envoyer le nombre d'articles
 
		//if ($nbr_article_existe>=1 && $cours_jour_id!='non' && $mode=='Caisse') { print "<input type=\"submit\" class=\"submit_commande\" value=\"&nbsp;\" />"; } // ------ A activer lors de la mise en production
		if ($nbr_article_existe>=1) { print "<input type=\"submit\" class=\"submit_commande\" value=\"&nbsp;\" />"; }
 
	print "</form>";
}
if ($nbr_article_existe==0) { print "<div class=\"module_pas_article\" style=\"background-color: $couleur_bar_type_module; \" align=\"center\"><br />&nbsp;<br />Il n'y a aucun article pour cette catégorie</div>"; }
?>

Si c'est possible, je suis ouvert à toutes les propositions.
J'ai trouvé un code qui fait +1 ou -1, mais en cliquant sur n'importe quel article, c'est toujours le 1er auquel c'est appliqué !

D'avance merci,
DDAWeb

Edit : Le clavier virtuel : http://www.developpez.net/forums/d27...rique-virtuel/