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 - 22: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 (1559)
am 24.05.2015 - 22: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 - 22: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 (1559)
am 25.05.2015 - 08: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 - 10: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 (1559)
am 25.05.2015 - 11: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 - 11: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 (1559)
am 25.05.2015 - 12: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 - 17: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 (1559)
am 25.05.2015 - 21:47 Uhr

Dafür gibt es ja die Community.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 2 Stunden
  • Hey danke
    vor 2 Wochen 20 Stunden
  • Update: jetzt gibt's ein
    vor 2 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 3 Tagen
  • In der entsprechenden View
    vor 3 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 3 Tagen
  • gelöst
    vor 5 Wochen 6 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 21 Stunden

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

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