2017-07-26 6 views
-1

私はPHPの初心者です。私のコードは動作していると思っていましたが、わずかなバグがあるようです。入力が0のときにPHPが空要素にアクセスできない

これは私のコードです:

<?php 

    $string = file_get_contents("jsontest.txt"); 
    $result = json_decode($string); 

    if(isset($_POST['value']) && !empty($_POST['value']) && 
     isset($_POST['whatElement']) && !empty($_POST['whatElement']) && 
     isset($_POST['category']) && !empty($_POST['category']) && 
     isset($_POST['model']) && !empty($_POST['model'])) { 

     $value = $_POST['value']; 
     $whatElement = $_POST['whatElement']; 
     $category = $_POST['category']; 
     $model = $_POST['model']; 
    } 


    $result->$category->$model->$whatElement = $value; 
    echo $result->$category->$model->$whatElement; 

    $myfile = fopen("jsontest.txt", "w") or die("Unable to open file!"); 
    $txt = json_encode($result); 
    fwrite($myfile, $txt); 
?> 

私はHTMLの入力タグへの応答としてこれを使用していました。それが関連している場合、これは、私はこれはPHPスクリプトが、「値」変数が0に設定されているとき、私は、次のGETに適切なデータを渡す

function handleEnter(value, type, exactModel) 
{ 
    var bothParts = exactModel.split("_"); 
    category = bothParts[0]; 
    model = bothParts[1]; 

    $.ajax({ 
     url: "morework.php", 
     data: {value: value, whatElement: type, category: category, model: model}, 
     type: 'post', 
     success: function(ret){ 
      //location.reload(); 
      console.log(ret); 
     } 
    }) 

} 

私のPHPスクリプトを呼び出すために使用するJavaScriptコードは次のようになります。 "致命的なエラー:

の代わりに::$result->$category->$model->$whatElement = $value;

を私は入れ:$result->category->model->whatElement = $value;

次のように私は、コードを変更しようとしたに...」

空のプロパティにアクセスすることはできません

これはエラーを処理するようですが、jsonファイルはまったく変更されません。一方、私はオリジナルを持っていたのですが、0の場合は動作しませんが、他のすべての番号のjsonファイルは変更されます。

私は$ _POSTにvar_dumpを使用していますが、これはすべて正しい値を保持しているようです。 Iが0に送るかがあれば、私は、この行をエコー場合:echo "$value $whatElement $category $model";それが移入される一方、それはのように空に現れたときに0値試験用のvar_dumpの非ゼロ

例:

array(4) { 
    ["value"]=> 
    string(1) "0" 
    ["whatElement"]=> 
    string(8) "Borrowed" 
    ["category"]=> 
    string(9) "Category" 
    ["model"]=> 
    string(8) "Model" 
} 

アン何が起こっているかの説明/これを改善する方法のアドバイスは大変ありがたいです。

+1

[なぜ両方ISSETをチェック()と!空() ](https://stackoverflow.com/q/4559925/476) – deceze

+0

この回答は、!empty()を使用すると望ましくない結果につながる可能性があることを意味しますか?それともそれは目的を果たすのか?あなたがリンクしている投稿の回答には矛盾する意見があるようです。 – Abdall

+0

'empty'の目的は、チェックしている変数が設定されていないと、エラーを投げずに' == false' *と同じチェックをすることです。それ以上のものはありません。 – deceze

答えて

1

次のものが(php manual)空であると考えられている:あなたは0値を持っているとき

"" (an empty string) 
0 (0 as an integer) 
0.0 (0 as a float) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
$var; (a variable declared, but without a value) 

だからあなたconitionは失敗します。この状態からisset($_POST['value']) && !empty($_POST['value'])を削除できます。これを書く前に、もし条件

PHPのバージョンが7.0以上の使用であれば

$value = $_POST['value'] ?? 0; 

かのPHPのバージョン未満7.0使用

$value = isset($_POST['value']) && !empty($_POST['value']) ? $_POST['value']:0; 
+0

この迅速で正確なソリューションをありがとう。私は初心者なので何が起こっているのか説明できますか? if文が失敗しましたか? – Abdall

+1

はい0は値が0のときに状態が失敗するように空を意味する – Omi

+1

はい、空文字(0)が真であるため文が失敗した場合 – Deathmras

関連する問題