Update dynamique...

Signaler
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008
-
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008
-
Slt. voila le problème j'ai un menu déroulant sur la quantité et l'utilisateur a le choix entre 0,1,2 ou 3, je souhaiterai créé une fonction pour que dès qu'il ait choisi une quantité, la valeur de cette case soit enregistré dans ma base grâce à la fonction update...
ex: produit 1, l'utilisateur choisi la quantité 2, update produit1 set qte produit1= valeur1 where numprod=1...

Voila. Ma page est un formulaire qui calcul le montant de chaque ligne pour chaque produit et à la fin il y a le calcul du montant total...
Pourriez vous m'aider à intégrer cette manipulation dans mon code?
Merci d'avance...

menu déroulant qte:
Code:,
----

<select select style="WIDTH: 100%" onChange=setMontant(<?php echo $totalRows_RqTour ?>);
name=qte<?php echo $totalRows_RqTour ?>>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

mes fonctions javascript:
Code:,
----

function calcul() {
for (i=1; i<1+<?php echo ($totalRows_RqTour + $totalRows_RqTour2 + $totalRows_RqTour3 + $totalRows_RqLecteur + $totalRows_RqLecteur2 + $totalRows_RqLecteur3 + $totalRows_RqGraveur + $totalRows_RqGraveur2 + $totalRows_RqGraveur3 + $totalRows_RqDisquette + $totalRows_RqDisquette2 + $totalRows_RqDisquette3 + $totalRows_RqDisqueDur + $totalRows_RqDisqueDur2 + $totalRows_RqDisqueDur3 + $totalRows_RqCarteMere + $totalRows_RqCarteMere2 + $totalRows_RqCarteMere3 + $totalRows_RqProcesseur + $totalRows_RqProcesseur2 + $totalRows_RqProcesseur3 + $totalRows_RqMemoire + $totalRows_RqMemoire2 + $totalRows_RqMemoire3 + $totalRows_RqCarteVideo + $totalRows_RqCarteVideo2 + $totalRows_RqCarteVideo3 + $totalRows_RqCarteReseau + $totalRows_RqCarteReseau2 + $totalRows_RqCarteReseau3 + $totalRows_RqCarteAcquisition + $totalRows_RqCarteAcquisition2 + $totalRows_RqCarteAcquisition3 + $totalRows_RqCarteSon + $totalRows_RqCarteSon2 + $totalRows_RqCarteSon3 + $totalRows_RqCarteSCSI + $totalRows_RqCarteSCSI2 + $totalRows_RqCarteSCSI3 + $totalRows_RqEcran + $totalRows_RqEcran2 + $totalRows_RqEcran3 + $totalRows_RqKitClavierSouris + $totalRows_RqKitClavierSouris2 + $totalRows_RqKitClavierSouris3 + $totalRows_RqScanner + $totalRows_RqScanner2 + $totalRows_RqScanner3 + $totalRows_RqImprimante + $totalRows_RqImprimante2 + $totalRows_RqImprimante3 + $totalRows_RqWebcam + $totalRows_RqWebcam2 + $totalRows_RqWebcam3) ?>; i++) { setMontant(i); }
setTotal();
}

function setTotal() {
var total=0;
for (i=1; i<1+<?php echo ($totalRows_RqTour + $totalRows_RqTour2 + $totalRows_RqTour3 + $totalRows_RqLecteur + $totalRows_RqLecteur2 + $totalRows_RqLecteur3 + $totalRows_RqGraveur + $totalRows_RqGraveur2 + $totalRows_RqGraveur3 + $totalRows_RqDisquette + $totalRows_RqDisquette2 + $totalRows_RqDisquette3 + $totalRows_RqDisqueDur + $totalRows_RqDisqueDur2 + $totalRows_RqDisqueDur3 + $totalRows_RqCarteMere + $totalRows_RqCarteMere2 + $totalRows_RqCarteMere3 + $totalRows_RqProcesseur + $totalRows_RqProcesseur2 + $totalRows_RqProcesseur3 + $totalRows_RqMemoire + $totalRows_RqMemoire2 + $totalRows_RqMemoire3 + $totalRows_RqCarteVideo + $totalRows_RqCarteVideo2 + $totalRows_RqCarteVideo3 + $totalRows_RqCarteReseau + $totalRows_RqCarteReseau2 + $totalRows_RqCarteReseau3 + $totalRows_RqCarteAcquisition + $totalRows_RqCarteAcquisition2 + $totalRows_RqCarteAcquisition3 + $totalRows_RqCarteSon + $totalRows_RqCarteSon2 + $totalRows_RqCarteSon3 + $totalRows_RqCarteSCSI + $totalRows_RqCarteSCSI2 + $totalRows_RqCarteSCSI3 + $totalRows_RqEcran + $totalRows_RqEcran2 + $totalRows_RqEcran3 + $totalRows_RqKitClavierSouris + $totalRows_RqKitClavierSouris2 + $totalRows_RqKitClavierSouris3 + $totalRows_RqScanner + $totalRows_RqScanner2 + $totalRows_RqScanner3 + $totalRows_RqImprimante + $totalRows_RqImprimante2 + $totalRows_RqImprimante3 + $totalRows_RqWebcam + $totalRows_RqWebcam2 + $totalRows_RqWebcam3) ?>; i++) { total+=getMontant(i); }
setText("total", total);
}

