2009-03-02 16 views
1

私はかなりPHPを使い慣れており、私の会社のウェブサイトを作成しています。私は取得したものの、正しく動作させることができない既存のコードをいくつか使用しています - どんな助けでも大歓迎です!PHP/HTML - isset関数

私は変数$ idを持っています。これはページに表示される商品カテゴリの種類を示しています。私が最初にid変数が設定されていない場合は、カテゴリ0次のように私が持っているコードがある

に変数をデフォルトされていることを確認する必要がありますので、アドレスwww.websiteと

setdefault($id, 0); 

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

を。 com/browse.php、私は$ id = 0にデフォルトすることを期待します。アドレスwww.website.com/browse.php?id=3で$ idを3に設定し、関連する製品を表示することが期待されます。しかし、$ idを設定したにもかかわらず、それは依然として0にデフォルト設定されています。

答えて

4

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

あなたはこの試みることができる:単純

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

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

またはそれ以上(三項演算子を使用して):

$idが設定されている方法
$id = array_key_exists('id', $_GET) ? $_GET['id'] : 0; 
+0

ありがとうございます。私が見ているコードは、やや古いです!あなたのアドバイスを取った後、コードは完全に動作します:) – Tray

+0

idが$ _GETのインデックスでない場合、setdefault($ _ GET ['id']、0)コールは引き続き警告を生成できます。 – jmucchiello

+0

これを改善し、array_key_exists( 'id'、$ _GET)を使用して警告を生成しない – jonstjohn

0

を? register_globalsがオフの場合(PHP 4.2以降ではデフォルトでオフになっています)、代わりに$_GET['id']または(または$_REQUEST['id']ですが、これを避ける理由があります)を参照する必要があります。

1

まず、PHP 5.Xの場合は、&を使用して変数を参照渡ししないことを強くお勧めします。それは言われている。関数を使用して、isset関数呼び出しは常にtrueになります。しかし、あなたはsetdefault($ id、0)で未定義の変数警告を受け取ります。

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

$id = isset($id) ? $id : 0; 
0

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

クエリ文字列から引き出す変数は、使用する前に型/安全性をチェックする必要があります。だから、例えば、あなたはそれがない場合は、デフォルトを設定し、それが数値かどうかを確認し、スーパーグローバル$_GETから変数を引くかもしれません:$ IDが設定されていない場合

if (!is_numeric($_GET['id']) { 
    setdefault($_GET['id'], 0); 
} 
1

を、呼び出しはは、SetDefaultします($ id、0)は警告を生成します。 setdefaultのような関数はPHPでは動作しません。代わりにこれを使用してください。

if (!isset($id)) $id = 0; 

あなたは$ _GETや$ _POSTのように、配列変数のためにこれをやっている場合は、この操作を行うことができます。あなたはすぐに$ _GET配列の使用を停止しているため

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); 

この戻りフォームが優れていますコードの残りの部分でクリーンアップされている変数のみを使用してください。あなたは外部変数を一度きれいにし、決してあなたのコードで外部変数に触れないでください。 $ Aには、$ _GET、$ _POST、$ _REQUEST、または$ _COOKIEを指定できます。

また、迷惑なmagic_quoteを処理するので、変数のデータがユーザーから送信されたテキストであることがわかります。それをユーザーまたはデータベースに送り返すときには、もう一度きれいにすることを忘れないでください。