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

Résolu/Fermé
Flo-mdt - 20 mai 2021 à 21:47
 Flo-mdt - 21 mai 2021 à 23:28
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 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
21 mai 2021 à 07:38
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
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 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
21 mai 2021 à 12:47
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
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 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
21 mai 2021 à 17:39
et le code JS qui permet de remplir le champ "cours" ?
0
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 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
21 mai 2021 à 20:35
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 38142 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024
21 mai 2021 à 23:28
Merci beaucoup pour votre aide tout fonctionne !

Cordialement Florian
0