function setMontant(numLigne) {

var qte=getNombre(getInputText("qte"+numLigne));
var pu=getNombre(getSelect("pu"+numLigne));
setText("mtt"+numLigne, qte*pu);
}

function getMontant(numLigne) {
return getNombre(document.getElementById("mtt"+numLigne).innerHTML);
}

18 réponses

Messages postés
88
Date d'inscription
dimanche 19 octobre 2003
Statut
Membre
Dernière intervention
24 janvier 2006

Salut,

En fait si j'ai bien compris ce que tu veut c'est faire des requétes
sur ta base de données sans changer ni réactualiser la page. A ce
moment la il faut que tu te tourne vers une méthode de programmation
qui s'appelle l'ajax je crois. C'est avec du javascript et du php. Ca
utilise la méthode HTTPREQUEST ou qqchose comme ca il me semble.



bonne continuation
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

Oui c'est quelquechose comme ça qu'il me faut. Mais ou puis-je trouver cette méthode ou une autre tout aussi adapté stp???
Merci d'avance...
@+
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Les requetes XMLHTTP, plus exactement ;-)



http://www.toutjavascript.com/savoir/xmlhttprequest.php3
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

Yes ok merci... J'ai bien compris le concept et c'est exactement ce qu'il me faut...
Malheureusement je n'arrive pas à m'inscrire sur le forum... Et j'aimerai savoir ou je peux trouver quelqu'un qui puisse m'aider à réaliser ma manipulation...
Merci d'avance, t'as assuré...
@+
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
C'est TRES simple...
Je te donne un exemple tres rapide.

disons que tu as ton formulaire avec une liste, dans une page form.php :


<form id="idForm" action="?" method="post">
<select name="testSelect" onchange="searchReq('idForm', 'data='+document.GetElementById('idForm').testSelect.value);">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</form>

Dans un fichier de scripts js inclus dans celui-ci, tu declares ton objet comme indique sur le site (copier coller...) et tu crees ta fonction searchReq () :
if(document.all) {
// Internet Explorer
var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
}
else {
// Mozilla
var XhrObj = new XMLHttpRequest();
}

function searchReq (loc, data) {
// définition de l'endroit d'affichage:
var content = document.getElementById(loc);

XhrObj.open("POST", 'requete.php');


// Ok pour la page cible
XhrObj.onreadystatechange = function() { if (XhrObj.readyState 4 && XhrObj.status 200)
content.innerHTML = XhrObj.responseText ;
}


XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
XhrObj.send(data);
}

Puis dans la page quz'appelle cette fonction (requete.php) :

<?php
if (isset ($_POST['data'])) {
echo 'select name="produits">';
$requete = "SELECT id, nom FROM produits WHERE id='$_POST['data']'";
while ($resultat = mysql_fetch_array ($requete)) {
echo '<option value="',$requete['id'],'">',$requete['nom'],'</option>';
}
echo '</select>';
}
?>

Ca ne fonctionnera comme ca que sur Firefox, pas sur IE. IE ne semble pas comprendre qu'un <form> est un block...si tu veux que ca fonctionne sur IE:
- tu dois inserer un div dans ton formulaire apres ton select, et le fermer aussitot, et lui donner un id :
</select>

