Herwig: mehrere datensätze auf einmal aktualisieren?

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

  1. 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.

    1. 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

      1. 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";

    2. 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

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. 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

    --
    "Love your nation - respect the others."
    1. 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

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes