2012-01-11 7 views
1

私はテーブルmembershipsを持っています。ユーザーのリストを維持する -

私は現在のメールのリストがmembershipsにあるテキストボックスをユーザに提供します。彼らはリストを編集することができます。リストを送り返すと、メンバーシップを更新したいので、には、ユーザーが指定したリストにある電子メールが含まれています。

私が考えることができる最良の方法は、すべての電子メールを削除し、リスト全体を挿入することです。より良い方法はありますか?私が今やっている何を

$mysql->query('DELETE FROM memberships'); 

    $userEmails = explode('\n', $_POST['users']); 
    foreach ($userEmails as $email) 
    $mysql->query('INSERT INTO memberships (email) VALUES (?)', $email); 
+1

サンプルコードを提供できますか? –

+0

確かに、いくつかのコードを追加しました。 –

+1

ユーザビリティの観点から、これを実行する最善の方法は、関連付けられた電子メールのリストにそれぞれに対して「x」ボタンを付けることです。これにより、この電子メールを削除するajax要求が行われます。そして、このリストの下に新しいフィールドを追加するフィールド。 – kenota

答えて

2

このような何かは多分あなたが(未テスト)探しているものです。クエリをSQLインジェクションを防ぐために使用する前に、あなたの入力をエスケープすることを忘れないでください。私はこれを入力したとして

$userEmails = explode("\n", mysql_real_escape_string($_POST['users'])); 
$mysql->query("DELETE FROM `memberships` WHERE `email` NOT IN ('".implode("','", array_values($userEmails))."');"); 
$mysql->query("REPLACE INTO `memberships` (`email`) VALUES ('".implode("'),('", array_values($userEmails)).");"); 
+0

しかし、もう一度彼は新しいメールを挿入する必要があります – Adi

+0

'新しい追加'の部分を追加しました。 – Corubba

+0

'\ n'を「\ n」に変更できる場合は、 – Adi

2

@BloodyWorldはちょうど良くMySQLのベースのソリューションを提出したが、私はとにかくこれを提出しています!

あなたはこのソリューションを試みることができる:

// Pull the current list of emails from the database 
$current_emails = $mysql->query('SELECT email FROM memberships'); 
$user_emails = explode('\n', $_POST['users']); 

// This array will contain only the emails to add 
$new_emails = array_diff($user_emails, $current_emails); 

// This array will contain only the emails to delete 
$deleted_emails = array_diff($current_emails, $user_emails); 

// Add the new ones 
foreach ($new_emails as $email) 
    $mysql->query('INSERT INTO memberships (email) VALUES (?)', $email); 

// Delete the old ones 
$mysql->query("DELETE FROM memberships WHERE email NOT IN('".implode("','", $deleted_emails)."')"); 

それはより多くのコードを必要とするが、それはあなたのメンバーのすべての可能性はそれがをループする機会を得る前に、データベースから削除され、送信されたテキストを解析取得削除。また、 "新しい"メンバーと "古い"メンバーの配列で終わります。これは他の目的のためには便利かもしれません。

関連する問題