0

私のサイトには、ユーザーがメンバーになるためにサインアップするための登録フォームがあります。

登録すると、詳細がmysqlデータベースに送信され、電子メール、名前などがすべて入力されます。また、送信時にランダムmd5によって生成される一意の登録コードを取得し、このコードがデータベースに入力されます。それらに電子メールで送信されます。

私が得ている問題は、新しいユーザーがサインアップするたびに新しいコードが生成されますが、データベース内の他のすべてのユーザーの以前のコードを上書きします。私が望んでいるのは、各ユーザーのコードを一意に保ち、新しいユーザーがサインアップするたびに他のユーザーのコードを書き直さないようにすることです。そのため、コードを編集して次のように言う必要があると考えています。

UPDATE `ptb_registrations` SET `registration_code` = '%s' 
    WHERE email = (whatever unique email the user enters)

誰かアイデアがありますか?ありがとう

<?php

/**
 * ShuttleCMS - A basic CMS coded in PHP.
 * random code - Used for allowing a user to reset password
 * 
 * @author Dan <dan@danbriant.com>
 * @version 0.0.1
 * @package ShuttleCMS
 */
define('IN_SCRIPT', true);
// Start a session
session_start();

/*
 * Generates registration code and puts it on database
 */

//Generate a RANDOM MD5 Hash for a code
$random_code=md5(uniqid(rand()));

//Take the first 8 digits and use them as the code we intend to email the user
$emailcode=substr($random_code, 0, 8);

//Encrypt $emailcode in MD5 format for the database
$registrationcode=($emailcode);

// Make a safe query
$query = sprintf("UPDATE `ptb_registrations` SET `registration_code` = '%s' ",
                    mysql_real_escape_string($registrationcode));

mysql_query($query)or die('Could not update members: ' . mysql_error());

?>
4

3 に答える 3

1

MySQLクエリでは、その新しいユーザーだけに制限するためにwhere句を入れていません。制限していないという事実により、「すべて」のユーザーを更新しています。

登録に関する情報が含まれていないため、コードは完全ではないように見えますが、問題なく処理されていると思います。

次に、クエリを次のように更新します

UPDATE ptb_registrationsSET registration_code= '%s' WHERE user_id = '%s'

明らかに、スキーマの正しい値に置き換えます。

于 2012-12-06T16:10:29.147 に答える
1

これが私の質問です:ユーザーの登録時にそのコードを生成しないのはなぜですか? そうすれば、INSERT INTO別のUPDATEクエリを実行する必要なく、 a のみを実行できます。

プロセスは次のようになります

  • ユーザーの資格情報を取得する
  • 一意のキーを生成する
  • すべてをDBに格納
  • 電子メールアドレスの承認のためのその一意のキーを含む電子メールを送信します
  • すべて完了

うーん?

于 2012-12-06T16:16:12.653 に答える
0

by running

UPDATE `ptb_registrations` SET `registration_code`

you are updating all users, you're missing the WHERE clause:

UPDATE `ptb_registrations` SET `registration_code` = "safkhsakjfdha" 
  WHERE `email`='bla@bla.bla'

beside than that all the rest looks good, assuming all the variables have values.

于 2012-12-06T16:11:59.767 に答える