Exécuter la requête CURL dans AJAX [Résolu]

Signaler
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
-
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
-
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
<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

Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
Bonjour,
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



Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Bonjour
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
form action="" method="post"

Par contre quand j'envoie un IBAN dans la variable($iban) dans curl.php ça me renvoie juste
"GEBABEBB"
je sais pas si c'est du json.
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842 >
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Le fait de faire de l'ajax rend ton
<form action="" method="post">
inutile...
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;
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

J'ai inserer un IBAN puis j'ai cliquer sur le champs BIC
Voici le resultat


J’obtiens l'alerte "IBAN non valid" de AJAX
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
L'écran que tu nous montre n'est pas le résultat de la requête AJAX. (tu n'es même pas dans l'onglet console...)

Il nous faut l'onglet parametres et l'onglet réponse de l'ajax
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842 >
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020

Dans la partie JS de ton ajax, il faudrait également mettre le "error"
error: function (err) {
   console.log("Erreur Ajax : ",err);
   alert("Erreur Ajax !  Regardez la console pour plus d’informations...");
}
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Bonjour
J'ai ajouter le "error", la console renvoie 'null' avec l'erreur AJAX "Erreur Ajax ! Regardez la console pour plus d’informations..."


Voici le résultat de la console


Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
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 ?
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

J'ai bien effectué les corrections,
Quand j'execute curl.php
Notice: Undefined offset: 0 in /home/public_html/aaa/hello/curl.php on line 37
null
car variable non reçu (je pense)

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>

Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
Remplace la ligne 37
echo json_encode($out[0][0]) ;

par
echo json_encode($out) ;
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842 >
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020

même mieux..
echo json_encode(array('result'=>$out,'debug'=>$iban)) ;
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

J'ai bien remplacé la ligne 37
Quand j'execute directement curl.php
{"result":[[],[]],"debug":null}

Le clic sur le champ bic retourne l'erreur ajax "IBAN non valide"
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
Tu pourrais nous montrer l'onglet réponse de ta requête ajax dans la console
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Veuillez bien m'excuser pour le délais de réponse. J'ai eu un problème avec mon navigateur Firefox(impossible de le démarrer pour moment), j'ai donc utiliser Firebug pour la reponse ajax



Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
Donc c'est bon.
Tu n'as plus qu'à utiliser le résultat dans ton code js.
Visiblement ton appel ajax a fonctionné...
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
>
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020

Bonjour,
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.
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842 >
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Dans ton JS tu testes :
if(result.valid) {
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

Pourriez-vous m'aider un peu plus
Merci
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
T'aider un peu plus reviendrait à écrire le code à ta place....

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....
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
>
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020

J'ai mis $("#bic").val(result.bic); dans le else ça marche le Bic s'affiche correctement par contre je ne sais pas pourquoi ce code ne marche pas:
if(result.valid) {        
   console.log(result); 
   $("#bic").val(result.bic); 
 } else {
    alert ("IBAN non valide");
 }


Pourriez-vous m'expliquer unpeu
Merci
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842 >
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020

T'es nouille ........
Je t'ai indiqué que c'était le CONDITION qui n'était pas bonne
Donc dans le
if(result.valid) {


Est-ce que, celon toi, dans la réponse de ton ajax tu as un "valid" ??
La réponse est NON

C'est là qu'il fallait mettre bic ... mais surtout.. ne pas toucher au else ...
Messages postés
65
Date d'inscription
samedi 9 février 2019
Statut
Membre
Dernière intervention
29 avril 2020
>
Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020

Donc normalement
if(result) {
		      
	console.log(result);
			
	$("#bic").val(result.bic); 
            }else{
	      alert("IBAN non valide") ;
	        }