11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous je suis nouveau,

je débute en java script et je réalise pour ma boite une page web pour calculer les prix de revient.

Sur la page qui me pose problème j'ai adapter un code trouver sur internet qui permet de cacher en fait un tableau. Ma page fonctionne mais avec un petit defaut.

Voici le code de la page:

<html>
    <style type="text/css">

    table { border-collapse : collapse; }

    th,td { border : 1px solid #000; padding : 2px 4px; }

    th { background-color : #eee; }

    </style>

<head>

<title>essai</title>

</head>

<script type="text/javascript">
  var EMB =

    {

        nbEmballage : 0,

        idEmballage : 0,

        ajouter : function ()

        {

            var e = document.getElementById('emballage');

            var qe = document.getElementById('quantite_emb');

            var tbody = document.getElementById('liste-emballage');

            if (EMB.nbEmballage == 0) { tbody.deleteRow(0); }

            var tr = tbody.insertRow(tbody.rows.length);

            var td1 = tr.insertCell(0);

            var td2 = tr.insertCell(1);

            var td3 = tr.insertCell(2);

            // Insertion produit

            var emb = document.createTextNode(e.options[e.selectedIndex].text);

            var embInput = document.createElement('input');

            embInput.setAttribute('type', 'hidden');

            embInput.setAttribute('name', 'emballage[' + EMB.idEmballage + ']');

            embInput.setAttribute('value', e.options[e.selectedIndex].value);

            td1.appendChild(emb);

            td1.appendChild(embInput);

            // Insertion quantité

            var embqtte = document.createTextNode(qe.value);

            var embqtteInput = document.createElement('input');

            embqtteInput.setAttribute('type', 'hidden');

            embqtteInput.setAttribute('name', 'quantites_emb[' + EMB.idEmballage + ']');

            embqtteInput.setAttribute('value', qe.value);

            td2.appendChild(embqtte);

            td2.appendChild(embqtteInput);

            // Bouton supprimer

            var btnSupprimer = document.createElement('input');

            btnSupprimer.setAttribute('type', 'button');

            btnSupprimer.setAttribute('value', 'Supprimer');

            btnSupprimer.onclick = EMB.supprimer;

            td3.appendChild(btnSupprimer);

            // Inc nbProduits et id

            EMB.nbEmballage++;

            EMB.idEmballage++;

        },

        supprimer : function ()

        {

            var tbody = document.getElementById('liste-emballage');

            var row = this.parentNode.parentNode;

            var index = 0;

            while (row = row.previousSibling)

            {

                if (row.tagName) { index++; }

            }

            tbody.deleteRow(index);

            EMB.nbEmballage--;

            if (EMB.nbEmballage == 0)

            {

                var tr = tbody.insertRow(0);

                var td = tr.insertCell(0);

                td.setAttribute('colSpan', 3);

                td.appendChild(document.createTextNode('Aucun emballage'));

            }

        },

        check : function ()

        {

            if (EMB.nbEmballage < 1) alert('Il faut au moins 1 emballage');

            return EMB.nbEmballage > 0;

        }

    };

function ShowElem(idelem)

{

document.getElementById(idelem).style.display='block';

}

function HideElem(idelem)

{

document.getElementById(idelem).style.display='none';

}

</script>

<body>
Est-ce que votre produit à du fourrage?
<form method="post">
<input type="radio" name="fourrage"  value="fourrage2" CHECKED onclick="ShowElem('texte2');HideElem('page')"> non
<input type="radio" name="fourrage"  value="fourrage1" onclick="ShowElem('page');HideElem('texte2')" > oui

</form>

<div id="page">
<?php

mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$sql2="SELECT id_emb, nom_emb FROM emballage;";
$query2= mysql_query($sql2) or die('erreur');
$nb2= mysql_num_rows($query2);
	if ($nb2 == null){
					echo "Pas de produit disponible.";
	} else {
			echo "<div>";
			echo "<p>";
			echo '<label for="produit1">Produit : </label>';
			echo '<select id="emballage" name="emballage">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["id_emb"].'">'.$list2["nom_emb"].'</option>';
		}
	}
?>
           
</select>
<label for="quantite">Quantité : </label>
<input type="text" id="quantite_emb" name="quantite_emb" value="" size="3" />
<input type="button" id="ajouter" name="ajouter" value="Ajouter" onclick="EMB.ajouter();" />
</p>
<table>
<thead>
<tr><th>Produit</th><th>Quantité</th><th>Action</th></tr>
</thead>
<tbody id="liste-emballage">
<tr><td colspan="3">Aucun produit</td></tr>
</tbody>
</form>
</div>
<div id="texte2" style="display:none">texte 2</div>

</body>

</html>



Est ce que le code comporte des erreurs?


En fait le problème c'est que quand je charge la page par défaut, le bouton "non" est bien coché (checked) mais il y a quand même le tableau qui apparait en dessous. Je suis obliger de cliquer sur "oui" puis "non" pour que le tableau disparaisse.

Quel code je doit ajouter pour que dès le chargement de la page le paramètre "non" s'applique tout de suite ( et donc qu'il cache mon tableau en dessous).

