Rows aanmaken met data en als row al bestaat updaten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koen -

Koen -

10/11/2010 10:47:11
Quote Anchor link
Ik wil via een INSERT ... ON DUPLICATE KEY rows gaan updaten of aanmaken.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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());
    }


Alle suggesties zijn welkom.
Gewijzigd op 10/11/2010 10:48:06 door Koen -
 
PHP hulp

PHP hulp

22/12/2024 08:51:07
 
Kris Peeters

Kris Peeters

29/11/2010 14:06:38
Quote Anchor link
Eerst doe je de update.
Dan controleer je of er een record is aangepast.
Indien niet doe je de insert.

Een voorgekauwd voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 ';
  }

?>


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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.