誰かがこの電子メールのアクティベーションが機能しない理由を知りたいですか?基本的には、アクティベーションキーと電子メールをスティールとして格納する2つのURLクエリ変数を送信しています。私はそれらをlist()
として抽出し、それらをdbクエリとして使用しています。すべてのdbオブジェクトは正常に動作していますが、電子メールからスクリプトを実行すると、「アカウントは現在アクティブです...」というエコー文が表示されますが、データベースをチェックすると、私はそれをすなわちアクティベーションキー、ステータス、およびユーザーIDに伝えました。電子メールアクティベーションスクリプトの問題
奇妙な部分は次のとおりです。データベースに1人のユーザーしかいない場合、コードは必要なだけ実行されます。しかし、別のユーザーを追加しようとすると、指示どおりに新しいレコードは更新されません。だから私の質問:なぜこのコードは、データベースに1人のユーザーがいて、それ以上の人がいるときには機能しないのですか?それは意味をなさない。ここで本当に助けに感謝します。
include $_SERVER['DOCUMENT_ROOT']. '/video_dating/includes/Database.php';
list($queryString,$email) = explode('&', $_SERVER['QUERY_STRING']);
print_r($email);
$dbname = new Database();
$dbname->Query('select activationkey, id, email from users');
$userinfo = $dbname->Getdata();
foreach ($userinfo as $users)
{
if ($queryString == $users['activationkey'])
{
$dbname->Query("update users set activationkey='', status='activated', userid='1' where email='$email'");
echo "Thank you for registering. Your account is now active. Please login any time.";
}
else
echo "Sorry, your account was not activated.";
}
お返事ありがとうございました。実際には、それは意味的に誤解を招くかもしれませんが、ユーザーIDは実際にはユーザーのアカウントの種類(1は基本、2は標準、3はプレミアム)に関連付けられているため、auto_incrementはありません。彼らはアクティベーション時に自動的に「基本アカウント」を取得します。私はauto_incrementを行うIDフィールドを持っています...そして確かに、私は確実にそのセキュリティ手段を追加しますが、最初に私はこのことを正しく動作させたいと思っています。それでは、私の更新クエリはどうですか?文字列の$電子メールを参照する必要があるので、正しいレコードを更新できますか? – bill
まず、QUERY_STRINGから目的の値が得られたかどうかを確認する必要があります。私はあなたが '&'ではなく '&'によって爆発するべきだと思います。 '&'をエンコードするためにHTMLで使用する '& '。 URIの場合、QUERY_STRING内には '&' –
となります。2ステップは必要ありません。アップデートをしてください: 'update users set activationkey = ''、status = 'activated'、userid = '1'ここでemail = '$ email'とactivationkey = '$ queryString'です。更新が成功した場合は、mysql_affected_rowsが通知します。もちろん、GWWのように、作業する前にユーザーからのデータをサニタイズ/検証する必要があります。 –