質問

作成したこのアカウント登録の活性化のスクリプトの自分の思いを確認すると見誤差と思いますか、特定のメディカルコーディネーター

のドメインからやや入ったところにある:

http://domain.com/include/register.php?key=true&p=AfRWDCOWF0BO6KSb6UmNMf7d333gaBOB

るからメールをユーザがクリックすると、その取得にリダイレクトにこのスクリプト:

if($_GET['key'] == true)
{
    $key = $_GET['p'];

    $sql = "SELECT * FROM users
            WHERE user_key = '" . $key . "'";

    $result = mysql_query($sql) or die(mysql_error());

    if(mysql_affected_rows($result) > 0)
    {
        $sql = "UPDATE users
                SET user_key = '', user_active = '1'
                WHERE user_key = '" . $key . "'";

        $result = mysql_query(sql) or die(mysql_error());

        if($result)
        {
            $_SESSION['PROCESS'] = $lang['Account_activated'];
            header("Location: ../index.php");
        }
        else
        {
            $_SESSION['ERROR'] = $lang['Key_error'];
            header("Location: ../index.php");
        }
    }
    else
    {
        $_SESSION['ERROR'] = $lang['Invalid_key'];
        header("Location: ../index.php");
    }
}

んでも、私の面倒を見ることができて、データベースのユーザーそのキーに、試合から継続してエラーとしては非常に面倒だった。のデータベース、テーブルのカラムは、決して間違ってはいないと、データベースでのスクリプトう機会を設けていきたいと思います。

教えてくれるので助かりますしまいました。

協力:)

役に立ちましたか?

解決

  1. 変化 $_GET['key'] == true$_GET['key'] == "true"
  2. いこ if, 成功した mysql_connect(...) または mysql_pconnect(...) ?
  3. 変化 mysql_affected_rows($result);mysql_num_rows($result);.影響を受け用に使用できる DELETE または UPDATE SQLステートメント.
  4. 前半の場合、追加する前に第二 mysql_result(...), mysql_free_result($result); 無料のメモリ割り当てる前ます。
  5. if($result) 変更 if(mysql_affected_rows($result));.することができます。
  6. 後の header(...); 関数呼び出しの追加 return 0; または exit(0); によって異なり完了コード。
  7. ご利用の $key 変数 SQLステートメント, るコードよりセキュア SQLインジェクション攻撃 取得し変更 $key = $_GET['p'];$key = mysql_real_escape_string($_GET['p']);
  8. 行きたいという場所 header() 機能が失敗します。に header() urlのアドレスをフルのように: http://www.example.com/somewhere/index.php
  9. 確認 $_GET['p'] 変数が存在する!!この存在しない場合 $_GET['key'] が存在する、すべて活性化します。かの設定user_keyの"必要だuser_activatedマーカー.

他のヒント

あなたが使用するはずのます:

if(mysql_affected_rows($result) > 0)

あなたははmysql_num_rowsを使用する必要があります()

また問題:

$result = mysql_query($sql) or die(mysql_error());

"または"お客様の声 boolean で$結果を得 True わから返された値mysql_query()

echo 'Hello' or die('bye'); // outputs nothing, because result is True not 'Hello'

3 or die() == True; // true
3 or die() != 3; // true

または と同じ || であ オペレーターの論理計算書.

これは動作します:

$result = mysql_query($sql);
if(!$result) die(mysql_error());    

同じミスした時間を数時間前 リンク


場合又は使用することができます:

defined('FOO') or
    define('FOO', 'BAR');

mysql_connect(...) or die(...);

mysql_select_db( .... ) or die(...);

mysql_query('UPDATE ...') or die(...);

if(FOO or BAR) { ... }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top