Récupérer des données d'une API et l'intégrer dans un calcul PHP

Résolu
Flo-mdt -  
 Flo-mdt -
Bonjour à tous,

Je suis actuellement plongé dans la création d'un petit programme de calcul qui indique les bénéfices des utilisateurs dans le domaine de la cryptomonnaie.
Le code possède un formulaire qui récupère le montant investi et à quel prix et mon problème est que je n'arrive pas intégrer la valeur du cours de la bourse pour l'intégrer dans mon calcul PHP.
J'ai le lien de l'API, mais je ne sais pas comment intégrer la valeur à mon calcul avec les deux variables du formulaire.

Voici le code du fomulaire avec pour exemple le cardano :


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Cardano</title>
<script type="text/javascript">
function formatMontant(m) {
var intlN=new Intl.NumberFormat();
return intlN.format(m);
}
/* Récupération des données de cours du Cardano */
function getCours(){
/* Appel AJAX vers cryptocompare.com */
var ajax=new XMLHttpRequest();
console.log("readyState après new : "+ajax.readyState);
/* Détection de l'avancement de l'appel */
ajax.onreadystatechange=function(){
console.log("readyState a changé et vaut : "+ajax.readyState)
}
/* Détection de la fin de l'appel */
ajax.onload = function(){
console.log("Appel AJAX terminé");
console.log(" status : "+this.status);
console.log(" response : "+this.response);
if (this.status == 200) { /* Le service a bien répondu */
try {
var json=JSON.parse(this.response); // Convertir le retour JSON
} catch(err) {
console.log("Retour JSON incorrect");
return false;
}
/* Vérifier que le JSON de retour contient bien la propriété EUR */
if (json.USD) {
var usd=formatMontant(json.USD);
document.getElementById("cours").innerHTML=usd+" $";
} else {
console.log("Retour du cours incorrect");
}
}
}
/* Détection du timeout */
ajax.ontimeout=function(){
console.log("Le service n'a pas répondu à temps : nouvel essai dans 5 sec");
/* Relancer l'appel 5 secondes plus tard */
setTimeout("getCours()", 10000);
}

/* Préparation de la requête et envoi */
var url="https://min-api.cryptocompare.com/data/price?fsym=ADA&tsyms=USD";
ajax.open("GET", url, true);
ajax.timeout=1000; /* Délai d'expiration à 1 seconde */
ajax.send();
}
/* Démarrage de l'appel */
window.onload=function(){
getCours();
setInterval("getCours()", 10000);
}
</script>


</head>
<body>
<form action="cardano.php" method="post" class="box">
<h1>Cardano</h1>
<div id="Cardano">
<div id="cours">
</div>
</div>

<input type="text" name="nbrc" placeholder=" A combien avez vous acheter vos Cardano ?" />

<input type="text" name="invest" placeholder=" Pour quel montant ?" />

<input type="submit" value="Valider" placeholder="Valider" />
</body>
</html>
<head>




Et voici la réponse au fomulaire :


<?php

if(empty($_POST['nbrc']) || empty($_POST['invest']))
{
echo '<p>Il manque des valeurs</p>';
}
else
{
if(!is_numeric($_POST['nbrc']) || !is_numeric($_POST['invest']))
{
echo '<p>Les deux valeurs doivent contenir des chiffres uniquement</p>';
}
else
{
$gain = /*c'est ici qu'il faut rajouter la valeur du cours*/ * $_POST['invest'] / $_POST['nbrc'];

echo '<p>Vous avez ' . $gain . ' $</p>';
}
}

?>


En espérant que mon explication soit assez clair

D'avance merci pour votre aide !

4 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour

Au lieu (ou "en plus") de stocker la valeur du cours dans une div,
Mets le dans un input (hidden si tu veux) dans ton formulaire.
Il sera ainsi, envoyé en même temps que tes deux autres variables lors du submit.
1
Flo-mdt
 
