web-dev-qa-db-fra.com

Passez la variable Javascript à PHP POST

Duplicata possible:
demande de publication JavaScript comme un formulaire soumis

J'ai une valeur calculée en JS que je voudrais transmettre dans le cadre d'un formulaire d'entrée à un script PHP. Comment puis-je obtenir une valeur la valeur JS pour le PHP en tant que POST?

Fondamentalement, lors de la soumission, j'ai besoin que le total var soit transmis par la poste au script suivant.

La première idée qui vient à l'esprit est de créer un formulaire de saisie invisible qui a de la valeur et est entré avec le formulaire, est-ce possible?

19
Peter Kazazes

Oui, vous pouvez utiliser un <input type="hidden" /> et définissez la valeur de ce champ masqué dans votre code javascript afin qu'il soit publié avec vos autres données de formulaire.

14
joshuahealy

Il existe de nombreuses façons d'y parvenir. En ce qui concerne la façon dont vous demandez, avec un élément de formulaire caché.

créez cet élément de formulaire à l'intérieur de votre formulaire:

<input type="hidden" name="total" value="">

Donc, votre formulaire comme celui-ci:

<form id="sampleForm" name="sampleForm" method="post" action="phpscript.php">
<input type="hidden" name="total" id="total" value="">
<a href="#" onclick="setValue();">Click to submit</a>
</form>

Ensuite, votre javascript quelque chose comme ceci:

<script>
function setValue(){
    document.sampleForm.total.value = 100;
    document.forms["sampleForm"].submit();
}
</script>
14
John Petrilli

Vous pouvez le faire en utilisant Ajax. J'ai une fonction que j'utilise pour quelque chose comme ça:

function ajax(elementID,filename,str,post)
{
    var ajax;
    if (window.XMLHttpRequest)
    {
        ajax=new XMLHttpRequest();//IE7+, Firefox, Chrome, Opera, Safari
    }
    else if (ActiveXObject("Microsoft.XMLHTTP"))
    {
        ajax=new ActiveXObject("Microsoft.XMLHTTP");//IE6/5
    }
    else if (ActiveXObject("Msxml2.XMLHTTP"))
    {
        ajax=new ActiveXObject("Msxml2.XMLHTTP");//other
    }
    else
    {
        alert("Error: Your browser does not support AJAX.");
        return false;
    }
    ajax.onreadystatechange=function()
    {
        if (ajax.readyState==4&&ajax.status==200)
        {
            document.getElementById(elementID).innerHTML=ajax.responseText;
        }
    }
    if (post==false)
    {
        ajax.open("GET",filename+str,true);
        ajax.send(null);
    }
    else
    {
        ajax.open("POST",filename,true);
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        ajax.send(str);
    }
    return ajax;
}

Le premier paramètre est l'élément que vous souhaitez modifier. Le deuxième paramètre est le nom du nom de fichier que vous chargez dans l'élément que vous modifiez. Le troisième paramètre est le GET ou POST données que vous utilisez, donc par exemple "total = 10000 & othernumber = 999". Le dernier paramètre est vrai si vous voulez utiliser POST ou false si vous voulez GET.

9
user1294348

Votre idée d'un élément de formulaire caché est solide. Quelque chose comme ça

<form action="script.php" method="post">
<input type="hidden" name="total" id="total">
</form>

<script type="text/javascript">
var element = document.getElementById("total");
element.value = getTotalFromSomewhere;
element.form.submit();
</script>

Bien sûr, cela changera l'emplacement en script.php. Si vous voulez faire cela de manière invisible à l'utilisateur, vous voudrez utiliser AJAX. Voici un exemple jQuery (par souci de concision). Aucun formulaire ou entrée cachée requis

$.post("script.php", { total: getTotalFromSomewhere });
4
Phil