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

*GELÖST* Fehler bei SQL INSERT

Eingetragen von Mystery (63)
am 02.04.2015 - 11:07 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x oder neuer

Hallo zusammen,

ich erstelle gerade zur Übung ein kleines Modul namens Copyright, um Drupal, PHP und SQL tiefgehender zu verstehen und zu lernen.

Mein Modul besteht aus folgenden Datein:

  • copyright.info
  • copyright.install
  • copyright.modul
  • copyright.admin.inc

Soweit funktioniert bis jetzt auch alles wie gewünscht. Nun sitze ich daran, die eingegeben Daten in die Tabelle zu speichern und bekomme hier einen Fehler, woraus ich nicht schlau werde.

Fehlermeldung:

Notice: Undefined index: copyright_description in copyright_admin_settings_submit() (line 51 of C:\xampp\htdocs\gta-league\sites\all\modules\copyright\copyright.admin.inc).

PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1: INSERT INTO {copyright} (copyright_text,copyright_description,copyright_url,copyright_url_name) VALUES (''); Array ( ) in copyright_admin_settings_submit() (line 52 of C:\xampp\htdocs\gta-league\sites\all\modules\copyright\copyright.admin.inc).

Hier mal die function die für das speichern zuständig ist:

<?php


49    
function copyright_admin_settings_submit ($form) {
50    db_query('DELETE FROM {copyright}');
51    db_query("INSERT INTO {copyright} (copyright_text,copyright_description,copyright_url,copyright_url_name) VALUES ('".$form['copyright']['copyright_text']['copyright_description']
52    ['copyright_url']['copyright_url_name']."')");
53    drupal_set_massage('Your Copyright Info has been saved.');
54   
55    
}


?>

Hier das Formular wo die daten eingegeben werden:

<?php


function copyright_admin_settings() {
   
   
$form['copyright'] = array (
   
'#type' => 'fieldset',
   
'#title' => 'Copyright settings',
   
'#description' => 'Create an copyright text like "Powered by LINKNAME and an description under this line"',
    );
   
   
$form ['copyright']['copyright_text'] = array (
   
'#type' => 'textfield',
   
'#title' => 'Text',
   
'#default_value' => '',
   
'#description' => 'Input a text like "Powered by"',
    );
   
   
$form ['copyright']['copyright_description'] = array (
   
'#type' => 'textarea',
   
'#title' => 'Description under your Copyright',
   
'#rows' => 6,
   
'#default_value' => '',
   
'#description' => 'A longer text under your copyright',
    );
   
   
$form ['copyright']['copyright_url'] = array (
   
'#type' => 'textfield',
   
'#title' => 'Link URL',
   
'#default_value' => '',
   
'#description' => 'Link to the copyright site',
    );
   
   
$form ['copyright']['copyright_url_name'] = array (
   
'#type' => 'textfield',
   
'#title' => 'Name of the URL',
   
'#default_value' => '',
   
'#description' => 'This where show as your link to the URL',
    );
   
   
$form ['copyright']['copyright_submit'] = array (
   
'#type' => 'submit',
   
'#value' => 'Save/Update'
   
);

    return
$form;
   
}


?>

Hier noch das SQL Schema in der copyright.install:

<?php


function copyright_schema() {
   
$schema['copyright'] = array(
       
'fields' => array (
           
'copyright_id' => array (
           
'description' => 'id of copyright',
           
'type' => 'int',
           
'unsigned' => TRUE,
           
'auto_increment' => TRUE,
           
'not null' => TRUE,
            ),
           
'copyright_text' => array (
           
'description' => 'text of copyright',
           
'type' => 'varchar',
           
'length' => 255,
           
'not null' => TRUE,
           
'default' => 'Powered by Copyright module',
            ),
           
'copyright_description' => array (
           
'description' => 'description for copyright',
           
'type' => 'text',
           
'not null' => TRUE,
           
'size' => 'big',
           
'default' => '',
            ),
           
'copyright_url' => array (
           
'description' => 'url of copyright',
           
'type' => 'varchar',
           
'length' => 255,
           
'not null' => TRUE,
           
'default' => '',
            ),
           
'copyright_url_name' => array (
           
'description' => 'name of url for copyright',
           
'type' => 'varchar',
           
'length' => 255,
           
'not null' => TRUE,
           
'default' => '',
            ),
           
        ),
       
'primary key' => array('copyright_id'),
  );
  return
$schema;
 
 
}


?>

Ich denke die gegeben Informationen sind aussreichend für die Fehlerbehebung. Falls nicht, dann gebt bescheid.

