質問
作成したこのアカウント登録の活性化のスクリプトの自分の思いを確認すると見誤差と思いますか、特定のメディカルコーディネーター
のドメインからやや入ったところにある:
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");
}
}
んでも、私の面倒を見ることができて、データベースのユーザーそのキーに、試合から継続してエラーとしては非常に面倒だった。のデータベース、テーブルのカラムは、決して間違ってはいないと、データベースでのスクリプトう機会を設けていきたいと思います。
教えてくれるので助かりますしまいました。
協力:)
解決
- 変化
$_GET['key'] == true
へ$_GET['key'] == "true"
- いこ
if
, 成功したmysql_connect(...)
またはmysql_pconnect(...)
? - 変化
mysql_affected_rows($result);
へmysql_num_rows($result);
.影響を受け用に使用できるDELETE
またはUPDATE
SQLステートメント. - 前半の場合、追加する前に第二
mysql_result(...)
,mysql_free_result($result);
無料のメモリ割り当てる前ます。 if($result)
変更if(mysql_affected_rows($result));
.することができます。- 後の
header(...);
関数呼び出しの追加return 0;
またはexit(0);
によって異なり完了コード。 - ご利用の
$key
変数 SQLステートメント, るコードよりセキュア SQLインジェクション攻撃 取得し変更$key = $_GET['p'];
へ$key = mysql_real_escape_string($_GET['p']);
- 行きたいという場所
header()
機能が失敗します。にheader()
urlのアドレスをフルのように: http://www.example.com/somewhere/index.php - 確認
$_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) { ... }
所属していません StackOverflow