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

  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
Weiter

Neue Kommentare

  • Verwende doch das Tag dafür,
    vor 6 Tagen 11 Stunden
  • Guckst du hier: step by step
    vor 6 Tagen 1 Stunde
  • Guckst du hier: step by step
    vor 6 Tagen 1 Stunde
  • Ich habe ja keine Angst vor
    vor 2 Wochen 1 Tag
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 2 Wochen 3 Tagen
  • Vielen Dank erst einmal, aber
    vor 2 Wochen 5 Tagen
  • Du hast die "Trusted host
    vor 2 Wochen 5 Tagen
  • Bitte genauer den aktuellen Lösungs-Ansatz beschreiben
    vor 4 Wochen 4 Tagen
  • Git und rsync sind die wichtigsten Werkzeuge
    vor 5 Wochen 1 Tag
  • Arrrrg. Nix Tabelle :-D /*
    vor 9 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250284
Registrierte User: 20499

Neue User:

  • Inga GuAph
  • Robertolix
  • DavidBit

» Alle User anzeigen

User nach Punkten sortiert:
wla9464
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 24 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