-1

送信されたフォームがあります。このフォームでは、ユーザーが作成され、さまざまな役割を割り当てることができます。たとえば、(管理者、ユーザーなど)

フォームはデータを配列として投稿しますroles[]

選択可能な役割が1つだけの場合mysqli_query()、(usersテーブルで)ユーザーを1つ作成しました。次に、2番目はmysqlsを使用してユーザーIDとロールIDを一致させる行をロールIDテーブルに作成します。ユーザーに複数のロールが割り当てられている場合LAST_INSERT_ID、mysqlは機能しますか?LAST_INSERT_ID

3つの表は次のとおりです。

users (name, email, password, id)
roleid (userid, roleid)
roles(id, description)

ユーザー作成フォームで選択したチェックボックスごとに、roleidテーブルにエントリを作成する必要があります。配列()を内破することを考えましたimplode(',',$roles)が、mysqlがその形式の値を受け入れるかどうかはわかりません。何か案は?

4

3 に答える 3

2

ロールごとに1回クエリを実行するか、1つのクエリに複数のレコードを挿入する必要があります。MySQLiを使用すると、これにプリペアドステートメントを使用することもできます。

$user_id = mysqli_insert_id();
$query = "INSERT INTO `roleid` (userid, roleid) VALUES ";

foreach($roles as $index => $role_id) {
  $roles[$index] = "($user_id," . intval($role_id) . ")";
}

$query .= implode(', ', $roles);
于 2012-06-13T15:12:32.363 に答える
1

一度ユーザーをusersテーブルに挿入し、それLAST_INSERT_IDを変数に保存した場合、たとえば、$last_insert_idこれを使用して必要な数のクエリを実行でき$last_insert_idます(上書きされません:-))。

それで:

  1. 新しいユーザーを挿入
  2. 取得$last_insert_id
  3. 役割IDごとに実行insert into roleid values ($role_id, $last_insert_id)
    または
    実行insert into roleid values ($role_id_1, $last_insert_id), ($role_id_2, $last_insert_id), ($role_id_3, $last_insert_id), ...
于 2012-06-13T15:09:19.377 に答える
1
if (count($roles)) {
   $qry="INSERT INTO roleid (userid, roleid) VALUES ";
   $part="($user_insert_id, ";
   $qry . = $part . implode(")," . $part, roles) . ")";
   mysql_query($ary, $db_handle);
}
于 2012-06-13T15:20:24.787 に答える