Rechercher : dans
Par :

Javascript/php récup des valeurs de <td>

Dernière réponse le 6 mai 2008 à 11:03:56 poup, le 3 mai 2008 à 17:22:46 
 Signaler ce message aux modérateurs

Bonjour,

J'aimerais insérer une fonction js qui calcul les sous-totaux dans un tableau (html) de bon de commande. Le résultat est la quantité choisie dans un menu déroulant multiplié par le prix en fonction de la quantité (3 tranches de prix pour chaque article).

Mon problème est comment récupérer les prix qui ne sont pas dans des champs. Comme c'est différent pour chaque article et qu'il peut y avoir des modifications dans l'avenir, j'aimerais pouvoir récupérer automatiquement les valeurs pour éviter de les saisir dans la fonction ou dans les paramètres.

On peut donner des id aux <td> contenant les prix et récupérer la valeur avec getelementById (j'avoue que je ne m'y connais pas bien), ou utiliser des champs cachés et recopier manuellement les prix ? Faut-il définir un tableau en javascript ? Ou est-ce qu'il vaut mieux construire une base de données ? C'est sûrement la meilleure solution à long term, mais là, j'aimerais trouver une solution la plus rapide.

Voici le tableau en question (en réalité, il y a évidemment 50 lignes !)

<html>
<form id="orderform" name="orderform" method="post" action="mailto:xxx">

<table class="pricetable" cellspacing="1" >
<tr class="titrecolonne" >
<td class="ref" >Référence</td>
<td class="nom" >Dénomination</td>
<td class="parcent">Par 100 g </td>
<td class="par5cent">Par 500 g </td>
<td class="parkilo">Par kg</td>
<td class="quantity">Quantité</td>
<td class="prix" >Sous-total</td>
</tr>
<tr>
<td class="ref">xxx</td>
<td class="nom">YYY</td>
<td class="parcent">20€</td>
<td class="par5cent">80€</td>
<td class="quantity">150€</td>
<td class="prix">
<select name="qtty_ref1" size="1" onchange="calculprix(this.value, this.name);calcultotal();">
<option value="-----">-----</option>
<option value="1">100g</option>
<option value="2">200g</option>
<option value="3">300g</option>
<option value="4">400g</option>
<option value="5">500g</option>
<option value="10">1kg</option>
<option value="15">1,5kg</option>
<option value="20">2kg</option>
</select>
</td>
<td width="73"><input name="montant_ref1" size="14" /></td>
</tr>
</table>
</form>
</html>

Deuxièmement, j'aimerais pouvoir remplacer dans la fonction qui calcule les montants:

document.orderform.montant_ref1.value=String(soustot);

par document.orderform.nom_champ_soustot.value=String(soustot);

"nom_champ_soustot" étant une variable que j'ai créé dans la même fonction (concaténation du "montant"+nom de la référence extraite du nom du champs qtty) , mais ça ne marche pas. Comment faire ???

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « javascript/php récup des valeurs de  » dans :
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
Javascript - les boîtes de dialogue VoirQu'est-ce qu'une boîte de dialogue? Une boîte de dialogue est une fenêtre qui s'affiche au premier plan suite à un événement, et qui permet Soit d'avertir l'utilisateur Soit le confronter à un choix Soit lui demander de compléter un champ pour...
Javascript - Implantation du code VoirA quel emplacement insérer le Javascript dans votre page HTML Il existe plusieurs façons d'inclure du JavaScript dans une page HTML : Grâce à la balise En mettant le code dans un fichier Grâce aux événements Dans la balise...

1

ak45, le 3 mai 2008 à 18:43:21

Bonjour,
Il me semble que tu ne différencies pas l'affichage des variables. Il n'y a pas besoin de champs pour faire les calculs, juste une variable pour chaque élément et une pour le résultat de l'opération. Pour l'affichage il faut mettre la variable dans le html plutot que de récupérer la valeur dans la page. Donc commence par définir tes variables et affiche leur valeur en html après.

[quote]
j'aimerais pouvoir récupérer automatiquement les valeurs pour éviter de les saisir dans la fonction ou dans les paramètres.
/quote
Les récupérer d'où? une base de données ou un fichier texte? Si c'est dans une base autant faire les opérations avec php. Si les valeurs sont rentrés par un formulaire il faut utiliser des balises <input> du <form> et non <td> qui est un élément de mise en page.

Attention: String(soustot); indique une chaîne de caractères, donc impossible de faire des opérations avec(multiplication, addition,...). Pour pouvoir faire des opérations il faut utiliser une variable de type Number et non String.

Répondre à ak45

2

poup, le 4 mai 2008 à 10:22:21

Bah, le problème justement, c'est qu'il n'y a pas de base de données, à moins que je la construise moi-même, et on m'a donné des tableaux html avec les différents prix dans <td>. A moi de faire des formules de calcul avec ça. Je sais utiliser les valeurs si ct dans les champs <input>, mais ce n'est pas le cas. Comme tu dis, il faut sans doute d'abord définir les variables et les faire afficher dans le tableau après, mais je ne vois pas trop où et comment définir. Donc j'ai pensé qu'il y avait des moyens de récupérer les valeurs dans les balises <td> en mettant des id ou des noms. ?

concernant String, je ne sais pas d'où j'ai récupéré ça, j'avais cru que les valeurs dans les champs de formulaire devaient être en string et que pour faire des calculs, on utilise eval... Ce n'est pas la peine alors ?