</form>

Puis dans le onchange, a l'appel de la fonction tu envoies l'id de ce div :
onchange="searchReq('idDiv', 'data='+document.GetElementById('idForm').testSelect.value);"

C'est tout.

Ca te fait 3 pages, et pas tres grosses... :-)
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
J'ai oublie d'echapper les quote dans le onchange...
onchange="searchReq('idDiv', 'data='+document.GetElementById(\'idForm\').testSelect.value);"
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

Ok d'accord j'ai compris mais je crois qu'il y a un ptit problème car dans mon onchange de mon menu déroulant il y déja le calcul du montant en fin de ligne comment faire pour faire les 2 en même temps? Merci...
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Tu peux mettre 2 fonctions dans un onchange.
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

Ok excuses moi je ne voudrais vraiment pas abusé de ton temps mais tu pourrais me dire comment pour mettre les 2 fonctions dans le onchange. Et le code que tu as mis sert à quoi exactement? dès que je vais faire mon choix dans mon menu déroulant les informations vont s'afficher sur une autre page c'est ça? Car au départ je voulais en fait enregistrer la valeur de mon menu déroulant dans ma base de donnée pour ensuite reprendre les données et les envoyer avec une fonction mail.

Mais comme apparemment tu as l'air d'être super fort en la matière tu me pourrais me conseiller et m'aider à réaliser cette manipulation car je galère depuis pas mal de temps...
Merci d'avance...
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Non, cela va s'afficher dans ton formulaire, regarde vers quel id (element) j'envoie les donnees.

Tu separes les fonctions par ; dans le onchange.
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

D'accord et je voulais savoir si c'était possible de réaliser cette manipulation avec le code suivant:
<tr>
<th scope= "row">
Tour
</th>
<td>
<?php echo $row_RqTour['MarqueTour']; ?>
</td>
<td>
<?php echo $row_RqTour['ModèleTour']; ?>
</td>
<td>
">
</td>
<td width ="13%">

" type= "text" value="<?php echo $row_RqTour['PrixHTTour']; ?>" readonly="true">

</td>
<td width="21%">


</td>
<td id=mtt<?php echo $totalRows_RqTour ?>>

</td>
<td id=mtt<?php echo $totalRows_RqTour ?>>"></td>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_RqTour2 > 0) { // Show if recordset not empty ?>
<tr>
<td>
Tour
</td>
<td>
<?php echo $row_RqTour2['MarqueTour']; ?>
</td>
<td>
<?php echo $row_RqTour2['ModèleTour']; ?>
</td>
<td>
">
</td>
<td>

" type ="text" value="<?php echo $row_RqTour2['PrixHTTour']; ?>" readonly="true">

</td>
<td>

<select select style="WIDTH: 100%" onChange=setMontant(<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>);
name=pu<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>

</td>
<td id=mtt<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>>

</td>
<td id=mtt<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>>&nbsp;</td>
</tr>

Donc je t'explique c'est un peu compliqué. Ce code représente 2 lignes de mon tableau, il y a 3 produit de chaque sortes dans chaque catégories... (3tours, 3graveurs, etc...) Ils ont tous pour identifiant dans leur catégorie correspondante id=1, 2 et 3. Mes cases qte, pu et mtt ont pour name leur nom + le nombre d'enregistrement... C'est bête c'est vrai mais c'est important à cause de ma fonction montant total et pour l'affichage...
Donc pourrais tu m'aider à obtenir une page qui résume toutes les données de mon tableau et les envois dans une fonction en passant si c'est nécessaire par la base de données. Voila ça serait vraiment trop assuré si tu pouvais m'aider car je rame depuis un moment... Merci beaucoup...
@+

ps: je viens de le voir mon menu déroulant s'appelle pu alors qu'il devrait s'appeler qte mais c pa grave...lol
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Si tu veux que j'essaye de t'aider, epure ce code stp, vire toute mise en forme et remet le ici. La mise en forme, je m'en fiche, et elle rend le code illisible la :-(
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