oui mais pourtant quand je met le input type hidden la valeur n'est pas récupéré. Il y a marqué dans le network les deux valeurs de l'utilisateur mais pour la valeur du cour il y mamarqué :

cours :

et aucune valeur n'est envoyé donc le calcul ne peux pas se faire
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Il faut mettre ce champ à l'intérieur du formulaire bien entendu....
Montre-nous ce que tu as fait sans ça nous ne pourrons pas voir ce qui cloche
0
Flo-mdt
 
voici le code :

 
  <body>
    <form action="cardano.php" method="post" class="box">
      <h1>Cardano</h1>
      <div id="Cardano">
        <div id="cours"></div>
      </div>

      <input type="text" name="nbrc" placeholder=" A combien avez vous acheter vos Cardano ?" />

      <input type="text" name="invest" placeholder=" Pour quel montant ?" />

      <input type="hidden" name="cours" id="cours" />

      <input type="submit" value="Valider" placeholder="Valider" />
</body>
</html>


et la réponse :
<?php

if(empty($_POST['nbrc']) || empty($_POST['invest']))
{
    echo '<p>Il manque des valeurs</p>';
}
else
{
    if(!is_numeric($_POST['nbrc']) || !is_numeric($_POST['invest']))
    {
        echo '<p>Les deux valeurs doivent contenir des chiffres uniquement</p>';
    }
    else
    {
        $gain =  $_POST['cours'] * $_POST['invest'] / $_POST['nbrc'];

        echo '<p>Vous avez ' . $gain . ' $</p>';
    }
}

?>


Merci pour votre aide !


EDIT : Ajout du LANGAGE dans les balises de code pour avoir la coloration syntaxique
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
et le code JS qui permet de remplir le champ "cours" ?
0
Flo-mdt
 
Oui pardon le voilà :

</style>
<script type="text/javascript">
function formatMontant(m) {
var intlN=new Intl.NumberFormat();
return intlN.format(m);
}
/* Récupération des données de cours du Cardano */
function getCours(){
/* Appel AJAX vers cryptocompare.com */
var ajax=new XMLHttpRequest();
console.log("readyState après new : "+ajax.readyState);
/* Détection de l'avancement de l'appel */
ajax.onreadystatechange=function(){
console.log("readyState a changé et vaut : "+ajax.readyState)
}
/* Détection de la fin de l'appel */
ajax.onload = function(){
console.log("Appel AJAX terminé");
console.log(" status : "+this.status);
console.log(" response : "+this.response);
if (this.status == 200) { /* Le service a bien répondu */
try {
var json=JSON.parse(this.response); // Convertir le retour JSON
} catch(err) {
console.log("Retour JSON incorrect");
return false;
}
/* Vérifier que le JSON de retour contient bien la propriété EUR */
if (json.USD) {
var usd=formatMontant(json.USD);
document.getElementById("cours").innerHTML=usd+" $";
} else {
console.log("Retour du cours incorrect");
}
}
}
/* Détection du timeout */
ajax.ontimeout=function(){
console.log("Le service n'a pas répondu à temps : nouvel essai dans 5 sec");
/* Relancer l'appel 5 secondes plus tard */
setTimeout("getCours()", 10000);
}

/* Préparation de la requête et envoi */
var url="https://min-api.cryptocompare.com/data/price?fsym=ADA&tsyms=USD";
ajax.open("GET", url, true);
ajax.timeout=1000; /* Délai d'expiration à 1 seconde */
ajax.send();
}
/* Démarrage de l'appel */
window.onload=function(){
getCours();
setInterval("getCours()", 10000);
}
</script>

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
je n'avais pas vu
tu ne peux pas avoir deux éléments html avec le même ID
donc, ton input, tu dois lui mettre un autre id ... (par exemple cours2) et ajouter une ligne dans ton JS pour y mettre la valeur

   document.getElementById("cours2").value=usd;
0
Flo-mdt > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci beaucoup pour votre aide tout fonctionne !

Cordialement Florian
0