Rows aanmaken met data en als row al bestaat updaten
Ik heb een Add_user formulier systeem wat correct werkt, deze voert de users in in de database. Nu heb ik ook een Edit_user forumlier wat op een paar punten werkt.
In het formulier kan de username, type user en wachtwoord worden gewijzigd. Alleen loop ik nu vast met de type user. Dit is in het formulier een checkbox en er kunnen meerdere keuzes aangevinkt worden. Deze geeft een integer mee die ik dan kan opvragen in delen van de website (dus waar deze user rechten heeft). Als er 3 checkboxen worden aangevinkt worden er dus 3 rows aangemaakt met gegevens.
Ik wil er dan voor zorgen dat er wordt gecontroleerd of de row bestaat als deze niet bestaat deze wordt aangemaakt en als deze al bestaat het wordt gewijzigd 'UPDATE'.
Code
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
if(isset($_POST['rechten1']))
{
$insertReplaceUser = 'INSERT into db_user (id, bedrijfId, UserName, Password) VALUES (1, "'.$bedrijf.'", "'.$username.'", "'.$wachtwoord.'")
ON DUPLICATE KEY UPDATE id=id+1;
UPDATE db_user SET id=id+1, UserName = "'.$username.'", Password = "'.$password.'" WHERE id = '.$_GET['userid'].'';
mysql_query($InsertReplaceUser) or die(mysql_error());
}
{
$insertReplaceUser = 'INSERT into db_user (id, bedrijfId, UserName, Password) VALUES (1, "'.$bedrijf.'", "'.$username.'", "'.$wachtwoord.'")
ON DUPLICATE KEY UPDATE id=id+1;
UPDATE db_user SET id=id+1, UserName = "'.$username.'", Password = "'.$password.'" WHERE id = '.$_GET['userid'].'';
mysql_query($InsertReplaceUser) or die(mysql_error());
}
Alle suggesties zijn welkom.
Gewijzigd op 10/11/2010 10:48:06 door Koen -
Dan controleer je of er een record is aangepast.
Indien niet doe je de insert.
Een voorgekauwd voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
/*
CREATE TABLE IF NOT EXISTS my_table (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL DEFAULT '0',
email varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/
$con = mysql_connect('localhost', 'root', 'pass');
$db = mysql_select_db('phphulp', $con);
$user = 4;
$email = '[email protected]';
$sql_update = "UPDATE my_table SET email = '". $email ."' WHERE user_id = ". (int) $user;
$sql_insert = "INSERT INTO my_table (id , user_id , email) VALUES ( NULL , ". (int) $user .", '". $email ."')";
$res = mysql_query($sql_update);
$affected_rows = mysql_affected_rows($con);
if ($affected_rows < 1) { // indien geen enkele record aangepast is,
$res = mysql_query($sql_insert);
echo 'No update made ';
}
else {
echo 'update made ';
}
?>
/*
CREATE TABLE IF NOT EXISTS my_table (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL DEFAULT '0',
email varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
*/
$con = mysql_connect('localhost', 'root', 'pass');
$db = mysql_select_db('phphulp', $con);
$user = 4;
$email = '[email protected]';
$sql_update = "UPDATE my_table SET email = '". $email ."' WHERE user_id = ". (int) $user;
$sql_insert = "INSERT INTO my_table (id , user_id , email) VALUES ( NULL , ". (int) $user .", '". $email ."')";
$res = mysql_query($sql_update);
$affected_rows = mysql_affected_rows($con);
if ($affected_rows < 1) { // indien geen enkele record aangepast is,
$res = mysql_query($sql_insert);
echo 'No update made ';
}
else {
echo 'update made ';
}
?>
Let er wel op: indien alle gegevens de zelfde zijn (in dit geval: je update een e-mail adres door precies het zelfde adres), zal $affected_rows ook 0 geven.