Requête non prise en compte dans une page orpheline
Résolu
Sinistrus
Messages postés
1010
Date d'inscription
Statut
Membre
Dernière intervention
-
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Le titre peut paraître bizarre mais bon, je suis face a une situation qui fonctionne en lien direct mais ne fonctionne pas lors d'un appel d'un site extérieur.
Je m'explique :
Un site extérieur fait appel à une page de mon site
Dans une des fonctions, je fais appel à un
Seulement, dans cette page j'ai ceci :
J'ai mis des espions partout, dans la page
Le script est lu et s'arrête "dans" le
Donc tout ce qui est dans le
Je n'arrive pas a comprendre pourquoi, et même lorsque je faire un
Cependant, si je lance directement la page
Pouvez-vous me conseiller svp ?
Merci d'avance
Le titre peut paraître bizarre mais bon, je suis face a une situation qui fonctionne en lien direct mais ne fonctionne pas lors d'un appel d'un site extérieur.
Je m'explique :
Un site extérieur fait appel à une page de mon site
ipn.phpdans laquelle j'ai des fonctions PHP.
Dans une des fonctions, je fais appel à un
include("_mail.php");. Cette page est bien lue lors de la vérification du site extérieur.
Seulement, dans cette page j'ai ceci :
<?php $MY_REFR = "BC007"; $Stat = $pdo->query("SELECT R.NIC_Handle, R.Reference, U.NIC_Handle, U.Phone_1 FROM tb_shop_recap R LEFT JOIN tb_user U ON U.NIC_Handle = R.NIC_Handle WHERE R.Reference='".$MY_REFR."' "); while($data = $Stat->fetch(PDO::FETCH_ASSOC)){ ?> ... <?php echo $data["Email"]; ?> ... <?php } ?>
J'ai mis des espions partout, dans la page
ipn.phpet dans la page
_mail.php
Le script est lu et s'arrête "dans" le
while, là où il doit afficher
echo $data["Email"].
Donc tout ce qui est dans le
whileest obsolète.
Je n'arrive pas a comprendre pourquoi, et même lorsque je faire un
try{}je n'obtiens aucune erreur SQL.
Cependant, si je lance directement la page
_mail.phpdans mon navigateur, le
whileest lu.
Pouvez-vous me conseiller svp ?
Merci d'avance
Configuration: Windows / Firefox 65.0
A voir également:
- Requête non prise en compte dans une page orpheline
- Supprimer une page dans word - Guide
- Créer un compte google - Guide
- Imprimer tableau excel sur une page - Guide
- Installer windows 10 sans compte microsoft - Guide
- Traduire une page en français - Guide
5 réponses
Bonjour
Et le include de ta connexion ??
Au passage.. applique ceci:
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et le include de ta connexion ??
Au passage.. applique ceci:
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Bonjour
Ta requête n'est pas vraiment une requête préparée : le bindParam que tu fais est bidon, puisque le :MY_REFR n'apparaît nulle part dans ta requête. Mais ça m'étonnerait que ce soit la cause du problème.
Tu parles de résultats différents donnés par ton site et par un "site extérieur". Il faudrait préciser certaines choses. D'abord, tu te plains au départ de _mail.php dont le comportement diffère selon la manière de l'appeler, mais le code que tu donnes est celui de _sms_echec.php. C'est le même problème ?
Je suppose que le ipn.php est la partie de ton site qui appelle ce fichier : peux-tu donner la partie du code du site extérieur qui fait appel à ce même fichier ?
Ta requête n'est pas vraiment une requête préparée : le bindParam que tu fais est bidon, puisque le :MY_REFR n'apparaît nulle part dans ta requête. Mais ça m'étonnerait que ce soit la cause du problème.
Tu parles de résultats différents donnés par ton site et par un "site extérieur". Il faudrait préciser certaines choses. D'abord, tu te plains au départ de _mail.php dont le comportement diffère selon la manière de l'appeler, mais le code que tu donnes est celui de _sms_echec.php. C'est le même problème ?
Je suppose que le ipn.php est la partie de ton site qui appelle ce fichier : peux-tu donner la partie du code du site extérieur qui fait appel à ce même fichier ?
Bonjour le père,
- Aucun code omis utile à mon problème parce que de ce côté là tout va bien.
- le problème du SELECT a résolu le problème. je faisais la suppression et tentais de récupérer les valeurs... tu as mis dans le mie.
Je crois que j'ai vraiment besoin de congés...
Merci à Jordans45 et à toi le père pour votre aide.
Je n'avais jamais fais de requête préparée pour le SELECT auparavant, tu dis que le code est bidon, pourquoi ?
- Aucun code omis utile à mon problème parce que de ce côté là tout va bien.
- le problème du SELECT a résolu le problème. je faisais la suppression et tentais de récupérer les valeurs... tu as mis dans le mie.
Je crois que j'ai vraiment besoin de congés...
Merci à Jordans45 et à toi le père pour votre aide.
Je n'avais jamais fais de requête préparée pour le SELECT auparavant, tu dis que le code est bidon, pourquoi ?
Par ce qu'il faut utiliser une variable nommée ( avec les : devant ) et pas directement la variable php.
Comme ceci :
Comme ceci :
SELECT R.NIC_Handle, R.Reference, U.NIC_Handle, U.Email, U.Nom, U.Prenoms, U.Civilite FROM tb_shop_recap R LEFT JOIN tb_user U ON U.NIC_Handle = R.NIC_Handle WHERE R.Reference= :MY_REFR "; "); $Stat->bindParam(':MY_REFR', $MY_REFR); $Stat->execute(); $data_rep = $Stat->fetch(PDO::FETCH_ASSOC);
"Aucun code omis utile à mon problème" Ça n'est pas la même chose que "Aucun code omis" tout court. Et comme tu ne comprends pas d'où vient ton problème, comment sais-tu que ce que tu ne mets pas n'a pas de rapport avec ton problème ?
Jordane t'a montré comment il fallait vraiment faire la requête préparée.
Ne me demande pas pourquoi j'ai écrit que ton bind_param, relis ce que j'avais écrit en te le disant. Il n'y a pas de :MY_REFR dans ta requête : à quoi peut bien servir un bind_param sur :MY_REFR ? Et que ce soit une requête SELECT ou pas n'a aucun rapport : le rôle de bind_param reste exactement le même. Et tu en as déjà fait.
J'ai l'impression que tu l'as rajouté uniquement parce que Jordane t'a recommandé d'utiliser des requêtes préparées et que le bind_param, ça fait "requête préparée".
Jordane t'a montré comment il fallait vraiment faire la requête préparée.
Ne me demande pas pourquoi j'ai écrit que ton bind_param, relis ce que j'avais écrit en te le disant. Il n'y a pas de :MY_REFR dans ta requête : à quoi peut bien servir un bind_param sur :MY_REFR ? Et que ce soit une requête SELECT ou pas n'a aucun rapport : le rôle de bind_param reste exactement le même. Et tu en as déjà fait.
J'ai l'impression que tu l'as rajouté uniquement parce que Jordane t'a recommandé d'utiliser des requêtes préparées et que le bind_param, ça fait "requête préparée".
Voici ma page config.php
Et voici la page en question :
<?php define("MYSQL_HOST", "***"); define("MYSQL_BASE", "***"); define("MYSQL_USER", "***"); define("MYSQL_PASS", "***"); define("MYSQL_PORT", "***"); // Connexion PDO try { $pdo = new PDO('mysql:host='.MYSQL_HOST.';port='.MYSQL_PORT.';dbname='.MYSQL_BASE, MYSQL_USER, MYSQL_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("SET CHARACTER SET utf8"); } catch(PDOException $e){echo "<div class='alert alert-warning'>".$e->getMessage()."</div>"; die();} error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); ?>
Et voici la page en question :
<?php include_once($_SERVER['DOCUMENT_ROOT']."/includes/config.php"); // Espion lu try{$Stat = $pdo->query("SELECT R.NIC_Handle, R.Reference, U.NIC_Handle, U.Phone_1 FROM tb_shop_recap R LEFT JOIN tb_user U ON U.NIC_Handle = R.NIC_Handle WHERE R.Reference='".$MY_REFR."' "); // Espion lu while($data = $Stat->fetch(PDO::FETCH_ASSOC)){ // Espion non lu }}catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} // Espion lu ?>
J'ai mis un
Je n'ai aucun message d'erreur, sauf que sur cette page, je n'ai aucun résultat (c'est vide) :
Pourtant sur cette même page, si je l'ouvre avec le navigateur, j'ai un résultat.
require_once, j'ai fais une
requête préparée, j'ai ajouté les
erreurs PHP:
<?php ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', dirname(__FILE__) . '/log_error_php.txt'); error_reporting(E_ALL); try{$Stat = $pdo->prepare("SELECT R.NIC_Handle, R.Reference, U.NIC_Handle, U.Email FROM tb_shop_recap R LEFT JOIN tb_user U ON U.NIC_Handle = R.NIC_Handle WHERE R.Reference='".$MY_REFR."'"); $Stat->bindParam(':NIC_Handle', $NIC_Handle); $Stat->bindParam(':Email', $Email); $Stat->execute(); $data = $Stat->fetch(PDO::FETCH_ASSOC); echo $data["NIC_Handle"]."<br>"; echo $data["Email"]."<br>"; echo $MY_REFR."<br>"; }catch(PDOException $e){echo $e->getMessage(); print_r($data);} ?>
Je n'ai aucun message d'erreur, sauf que sur cette page, je n'ai aucun résultat (c'est vide) :
echo $data["NIC_Handle"]."<br>"; echo $data["Email"]."<br>"; echo $MY_REFR."<br>";
Pourtant sur cette même page, si je l'ouvre avec le navigateur, j'ai un résultat.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Rrrrraaaahhhh ! ça me prends la tête !!!
ipn.php
_sms_echec.php
Résultat donné par le site extérieur :
Test de la requête dans phpmyadmin :
Test de l'ouverture de la page _sms_echec.php depuis mon site :
Voici tout ce que contient mes pages... aucun code omis.
Je ne comprends toujours pas pourquoi il n'affiche rien !
ipn.php
<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/config.php"); require_once($_SERVER['DOCUMENT_ROOT']."/modules/sms/smsenvoi.php"); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', dirname(__FILE__) . '/log_error_php.txt'); error_reporting(E_ALL); function transactionGeneralFailure($pdo, $data) { $MY_REFR = $data->Reference; $MY_NUMB = $data->MSISDN; $MY_AMNT = $data->Amount; // Ici le code fonctionne depuis l'appel du site extérieur $Fact_SU = $pdo->exec("DELETE FROM tb_shop_recap WHERE Reference='".$MY_REFR."' "); $Fact_BC = $pdo->exec("INSERT INTO tb_shop_BC (NIC_Handle, Libelle_TAG, Quantite) SELECT NIC_Handle, Libelle_TAG, Quantite FROM tb_shop_FA WHERE tb_shop_FA.Reference = '".$MY_REFR."' "); $Fact_FA = $pdo->exec("DELETE FROM tb_shop_FA WHERE Reference='".$MY_REFR."' "); echo "Échec de transaction générale"; include("_sms_echec.php"); }
_sms_echec.php
<?php $user = NULL; try{$Stat = $pdo->prepare(" SELECT R.NIC_Handle, R.Reference, U.NIC_Handle, U.Email, U.Nom, U.Prenoms, U.Civilite FROM tb_shop_recap R LEFT JOIN tb_user U ON U.NIC_Handle = R.NIC_Handle WHERE R.Reference='".$MY_REFR."' "); $Stat->bindParam(':MY_REFR', $MY_REFR); $Stat->execute(); $data_rep = $Stat->fetch(PDO::FETCH_ASSOC); if($data_rep["Civilite"] == "Masculin") {$user = "M. ".$data_rep["Nom"]." ".$data_rep["Prenoms"];} if($data_rep["Civilite"] == "Féminin") {$user = "Mme ".$data_rep["Nom"]." ".$data_rep["Prenoms"];} if($data_rep["Civilite"] == "Male") {$user = "Mr ".$data_rep["Nom"]." ".$data_rep["Prenoms"];} if($data_rep["Civilite"] == "Female") {$user = "Mrs ".$data_rep["Nom"]." ".$data_rep["Prenoms"];} echo "[".$data_rep["NIC_Handle"]."]"; echo "(".$data_rep["Email"].")"; echo "{".$MY_REFR."}"; echo "/".$user."/"; }catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>"; print_r($data_rep);} ?>
Résultat donné par le site extérieur :
Échec de transaction générale[](){BC19000043}//
Test de la requête dans phpmyadmin :
NIC_Handle Reference NIC_Handle Email Nom Prenoms Civilite
AA32938 BC19000041 AA32938 email@yahoo.fr SNOW John Masculin
Test de l'ouverture de la page _sms_echec.php depuis mon site :
[AA32938](email@yahoo.fr){BC19000043}/M. SNOW John/
Voici tout ce que contient mes pages... aucun code omis.
Je ne comprends toujours pas pourquoi il n'affiche rien !
le include de ma connexion est correct.
Lorsque je lance la page depuis le navigateur, il affiche bien la valeur souhaitée.
Je regarde ton lien.
Donnes ton code COMPLET