Merci d'avance pour votre aide

guigui69
Modifié par guigui69 (22 Oct 2007 - 11:52)
bonjour,

rajoute un window.onload ta fonction pour lancer la fonction au chargement de ta page et normalement il cachera ton tableau.

Sinon tu le cache en css comme par default il est invisible.
Merci pour ta réponse mais ça ne fonctionne pas Smiley decu aurait je fait une erreur ?

J'ai rajouter "window.onload = ShowElem;" dans mon code cela na rien changer, j'arrive toujours sur la page et je suis obliger de cliquer sur oui puis sur non pour que cela disparaisse.


function ShowElem(idelem)

{

document.getElementById(idelem).style.display='block';

}

function HideElem(idelem)

{

document.getElementById(idelem).style.display='none';

}
window.onload = ShowElem;


Quel est mon erreur ?

Merci d'avance pour votre aide

guigui69
Tu as oublié de lui passer l'id de ton tableau en parametre et j'ai pas trouver dans ton code le tableau que tu veux cacher et cela serai plutot du style


window.onload = HideElem('iddetontableau');


Car la fonction show est utilisé pour afficher ton tableau alors que toi tu veux le cacher au chargement de la page.
Merci je vient de teste ca ne fonctionne toujours pas.( Regarde dans le code ci-dessous, si mon 'window.onload = HideElem('page');' est bien placé)

Le bouton est bien positionné sur non mais il y a quand même le tableau en dessous qui s'affiche.

Le code est fait de la manière suivante:

si c'est sur "non" ça affiche le div:

<div id="texte2" style="display:none">texte 2</div>


Si il sélectionne "oui" cela affiche le tableau (ID page)


function ShowElem(idelem)

{

document.getElementById(idelem).style.display='block';

}

function HideElem(idelem)

{

document.getElementById(idelem).style.display='none';

}
window.onload = HideElem('page');

</script>

<body>
Est-ce que votre produit à du fourrage?
<form method="post">
<input type="radio" name="fourrage"  value="fourrage2" CHECKED onclick="ShowElem('texte2');HideElem('page')"> non
<input type="radio" name="fourrage"  value="fourrage1" onclick="ShowElem('page');HideElem('texte2')" > oui

</form>

<div id="page">
<?php

mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$sql2="SELECT id_emb, nom_emb FROM emballage;";
$query2= mysql_query($sql2) or die('erreur');
$nb2= mysql_num_rows($query2);
	if ($nb2 == null){
					echo "Pas de produit disponible.";
	} else {
			echo "<div>";
			echo "<p>";
			echo '<label for="produit1">Produit : </label>';
			echo '<select id="emballage" name="emballage">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["id_emb"].'">'.$list2["nom_emb"].'</option>';
		}
	}
?>
           
</select>
<label for="quantite">Quantité : </label>
<input type="text" id="quantite_emb" name="quantite_emb" value="" size="3" />
<input type="button" id="ajouter" name="ajouter" value="Ajouter" onclick="EMB.ajouter();" />
</p>
<table>
<thead>
<tr><th>Produit</th><th>Quantité</th><th>Action</th></tr>
</thead>
<tbody id="liste-emballage">
<tr><td colspan="3">Aucun produit</td></tr>
</tbody>
</form>
</div>
<div id="texte2" style="display:none">texte 2</div>

</body>

</html>



Merci d'avance pour votre aide

guigui69
Bonjour,
Tu as deux problèmes:
1/ la syntaxe html de la page générée:
- On élimine les sources de tracas habituels:
début du code rajouter doctype et meta:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>essai</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Language" content="fr" />

- pour le javascript le coder ainsi:
<script type="text/javascript"><!--
fcts...
//--></script>

- On corrige le code html dans le body:
tu as un </form> avant ton <div id='page'> de TROP,
si tu n'as pas de 'produit disponible', tu géneres un </select> et un </p> de trop.
Il n'y a pas de </table> pour la table de fin.
Le </form> à la fin devrait se trouver juste devant le </body>
2/ Tu as un 'souci' dans ton js sur le onload, tu devrais coder quelque chose comme ceci:

<script type="text/javascript"><!--
function ShowElem(idelem)
{
document.getElementById(idelem).style.display='block';
}
function HideElem(idelem)
{
document.getElementById(idelem).style.display='none';
}
function init(){
HideElem('page');
}
window.onload = function()
{
init();
}
//--></script>
ou

function init(){
HideElem('page');
}
window.onload = init;

Nb d'après ce que je comprends de ce que tu veux faire, tu devrais tester dans init la valeur de fourrage pour gérer l'affichage..
Bon courage Smiley cligne
merci pour cette réponse.Désolé pour le retard problème d'ordinateur.

voici mon code, corrigé grâce a ton aide



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html><head><title>essai</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<meta http-equiv="Content-Script-Type" content="text/javascript" />

<meta http-equiv="Content-Style-Type" content="text/css" />

