IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Passer une variable javascript en php


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut Passer une variable javascript en php
    Bonjour,
    J'ai lu pas mal de sujet a ce propos mais je n'ai pas réussi a trouver une solution qui marchait.

    J'ai une page saisie.php qui exécute la fonction suivante pour compter le nombre de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!--SCRIPT QUI COMPTE LE NOMBRE DE LIGNES-->
    <script language=javascript>
    function count(tableau){
    	var tableau = document.getElementById(tablecontrat);
    	//Calcul du nombre de ligne dans le tableau 
    	var trs = tableau.getElementsByTagName('tr').length;
     
    	}
     
    </script>
    puis celle ci qui fait le lien vers ma page insert.php (si il y a des erreurs merci de me les dire^^)
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <INPUT TYPE="submit" value="Valider La saisie" onclick="count()">

    ma page insert.php, où je voudrais récupérer mon nombre de lignes (trs) afin de faire une boucle sur une requete pour inserer chaque ligne dans la BDD:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    include("fonction.connect.php");
    $connect_db = connect();
     
    $trs=$_POST["trs"];
    ....
    ....
    ?>

    voila, sur les forums j'ai vu que l'on devait passer par GET ou POST (c'est ce que je fais ici mais je dois mal l'utiliser....)

    pourriez vous m'éclairer svp?
    merci beaucoup.

    PS : voici l'erreur que je reçois:
    Notice: Undefined index: trs in C:\Program Files\.....\Insert.php on line 38

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function count(tableau){
    	var tableau = document.getElementById(tablecontrat);
    	//Calcul du nombre de ligne dans le tableau 
    	var trs = tableau.getElementsByTagName('tr').length;
     
    	}
    Il y a des problèmes de conception là...
    Il ne faut pas préciser de paramètre pour ta fonction puisqu'elle n'en a pas besoin...
    Ensuite, tablecontrat, c'est une variable ? Parce que si ce n'est pas le cas et que c'est l'id de ton tableau, il faut le mettre entre quotes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function count(){
    	var tableau = document.getElementById('tablecontrat');
    	//Calcul du nombre de ligne dans le tableau 
    	var trs = tableau.getElementsByTagName('tr').length;
     
    	}

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Bovino Voir le message
    [CODE]
    Ensuite, tablecontrat, c'est une variable ? Parce que si ce n'est pas le cas et que c'est l'id de ton tableau, il faut le mettre entre quotes.
    en effet c'est l'ID du tableau, j'ai modifié comme tu me l'as dis merci.
    Ca ne marche toujours pas.

  4. #4
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Tu as une balise input, j'en déduit donc que tu as un formulaire en méthode POST. Fait donc comme suit :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function count(){
    	var tableau = document.getElementById("tablecontrat");
    	//Calcul du nombre de ligne dans le tableau 
    	var trs = tableau.getElementsByTagName('tr').length;
    	document.forms[0].trs.value = trs;
    }
    Code XHTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form action="insert.php" method="post" onsubmit="count();">
    	<input type="hidden" name="trs" />
    	[...]
    	<input type="submit" value="Valider La saisie" />
    </form>

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Points : 209
    Points
    209
    Par défaut
    Bonjour,

    Bon, le temps de rédiger ce roman, je vois qu'il y en a qui ont dégainé plus vite... mais bon, j'envoie le message qd même...

    Si j'ai bien compris, tu souhaites transmettre à ton serveur le nombre de lignes affichés au niveau du client ?

    Il semble y avoir une erreur dans la façon d'appeler ta fonction count().
    Cette fonction prend visiblement un parametre, qui doit être l'id de ton tableau je suppose ? Or tu appelles cette fonction sans paramètre lorsque tu click sur ton bouton "submit".

    De plus, dans ta fonction count, tu tentes de récupérer un élément de la page dont l'id est la variable tablecontrat, qui n'est initialisée nulle part ?
    - Soit il s'agit d'une coquille, et il s'agit de la variable tableau passé en paramètre ?
    - Soit c'est l'id de ton tableau ? Dans ce cas, il faut l'entourer de quote.


    Ensuite, lorsque ton script est terminé, tu as une variable trs dont la valeur est le nombre de ligne de ton tableau. Toutefois, cette valeur n'a d'existence qu'au niveau de ta page web, et elle n'est jamais transmise au serveur.

    Pour transmettre cette variable à ton serveur, tu dois utiliser un FORM dans ta page (ce qui doit être le cas), dans lequel tu vas mettre une balise HTML <INPUT type="hidden" name="trs" id="trs" />. A la fin de ton script, tu vas stocker ta variable trs dans ce champs caché.

    Tu pourras ainsi récupérer cette valeur au niveau de ton script php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <!--SCRIPT QUI COMPTE LE NOMBRE DE LIGNES-->
    <script language=javascript>
    function count(idTableau){
    var tableau = document.getElementById(idTableau);
    //Calcul du nombre de ligne dans le tableau 
    var trs = tableau.getElementsByTagName('tr').length;
     
    // Stockage de la variable trs dans le champs caché portant le même nom
    document.getElementById('trs').value = trs;
    }
     
    </script>
    Ta page saisie.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <FORM ACTION="insert.php" METHOD="POST">
    <INPUT TYPE="hidden" name="trs" id="trs" />
    ...
    <INPUT TYPE="submit" value="Valider La saisie" onclick="count('tablecontrat')">
    ...
    </FORM>
    Ta page insert.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    include("fonction.connect.php");
    $connect_db = connect();
     
    $trs=$_REQUEST["trs"]; // avec la variable $_REQUEST, tu ne te préoccupes pas de savoir s'il s'agit d'un POST ou d'un GET
    ....
    ....
    ?>

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Super merci beaucoup ça marche!

    Maintenant j'aurais une autre petite question s'il vous plait^^

    Le problème se situe au niveau de la requete, je ne sais pas comment dire qu'il doit créer un nouvel enregistrement pour chaque ligne,
    voici ma boucle dans insert.php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i=1; $i<$trs; $i++)
    {
    $query2="INSERT INTO contrat(NumClient,NumContrat,JourDebut,MoisDebut,AnneeDebut,JourFin,MoisFin,AnneeFin,NomTypeContrat,Actif,MontantHT,Periodicite,Terme,Paiement) VALUES ('$NumClient','$NumContrat','$JourDebut','$MoisDebut','$AnneeDebut','$JourFin','$MoisFin','$AnneeFin','$NomTypeContrat','$Actif','$MontantHT','$Periodicite','$Terme','$Paiement')";
    mysql_query($query2) or die(mysql_error());
    }
    je ne sais pas comment dire qu'au 1er passage il doit prendre NumContrat,Numclient... de la ligne 1, au 2eme passage celui de la ligne 2...

    voici ma page de saisie:

    (a savoir le tableau a un nombre de cases variable si l'ont appuie sur ajouter contrat; il y a une case de plus...)

    voici comment j'ai fait pour ajouter des contrats:
    faut-il dire quelque chose du genre NumContrat[i] avec un "i" qui s'incrémente a chaque passage?

    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
     
    <script language="javascript">
    var numero=0;
    function AddRow0(){
    	numero++;
    	var newRow = document.getElementById('tablecontrat').insertRow(-1);
    	var newCell = newRow.insertCell(0);
    	newCell.align = 'center';
    	newCell.innerHTML = '<input type="text" name="NumContrat" 
    id="NumContrat" size="10">';
    ...
    ...
    var newCell = newRow.insertCell(5);
    	newCell.align = 'center';
    	newCell.innerHTML = '<input type="text" name="MontantHT" id="MontantHT" size="10"" >';
    	var newCell = newRow.insertCell(6);
    	newCell.align = 'center';
    	newCell.innerHTML = '<input type="text" name="Periodicite" id="Periodicite" size="10">';
    	var newCell = newRow.insertCell(7);
    	newCell.align = 'center';
    	newCell.innerHTML = '<input type="text" name="Terme" id="Terme" size="17">';
    	var newCell = newRow.insertCell(8);
    	newCell.align = 'center';
    	newCell.innerHTML = '<INPUT TYPE="radio" name="Paiement" id="Paiement" value="Effectue" checked>Effectu&eacute;';
    	var newCell = newRow.insertCell(9);
    	newCell.align = 'center';
    	newCell.innerHTML = '<INPUT TYPE="radio" name="Paiement" id="Paiement" value="Non Effectue">Non Effectu&eacute;';

    merci


    edit: Merci quand même BaBeuH ça m'a permis de comprendre mieux

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    créer de nouveaux objets de form avec des innerHTML est suicidaire ...
    Voir les contributions ..

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    créer de nouveaux objets de form avec des innerHTML est suicidaire ...
    Voir les contributions ..
    Ha bon? Peux tu me dire pourquoi cela? (désolé je débute en développement...)
    les cases créées grâce à ça sont ajoutées au tableau lorsque l'ont clique que un bouton.

    Sinon tu n'a pas d'idée pour mon problème?

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    créer de nouveaux objets de form avec des innerHTML est suicidaire ...
    Voir les contributions ..
    Voir le FAQ.

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    Voila j'ai résolu mon problème les enregistrements on bien lieux mais j'ai un autre soucis
    je récupère mes valeur de cete façon:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $NomTypeContrat=$_POST["NomTypeContrat"][$numero];
    $Actif = isset($_POST['Actif'][$numero])?$_POST['Actif'][$numero]:"Oui"; 
    $JourDebut=intval($_POST["JourDebut"][$numero]);
    ...
    ...

    et je les enregistre comme cela:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query2="INSERT INTO contrat(NumClient,NumContrat,JourDebut,MoisDebut,AnneeDebut,JourFin,MoisFin,AnneeFin,NomTypeContrat,Actif,MontantHT,Periodicite,Terme,Paiement) VALUES ('$NumClient','$NumContrat','$JourDebut','$MoisDebut','$AnneeDebut','$JourFin','$MoisFin','$AnneeFin','$NomTypeContrat','$Actif','$MontantHT','$Periodicite','$Terme','$Paiement')";
    mysql_query($query2) or die(mysql_error());

    ($numero correspond au numéro de la ligne du tableau à envoyer)

    le problème c'est que c'est la 2ème ligne (et dernière ligne) qui est transmise 2 fois dans ma BDD (et c'est normal au vue du code), si je fais un echo $numero je vois "2" (lignes 0 et 1, donc tout va bien)

    j'ai essayé de faire un for($numero=0;$numero<$nbligne;$numero++) au moment de déclarer les variables mais j'ai un message d'erreur.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($numero=0;$numero<$trs;$numero++){
    $NomTypeContrat=$_POST["NomTypeContrat"][$numero];
    $Actif = isset($_POST['Actif'][$numero])?$_POST['Actif'][$numero]:"Oui"; 
    $JourDebut=intval($_POST["JourDebut"][$numero]);
    $MoisDebut=$_POST["MoisDebut"];}

    Notice: Undefined variable: "celles entre le FOR" in C:\Program Files\EasyPHP 3.0\www\UPNETWORKS\Insert.php on line 41
    auriez vous une petite astuce pour qu'il exécute la requête pour mes 2 lignes.
    Merci

Discussions similaires

  1. [AJAX] Passer une variable javascript à du php
    Par wallouxx dans le forum jQuery
    Réponses: 3
    Dernier message: 01/10/2014, 09h18
  2. Réponses: 2
    Dernier message: 15/12/2012, 15h42
  3. Passer une variable javascript en php
    Par dam28800 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/12/2009, 15h27
  4. passer une variable javascript à un script php
    Par kawther dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 30/03/2007, 17h21
  5. [PHP-JS] Passer une variable javascript en php
    Par bibom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/08/2006, 20h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo