Exécuter la requête CURL dans AJAX
Résolu
ananias8686
Messages postés
86
Date d'inscription
Statut
Membre
Dernière intervention
-
ananias8686 Messages postés 86 Date d'inscription Statut Membre Dernière intervention -
ananias8686 Messages postés 86 Date d'inscription Statut Membre Dernière intervention -
Je voudrais afficher le résultat d'un script php dans une input text.
Lorsque l'IBAN est entré, le clique sur le champ BIC devrait afficher le BIC correspondant.
Mon code php contient une variable($iban), une fois cette variable est entré, le script returne le BIC correspondant.
Je voudrais récupérer le champ (input type id=iban) et l'envoyer dans ma variable($iban) afin de récupérer le BIC dans le formulaire.
J'ai essayer de le faire avec ajax mais sans succès.
https://forums.commentcamarche.net/forum/affich-36558996-verifier-que-l-iban-rentre-est-correct-puis-afficher-le-bic#p36561002
Code html avec script js
Code php(curl.php)
Comment envoyer la variable
Je serais reconnaissant pour toutes les idées.
Lorsque l'IBAN est entré, le clique sur le champ BIC devrait afficher le BIC correspondant.
Mon code php contient une variable($iban), une fois cette variable est entré, le script returne le BIC correspondant.
Je voudrais récupérer le champ (input type id=iban) et l'envoyer dans ma variable($iban) afin de récupérer le BIC dans le formulaire.
J'ai essayer de le faire avec ajax mais sans succès.
https://forums.commentcamarche.net/forum/affich-36558996-verifier-que-l-iban-rentre-est-correct-puis-afficher-le-bic#p36561002
Code html avec script js
<form action="" method="post"> <label>IBAN</label> <input id="iban" type="text"/> <label>BIC</label> <input id="bic" readonly type="text"></input> </form> <script type="text/javascript"> $("#iban").on("blur",function(){ var iban = $(this).val(); getBIC(iban); }); function getBIC(iban){ $.ajax({ url: 'curl.php', // mon script curl pour afficher le Bic data: { // je ne sais quoi envoyer ici }, success: function(result) { if(typeof(result)!="undefined" && result!=null){ if(result.valid) { console.log(result); $("#bic").val(result.bic); }else{ alert ("IBAN non valide"); } } else{ alert ("No result"); } }, }); } </script> <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"> </script>
Code php(curl.php)
<?php include_once('simple_html_dom/simple_html_dom.php'); /* Utilisation de Curl */ //On stock la valeur des variables POST $url='https://bank.codes/iban/validate/'; $iban=''; $data=array( 'iban' => $iban) ; $fields_string = http_build_query($data); //Initialisation de curl dans $curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //Page sur laquelle envoyer les POST autrement dit la page vers laquelle pointe le formulaire curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string); //On envoie les valeurs curl_setopt($ch, CURLOPT_FAILONERROR, true); // Required for HTTP error codes to be reported via our call to curl_error($ch) curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($ch); //Recuparation de la page curl_close($ch); $html = file_get_html($data) ; $pattern='[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}'; //regex pour BIC EU preg_match_all('/'.$pattern.'/', $data, $out); print_r($out[0][0]); // clean up memory $html->clear(); unset($html); ?>
Comment envoyer la variable
var iban = $(this).val()dans le code php afin d'executer la requête curl?
Je serais reconnaissant pour toutes les idées.
7 réponses
Bonjour,
Tu lui passe les paramètres que tu souhaites :
et dans le code PHP .. tu les récupère
Par contre, pour récupérer proprement les données ensuite dans ton js, il faut indiquer que ton ajax attend du JSON
et côté php, renvoyer le résultat au format JSON
data: { // je ne sais quoi envoyer ici },
Tu lui passe les paramètres que tu souhaites :
type: "POST", data: { iban:iban },
et dans le code PHP .. tu les récupère
$iban = !empty($_POST['iban']) ? $_POST['iban'] : null;
Par contre, pour récupérer proprement les données ensuite dans ton js, il faut indiquer que ton ajax attend du JSON
$.ajax({ type: "POST", 'curl.php', data: { iban:iban }, dataType: "json"
et côté php, renvoyer le résultat au format JSON
// print_r($out[0][0]); echo json_encode($out[0][0]); // renvoi au format JSON. !!Attention à ne rien afficher d'autre dans ce script sinon le format json ne sera pas valide
Donc il t'indique une erreur 500 'internal server error'
Ce n'est donc pas un souci côté Javscript .... Le souci se situe au niveau du code php.
As tu procédé aux corrections que je t'avais donné ?
As tu activé l'affichage des erreurs PHP ?
Peux tu également nous montrer l'onglet "parametres" dans la console sur ton ajax qu'on voit ce que tu envois comme données ?
Ce n'est donc pas un souci côté Javscript .... Le souci se situe au niveau du code php.
As tu procédé aux corrections que je t'avais donné ?
As tu activé l'affichage des erreurs PHP ?
Peux tu également nous montrer l'onglet "parametres" dans la console sur ton ajax qu'on voit ce que tu envois comme données ?
J'ai bien effectué les corrections,
Quand j'execute curl.php
Réponse de l'onglet "parametres" dans la console

Curl.php
index.html(code js inclus)
Quand j'execute curl.php
Notice: Undefined offset: 0 in /home/public_html/aaa/hello/curl.php on line 37car variable non reçu (je pense)
null
Réponse de l'onglet "parametres" dans la console
Curl.php
<?php //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); include_once('simple_html_dom.php'); /* Utilisation de Curl */ //On stock la valeur des variables POST $iban = !empty($_POST['iban']) ? $_POST['iban'] : null; $url='https://www.ibancalculator.com/validate/'.$iban.'/'; $data=array( 'tx_valIBAN_pi1[iban]' => $iban) ; $fields_string = http_build_query($data); //Initialisation de curl dans $curl $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //Page sur laquelle envoyer les POST autrement dit la page vers laquelle pointe le formulaire curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string); //On envoie les valeurs curl_setopt($ch, CURLOPT_FAILONERROR, true); // Required for HTTP error codes to be reported via our call to curl_error($ch) curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($ch); //Recuparation de la page curl_close($ch); $html = file_get_html($url); $pattern='[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}'; //regex pour BIC EU preg_match_all('/'.$pattern.'/', $html->plaintext, $out); echo json_encode($out[0][0]) ; // clean up memory $html->clear(); unset($html); ?>
index.html(code js inclus)
<script> $("#iban").on("blur",function(){ var iban = $(this).val(); getBIC(iban); }); function getBIC(iban){ $.ajax({ type: "POST", url:'curl.php', data: { iban:iban }, dataType: "json", success: function(result) { if(typeof(result)!="undefined" && result!=null){ if(result.valid) { console.log(result); $("#bic").val(result.bic); }else{ alert ("IBAN non valide"); } } else{ alert ("No result"); } }, error: function (err) { console.log("Erreur Ajax : ",err); alert("Erreur Ajax ! Regardez la console pour plus d’informations..."); }, }); } </script>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai bien remplacé la ligne 37
Quand j'execute directement curl.php
Le clic sur le champ bic retourne l'erreur ajax "IBAN non valide"
Quand j'execute directement curl.php
{"result":[[],[]],"debug":null}
Le clic sur le champ bic retourne l'erreur ajax "IBAN non valide"
Bonjour,
Dans j'ai d'abord fait un essai pour mon fichier curl.php ligne 37 j'ai mis
J'ai ensuite modifier la variable par
Dans mon Ajax ligne 22 j'ai bien mis
Je ne sais pas d'où provient le problème.
Dans j'ai d'abord fait un essai pour mon fichier curl.php ligne 37 j'ai mis
echo json_encode(array('bic'=>$out[0][0]));en insérant un Iban dans $iban, ça me sort ce json {"bic":"GEBABEBB"}.
J'ai ensuite modifier la variable par
$iban=!empty($_POST['iban']) ? $_POST['iban'] : null;
Dans mon Ajax ligne 22 j'ai bien mis
$("#bic").val(result.bic);mais j'obtiens toujours l'erreur "IBAN non valide", ça ne retourne pas le BIC.
Je ne sais pas d'où provient le problème.
Pourriez-vous m'aider un peu plus
Merci
Merci
T'aider un peu plus reviendrait à écrire le code à ta place....
Regardes ton code JS ..
Tu as
Ton "message d'erreur"' est celui la :
Tu vois qu'il apparait dans le ELSE.
C'est donc que la condition n'est pas la bonne....
Regardes ton code JS ..
Tu as
if(result.valid) { console.log(result); $("#bic").val(result.bic); } else { alert ("IBAN non valide"); }
Ton "message d'erreur"' est celui la :
"IBAN non valide"
Tu vois qu'il apparait dans le ELSE.
C'est donc que la condition n'est pas la bonne....
Merci pour votre aide
Le clic sur le champ bic ne retourne pas le bic correspondant.
Je pense que la variable($iban) n'est pas récupérer dans curl.php
Dans mon formulaire
Par contre quand j'envoie un IBAN dans la variable($iban) dans curl.php ça me renvoie juste je sais pas si c'est du json.
As tu regardé dans la console de ton navigateur ce qui s'y passait ?
L'appel ajax se fait ?
Quelle réponse obtiens tu ? (dans la console toujours...) ?
A noter que pour débuguer facilement l'ajax, je te conseilles d'utiliser FireFox. La console est plus simple pour l'ajax.
Il faut, bien entendu, activer le debugage du XHR.
ensuite, regarder ce qui est envoyé/recu en dépliant la petite fleche qui se trouve au début de la ligne;