Répondre à poup

3

PhP, le 5 mai 2008 à 17:10:53

Bjr

La base de données ne t'aidera pas ici : en revanche elle peut te permettre de stocker les valeurs pour précharger dynamiquement ta table HTML (pratique quand les prix et les références changent car tu n'as à maintenir que la base de données et pas les pages web) et éventuellement de sauvegarder tes bons de commande

Pour ta table HTML : tu peux effectivement utiliser des ID (différents!) pour chaque ligne de la table HTML (voir chaque cellule) et utiliser getElementById() mais avec 50 lignes ça devient vite lourd et source d'erreur et je ne parle pas des mises à jour ...

Tu peux aussi stocker les données dans des tableaux Javascript en début de page : c'est plus pratique niveau prog Javascript. Mais si tu conserves également ta table HTML ça revient à maintenir manuellement la même info à 2 endroits différents c'est pas mieux, c'est même pire ...

L'idéal : stocker les données dans un tableau Javascript et généré dynamiquement ensuite la table HTML en JavaScript à l'aide de DOM (on peut aussi utiliser PHP pour générer la table HTML et le tableau Javascript : dans ce cas les données doivent provenir d'une base de données sinon ca n'a pas trop d'intérêt)

Si tu veux je peux te montrer comment générer dynamiquement une table HTML en Javascript et la charger à partir du contenu d'un tableau Javascript.






PhP  
Il y a 10 types de personnes dans le monde : ceux qui compre­nnent le binaire et les autres ...

Répondre à PhP

4

poup, le 5 mai 2008 à 19:37:56

Merci pour cette réponse très claire.
Effectivement, j'aimerais bien que tu me montre comment construire la table html à partir du tableau js, d'autant plus que je ne connais pas du tout DOM...

Il y a qq os, toutefois.
- En réalité, le tableau est décomposé en plusieur tableaux par catégorie, entrecoupé du nom de la catégorie et dudescriptif. On créé pl. tableaux js par catégorie et le pb est résolu ?

On peut voir ceci après, mais:
- Il y a qq références pour lesquels il n'y a qu'un prix au lieu de 3. (Evidemment, sinon, ça aurait été trop simple !!!)
Dans la fonction js qui calcule le sous-total, on précise que pour ces références, on fait un autre calcul, et c'est tout ?
En tout cas, ça n'a pas d'incidence sur la construction du tableau en html ou js ?

Dans tout les cas, les tableaux html sont construits sur le même modèle (3 td pour 3 prix), même si pour certains tableaux ou certaines lignes, il y a des cellules vides.

Merci !!!

Répondre à poup

5

 PhP, le 6 mai 2008 à 11:03:56
  • +2

Bjr

Voici un ex


<html>
<head>
<title>Code de démonstration - Explorer un tableau HTML avec des interfaces DOM et JavaScript</title>
<style>
*
{
	font-size : 10pt;
	font-family : Arial;
}
</style>

<script>
 	
function CreerTableHTML(parentId,nbrCol,nbrRow)
{
	// Recherche de l'élément parent dans lequel on va insèrer la nouvelle table
	var parentElt = document.getElementById(parentId);
	
	// Efface le contenu de l'élément parent
	parentElt.innerHTML="";
	
	// Création d'une nouvelle table = élément <table>
	var table = document.createElement("table");	
	// Donne une bordure à la table (facultatif)
	table.setAttribute("border", "1");
	
	// Création du corps de la table	
	var tableBody = document.createElement("tbody");


	// Pour chaque ligne
	for(var rowIndex = 0; rowIndex < nbrRow; rowIndex++) 
	{
			// Création d'une nouvelle ligne= élément <tr>
			var row = document.createElement("tr");
			  
			// Pour chaque colonne
			for(var colIndex = 0; colIndex < nbrCol; colIndex++)
			{
				// Création d'une nouvelle cellule = élément <td>
				var cell = document.createElement("td");
				// Donne une largeur de 40 pixels à chaque cellule (facultatif)
				cell.style.width= "40px";
				// Centre la contenu de chaque cellule (facultatif)
				cell.style.textAlign = "center";
				// Contenu de la cellule
				cell.innerHTML="["+colIndex+","+rowIndex+"]";
				// Ajoute la cellule dans la ligne	
				row.appendChild(cell);
		    }
			
			// Ajoute la ligne à la fin du corps du tableau
            tableBody.appendChild(row);	
	}	
	// Ajoute le corps du tableau dans la table
	table.appendChild(tableBody);
	
	// Ajoute la table dans l'élément parent ... ouf !
	parentElt.appendChild(table);
}


function generer()
{
	var nbrCol = document.getElementById("nbrCol").value;
	var nbrRow = document.getElementById("nbrRow").value;
	CreerTableHTML('conteneur',nbrCol,nbrRow);
}

</script></head>
<body>
Test de création de table HTML dynamiquement avec DOM<br/><br/>
<form>
Nombre de colonnes<input type="text" value="10" id="nbrCol" size="4">
Nombre de lignes<input type="text" value="5" id="nbrRow" size="4">
<input type="button" onclick="generer()" value="Générer la table">
</form>

<div id="conteneur"></div>
</body>
</html>



Ceci est juste un ex basique et pas vraiment exploitable en l'état.

Evidemment pour ton application il faut utiliser un modèle bcp plus sophistiqué à base d'objets JavaScript

PhP  
Il y a 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres ...

Répondre à PhP