Ich werde aus der Fehlermeldung einfach nicht schlau und finde auch nicht den Fehler. Habe schon eine andere Syntax variante genommen, die mir phpMyAdmin gibt, aber auch diese führt zu fehlern. Würde mich freuen, wenn mir jemand den Fehler sagen kann und erklären kann warumm der Fehler entstanden ist und mir diesen auch korrigieren kann.

‹ Umfangreiches PHP skript zu Drupal Modul code umformen *GELÖST* Fehler bei SQL INSERT ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Das array wird offenbar nicht aufgelöst

Eingetragen von ronald (3857)
am 02.04.2015 - 12:06 Uhr

lass dir mit dem devel module die Datenstruktur anzeigen, ehe du sie "auf die Reise" schickst.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke

Eingetragen von Mystery (63)
am 02.04.2015 - 12:55 Uhr

Danke, ich komme dennoch nicht weiter....

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat:<?php51   

Eingetragen von wla (9461)
am 02.04.2015 - 13:07 Uhr
Zitat:

<?php
51    db_query
("INSERT INTO {copyright} (copyright_text,copyright_description,copyright_url,copyright_url_name) VALUES ('".$form['copyright']['copyright_text']['copyright_description']
52    ['copyright_url']['copyright_url_name']."')");
?>

Zähle doch mal die Werte, die Du eintragen willst und dann die Anzahl der übergebenen Werte. Du hast da einen Mischmasch von ' und ". Dadurch bleiben am Ende keine 4 Werte für den Insert und genau das besagt Deine Fehlermeldung

Zitat:

1136 Column count doesn't match value count

. Bau Dir die Query mal richtig mit Werten zusammen. Dann siehst Du auch Deinen Fehler, denn es muß schließlich ein gültiges SQL-Statement entstehen. Ich nehme an, es muß jedesmal $form['xxx'], $form['yyy'], .... heißen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das, was du lieferst,

Eingetragen von ronald (3857)
am 02.04.2015 - 13:53 Uhr

ist ein sehr tief verschachteltes Array ohne Inhalt.

<?php
51    db_query
("INSERT INTO {copyright} (copyright_text,copyright_description,copyright_url,copyright_url_name) VALUES ('".$form['copyright']['copyright_text']['copyright_description']
52    ['copyright_url']['copyright_url_name']."')");
?>

muss heißen:

db_query("INSERT INTO {copyright} (copyright_text,copyright_description,copyright_url,copyright_url_name) VALUES ('".$form['copyright_text']."','".$form['copyright_description']."','".$form['copyright_url']."','".$form['copyright_url_name']."')");

Ich hoffe, ich habe mich nicht vertippt ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke Ronal

Eingetragen von Mystery (63)
am 02.04.2015 - 15:15 Uhr

alleringss sagt mir SQL mmit deiner lösung : Notice: Undefined index: copyright_text in copyright_admin_settings_submit() und das für alle 4 Elemente...

Langgsam bin ich ratlos, da ich das ganze anhand einess Tutorials aufbaue, nur halt für ein oul abäner. Ddie Funktionen sind aber si 1:1 von der strucktur her übernommen.

EDIT:

Lösung gefunden.....

ich habe in er Form den index so definiert:

<?php

$form
['copyright']['copyright_text'] = array

?>

sogleich ergibt sich, das ich die werte in VALUES auc so übergeben muss:

<?php

('".$form['copyright']['copyright_text']['#value']."')

?>

Aber danke für deinen Ansatz, der sehr hilfreich war.

  • Anmelden oder Registrieren um Kommentare zu schreiben

du hast doch sicher das devel modul aktiv

Eingetragen von ronald (3857)
am 02.04.2015 - 15:18 Uhr

schaue dir die Datenstruktur des formulares an.

Meine Struktur ist von deiner Vorgabe ausgegangen.

Es kann auch heißen $form['fields'][..., oder irgendwie in dieser Art.

Wenn du einigermaßen sicher im Lesen von Arraystrukturen bist, kannst du das leicht herausfinden, und ggf. vor der Übertragung in die SQL-Syntax vereinfachen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

sicher??

Eingetragen von Mystery (63)
am 02.04.2015 - 15:24 Uhr

So sicher beim php und sql lesen und schreiben bin ich leider noch nicht, deswegen ja auch das kleine Übungsmodul um da durch zu blicken.

Submit macht nun genau dass was es soll nach noch kleiner Änderung deiner Struktur.

  • 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 1 Woche 6 Tagen
  • Hey danke
    vor 2 Wochen 15 Stunden
  • Update: jetzt gibt's ein
    vor 2 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 5 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 15 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 32 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