2017-01-02 8 views
0

ここではちょっとした問題があります。 ユーザーがページにアクセスするための正しい「コード」を必要とするページがある場合、それらのリンクはURLのようにURLのように共有されますhttp://www.domain.com/index.php?c=65487549 ユーザーはこのページに「?c =」または単なるファイル名のindex.php「 」別の場所に送ってください。

if (!isset($_GET['c']) == "") { 
       header ('Location: http://www.domain.com/another.php'); 
       exit(); 
    } else { 
     $result2 = $link->query('SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"'); 
    $CodeisValid = mysqli_num_rows($result2); 

     if ($CodeisValid) { 
      return true; 
     } else { 
       header ('Location: http://www.domain.com/another.php'); 
       exit(); 
     } 
    } 

ユーザーがDBから正しいコードを持っている場合、ユーザーがページが表示されるはずです。私はこれまで試してみました何

ヒント?

感謝=)

+1

'すべての助けのために満足していますポジティブ;それらを2つの別々の条件に分割する必要があります。また、SQLインジェクションにもオープンしています。 –

+0

@ Fred-ii-ありがとう、ありがとう。 SQLインジェクション私はライブに行く前に準備をしていましたが、私に知らせてくれてありがとう:-) – KommerSnart

+2

'isset()'のしくみとその仕組みを読んで理解してください:http://php.net/manual/en/function .isset.php –

答えて

-1

if (!isset($_GET['c']) == "") { header ('Location: http://www.domain.com/another.php'); exit(); }

if (!isset($_GET['c']) && $_GET['c'] == "") { header ('Location: http://www.domain.com/another.php'); exit(); }

に変更フレッド-iiが言ったように...

+0

質問:「なぜ」彼らはそれをそれに変えるべきですか?特定の理由があります –

+0

これは '||'ではなく '&&'でなければなりません。 –

+0

それだけの必要はありません($ _ GET ['c']); – Robert

0

私はこのような状況に遭遇しています。私が提案するものは

if (empty($_GET['c'])) { 
      header ('Location: http://www.domain.com/another.php'); 
      exit(); 
} else { 
    $result2 = $link->query('SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"'); 
$CodeisValid = mysqli_num_rows($result2); 

    if ($CodeisValid) { 
     return true; 
    } else { 
      header ('Location: http://www.domain.com/another.php'); 
      exit(); 
    } 
} 

私はこれが仕事をすると思います。コメントしないでください。うまくいきたいです

+0

はあなたのコード、感謝をしようとしましたケースを行いますが、警告を私に与えます。)(mysqli_num_rowsするパラメータ1 mysqli_resultされることを想定して、ブールは用unfortanly :-) – KommerSnart

+0

おかげで以前のように... /ホーム/ 2/Vでほぼ同じメッセージを与えられましたコードを試してみてください。私はエラーがelse部分にあると思います。 cの値を渡すときは、 'SELECT code FROM Codes WHERE code =" '(isset($ _ GET [' c ']))のように '' SELECT code FROM Codes WHERE code = "'に変更してください。 ($ _GET ['c'])。 ''リダイレクションが機能していなければならないと思います。それをやった? –

+0

魅力のようなリダイレクト作業:-)しかし、ユーザーが.phpの後に何も付いていないページに来ると、白いページが不幸になります。 – KommerSnart

0

コードの最初の行に== "" "を削除してください。 クエリから "isset"が削除されています。

issetは、variabileが "設定されている"かどうかを調べています(存在する場合)。 TRUEまたはFALSEだけを返します。したがって、クエリではFALSEまたはTRUEを探しません。

1

私はこのようなコードを記述します。

// remove unallowed characters from user input 
$code = (int) $_GET['c']; // this will make sure your code is an integer. If you use other characters use `preg_replace` instead. 
// There are many ways to sanitize the input here 

// if is empty redirect user 
if (empty($code)) { 
    header('Location: http://www.domain.com/another.php'); 
    die; 
} 

$result2 = $link->query('SELECT code FROM Codes WHERE code = "'. $code .'" LIMIT 1'); 
$CodeisValid = mysqli_num_rows($result2); 

if ($CodeisValid !== 0) { 
    return true; 
} else { 
    header ('Location: http://www.domain.com/another.php'); 
    die; 
} 

は、ユーザー入力をサニタイズするのが無難です。フォーム、GET、POSTなどから取得する方法に関係なく、常にユーザーの入力を消毒します。

データベースからの結果が1つだけ必要な場合は、クエリを制限すると、これにより処理速度が大幅に向上します。

常にif文で厳密な比較を使用してください。どうして ?次のコードを実行し、その理由が表示されます:

<?php 
if ('string' == 0) { 
    echo 'you got me'; 
} 

を使用すると、厳密な比較===を使用している場合は、それが必要として動作するかどう。

その後編集:issetがtrueの場合、文字列内1として翻訳されます(trueまたはfalse)ブール値を返し、ある場合は、空の文字列''ようになるので、

これは

'SELECT code FROM Codes WHERE code="'. (isset($_GET['c'])).'"'; 

間違っていますいない場合にはバグジェネレータ

+0

私のコードの説明をありがとう!私はあなたのやり方も試しましたが、これを取得しました:注意:未定義のインデックス:c /home/2/v/www/index.php 5行目警告:ヘッダー情報を変更できません - 既に送信されたヘッダー/home/2/v/www/index.php 10行目 – KommerSnart

+0

通知抑制子 '(int)@ $ _ GET ['c'];を使用することができます。 'が推奨されていません。また、関数またはクラスメソッドでこのコードを持つことができ、コードが見つかった場合にtrueを返し、データベースにfalseが見つからない場合はtrueを返します。リターンがfalseの場合、リダイレクトを行うことができます。あなたはそれにいくつかのテストを追加することができます –

0

私は推測しないで最善の解決策になる設定が、これは私が尋ねただけのように働きました。 .phpリダイレクト後に何もしないでください。 ?c =ユーザーをリダイレクトした後に何も間違ったコードがありますか? 正しいコードの場合は、ページを表示してください。

誰もがより良いバージョンを持っている場合、私は:-)

(!ISSET($ _ [ 'C'] GET)== "")は `それが偽かどう
if (empty($_GET['c'])) { 
     header ('Location: http://www.domain.com'); 
     die(); 
    } 

    if (isset($_GET['c'])) { 
     $GetCode = htmlspecialchars($_GET['c']); 

     $result = $link->query('SELECT code FROM FF_Products WHERE code = "'. $GetCode .'" LIMIT 1'); 
     $CodeisValid = mysqli_num_rows($result); 

     if ($CodeisValid > 0) { 
     // is valid if set return true here, only shows white page! 
     } else { 
      header ('Location: http://www.domain.com'); 
      die(); 
     } 
    }