<th>Tour</th>
<td><?php echo $row_RqTour['MarqueTour']; ?></td>
<td><?php echo $row_RqTour['ModèleTour']; ?></td>
<td>"></td>
<td>" type="text" value="<?php echo $row_RqTour['PrixHTTour']; ?>" readonly="true"></td>
<td><select select style="WIDTH: 100%" onChange=setMontant(<?php echo $totalRows_RqTour ?>);
name=pu<?php echo $totalRows_RqTour ?>>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select></td>
<td id=mtt<?php echo $totalRows_RqTour ?>></td>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_RqTour2 > 0) { // Show if recordset not empty ?>
<tr>
<td>Tour</td>
<td><?php echo $row_RqTour2['MarqueTour']; ?></td>
<td><?php echo $row_RqTour2['ModèleTour']; ?></td>
<td>"></td>
<td>
" type="text" value="<?php echo $row_RqTour2['PrixHTTour']; ?>" readonly="true"></td>
<td>
<select select style="WIDTH: 100%" onChange=setMontant(<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>);
name=pu<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select></td>
<td id=mtt<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>></td>

Voila j'espère que le code est assez épuré... Je te remercie encore pour ton aide, c'est super sympa de me consacrer un peu de ton temps...
Merci beaucoup... @+
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
J'ai dit toute mise en forme lol, vire moi ce tableau (<table>, <tr>, <td> ...)
Au passage, on ne devrait pas mettre un formulaire en forme avec un tableau, mais bon...
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

A vos ordres chef... lol. Ben en fait on m'a demandé de le présenter comme ça...

Tour
<?php echo $row_RqTour['MarqueTour']; ?>
<?php echo $row_RqTour['ModèleTour']; ?>
">
" type="text" value="<?php echo $row_RqTour['PrixHTTour']; ?>" readonly="true">
<select select onChange=setMontant(<?php echo $totalRows_RqTour ?>);
name=pu<?php echo $totalRows_RqTour ?>>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
id=mtt<?php echo $totalRows_RqTour ?>
<?php } // Show if recordset not empty ?>
<?php if ($totalRows_RqTour2 > 0) { // Show if recordset not empty ?>

Tour2
<?php echo $row_RqTour2['MarqueTour']; ?>
<?php echo $row_RqTour2['ModèleTour']; ?>
">
" type="text" value="<?php echo $row_RqTour2['PrixHTTour']; ?>" readonly="true">
<select select onChange=setMontant(<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>);
name=pu<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
id=mtt<?php echo ($totalRows_RqTour + $totalRows_RqTour2) ?>

Et voila le travail... Merci encore de m'aider
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Bon le principe encore, lol, avec les xmlhttp requests, si tu veux que ce soit dynamique :



comme tu as 2 listes select, il va te falloir creer un bouton "previsualiser" par exemple. Un bete input type="button"



sur ce bouton tu fais ce que j'ai fait avec le onchange :

appel d'une fonction javascript (ca va etre la meme grossomodo), et
recuperation en js des valeurs que tu veux retrouver : tes 2 listes
notamment (regarde mon exemple, je recupere juste 1 liste, mais
bon...suffit de concatener pour la deuxieme, et autres inputs si
necessaire.

Tout ca va etre envoye a la page php appelee par la fonction js.

Par exemple, si tu as

blabla='+document.GetElementById('idForm').testSelect.value

tu recupereras cette valeur dans ta page php comme d'habitude, avec les post :

$_POST['blabla']

Apres, il te suffitm sur cette meme page, de faire une requete sql
habituelle, d'aller chercher tes infos, et de les afficher avec echo.
Et basta.

Je ne vois pas bien ou tu bloques en fait.
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

Ok... Et j'ai un bouton calcul dans mon formulaire qui affiche le montant total, tu crois que c'est possible que dès que je clic sur ce bouton ça puisse exécuter le montant total et exécuter la fonction pour enregistrer les variables?


Autre question je suis obligé de mettre les fonctions dans une autre page, normalement je peux les mettre sur la même?


Encore une question tu peux me réexpliquer comment faire pour IE car j'ai pas tout compris...?


désolé de te faire répéter... mais je suis pas encore à l'aise pour cette manipulation... lol


Merci encore de m'aider. T'assures
Messages postés
37
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
5 juillet 2008

Mais au fait il y a aussi la solution de rentrer mon expression update directement dans une fonction pour que dès que je change la quantité, celle ci soit enregistré dans la base, non? Si c'est possible quelqu'un pourrait-il m'expliquer et me montrer avec un peu de code comment réaliser cette manipulation.
Merci d'avance... @+