質問
私はPHPにかなり慣れていないため、会社のWebサイトを作成しています。私は入手した既存のコードを使用していますが、正しく動作させることができないようです-どんな助けでも大歓迎です!
変数 $ id があります。この変数は、ページに表示する製品カテゴリタイプを識別します。最初にid変数が設定されていることを確認する必要があります。設定されていない場合は、変数をカテゴリ0にデフォルト設定します。
私が持っているコードは次のとおりです。
setdefault($id, 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
アドレスwww.website.com/browse.phpを使用すると、デフォルトで$ id = 0になります。アドレスがwww.website.com/browse.php?id=3の場合、$ idを3に設定し、関連する製品を表示することを期待しています。ただし、$ idを設定しても、デフォルトは0のままです。コードに明らかな誤りがありますか?
解決
おそらく、PHPが$ _POSTと$ _GETをグローバル変数として使用することを期待しています。 PHPは以前はこのように設定されていましたが、新しいバージョンではこれらの変数を明示的に参照する必要があります。
これを試すことができます:
setdefault(おそらく、PHPが$ _POSTと$ _GETをグローバル変数として使用することを期待しています。 PHPは以前はこのように設定されていましたが、新しいバージョンではこれらの変数を明示的に参照する必要があります。
これを試すことができます:
$id = array_key_exists('id', おそらく、PHPが$ _POSTと$ _GETをグローバル変数として使用することを期待しています。 PHPは以前はこのように設定されていましたが、新しいバージョンではこれらの変数を明示的に参照する必要があります。
これを試すことができます:
setdefault(おそらく、PHPが$ _POSTと$ _GETをグローバル変数として使用することを期待しています。 PHPは以前はこのように設定されていましたが、新しいバージョンではこれらの変数を明示的に参照する必要があります。
これを試すことができます:
<*>
さらに簡単(三項演算子を使用):
<*>GET['id'], 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
さらに簡単(三項演算子を使用):
<*>GET) ? おそらく、PHPが$ _POSTと$ _GETをグローバル変数として使用することを期待しています。 PHPは以前はこのように設定されていましたが、新しいバージョンではこれらの変数を明示的に参照する必要があります。
これを試すことができます:
setdefault(おそらく、PHPが$ _POSTと$ _GETをグローバル変数として使用することを期待しています。 PHPは以前はこのように設定されていましたが、新しいバージョンではこれらの変数を明示的に参照する必要があります。
これを試すことができます:
<*>
さらに簡単(三項演算子を使用):
<*>GET['id'], 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
さらに簡単(三項演算子を使用):
<*>GET['id'] : 0;
さらに簡単(三項演算子を使用):
<*>GET['id'], 0);
function setdefault(&$var, $default="")
{
if (!isset($var))
{
$var = $default;
}
}
さらに簡単(三項演算子を使用):
<*>他のヒント
まず、これがPHP 5.Xの場合、&amp;を使用して参照渡しで変数を渡さないことを強くお勧めします。そう言われています。 isset関数呼び出しは、関数で常にtrueになります。しかし、setdefault($ id、0);で未定義変数の警告を受け取ります;
代わりにこれを試してください。
$id = isset($id) ? $id : 0;
$ idが設定されていない場合、setdefault($ id、0)を呼び出すと警告が生成されます。 setdefaultのような関数はPHPでは機能しません。代わりにこれを使用してください。
if (!isset($id)) $id = 0;
$ _ GETや$ _POSTなどの配列変数に対してこれを行う場合、次のようにできます。
function getuservar($A, $index, $default = '') {
if (!isset($A[$index])) return $default;
if (get_magic_quote_gpc()) return stripslashes($A[$index]);
return $A[$index];
}
$clean_id = getuservar( $ idが設定されていない場合、setdefault($ id、0)を呼び出すと警告が生成されます。 setdefaultのような関数はPHPでは機能しません。代わりにこれを使用してください。
if (!isset($id)) $id = 0;
$ _ GETや$ _POSTなどの配列変数に対してこれを行う場合、次のようにできます。
<*>
すぐに$ _GET配列の使用を停止し、残りのコードでクリーンアップされた変数のみを使用するため、この戻りフォームの方が適しています。外部変数を一度消去すると、コード内で外部変数に再び触れることはありません。 $ Aは、$ _ GET、$ _ POST、$ _ REQUEST、または$ _COOKIEです。
また、迷惑なmagic_quoteを処理するため、変数のデータはユーザーが送信したテキストであることがわかります。ユーザーまたはデータベースに返送するときは、再度クリーンアップすることを忘れないでください。
GET, 'id', 0);
すぐに$ _GET配列の使用を停止し、残りのコードでクリーンアップされた変数のみを使用するため、この戻りフォームの方が適しています。外部変数を一度消去すると、コード内で外部変数に再び触れることはありません。 $ Aは、$ _ GET、$ _ POST、$ _ REQUEST、または$ _COOKIEです。
また、迷惑なmagic_quoteを処理するため、変数のデータはユーザーが送信したテキストであることがわかります。ユーザーまたはデータベースに返送するときは、再度クリーンアップすることを忘れないでください。
$ id
はどのように設定されますか? register_globals
がオフの場合(およびPHP 4.2以降ではデフォルトでオフになっている場合)、 $ _ GET ['id']
または $ _ POST [代わりに 'id']
(または $ _ REQUEST ['id']
ですが、それを避ける理由があります)。
クエリ文字列から $ id
を設定するコード( browse.php?id = 3
)も含める必要があります。 PHPの register_globals
設定を考えてみてください。この設定は、クエリ文字列に含まれるときに変数を自動的に作成します。数年前から、この機能を再び有効にしないでください。これは非常に悪い考えです。
クエリ文字列から取得する変数は、使用する前に型/安全性をチェックする必要があります。たとえば、 $ _ GET
スーパーグローバルから変数を取得し、数値であるかどうかを確認し、そうでない場合はデフォルトを設定します:
if (!is_numeric(クエリ文字列から $ id
を設定するコード( browse.php?id = 3
)も含める必要があります。 PHPの register_globals
設定を考えてみてください。この設定は、クエリ文字列に含まれるときに変数を自動的に作成します。数年前から、この機能を再び有効にしないでください。これは非常に悪い考えです。
クエリ文字列から取得する変数は、使用する前に型/安全性をチェックする必要があります。たとえば、 $ _ GET
スーパーグローバルから変数を取得し、数値であるかどうかを確認し、そうでない場合はデフォルトを設定します:
<*>GET['id']) {
setdefault(クエリ文字列から $ id
を設定するコード( browse.php?id = 3
)も含める必要があります。 PHPの register_globals
設定を考えてみてください。この設定は、クエリ文字列に含まれるときに変数を自動的に作成します。数年前から、この機能を再び有効にしないでください。これは非常に悪い考えです。
クエリ文字列から取得する変数は、使用する前に型/安全性をチェックする必要があります。たとえば、 $ _ GET
スーパーグローバルから変数を取得し、数値であるかどうかを確認し、そうでない場合はデフォルトを設定します:
<*>GET['id'], 0);
}