2011-07-21 12 views
0

このif文が正しいメッセージを生成しない理由を確認しようとしています。起こるはずのことは、ユーザーがdbに「In」とマークされていない行を選択すると、最初のメッセージが表示されるということです。彼らがアドレスまたはサービスレベルを選択することを忘れた場合、else ifがトリガされるはずです。すべてのケースが正しい場合は、elseステートメントを実行します。しかし、起きていることは、最初に選択されたときに最初のメッセージがトリガされ、エラーが発生するということです。ユーザーがアドレスまたはサービスを選択することを忘れた場合、そのエラーが発生します。ユーザーがelse文を実行するのではなく、すべての条件を満たすと、条件がtrueであっても$ boxstatusエラーが表示されます。誰かが私のエラーを指摘してくれますか?多くのおかげで文が不正確な結果を生成する場合

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
header("Content-type: application/json"); 
$json = ""; 
if ($boxstatus!="In") { 
    $json .= "{\"Error\": \"ERROR: The box must be in the archive to enable a retrieval.\"}"; 
} 
else if ($service == '' || $address == '') { 
    $json .= "{\"Error\": \"ERROR: You must select a retrieval address and a service level.\"}"; 
} 
else { 
$json .= "{\n"; 
$json .= "\"address\": \"".$address."\",\n"; 
$json .= "\"service\": \"".$service."\",\n"; 
$json .= "\"box\": \"".$box."\"\n"; 
//$json .= "box: [\"". implode('","', $box) ."\"]\n"; 
$json .= "}\n"; 
} 
echo $json; 

アヤックス、それは場合に役立ちます:

$.ajax({ 
       type: "POST", 
       dataType: "json", 
       url: "boxretrieve.php", 
       data: "items="+itemlist+columns, 
       success: function(data){ 
       if (data.Error) jAlert(data.Error); 
        else { 
       jAlert("You have successfully retrieved\n\rBox: "+custref+"\n\r"+ 
           "Address: "+address+"\n\r"+ 
           "Service: "+service+"\n\r"+ 
           "Destroydate: "+destroydate); 
       $("#flex1").flexReload(); 
       } 
       } 
      }); 

+++++ UPDATE +++++++

誤差2に2つ目のエラーを変更

とAjaxで条件を行なったし、すべてがうまくなりました。誰もが助けてくれてありがとう。

+0

これは私には正しいようです。 '$ boxstatus'の値を追跡しようとしましたか? – slaphappy

+0

文字通り '$ boxstatus'に' In'値を割り当てることができますか? 「あなたが別の行動を起こさない限り、条件には何も問題はないと思います。 – dpp

+0

@kbokこれをもう一度見て、おそらく何が起きているのでしょうか?2番目のエラーをErrorからError2に変更する必要があるため、data.Errorが表示されていますか? – bollo

答えて

1

私は変数を設定してコードを試しました。できます!条件に間違いはありません。あなたは、あなたのSQLクエリの結果やブラウザ上での表示方法を確認することができます。

<?php 
$boxstatus = 'In'; 
$service = ''; 
$address = ''; 
$json=''; 

if ($boxstatus!="In") { 
    $json .= "{\"Error\": \"ERROR: The box must be in the archive to enable a retrieval.\"}"; 
} 
else if ($service == '' || $address == '') { 
    $json .= "{\"Error\": \"ERROR: You must select a retrieval address and a service level.\"}"; 
} 
else { 
$json .= "{\n"; 
$json .= "\"address\": \"".$address."\",\n"; 
$json .= "\"service\": \"".$service."\",\n"; 
$json .= "\"box\": \"".$box."\"\n"; 
//$json .= "box: [\"". implode('","', $box) ."\"]\n"; 
$json .= "}\n"; 
} 

echo $json; 
?> 

出力:

{"Error": "ERROR: You must select a retrieval address and a service level."} 

私はまた、あなたのjQueryを使用し、私は単純なalertであなたのjAlertを変更しました。それはうまく動作します。

<script type="text/javascript" src="jquery.js"> 
</script> 
<script type="text/javascript"> 
$(window).load(function(){ 
    $.ajax 
    ({ 
     type: "POST", 
     dataType: "json", 
     url: "test.php", 
     success: function(data) 
     { 
      if (data.Error) 
      { 
       alert(data.Error); 
      } 
      else 
      { 
       alert("You have successfully retrieved\n\rBox: "+custref+"\n\r"+ 
           "Address: "+address+"\n\r"+ 
           "Service: "+service+"\n\r"+ 
           "Destroydate: "+destroydate); 
       $("#flex1").flexReload(); 
      } 
     } 
    }); 
}); 
</script> 

私はjAlertを知っているが、alertを使用してみてください、私に結果を教えていません。

+0

私のコメントre ajaxをご覧ください。条件はphpに当てはまりますが、ajaxはdata.Errorと両方のエラーを出力しています。同じ名前です。たとえば、エラーがあれば、それを削除した場合、正しく表示されます。 – bollo

2

あなたは(また、は、一緒に文字列を壊しことではないビルドJSONを行う一緒に適切なデータ構造を入れた後json_encodeを使用する)ので、それは"In"

になることはありません$boxstatusに値を割り当てることはありません。

+0

$ boxstatusはPHPページのここから値を取得します:$ boxstatus = ''; while($ row = mysql_fetch_array($ result)){ $ dept = $ row ['department']; $ box = $ row ['custref']; \t \t $ customer = $ row ['customer']; \t \t $ boxstatus = $ row ['status']; \t \t } – bollo

+0

これは私が通常jsonを使用する方法です:$ results = mysql_query($ sql); ($ row ['Id']、 'cell' =>配列($ row = 'mysql_fetch_assoc($ results))' $ row ['row']。 '' $ row ['bay']、strtotime($ row( 'row') '、' row ']、 ['destroy_date']))))); } echo $ json-> encode($ data);これはちょうどカットされた例です。 – bollo

関連する問題