Désactiver bouton [Résolu]

Messages postés
153
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
- - Dernière réponse : Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
- 11 mai 2010 à 14:16
bonsoir,j'ai un code sur le quelle je travail depuis un moment et chaque fois je m'aperçoit une erreur,mon problème réside dans le fait que je veux bloquer les boutons qui incrémentent et décrémentent la quantité demandée d'un article lorsque je clique sur valider,tout se passe bien si j'ai un seul article dans le panier mais si jamais j'ajoute de plus les boutons s'affichent.le code est le suivant:

<?php

include_once 'panier.class.php';




/*************************************************************************************************
** déclarations variables **
*************************************************************************************************/
$contenu = "";
$page = null;


/*************************************************************************************************
** affectations variables **
*************************************************************************************************/
$page->maj = isset($_POST["maj_x"]) ? $_POST["maj_x"] : "";
$page->base ((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] "on") ? "https" : "http")."://".$_SERVER["HTTP_HOST"];
$page->dirname = dirname($_SERVER["SCRIPT_NAME"]);
$page->query = isset($_SERVER["QUERY_STRING"]) ? "?".$_SERVER["QUERY_STRING"]."" : "";
$page->protocol (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] "on") ? "https" : "http";
$page->action = $page->protocol."://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"].$page->query;
$page->panier = isset($_SESSION['panier']) ? unserialize($_SESSION['panier']) : "";

/*************************************************************************************************
** programme principal **
*************************************************************************************************/
if ($page->maj) {

maj($page);
$showHide = 1; //on doit maintenant afficher commander
} else {

$showHide = 0; // on doit afficher valider
}

// si on doit afficher commander on cree une variable $code qui va contenir le code du javascript
// permettant d'afficher le bouton "commande" et de cacher le bouton "valider"
// sinon on crée une variable $code qui permet de faire le contraire
if ($showHide) {

$code ="javascript:
document.getElementById('maj').style.display='none';
document.getElementById('com').style.display='block'
document.getElementById('plus').style.display='none'
document.getElementById('minus').style.display='none'
document.getElementById('suupp').disabled='true';";
} else {

$code ="javascript:
document.getElementById('maj').style.display='block';
document.getElementById('com').style.display='none';";
}



echo '
<html>
<head>
<title>Consultation Panier</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<script language="JavaScript" type="text/JavaScript">

function check() {

'.$code.';
}
</script>
</head>

<form name="form1" method="post" action="'.$page->action.'" enctype="application/x-www-form-urlencoded">';



$contenu .= Affichages($page);

echo $contenu.'
</form>

</html>';
$_SESSION["panier"] = serialize($page->panier);


/*************************************************************************************************
** fonctions **
*************************************************************************************************/
// affichage principal
function Affichages(&$page) {
if ($page->panier == "" || (is_object($page->panier) && $page->panier->getNombreArticle() <= 0)) return '
<center>Votre panier est vide
</center>';

$out = '

<center>


Designation,
P.U. (HT),
Quantite,
Total HT,
Total TTC,
Supprimer,
';

foreach ($page->panier->article as $numserie => $val) {
$des1=str_replace(' ','',$numserie);
$des=str_replace('-','',$des1);
$out .= '
----

'.$des.',
'.$page->panier->getPrixArticle($numserie).' DT,
<table cellpadding="0" cellspacing="0" border="0">
----, panier->getQteArticle($numserie).'\" readonly size=\"4\" /></td>
panier->getTotalFinalTTC().'></td>

</tr>
<tr bgcolor="#DAD9D7">
<td colspan="6"><center><hr width="20%"/></center></td>
</tr>
</table>
</center>';$_SESSION["tot"] = $page->panier->getTotalFinalTTC();

return $out;
}

function maj(&$page) {
foreach ($_POST as $cle => $valeur) {
if (preg_match("/suppr_(.*)/", $cle, $res)) $page->panier->supprimerArticle($res[1]);
if (preg_match("/qte_(.*)/", $cle, $res)) $page->panier->miseAJourQteArticle($res[1], $valeur);
}

if ($page->panier->getNombreArticle() <= 0) {
$page->panier->destroy();
$page->panier = null;
}
}
?>
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
3
Merci
Je n'ai pas tout ecrit mais je vais te re-expliquer le principe :

Ton idee c'est de test si tu est en mise a jour d'une page et donc si c'est le cas tu adapte ta fonction javascript pour qu'elle s'occupe de cacher tes boutons.

Seulement tu leur a tous donne le meme id a tes bouton c'est ca le souci car quand tu fait un document.getElementById le javasacript ne va pas savoir les differencier et va selement recursivement parcourir l'abre DOM, trouver ton PREMIER bouton ayant l'id demander et dire ah ok le voila.
C'est pour sa que sa marche avec un seul produit vu que tu n'a qu'un seul bouton qui s'appelle "plus" et un seul "minus".

Pour corriger le tir ce que je te mettait au dessus va permettre de differencier tes bouttons en leur donnant un id unique, je vais te detailler ca avec que le bouton plus vu que c'est la meme chose pour le minus :

Voici le lien que tu genere :
[# ]


Comme on peu le voir ton img a pour id "plus" pour chacun de tes articles.
Si tu rajoutes ta variable $numserie a leur id tu vas pouvoir les identifier de maniere sure dans ta page, il faudrai donc generer :

[# ]


maintenant toutes tes images ayant un id comme suit : "plus_tonNumeroDeSerie" tu va pouvoir les cacher toutes en generant le javascript suivant a la place de l'actuel en changeant les lignes que j'ai corriges :

$code ='javascript:'
foreach ($page->panier->article as $numserie => $val) {
...
$code .='
document.getElementById("plus_'.$numserie.'").style.display="none";
document.getElementById("minus_'.$numserie.'").style.display="none";
...
}

Voila :)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 133 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
0
Merci
Ah j'ai eu du mal comprendre ce que tu voulais dire mais il est pourtant si evident que c'est normal que sa marche avec 1 article et pas x article ! :D

Tu n'as pas remarque une chose importante ici :

$code ="javascript:
document.getElementById('maj').style.display='none';
document.getElementById('com').style.display='block'
document.getElementById('plus').style.display='none'
document.getElementById('minus').style.display='none'
document.getElementById('suupp').disabled='true';";
}

Alors ? :) Non toujours pas ?
D'accord alors en fait ce qui ce passe c'est que ton javascript ne desactive que une seule balise plus et minus car tu utilise getElementById, un id etait unique sa en desactive qu'un seul et c'est le premier trouve ! Meme si tout tes autres boutons on l'id minus sa suffit pas du tout !

Alors voici une solution :

Ca serait de generer l'id de tes boutons comme sa :
'panier->article as $numserie => $val) {
...
$code .='
document.getElementById("plus_'.$numserie.'").style.display="none";
document.getElementById("minus_'.$numserie.'").style.display="none";
...
}

Mais je te conseilles d'essayer d'en trouver une meilleure plutot orientee php ^^
Commenter la réponse de Morphinof
Messages postés
153
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
0
Merci
merci pour ton aide mais pourra tu m'expliquer d'avantage le code car je l'ai essayé mais ça n'a pas marché.merci
Commenter la réponse de joujma5
Messages postés
153
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
0
Merci
merci bien pour votre aide
Commenter la réponse de joujma5
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3
0
Merci
De rien :)
Commenter la réponse de Morphinof