2010-09-22 3 views
4

J'intègre actuellement un système de paiement sur mon site Web. J'ai un script de réponse qui reprend essentiellement les données du serveur sécurisé et affiche au client si le paiement a été effectué ou non. Mon problème est que l'instruction if affiche réellement les deux messages au client, même si le paiement a réussi ou échoué.PHP IF Déclaration exécutant les deux conditions

Voici l'instruction If:

<? 
if ($result == "00") && ($payersetup == "00") && ($pmtsetup =="00"){ 
?> 
Thank you 
<br/><br/> 
To return to the home page <a href="http://www.xx.com"><b><u>click here</u></b></a> 
<br/><br/> 

<? 
} else { 
?> 

<br/><br/> 
There was an error processing your subscription. 
To try again please <a href="http://www.xx.com/signUp.html"><b><u>click here</u></b></a><br><BR> 
Please contact our customer care department at <a href="mailto:[email protected]"><b><u>[email protected]</u></b></a> 

<? 
} 
?> 

J'ai aussi essayé de faire cela de la manière suivante, mais avec cette méthode, le corps est vide - aucun texte est affiché.

<? 
if ($result == "00") && ($payersetup == "00") && ($pmtsetup =="00"){ 
$thanks = "Thank you! \n\n To Return to the homepage <a href=http://www.epubdirect.com>Click Here</a>"; 
echo $thanks; 
} 
else 
{ 
$nothanks = "There was an error processing your subscription.\n\n To try again please <a href=http://www.epubdirect.com/signUp.html>click here</a>. \n\n If the problem persists, please contact our customer care department at <a href=mailto:[email protected]>[email protected]</a>"; 
echo $nothanks; 
} 
?> 

Et après que j'ai essayé de mettre le code HTML dans un require_once séparé de documents et de l'utilisation(), mais cela ne fonctionne pas non plus - même résultat que précédemment - corps blanc.

Quelqu'un a des idées?

EDIT:

J'ai essayé quelques-uns des moyens proposés mais je vais avoir encore le problème de la page blanche :(

Voici la façon dont je suis allé ->

<? 
if (($result == "00") && ($payersetup == "00") && ($pmtsetup =="00")) 
{ 
require_once('thankyou.html'); 
} 
else 
{ 
require_once('error.html'); 
} 
?> 

Cela me donne toujours une page blanche même si la syntaxe semble correcte?

+2

Si vous obtenez une page blanche, cela génère probablement des erreurs de syntaxe mais ne les affiche pas. Essayez d'activer les rapports d'erreurs dans votre fichier php.ini (ou consultez les journaux de votre serveur pour les erreurs PHP). – Spudley

+0

Configurez vos rapports d'erreurs pour vous montrer les erreurs et les avertissements: http://php.net/manual/fr/function.error-reporting.php –

Répondre

10

Essayez:

if (($result == "00") && ($payersetup == "00") && ($pmtsetup =="00")) { 
    ... 
    ... 
} 
+0

Oui, je pense que les parenthèses manquantes sont le problème. – Skilldrick

+1

c'est une évidence: D – Hannes

2

Vous voulez dire sans doute:

if ($result == "00" && $payersetup == "00" && $pmtsetup == "00") { 

Le if se termine après la fermeture ).

3

Je me demande comment votre état est géré du tout parce que vous avez ( et ) manquant dans vos if conditions:

if (($result == "00") && ($payersetup == "00") && ($pmtsetup =="00")){...} 

Ou simplement:

if ($result == "00" && $payersetup == "00" && $pmtsetup =="00"){...} 
2

façon simple et propre

<? if (($result == "00") && ($payersetup == "00") && ($pmtsetup =="00")):?> 
Thank you 
<br/><br/> 
To return to the home page <a href="http://www.xx.com"><b><u>click here</u></b></a> 
<br/><br/> 
<?php else : ?> 
<br/><br/> 
There was an error processing your subscription. 
To try again please <a href="http://www.xx.com/signUp.html"><b><u>click  here</u></b></a><br><BR> 
Please contact our customer care department at <a href="mailto:[email protected]"><b><u>[email protected]</u></b></a> 
<?php endif ?> 
+0

WOW, qui a voté vers le bas, quoi de mal à cela? –

+1

Je l'avais rejeté (hâtivement, ce que je défais) parce que c'est une mauvaise réponse. Tout ce que vous avez fait était de réécrire le code original dans votre propre style sans aucune justification de pourquoi c'est mieux et aucune explication de ce qui n'allait pas en premier lieu. Comment quelqu'un est-il supposé apprendre de cela? – meagar

+0

merci pour highliting, le problème est avec si tout le monde le sait. Si vous voyez toutes les réponses dans ce post, vous trouverez que j'utilise if(): ce qui donne un moyen propre d'intégrer en html. c'est une alternative à toute autre réponse. –

9

Pour ajouter aux réponses des autres:

Votre code d'origine:

if ($result == "00") && ($payersetup == "00") && ($pmtsetup =="00") 

est une erreur de syntaxe. Une fois que l'analyseur PHP voit ) qui marque la fin de l'if conditionnel, il s'attend à voir une autre déclaration (s) ou un { pour marquer le début du corps . Mais quand il voit && il jette cette erreur de syntaxe:

PHP Parse error: syntax error, unexpected T_BOOLEAN_AND 

Je pense que vous avez désactivé votre rapport d'erreur c'est pourquoi vous voyez une page blanche.

+2

Morale de l'histoire: Activez tous les rapports d'erreur pendant le développement. – Andrew

+0

@Andrew - comment activer le signalement d'erreurs? Je travaille sur un serveur que je n'ai pas configuré. – 109221793

+0

@TaraWalsh Vous pouvez définir des rapports d'erreurs dans le script en utilisant la fonction error_reporting(): http://php.net/manual/fr/function.error-reporting.php –

2

Voici ce que vous devez faire pour activer le signalement d'erreur:

Dans votre script PHP: Utilisez la fonction error_reporting, décrit here.

Ou, si vous avez accès à votre php.ini, référez-vous à this document.

Vous devez utiliser un serveur de développement local (tel que XAMPP on Windows/Linux) sur votre propre ordinateur et lorsque vous avez terminé le déploiement sur le serveur réel.

1

Comme d'autres l'ont souligné, vous avez besoin d'envelopper plusieurs conditions dans votre instruction if entre parenthèses:

if (($cond1) && ($cond2)) { ... }

Le défaut de cette obligation entraînera une erreur d'analyse fatale. Cependant, si c'était la cause du problème, l'exécution de la page s'arrêterait sur cette ligne, et rendrait une erreur PHP au navigateur ou une page blanche. Le message original indique que ce n'est pas ce qui arrive; à la place, les deux blocs HTML sont sortis.

Avez-vous consulté la source dans votre navigateur pour voir si quelque chose est envoyé au navigateur? Je soupçonne à moitié que vous utilisez de courtes balises ouvertes (données, puisque vous les utilisez dans le bloc de code), et votre config PHP est configuré pour les interdire. Cela entraînerait l'envoi du bloc de code entier tel quel au navigateur, ce qui signifie que l'erreur d'analyse fatale n'est jamais déclenchée et que le navigateur traite le bloc <? ... ?> comme du code HTML non valide et l'ignore tout simplement. Cela provoque le rendu des deux blocs HTML comme décrit.

Bien sûr, si les balises ouvertes courtes sont activées, je n'en ai aucune idée. :-)