<meta http-equiv="Content-Language" content="fr" />
<html>
    <style type="text/css">

    table { border-collapse : collapse; }

    th,td { border : 1px solid #000; padding : 2px 4px; }

    th { background-color : #eee; }

    </style>

<head>

<title>essai</title>

</head>

<script type="text/javascript"><!--
  var EMB =

    {

        nbEmballage : 0,

        idEmballage : 0,

        ajouter : function ()

        {

            var e = document.getElementById('emballage');

            var qe = document.getElementById('quantite_emb');

            var tbody = document.getElementById('liste-emballage');

            if (EMB.nbEmballage == 0) { tbody.deleteRow(0); }

            var tr = tbody.insertRow(tbody.rows.length);

            var td1 = tr.insertCell(0);

            var td2 = tr.insertCell(1);

            var td3 = tr.insertCell(2);

            // Insertion produit

            var emb = document.createTextNode(e.options[e.selectedIndex].text);

            var embInput = document.createElement('input');

            embInput.setAttribute('type', 'hidden');

            embInput.setAttribute('name', 'emballage[' + EMB.idEmballage + ']');

            embInput.setAttribute('value', e.options[e.selectedIndex].value);

            td1.appendChild(emb);

            td1.appendChild(embInput);

            // Insertion quantité

            var embqtte = document.createTextNode(qe.value);

            var embqtteInput = document.createElement('input');

            embqtteInput.setAttribute('type', 'hidden');

            embqtteInput.setAttribute('name', 'quantites_emb[' + EMB.idEmballage + ']');

            embqtteInput.setAttribute('value', qe.value);

            td2.appendChild(embqtte);

            td2.appendChild(embqtteInput);

            // Bouton supprimer

            var btnSupprimer = document.createElement('input');

            btnSupprimer.setAttribute('type', 'button');

            btnSupprimer.setAttribute('value', 'Supprimer');

            btnSupprimer.onclick = EMB.supprimer;

            td3.appendChild(btnSupprimer);

            // Inc nbProduits et id

            EMB.nbEmballage++;

            EMB.idEmballage++;

        },

        supprimer : function ()

        {

            var tbody = document.getElementById('liste-emballage');

            var row = this.parentNode.parentNode;

            var index = 0;

            while (row = row.previousSibling)

            {

                if (row.tagName) { index++; }

            }

            tbody.deleteRow(index);

            EMB.nbEmballage--;

            if (EMB.nbEmballage == 0)

            {

                var tr = tbody.insertRow(0);

                var td = tr.insertCell(0);

                td.setAttribute('colSpan', 3);

                td.appendChild(document.createTextNode('Aucun emballage'));

            }

        },

        check : function ()

        {

            if (EMB.nbEmballage < 1) alert('Il faut au moins 1 emballage');

            return EMB.nbEmballage > 0;

        }

    };

function ShowElem(idelem)

{

document.getElementById(idelem).style.display='block';

}

function HideElem(idelem)

{

document.getElementById(idelem).style.display='none';

}
function init(){
HideElem('page');
}
//window.onload = HideElem('page');
window.onload = function()
{
init();
}

//--></script>

<body>
Est-ce que votre produit à du fourrage?
<form method="post">
<input type="radio" name="fourrage"  value="fourrage2" CHECKED onclick="ShowElem('texte2');HideElem('page')"> non
<input type="radio" name="fourrage"  value="fourrage1" onclick="ShowElem('page');HideElem('texte2')" > oui

<!--</form>
-->
<div id="page">
<?php
$server="localhost";
$user="root";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$sql2="SELECT id_emb, nom_emb FROM emballage;";
$query2= mysql_query($sql2) or die('erreur');
$nb2= mysql_num_rows($query2);
	if ($nb2 == null){
					echo "Pas de produit disponible.";
	} else {
			echo "<div>";
			echo "<p>";
			echo '<label for="produit1">Produit : </label>';
			echo '<select id="emballage" name="emballage">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["id_emb"].'">'.$list2["nom_emb"].'</option>';
		}
	}
?>
           
</select>
<label for="quantite">Quantité : </label>
<input type="text" id="quantite_emb" name="quantite_emb" value="" size="3" />
<input type="button" id="ajouter" name="ajouter" value="Ajouter" onclick="EMB.ajouter();" />
</p>
<table>
<thead>
<tr><th>Produit</th><th>Quantité</th><th>Action</th></tr>
</thead>
<tbody id="liste-emballage">
<tr><td colspan="3">Aucun produit</td></tr>
</tbody>

</div>
<div id="texte2" style="display:none">texte 2</div>
</table>
</form>
</body>

</html>




Quand je test sur la page fonctionne.
Il y certain élément que tu ma signaler que je n'ai pas trouvé.Peux-tu me les montrer?
Peux-tu m'expliquer que fait la fonction en plus que j'ai rajouter dans javascript ?

J'ai pas très bien compris la fin de ton post

a écrit :

tu devrais tester dans init la valeur de fourrage pour gérer l'affichage..


Un Grand merci a vous tous pour l'aide

guigui69
Modifié par guigui69 (07 Mar 2009 - 14:42)
J'aurai besoin d'une petite aide, je suis dessus depuis vendredi je n'ai pas trouver comment faire.

La partie qui est cacher par le bouton va comporter (si j'y arrive) une liste déroulante lié (en php). Lorsque je selectionne dans ma première liste déroulante cela effectue un refresh de ma page et donc cela referme le tableau( car le bouton retourne sur non).

Comment faire pour qu'une fois le bouton oui est selectionne cela garde la partie ouverte lors d'un refresh.?

Merci d'avance

guigui69
Bonjour,

Le plus simple serai que lorsque tu cliques sur ton bouton, il envoi une information spécifique et en php lors du refresh tu verifies l'information et tu modifie ta page pour afficher ton tableau.

Tu as compris, car c'est pas claire je crois ceux que j'ai ecrit Smiley lol
Lorsque tu effectu ton refresh je suppose que tu envoies les informations du formulaire et que tu effectues des tests pour savoir remplire les autre champ ?

Donc pourquoi ne pas prendre la variable qui permet d'afficher ou non le tableau et de l'envoyer aussi lors du refresh ?
la variable qui indique de montrer ou non le tableau:



Est-ce que votre produit à du fourrage?
<form method="post" >
<input type="radio" name="fourrage"  value="fourrage2" CHECKED onclick="ShowElem('texte2');HideElem('page')"> non
<input type="radio" name="fourrage"  value="fourrage1" <?php If (isset($_POST['ok']) && $fourrage == $_POST["fourrage1"]) echo "CHECKED"; ?> onclick="ShowElem('page');HideElem('texte2')" > oui


C'est bien ceci?
Comment faire pour l'envoyer dans le refresh?
(Désolé je débute en php, donc j'ai un peut de mal).

Merci

guigui69
a écrit :

Lorsque je selectionne dans ma première liste déroulante cela effectue un refresh de ma page et donc cela referme le tableau( car le bouton retourne sur non).


Tu as dit cela, donc je suppose que tu as toujours un refresh de ta page. Mais apres le code que tu as montré, as tu un formulaire different entre entre ta liste deroulante qui effectue le refresh et celle qui te permet de cacher ton tableau.

Si tu effectues bien un submit alors tu pourrai je pense faire en php


<?php
$fourage1=$fourage2='';
if(isset($_POST['fourrage'])){
if($_POST['fourrage']=='fourrage2'){
$fourage2='Checked';
}
else{
$fourage1='Checked';
}
}
?>
Est-ce que votre produit à du fourrage?
<input type="radio" name="fourrage"  value="fourrage2" onclick="ShowElem('texte2');HideElem('page')" <?php echo $fourage2; ?>> non

<input type="radio" name="fourrage"  value="fourrage1"  onclick="ShowElem('page');HideElem('texte2')" <?php echo $fourage1; ?>> oui

Je pense que ca devrai etre un truc comme cela Smiley langue
Voici mon code complet:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html><head><title>essai</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<meta http-equiv="Content-Script-Type" content="text/javascript" />

<meta http-equiv="Content-Style-Type" content="text/css" />

<meta http-equiv="Content-Language" content="fr" />
<html>
    <style type="text/css">

    table { border-collapse : collapse; }

    th,td { border : 1px solid #000; padding : 2px 4px; }

    th { background-color : #eee; }

    </style>

<head>

<title>essai</title>

</head>

<script type="text/javascript"><!--
  var EMB =

    {

        nbEmballage : 0,

        idEmballage : 0,

        ajouter : function ()

        {

            var e = document.getElementById('emballage');

            var qe = document.getElementById('quantite_emb');

            var tbody = document.getElementById('liste-emballage');

            if (EMB.nbEmballage == 0) { tbody.deleteRow(0); }

            var tr = tbody.insertRow(tbody.rows.length);

            var td1 = tr.insertCell(0);

            var td2 = tr.insertCell(1);

            var td3 = tr.insertCell(2);

            // Insertion produit

            var emb = document.createTextNode(e.options[e.selectedIndex].text);

            var embInput = document.createElement('input');

            embInput.setAttribute('type', 'hidden');

            embInput.setAttribute('name', 'emballage[' + EMB.idEmballage + ']');

            embInput.setAttribute('value', e.options[e.selectedIndex].value);

            td1.appendChild(emb);

            td1.appendChild(embInput);

            // Insertion quantité

            var embqtte = document.createTextNode(qe.value);

            var embqtteInput = document.createElement('input');

            embqtteInput.setAttribute('type', 'hidden');

            embqtteInput.setAttribute('name', 'quantites_emb[' + EMB.idEmballage + ']');

            embqtteInput.setAttribute('value', qe.value);

            td2.appendChild(embqtte);

            td2.appendChild(embqtteInput);

            // Bouton supprimer

            var btnSupprimer = document.createElement('input');

            btnSupprimer.setAttribute('type', 'button');

            btnSupprimer.setAttribute('value', 'Supprimer');

            btnSupprimer.onclick = EMB.supprimer;

            td3.appendChild(btnSupprimer);

            // Inc nbProduits et id

            EMB.nbEmballage++;

            EMB.idEmballage++;

        },

        supprimer : function ()

        {

            var tbody = document.getElementById('liste-emballage');

            var row = this.parentNode.parentNode;

            var index = 0;

            while (row = row.previousSibling)

            {

                if (row.tagName) { index++; }

            }

            tbody.deleteRow(index);

            EMB.nbEmballage--;

            if (EMB.nbEmballage == 0)

            {

                var tr = tbody.insertRow(0);

                var td = tr.insertCell(0);

                td.setAttribute('colSpan', 3);

                td.appendChild(document.createTextNode('Aucun emballage'));

            }

        },

        check : function ()

        {

            if (EMB.nbEmballage < 1) alert('Il faut au moins 1 emballage');

            return EMB.nbEmballage > 0;

        }

    };

function ShowElem(idelem)

{

document.getElementById(idelem).style.display='block';

}

function HideElem(idelem)

{

document.getElementById(idelem).style.display='none';

}
function init(){
HideElem('page');
}
//window.onload = HideElem('page');
window.onload = function()
{
init();
}

//--></script>

<body>
Est-ce que votre produit à du fourrage?
<form method="post" >
<input type="radio" name="fourrage"  value="fourrage2" CHECKED onclick="ShowElem('texte2');HideElem('page')"> non
<input type="radio" name="fourrage"  value="fourrage1" <?php If (isset($_POST['ok']) && $fourrage == $_POST["fourrage1"]) echo "CHECKED"; ?> onclick="ShowElem('page');HideElem('texte2')" > oui

<!--</form>
-->
<div id="page">
<?php


$server="localhost";
$user="root";
$pass="BH65fKhQ";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$sql2="SELECT id_emb, nom_emb FROM emballage;";
$query2= mysql_query($sql2) or die('erreur');
$nb2= mysql_num_rows($query2);
	if ($nb2 == null){
					echo "Pas de produit disponible.";
	} else {
			echo "<div>";
			echo "<p>";
			echo '<label for="produit1">Produit : </label>';
			echo '<select id="emballage" name="emballage">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["id_emb"].'">'.$list2["nom_emb"].'</option>';
		}
	}
	

?>
           
<!--</select>-->
<label for="quantite">Quantité : </label>
<input type="text" id="quantite_emb" name="quantite_emb" value="" size="3" />
<input type="button" id="ajouter" name="ajouter" value="Ajouter" onclick="EMB.ajouter();" />
<!--</p>-->
<table>
<thead>
<tr><th>Produit</th><th>Quantité</th><th>Action</th></tr>
</thead>
<tbody id="liste-emballage">
<tr><td colspan="3">Aucun produit</td></tr>
</tbody>
</table>
<p><input type="submit" id="btnSubmit" name="btnSubmit" value="Valider" /></p>
</div>
<div id="texte2" style="display:none">texte 2</div>
</table>
</form>
</body>
<?php
if (count($_POST))

{

    echo '<pre>' . print_r($_POST, true) . '</pre>';
}
?>

</html>

Je ne vois pas ou tu as un select qui effectue un refresh sur ta page ... Et je ne comprend pas le probleme...
oui oui c'est moi je me suis trompé, j'ai craqué Smiley lol

c'est pas la bonne page.

Je regarde ça et je te tient au courant dsl.

Merci encore

guigui69
Bonjour voici un petit souci que je n'arrive pas à résoudre:


voici ma page en question:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html lang="fr">

<head>

    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />

    <title>Ajout produits</title>

    <style type="text/css">

    table { border-collapse : collapse; }

    th,td { border : 1px solid #000; padding : 2px 4px; }

    th { background-color : #eee; }

    </style>

    <script type="text/javascript">

    var PDT =

    {

        nbProduits : 0,

        idProduit : 0,

        ajouter : function ()

        {

            var p = document.getElementById('produit');

            var q = document.getElementById('quantite');

            var tbody = document.getElementById('liste-produits');

            if (PDT.nbProduits == 0) { tbody.deleteRow(0); }

            var tr = tbody.insertRow(tbody.rows.length);

            var td1 = tr.insertCell(0);

            var td2 = tr.insertCell(1);

            var td3 = tr.insertCell(2);

            // Insertion produit

            var pdt = document.createTextNode(p.options[p.selectedIndex].text);

            var pdtInput = document.createElement('input');

            pdtInput.setAttribute('type', 'hidden');

            pdtInput.setAttribute('name', 'produits[' + PDT.idProduit + '][0]');

            pdtInput.setAttribute('value', p.options[p.selectedIndex].value);

            td1.appendChild(pdt);

            td1.appendChild(pdtInput);

            // Insertion quantité

            var qtte = document.createTextNode(q.value);

            var qtteInput = document.createElement('input');

            qtteInput.setAttribute('type', 'hidden');

            qtteInput.setAttribute('name', 'produits[' + PDT.idProduit + '][1]');

            qtteInput.setAttribute('value', q.value);

            td2.appendChild(qtte);

            td2.appendChild(qtteInput);

            // Bouton supprimer

            var btnSupprimer = document.createElement('input');

            btnSupprimer.setAttribute('type', 'button');

            btnSupprimer.setAttribute('value', 'Supprimer');

            btnSupprimer.onclick = PDT.supprimer;

            td3.appendChild(btnSupprimer);

            // Inc nbProduits et id

            PDT.nbProduits++;

            PDT.idProduit++;

        },

        supprimer : function ()

        {

            var tbody = document.getElementById('liste-produits');

            var row = this.parentNode.parentNode;

            var index = 0;

            while (row = row.previousSibling)

            {

                if (row.tagName) { index++; }

            }

            tbody.deleteRow(index);

            PDT.nbProduits--;

            if (PDT.nbProduits == 0)

            {

                var tr = tbody.insertRow(0);

                var td = tr.insertCell(0);

                td.setAttribute('colSpan', 3);

                td.appendChild(document.createTextNode('Aucun produit'));

            }

        },

        check : function ()

        {

            if (PDT.nbProduits < 1) alert('Il faut au moins 1 produit');

            return PDT.nbProduits > 0;

        }

    };

    </script>

</head>

<body>

<div id="page">

<?php

//if (count($_POST)) 
if (isset($_POST['btnSubmit']))

{

    echo '<pre>' . print_r($_POST, true) . '</pre>';

///////////////////////////////////////////////
$server="localhost";
$user="*******";
$pass="*******";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$refPdt = 2; // provient de l'url, ou du tableau POST si tu l'a mis en champ hidden
$fourrage = 0;
$values = array();

foreach ($_POST['produits'] as $produit)

{

    $values[] = '(' . $refPdt . ', ' . $produit[0] . ', ' . $produit[1] . ', ' .$fourrage. ')';

}

$requete = 'INSERT INTO `recette` (ref_pdt,code_m,qte_m,fourrage_rctt) VALUES ' . implode(',', $values);

echo $requete;
$query2=mysql_query($requete) or die ('erreur');
}



$server="localhost";
$user="**********";
$pass="*******";
$db="pdr";
/* On récupère si elle existe la valeur de la matire type envoyée par le formulaire */
$matiere_type = isset($_POST['matiere_type'])?$_POST['matiere_type']:null;


echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">';
echo '<head>';
echo '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />';
if(isset($_POST['ok']) && isset($_POST['matiere_type']) && $_POST['matiere'] != "")
{
    $sgamme_selectionnee = $_POST['matiere_type'];
    $gamme_selectionne = $_POST['matiere'];
	
echo "<p>Vous avez sélectionné la gamme $gamme_selectionne et la sous gamme $sgamme_selectionnee</p>";
}
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect()
*  car on aura besoin de la connexion un peu plus loin dans le script */
$connexion = mysql_pconnect($server, $user, $pass);
if($connexion != false)
{
    $choixbase = mysql_select_db($db, $connexion);
    $sql1 = "SELECT id_matiere_type, ref_matiere_type, nom_matiere_type FROM matiere_type ORDER BY id_matiere_type";
 
$query = mysql_query($sql1);
$nb= mysql_num_rows($query);
//recupere le nombre de ligne de la variable contenue dans la variable query. Impeccable
if ($nb == null){
// si le nombre de ligne est egal a ensemble vide cela ecrit dans la list deroulante selectionner
echo "matiere_type.";
} else {
?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgmatiere">
<!--<fieldset style="border: 3px double #333399">
<legend>Sélectionnez type matiere</legend>-->
<select name="matiere_type" id="matiere_type" onchange="document.forms['chgmatiere'].submit();" >
  <option value="-1">- - - Choisissez matiere_type - - -</option>
<?php
while ( $list = mysql_fetch_array( $query ) ) {
echo '<option value="'.$list["ref_matiere_type"].'"'; 
if ($matiere_type == $list["ref_matiere_type"]) echo " SELECTED"; 
echo '>'.$list["ref_matiere_type"].' '.$list['nom_matiere_type'].'</option>';
} 
}
echo "</SELECT>";
mysql_free_result($query);
echo '<br>';
print("<center>$matiere_type</center>");

   
   if(isset($matiere_type) && $matiere_type != -1)
   {
//////////////////////////////////////////////
		//mysql_connect($server,$user,$pass) or die('erreur de connexion');
		//mysql_select_db($db) or die ('impossible de se connecter a la base'); 
		$sql2="SELECT code_m, nom_m FROM matiere WHERE ref_matiere_type = '$matiere_type' ORDER BY code_m";
		$query2= mysql_query($sql2) or die('erreur');

	$nb2= mysql_num_rows($query2);
		if ($nb2 == null){
			echo "Pas de matiere.";
		} else {
			echo "<form id='formulaire' action='#' method='post' onsubmit='return PDT.check();'>";
			echo "<div>";
			echo "<p>";
			echo '<label for="produit1">Produit : </label>';
			echo '<select id="produit" name="produit" >';
//echo "<SELECT NAME='matierevoulus'>";
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["code_m"].'">'.$list2["nom_m"].'</option>';
}
}
//echo "</SELECT>";
//on ferme la liste-->
	}
        /* Un petit coup de balai */
      // mysql_free_result($query2);
}
 mysql_close($connexion);

?>


            </select>

            <label for="quantite">Quantité : </label>

            <input type="text" id="quantite" name="quantite" value="" size="3" />

            <input type="button" id="ajouter" name="ajouter" value="Ajouter" onclick="PDT.ajouter();" />

        </p>

        <table>

            <thead>

                <tr><th>Produit</th><th>Quantité</th><th>Action</th></tr>

            </thead>

            <tbody id="liste-produits">

                <tr><td colspan="3">Aucun produit</td></tr>

            </tbody>

        </table>

        <p><input type="submit" id="btnSubmit" name="btnSubmit" value="Valider" /></p>

    </div>

</form>

</div>
<?php print_r($_POST) ?>
</body>

</html>


Cette page a du javascript et du php. en fait cette page normalement n'a qu'une liste déroulante. J'ai rajouter une 2 ème liste déroulante liés. Elle fonctionne mais la fonction javascript CHECK ne fonctionne plus.(return PDT.check())

La fonction check vérifie si il y à des donnée dans mon tableaux si il y en a pas il envoie un message a l'utilisateur.

Je ne comprend pas et je n'arrive pas a trouver la solution.

Si quelqu'un pourrait m'aider, Merci

Merci pour tout les réponses que vous m'avez déjà donné précédemment.

guigui69
Re bonjour a tous,

Je me suis remis sur mon projet et la je bloque sur un petit element (cela concerne toujour pour cacher un tableau ou pas).



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



<html><head><title>essai</title>




<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />



<meta http-equiv="Content-Script-Type" content="text/javascript" />



<meta http-equiv="Content-Style-Type" content="text/css" />



<meta http-equiv="Content-Language" content="fr" />

<html>

    <style type="text/css">



    table { border-collapse : collapse; }



    th,td { border : 1px solid #000; padding : 2px 4px; }



    th { background-color : #eee; }



    </style>



<head>



<title>essai</title>



</head>



<script type="text/javascript"><!--

  var EMB =

    {

        nbEmballage : 0,

        idEmballage : 0,

        ajouter : function ()

        {

            var e = document.getElementById('emballage');

            var qe = document.getElementById('quantite_emb');

            var tbody = document.getElementById('liste-emballage');

            if (EMB.nbEmballage == 0) { tbody.deleteRow(0); }

            var tr = tbody.insertRow(tbody.rows.length);

            var td1 = tr.insertCell(0);

            var td2 = tr.insertCell(1);

            var td3 = tr.insertCell(2);

            // Insertion produit

            var emb = document.createTextNode(e.options[e.selectedIndex].text);

            var embInput = document.createElement('input');

            embInput.setAttribute('type', 'hidden');

            embInput.setAttribute('name', 'emballage[' + EMB.idEmballage + '][0]');

            embInput.setAttribute('value', e.options[e.selectedIndex].value);

            td1.appendChild(emb);

            td1.appendChild(embInput);

            // Insertion quantité

            var embqtte = document.createTextNode(qe.value);

            var embqtteInput = document.createElement('input');

            embqtteInput.setAttribute('type', 'hidden');

            embqtteInput.setAttribute('name', 'emballage[' + EMB.idEmballage + '][1]');

            embqtteInput.setAttribute('value', qe.value);

            td2.appendChild(embqtte);

            td2.appendChild(embqtteInput);

            // Bouton supprimer

            var btnSupprimer = document.createElement('input');

            btnSupprimer.setAttribute('type', 'button');

            btnSupprimer.setAttribute('value', 'Supprimer');

            btnSupprimer.onclick = EMB.supprimer;

            td3.appendChild(btnSupprimer);

            // Inc nbProduits et id

            EMB.nbEmballage++;

            EMB.idEmballage++;

        },

        supprimer : function ()

        {

            var tbody = document.getElementById('liste-emballage');

            var row = this.parentNode.parentNode;

            var index = 0;

            while (row = row.previousSibling)

            {

                if (row.tagName) { index++; }

            }

            tbody.deleteRow(index);

            EMB.nbEmballage--;

            if (EMB.nbEmballage == 0)

            {

                var tr = tbody.insertRow(0);

                var td = tr.insertCell(0);

                td.setAttribute('colSpan', 3);

                td.appendChild(document.createTextNode('Aucun emballage'));

            }

        },

        check : function ()

        {

            if (EMB.nbEmballage < 1) alert('Il faut au moins 1 emballage');

            return EMB.nbEmballage > 0;

        }

    };

function ShowElem(idelem)

{

document.getElementById(idelem).style.display='block';

}

function HideElem(idelem)

{

document.getElementById(idelem).style.display='none';

}
function init(){
HideElem('page');
}
//window.onload = HideElem('page');
window.onload = function()
{
init();
}




//--></script>

<?php
$prix = $_GET['test'];
print("<center>2==>$prix</center>");

If (isset($_POST['btnSubmit']))
{
$server="l********";
$user="***";
$pass="*****";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$refPdt = $prix; // provient de l'url, ou du tableau POST si tu l'a mis en champ hidden
$fourrage = 1;
$values = array();
echo $refPdt;
foreach ($_POST['emballage'] as $emballage)

{

    $values[] = '(' . $refPdt . ', ' . $emballage[0] . ', ' . $emballage[1] . ', ' .$fourrage. ')';

}

$requete = 'INSERT INTO `recette` (ref_pdt,code_m,qte_m,fourrage_rctt) VALUES ' . implode(',', $values);

echo '<br>';
echo $requete;
echo $refPdt;
//$query2=mysql_query($requete) or die ('erreur');
echo ' fourrage ajoutées';
echo '<br>';
echo '<FORM method="GET" ACTION="../essai/main_oeuvre.php">';
echo '<INPUT TYPE="SUBMIT" VALUE="next">';
echo '<input type="hidden" name="test" value="'.$refPdt.'">';
echo '</FORM>';
/////////////////////////////////////////////
}
else
{
?>

<body>
Est-ce que votre produit à du fourrage?
<form id='formulaire' action='#' method='post' onsubmit='return EMB.check();'>
<input type="radio" name="fourrage"  value="fourrage2" CHECKED onclick="ShowElem('texte2');HideElem('page')"> non
<input type="radio" name="fourrage"  value="fourrage1" onclick="ShowElem('page');HideElem('texte2')" > oui


<div id="page">

<?php

$prix = $_GET['test'];
print("<center>2==>$prix</center>");



if (count($_POST))


    echo '<pre>' . print_r($_POST, true) . '</pre>';

$server="********";
$user="*****";
$pass="*********";
$db="pdr";
mysql_connect($server,$user,$pass) or die('erreur de connexion');
mysql_select_db($db) or die ('impossible de se connecter a la base'); 
$sql2="SELECT code_m, nom_m FROM matiere;";
$query2= mysql_query($sql2) or die('erreur');
$nb2= mysql_num_rows($query2);
	if ($nb2 == null){
					echo "Pas de produit disponible.";
	} else {
			echo "<div>";
			echo "<p>";
			echo '<label for="produit1">Produit : </label>';
			echo '<select id="emballage" name="emballage">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["code_m"].'">'.$list2["nom_m"].'</option>';
		}
	}

?>
        
</select>
<label for="quantite">Quantité : </label>
<input type="text" id="quantite_emb" name="quantite_emb" value="" size="3" />
<input type="button" id="ajouter" name="ajouter" value="Ajouter" onclick="EMB.ajouter();" />
</p>
<table>
<thead>
<tr><th>Produit</th><th>Quantité</th><th>Action</th></tr>
</thead>
<tbody id="liste-emballage">
<tr><td colspan="3">Aucun produit</td></tr>

</tbody>
</table>
<p><input type="submit" id="btnSubmit" name="btnSubmit" value="Valider" /></p>
<input type="hidden" name="test" value="<?php '.$refPdt.'?>">
</form>
</div>

<div id="texte2" style="display:none">
<?php 
echo '<FORM method="GET" ACTION="../emballage.php">';
echo '<INPUT TYPE="SUBMIT" VALUE="a la page suivante">';
echo '<input type="hidden" name="test" value="'.$prix.'">';
echo '</FORM>';
?></div>





</body>
<?php
}
echo 'bonbon';
print_r($_POST)



?>


</html>




Ma page fonctionne le tableau apparait bien quand je clic sur oui, mais en faiteje voulait rajouter un bouton (pour passer a la page suivante) lorsque il reste sur le non. Je pensais qu'il fallait rajouter le code désirer dans la seconde partir du code



<div id="texte2" style="display:none">
<?php 
echo '<FORM method="GET" ACTION="../emballage.php">';
echo '<INPUT TYPE="SUBMIT" VALUE="a la page suivante">';
echo '<input type="hidden" name="test" value="'.$prix.'">';
echo '</FORM>';
?></div>


mais cela ne s'affiche pas je ne comprend pas pourquoi, si quelqu'un pourrait m'aiguillez pour resoudre le probleme.

Merci

guigui69
Bonjour à tous, c'est bon je suis arrivé a faire affiché se que je voulait, mais j'ai encore un petit souci.

En fait par défaut lorsque quand j'en arrive sur la page la réponse par défaut est non. Et la partie qui devrait être visible n'apparait pas.

Je suis obliger de clic une fois sur le bouton "non" (qui est déjà sélectionné) pour que la seconde partit de ma page apparait. Comment faire pour que cela apparaisse directement?

Merci d'avance pour votre aide

guigui69