私は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"
}
アン何が起こっているかの説明/これを改善する方法のアドバイスは大変ありがたいです。
[なぜ両方ISSETをチェック()と!空() ](https://stackoverflow.com/q/4559925/476) – deceze
この回答は、!empty()を使用すると望ましくない結果につながる可能性があることを意味しますか?それともそれは目的を果たすのか?あなたがリンクしている投稿の回答には矛盾する意見があるようです。 – Abdall
'empty'の目的は、チェックしている変数が設定されていないと、エラーを投げずに' == false' *と同じチェックをすることです。それ以上のものはありません。 – deceze