2011-10-20 18 views
-2

これは私のPHPコードです。基本的にユーザーの国を確認し、許可されている国と一致する場合は、アフィリエイトコードを実行させます。まあ、それは私が他を追加したときに、変数をチェックする場合、私は米国として$出力を持って、$ _SESSIONので、私は、ORビットに問題があると思いステートメントが正しく実行されていない場合

<?php 
$output = shell_exec('geoip-lookup '.$_SERVER['REMOTE_ADDR']); 
if($_SESSION['check']!= 1 && ($output == 'US' || $output== 'AU' || $output== 'GB' || $output== 'CA')) 
{ 
$submission = $_POST['submission_id']; 
$_SESSION['check']=1; 
echo '<div class="shareasale"><img src="https://shareasale.com/sale.cfm?amount=0.00&tracking='; 
echo $submission; 
echo '&transtype=lead&perlead=25.00&merchantID=###" width="1" height="1"></div>'; 
} 
?> 

を実行していない何らかの理由で[「チェック」]空白としてつまり、if文が正しく実行されているはずです。

これはなぜ動作しないのですか?

+0

正確には動作しません。ステートメントとステートをコード内のさまざまな場所に出力してデバッグしようとしましたか? –

+0

"実行していない"とき、 '$ _SESSION ['check']'と '$ output'の' var_dump'は何ですか? 'if'文の直前に、' var_dump($ _ SESSION ['check']、$ output); ' – webbiedave

+0

$出力でtrimを使ってみましたか?多分あなたはあなたのブラウザで見ているものの前後に新しい行やスペースを持っているかもしれません。 – mishu

答えて

6

あなたはsession_start()コールを持っていないので、$ _SESSION配列には値が設定されないため、比較する値はcheckになりません。

また、shell_exec()呼び出しが実際に動作していることを確認してください。 geoip-lookupは、そのプログラムを実行するためにPHPが実行しているシェルのパスにない可能性があります。出力には、改行、キャリッジリターンなども含まれています。これは、if()呼び出しの文字列の正確な要件が考慮されていません。 $outputは実際には "US \ n"でなく "US \ n"であるかもしれません。

+0

ああ、私はファイルの先頭にあるので、それをコピーするのを忘れていた...それはそこにある – Andrew

+0

変数をチェックするためにelseを実行したとしたら、それは米国として出てきたので、 – Andrew

+0

@Andrew、あなたは\ n "'がないことを確認するために何をしましたか? – Mike

関連する問題