mehrere datensätze auf einmal aktualisieren?
Herwig
- php
hallo leute, folgende frage:
wir kann ich in einem formular mehrere datensätze auf einmal aktualisieren?
ich generiere also aus dem abfrage-array
mysql_real_escape_string($_GET['nachname']) ."' ,die formularfelder, drinnen stehen auch schon die abgefragten werte.
wie sieht aber jetzt die weiterverarbeitung aus?
bei einem datensatz wärs ungefähr so:
$erneuerung= mysql_query ("UPDATE kontakte SET nachname = usw.
wie bring ich aber einen array mit mehreren datensätzen in eine UPDATE-query? gibts wo ein gutes beispielscript?
thanks!
h
Due musst die Anweisungen einzeln an die Datenbank senden. Schreibe dir die Informationen am besten in ein Array und schicke dann mittels einer Schleife und mysql_query() die Infos an die Datenbank.
Mehrere Statements lassen sich nicht auf einmal an das DBMS schicken.
Due musst die Anweisungen einzeln an die Datenbank senden. Schreibe dir die Informationen am besten in ein Array und schicke dann mittels einer Schleife und mysql_query() die Infos an die Datenbank.
ja, genau das habe ich gemeint! aber genau das fällt mir eben schwer.
ich habe also EINE UPDATE-query, ein formularfeld, zb. <input type ="text" name ="nachname"> und, sagen wir ein zweites hidden field mit der dazupassenden id.
davon habe ich jetzt 3 stück auf meiner html-seite, damit ich 3 datensätze auf einmal verändern kann.
das 2. textfeld heißt also genauso <input type ="text" name ="nachname">, und das 3. auch.
beim hidden field ists leicht, dem kann ich als name gleich die eigene id geben, aber die namensfelder heißen alle "name".
wie packe ich nun diese 3 ausgefüllten felder in einen array?
ich glaub, ich stell mich grad ein bissl blöd an, bitte helft mir:-(
lg
herwig
echo $begrüßung;
ich habe also EINE UPDATE-query, ein formularfeld, zb. <input type ="text" name ="nachname"> und, sagen wir ein zweites hidden field mit der dazupassenden id.
davon habe ich jetzt 3 stück auf meiner html-seite, damit ich 3 datensätze auf einmal verändern kann.
PHP hat die Eigenheit, bei Eingabefeldern mit eckigen Klammern [] im name-Attribut, diese wie bei Arrays zu behandeln. name="record[42][nachname]" ergibt beispielsweise $_POST['record'][42]['nachname']. Probier damit ein bisschen rum und schau dir dabei das Ergebnis mit print_r($_POST) an.
echo "$verabschiedung $name";
Hello,
Du musst die Anweisungen einzeln an die Datenbank senden. Schreibe dir die Informationen am besten in ein Array und schicke dann mittels einer Schleife und mysql_query() die Infos an die Datenbank.
Selbstverständlich kann man auch bei MySQL in einem einzigen Statement mehrere Datensätze mit unterschiedlichen, nicht berechneten Daten auf einmal updaten.
Das ist dann sogar immer wichtig, wenn die Änderungen in Korrelation stehen, wenn also der eine Satz in der Tabelle nicht gändert werden darf, ohne dass der andere auch geändert wird (beim Tausch von Eigenschaften z.B.). Da benötigt man dann ein atomares Statement oder mann muss die Datensätze vorher sperren oder eben eine Transaktionsverwaltung zur Verfügung haben.
Da man bei Datenbanken besser auf Satz- und Tabellensperren verzichten sollte, ist so ein "Multiupdate" der bessere Weg, wenn die Anzahl der zu ändernden Felder und Datensätze nicht zu groß wird.
Sonst wird es unhandlich.
Da aber das Statement hier sowieso von PHP generiert wird, kann man auch ein ganzes Grid berechnen lassen... Man muss es ja nicht manuell eintippen :-)
Nachteil des Verfahrens ist, es darf nichts schief gehen beim Statement. Das könnte nämlich passieren, wenn jemand anders einen Satz aus dem Dataset gesperrt hält.
Beispiel:
CREATE TABLE adresse
(
id\_adresse
bigint(20) unsigned NOT NULL auto_increment,
upddat
datetime default NULL,
vorname
varchar(30) default NULL,
nachname
varchar(30) default NULL,
strasse
varchar(30) default NULL,
plz
varchar(8) default NULL,
ort
varchar(30) default NULL,
geschlecht
char(1) default NULL,
PRIMARY KEY (id\_adresse
),
UNIQUE KEY id\_adresse
(id\_adresse
),
KEY id\_adresse\_2
(id\_adresse
)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
update adresse
set geschlecht =
if(id_adresse=1,'m',
if(id_adresse=2,'w',
if(id_adresse=3,'m',
if(id_adresse=4,'w',
if(id_adresse=5,'m',geschlecht))))),
upddat=now()
where id_adresse in (1,2,3,4,5);
update adresse
set geschlecht =
if(id_adresse=1,'m',
if(id_adresse=2,'w',
if(id_adresse=3,'m',
if(id_adresse=6,'m',
if(id_adresse=7,'m',geschlecht))))),
upddat=now()
where id_adresse in (1,2,3,6,7);
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Moin!
$erneuerung= mysql_query ("UPDATE kontakte SET nachname = usw.
wie bring ich aber einen array mit mehreren datensätzen in eine UPDATE-query? gibts wo ein gutes beispielscript?
Es ist mit einem UPDATE-Query nur möglich, einen Datensatz pro Query zu aktualisieren.
Genauer gesagt: Du kannst mehrere Datensätze mit WHERE auswählen, die IDENTISCHE Daten mit SET erhalten. Und du kannst auch mehrere Zielfelder eines Datensatzes in SET angeben. Aber du kannst nicht mehrere Datensätze mit mehreren UNTERSCHIEDLICHEN Informationen PRO FELD in ein UPDATE packen.
- Sven Rautenberg
Hi,
Aber du kannst nicht mehrere Datensätze mit mehreren UNTERSCHIEDLICHEN Informationen PRO FELD in ein UPDATE packen.
es sei denn, diese Informationen ergeben sich aus dem jeweiligen Datensatz. Beispiel:
UPDATE tabelle SET a=a+1, b=c, c=b-3 WHERE foo=bar
Cheatah