Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

GELÖST - db_update bzw db_insert mit db_merge

Eingetragen von Mystery (63)
am 24.05.2015 - 23:01 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x oder neuer

Hallo zusammen,
Ich arbeite gerade an einem Modul. Funktioniert auch alles soweit ganz gut. Nun möchte ich aber, das die "SUBMIT" funktion prüft ob ein eintrag mit dem aktuellem wert aus der $form_state in der datenbank schon vorhanden ist oder nicht und dann je nach dem ob TRUE oder FALSE db_insert bzw db_update ausführt.

Folgend mal grob meine Funktion.

<?php


function mene_submit_funktion ($form, &$form_state) {
    if {
       
// meine zu prüfende variable $form_state{'mlid'] in meiner datenbank vorhanden?
        // dann führe ein db_upate durch
   
} else {
       
// führe ein db_insert durch
   
}
}


?>

wie kann ich das denn lösen? Meine versuche haben bis jetzt nicht zum gewünschten resultat geführt.

‹ Funktion um datein auszulesen GELÖST - db_update bzw db_insert mit db_merge ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ist alles gar nicht

Eingetragen von Sense (1560)
am 24.05.2015 - 23:09 Uhr

Ist alles gar nicht notwendig, dafür gibt es db_merge().
https://coderwall.com/p/hfag3q/drupal-s-db_merge-function-does-either-an...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok. Leider bekomme ich einen

Eingetragen von Mystery (63)
am 24.05.2015 - 23:45 Uhr

Ok.
Leider bekomme ich einen fehler

Zitat:

Notice: Array to string conversion in DatabaseStatementBase->execute() (line 2171 of C:\xampp\apps\drupal\htdocs\includes\database\database.inc).
PDOException: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s): SELECT 1 AS expression FROM {menu_svg_image} menu_svg_image WHERE ( (mlid = :db_condition_placeholder_0_0, :db_condition_placeholder_0_1, :db_condition_placeholder_0_2, :db_condition_placeholder_0_3, :db_condition_placeholder_0_4, :db_condition_placeholder_0_5, :db_condition_placeholder_0_6, :db_condition_placeholder_0_7, :db_condition_placeholder_0_8, :db_condition_placeholder_0_9, :db_condition_placeholder_0_10, :db_condition_placeholder_0_11, :db_condition_placeholder_0_12, :db_condition_placeholder_0_13, :db_condition_placeholder_0_14, :db_condition_placeholder_0_15) ); Array ( [:db_condition_placeholder_0_0] => value [:db_condition_placeholder_0_1] => 435 [:db_condition_placeholder_0_2] => 1 [:db_condition_placeholder_0_3] => 1 [:db_condition_placeholder_0_4] => [:db_condition_placeholder_0_5] => Array ( [0] => mlid ) [:db_condition_placeholder_0_6] => Array ( [0] => mlid ) [:db_condition_placeholder_0_7] => 0.003 [:db_condition_placeholder_0_8] => [:db_condition_placeholder_0_9] => [:db_condition_placeholder_0_10] => Array ( ) [:db_condition_placeholder_0_11] => before [:db_condition_placeholder_0_12] => edit-mlid [:db_condition_placeholder_0_13] => mlid [:db_condition_placeholder_0_14] => 1 [:db_condition_placeholder_0_15] => 1 ) in menu_svg_image_edit_item_submit() (line 132 of C:\xampp\apps\drupal\htdocs\sites\all\modules\menu_svg_image\menu_svg_image.module).

Hier mal meine Funktion

<?php


function menu_svg_image_edit_item_submit($form, &$form_state) {

       
$mlid = $form['mlid'];
       
dsm($form);
       
dsm($form_state);
  
       
$query_insert = db_merge('menu_svg_image')
                ->
condition('mlid', $mlid, '=')
                ->
fields(array(
                   
'mlid' => $form_state['values']['mlid'],
                   
'file_id' => $form_state['values']['menu_svg_image']['file_id'],
                   
'options_id' => $form_state['values']['menu_svg_image']['options_id'],
                   
'svg_css_id' => $form_state['values']['menu_svg_image']['options']['svg_tag_options']['svg_css_id'],
                   
'svg_css_class' => $form_state['values']['menu_svg_image']['options']['svg_tag_options']['svg_css_class'],
                   
'img_css_id' => $form_state['values']['menu_svg_image']['options']['img_tag_options']['img_css_id'],
                   
'img_css_class' => $form_state['values']['menu_svg_image']['options']['img_tag_options']['img_css_class'],
                ))
                ->
execute();
}

?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, die Anwendung der

Eingetragen von Sense (1560)
am 25.05.2015 - 09:52 Uhr

Hi, die Anwendung der Funktion ist nicht korrekt, es fehlt der "key()", siehe hier:
http://drupaltonight.com/drupal-articles/using-dbmerge-query-insert-or-u...

Analog zur englischen Seite habe ich das auch in Deutsch hier nochmal zusammengefasst:
http://www.sense-design.de/tutorial/drupal-7-verwendung-von-dbmerge

  • Anmelden oder Registrieren um Kommentare zu schreiben

Muss ich vor der db_merge

Eingetragen von Mystery (63)
am 25.05.2015 - 11:19 Uhr

Muss ich vor der db_merge noch eine db_select ausführen, um alle mlid werte meiner tabelle abzufragen?

oder setze ich einfach nur

<?php
->key(array('mlid' => $mlid))
?>

denn wenn ich statt ->condition den ->key setze, bekom ic dennoch einen SQL Fehler

