1

私は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のままです。コードに明らかに間違っている点はありますか?

4

5 に答える 5

4

おそらく、PHPがグローバル変数として$_POSTと$_GETを使用することを期待しています。PHPは、以前はこのように設定されていましたが、新しいバージョンでは、これらの変数を明示的に参照する必要があります。

あなたはこれを試すことができます:

setdefault($_GET['id'], 0);

function setdefault(&$var, $default="") 
{
   if (!isset($var)) 
   {
      $var = $default;
   }
}

またはさらに簡単に(三項演算子を使用して):

$id = array_key_exists('id', $_GET) ? $_GET['id'] : 0;
于 2009-03-02T18:40:51.510 に答える
1

まず、これがPHP 5.XIの場合、&を使用して参照によって変数を渡さないことを強くお勧めします。そうは言っても。isset関数呼び出しは、関数を使用すると常にtrueになります。ただし、setdefault($ id、0);で未定義の変数警告が表示されます。

代わりにこれを試してください。

$id = isset($id) ? $id : 0;
于 2009-03-02T18:45:46.383 に答える
1

$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($_GET, 'id', 0);

$_GET 配列の使用をすぐに停止し、コードの残りの部分で消去された変数のみを使用するため、この戻り形式の方が優れています。外部変数を一度クリーンアップすると、コード内で外部変数に再び触れることはありません。$A は、$_GET、$_POST、$_REQUEST、または $_COOKIE にすることができます。

また、面倒な magic_quote も処理するので、変数内のデータがユーザーによって送信されたテキストであることがわかります。ユーザーまたはデータベースに送り返すときは、忘れずに再度クリーニングしてください。

于 2009-03-02T18:50:12.487 に答える
0

どのよう$idに設定されていますか?オフの場合register_globals(およびPHP 4.2以降ではデフォルトでオフになっている場合)、$_GET['id']または$_POST['id']代わりに(または$_REQUEST['id']、ただし、それを回避する理由があります)を確認する必要があります。

于 2009-03-02T18:41:37.797 に答える
0

$idクエリ文字列()からいつか設定するコードbrowse.php?id=3も含める必要があります。register_globalsクエリ文字列に含まれると自動的に変数を作成するPHPの設定について考えているかもしれません。その機能を再度有効にしないでください。数年間、これは本当に悪い考えであることが示されています。

クエリ文字列から取得する変数は、使用する前にタイプ/安全性を確認する必要があります。したがって、たとえば、$_GETスーパーグローバルから変数をプルし、それが数値であるかどうかを確認し、そうでない場合は、デフォルトを設定します。

if (!is_numeric($_GET['id']) {
  setdefault($_GET['id'], 0);
}
于 2009-03-02T18:47:14.117 に答える