Zitat:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'before', 'edit-mlid', 'mlid', '1', '1')) )' at line 1: SELECT 1 AS expression FROM {menu_svg_image} menu_svg_image WHERE ( (mlid IN (:db_condition_placeholder_0, :db_condition_placeholder_1, :db_condition_placeholder_2, :db_condition_placeholder_3, :db_condition_placeholder_4, :db_condition_placeholder_5_0, :db_condition_placeholder_6_0, :db_condition_placeholder_7, :db_condition_placeholder_8, :db_condition_placeholder_9, , :db_condition_placeholder_11, :db_condition_placeholder_12, :db_condition_placeholder_13, :db_condition_placeholder_14, :db_condition_placeholder_15)) ); Array ( [:db_condition_placeholder_0] => value [:db_condition_placeholder_1] => 435 [:db_condition_placeholder_2] => 1 [:db_condition_placeholder_3] => 1 [:db_condition_placeholder_4] => [:db_condition_placeholder_7] => 0.003 [:db_condition_placeholder_8] => [:db_condition_placeholder_9] => [:db_condition_placeholder_11] => before [:db_condition_placeholder_12] => edit-mlid [:db_condition_placeholder_13] => mlid [:db_condition_placeholder_14] => 1 [:db_condition_placeholder_15] => 1 [:db_condition_placeholder_5_0] => mlid [:db_condition_placeholder_6_0] => mlid ) in menu_svg_image_edit_item_submit() (line 133 of C:\xampp\apps\drupal\htdocs\sites\all\modules\menu_svg_image\menu_svg_image.module).

Noch eine Frage.

Muss die mlid in meiner Tabelle gezwungener maßen ein primär key sein?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ist $mlid denn ein String

Eingetragen von Sense (1560)
am 25.05.2015 - 12:07 Uhr

Ist $mlid denn ein String oder Integer, scheint mir eher so als wäre $mlid ein array oder eine Formularkomponente ("edit-mlid").
Du bekommst die Werte des abgeschickten Formulars über das $form_state['values'], siehe mein Tutorial, dort habe ich das auch beschrieben.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Sense.Ok ein Problem

Eingetragen von Mystery (63)
am 25.05.2015 - 12:33 Uhr

Hi Sense.

Ok ein Problem gelöst, die $mlid war ein teil von $form['mlid'] und nicht $form_state['mlid']. dasss verursachte den SQL Fehler.

Allerddings, überschreibt meine anweisung keine einträge mit vorhanener mlid sondern insert neue. Wo hängt es denn nun noch? Hier noch mal meine db_merge

<?php


function menu_svg_image_edit_item_submit($form, &$form_state) {

       
$mlid = $form_state['mlid'];
          
       
$query_insert = db_merge('menu_svg_image')
                ->
key(array('mlid' => $mlid,))
                ->
fields(array(
                   
'mlid' => $form_state['values']['mlid'],
                   
'file_id' => $form_state['values']['menu_svg_image']['file_id'],
                   
'options_id' => $form_state['values']['menu_svg_image']['options_id'],
                   
'svg_css_id' => $form_state['values']['menu_svg_image']['options']['svg_tag_options']['svg_css_id'],
                   
'svg_css_class' => $form_state['values']['menu_svg_image']['options']['svg_tag_options']['svg_css_class'],
                   
'img_css_id' => $form_state['values']['menu_svg_image']['options']['img_tag_options']['img_css_id'],
                   
'img_css_class' => $form_state['values']['menu_svg_image']['options']['img_tag_options']['img_css_class'],
                ))
                ->
execute();
}

?>

Zur übersssicht der SQL Tabelle al die Install

<?php


function menu_svg_image_schema() {
 
$schema ['menu_svg_image'] = array(
   
'description' => 'The base table for menu svg image module.',
   
'fields' => array(
     
'msi_id' => array(
       
'description' => 'The primary identifier for a entry of menu svg image data.',
       
'type' => 'serial',
       
'unsigned' => TRUE,
       
'not null' => TRUE,
      ),
     
'mlid' => array(
       
'description' => 'The menu link id.',
       
'type' => 'int',
       
'unsigned' => TRUE,
       
'not null' => TRUE,
       
'default' => 0,
      ),
      .........
),
   
'primary key' => array('msi_id'),
  );
  return
$schema;
}

?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Der Wert sollte über

Eingetragen von Sense (1560)
am 25.05.2015 - 13:02 Uhr

Der Wert sollte über $form_state['values']['mlid'] bereit bestellt werden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke. jetzt klappt ess.

Eingetragen von Mystery (63)
am 25.05.2015 - 18:10 Uhr

Danke. jetzt klappt es.

Eh man als anfänger in sachen modul schreiben mal durchgesehen hat, ist gar ni so einfach.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Dafür gibt es ja die

Eingetragen von Sense (1560)
am 25.05.2015 - 22:47 Uhr

Dafür gibt es ja die Community.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
Weiter

Neue Kommentare

  • anyone has a working Betaflight mirror right now?
    vor 1 Tag 4 Stunden
  • Vielen Dank für Ihren
    vor 1 Tag 9 Stunden
  • Composer ist sehr ratsam
    vor 3 Tagen 8 Stunden
  • Vielen Dank für den
    vor 5 Tagen 18 Stunden
  • Die alten CMS Vergleiche von contentmanager.de
    vor 6 Tagen 6 Stunden
  • Gut gemacht
    vor 6 Tagen 7 Stunden
  • Layout Builder etc. z.B. für Landing Pages
    vor 6 Tagen 7 Stunden
  • Links
    vor 1 Woche 1 Tag
  • Moin,wow, sehr gutes
    vor 1 Woche 2 Tagen
  • Dass ist eine spannende
    vor 1 Woche 3 Tagen

Statistik

Beiträge im Forum: 250314
Registrierte User: 20559

Neue User:

  • Cruzorerm
  • Plandkeews
  • Tepkugem

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 3 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association