Saving drupal webform data to a database - php

Im using Drupal version 6.19 and the webform module in Drupal to create forms.I have two forms on my site.When the user submits the form, where in the drupal database are the entries saved for each form ?
Please help
Thank You

Just take a look at its database schema in webform.install.
...
$schema['webform_submitted_data'] = array(
'description' => 'Stores all submitted field data for webform submissions.',
'fields' => array(
'nid' => array(
'description' => 'The node identifier of a webform.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'sid' => array(
'description' => 'The unique identifier for this submission.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'cid' => array(
'description' => 'The identifier for this component within this node, starts at 0 for each node.',
'type' => 'int',
'size' => 'small',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'no' => array(
'description' => 'Usually this value is 0, but if a field has multiple values (such as a time or date), it may require multiple rows in the database.',
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
'default' => '0',
),
'data' => array(
'description' => 'The submitted value of this field, may be serialized for some components.',
'type' => 'text',
'size' => 'medium',
'not null' => TRUE,
),
),
'indexes' => array(
'nid' => array('nid'),
'sid_nid' => array('sid', 'nid'),
),
'primary key' => array('nid', 'sid', 'cid', 'no'),
);
...

You should use:
First, log in to mysql
After, use database_name;
You must replace with the name of the database
Then, show tables;
The last sentence will show you the tables of tha database
Now, select * from webform_submitted_data;
You should be able to see the data.

You can also view submitted data by navigating to Content Management > Webforms. I believe the data is serialized in the database, so if you have large forms its not an easy read.

Related

How to generate createdAt and updatedAt timestamps/datetime using CodeIgniter DB Forge?

I would like to have 2 timestamp/datetime fields, createdAt which only contains the time when the record was created but doesn't update constantly if there are updates on the record and updatedAt which generates during the time when the record was created and everytime the record gets updated. It's also said that a record should only contain one timestamp field at least for MySQL?
Here is my migration code:
$this->dbforge->add_field(array(
'id' => array(
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'name' => array(
'type' => 'VARCHAR',
'constraint' => '50',
),
'createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP'
));
How is this done using CodeIgniter DB Forge? Any answers are well appreciated. Thanks
Okay I got it, here is my solution:
$this->dbforge->add_field(array(
'id' => array(
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'name' => array(
'type' => 'VARCHAR',
'constraint' => '50',
),
'createdAt timestamp default now()',
'updatedAt timestamp default now() on update now()'
));

Create database table using Drupal hook_schema()

For the last few hours I have been trying to create database table in my custom module with no luck!! The documentation says that you only need to implement hook_schema in Drupal 7 and the Drupal takes care of creating the table during module installation. I just cant figure out why the table is not created. I tried installing the module through Drupal admin as well as pasting in the module folder but it still doesnt work.
Here is my function inside .install file:
/**
* #return array an array containing table's field definitions
* to be created by drupal schema api
*/
function inquiry_form_schema() {
$schema['inquiry_form'] = array(
'description' => 'Table to record inquiries submitted by staff',
'fields' => array(
'ID' => array(
'description' => 'The primary key of the table',
'type' => 'serial',
'size' => 'big',
'not null' => TRUE,
),
'sender' => array(
'description' => 'The person who submits the inquiry',
'type' => 'varchar',
'length' => '100',
'not null' => TRUE,
),
'subject' => array(
'description' => 'Title of the inquiry being submitted',
'type' => 'char',
'length' => '100',
'not null' => TRUE,
),
'department' => array(
'description' => 'The department that the inquiry is being referenced to',
'type' => 'varchar',
'length' => '100',
'not null' => TRUE,
),
'description' => array(
'description' => 'Detailed explanation of the issue the sender is experiencing',
'type' => 'text',
'not null' => TRUE,
),
// 'date' => array(
// 'description' => 'Date of the inquiry being submitted',
// 'mysql_type' => 'datetime',
// 'not null' => TRUE,
// ),
),
'primary key' => array('ID'),
);
return $schema;
}
I'm assuming your files are:
- inquiry_form.info
- inquiry_form.module
- inquiry_form.install
Is this the case?
Make sure the length is not quoted.
Should be 100 and not '100'

how to pre-fill select box in typo3 backend

First of all excuse my bad english.
I got a problem with my select-field in the BE. I would like to prefill (preselect) all of the available items.
Code in ext_tables.php:
'teilnehmer' => array(
'exclude' => 0,
'label' => 'LLL:EXT:kiwanisext/Resources/Private/Language/locallang_db.xlf:tx_kiwanisext_domain_model_veranstaltung.teilnehmer',
'config' => array(
'type' => 'select',
'foreign_table' => 'fe_users',
'MM' => 'tx_kiwanisext_veranstaltung_user_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => array(
'_PADDING' => 1,
'_VERTICAL' => 1,
'edit' => array(
'type' => 'popup',
'title' => 'Edit',
'script' => 'wizard_edit.php',
'icon' => 'edit2.gif',
'popup_onlyOpenIfSelected' => 1,
'JSopenParams' => 'height=350,width=580,status=0,menubar=0,scrollbars=1',
),
'add' => Array(
'type' => 'script',
'title' => 'Create new',
'icon' => 'add.gif',
'params' => array(
'table' => 'fe_users',
'pid' => '###CURRENT_PID###',
'setValue' => 'prepend'
),
'script' => 'wizard_add.php',
),
),
),
),
I found nothing helpful in the documentation.
Any hint, tip or help will be much appreciated!
Its not possible to do that with plain TCA config, afaik. You can however define a default value wich will be selected (if none is defines, 1st item will be selected).
'default' => 'myValue'
But to preselect multiple values at once, you have to use JavaScript I guess.
This code worked for me in typo3 6.2. I have a selectbox filled with database records.
I want the records with ID's 1 ans 2 to be preselected in the selectbox:
'thematique' => array(
'exclude' => 0,
'label' => 'LLL:EXT:dk_actus/locallang_db.xml:tx_dkactus_thematique',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_dkactus_thematique',
'foreign_table_where' => 'ORDER BY tx_dkactus_thematique.uid',
'size' => 10,
'minitems' => 0,
'maxitems' => 99,
'default' => '1,2',
),
),

Typo3 TCA type "text" line-/textbreaks?

I use a frontend plugin to insert data into the database. Via Typo3 (TCA) the record can be viewed in Backend.
The problem:
If there are breaks in the textarea from the frontend form its displayed inside the record like this:
test\r\ntest\r\ntest
What i already tried are different kind of escaping, nl2br, explodes, and so on.
How does the database-field should look like, so the breaks are displayed well?
Here is some code:
'note' => array(
'exclude' => 0,
'label' => 'LLL:EXT:mq_eventform/locallang_db.xml:tx_XYZ_data.note',
'config' => array(
'type' => 'text',
'cols' => '30',
'rows' => '5',
)
),
$field_values = array(
'note' => mysql_real_escape_string($_REQUEST['note']),
);
You need to use TCA type 'none' for backend. But this field is not editable.
'note' => array(
'exclude' => 0,
'label' => 'LLL:EXT:mq_eventform/locallang_db.xml:tx_XYZ_data.note',
'config' => array(
'type' => 'none',
'cols' => '30',
'rows' => '5',
'pass_content' => true,
)
),
And you need to use nl2br() function while storing value to database.
$field_values = array(
'note' => nl2br($_REQUEST['note']),
);

drupal 7 custom schema error datetime

I have the following schema (generated from an existing table with the schema module (7.x-1.0-beta3) in a custom module.
function myproject_entities_schema() {
// ---------------------------------------------------------------------------------
// MESSAGE
// ---------------------------------------------------------------------------------
$schema['myproject_entity_message'] = array(
'description' => 'The base table for myproject message instances',
'fields' => array(
'id' => array(
'description' => 'The primary identifier for a message instance',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'weekendday' => array(
'description' => 'Whether this message gets send on a weekendday(1) or on a workday(0)',
'type' => 'int',
'size' => 'tiny',
'not null' => TRUE,
'default' => 0,
),
'day' => array(
'description' => 'Numbered day of campaign schedule',
'type' => 'int',
'not null' => TRUE,
),
'content' => array(
'description' => 'Message content',
'type' => 'text',
'not null' => TRUE,
),
'time_to_send' => array(
'description' => 'When the message should arrive at the user',
'type' => 'datetime',
'not null' => TRUE,
),
'campaign_fk' => array(
'description' => 'the foreign key of the campaign this message belongs to',
'type' => 'int',
'unsigned' => TRUE,
'not null' => FALSE,
),
'user_id' => array(
'description' => 'The user id this message is generated for',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'pool_id' => array(
'description' => 'The pool node id this message was generated from',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'message_template_id' => array(
'description' => 'The node id of the message template this message was generated from',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
),
'primary key' => array('id'),
'indexes' => array(
'CAMPAIGN' => array('campaign_fk'),
'MESSAGE_TEMPLATE' => array('message_template_id'),
'POOL' => array('pool_id'),
'USER' => array('user_id'),
),
);
// ---------------------------------------------------------------------------------
// CAMPAIGN
// ---------------------------------------------------------------------------------
$schema['myproject_entity_campaign'] = array(
'description' => 'The base table for myproject campaigns instances',
'fields' => array(
'id' => array(
'description' => 'The primary identifier for a campaign instance',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'schedule' => array(
'description' => 'The schedule of the campaign in text format.',
'type' => 'text',
'not null' => TRUE,
),
'interruptible' => array(
'description' => 'Whether this campaign is interruptible or not',
'type' => 'int',
'size' => 'tiny',
'not null' => TRUE,
),
'campaign_template_id' => array(
'description' => 'Node id of campaign template this instance was created from',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
),
'product_fk' => array(
'description' => 'Primary key of product instance this campaign belongs to',
'type' => 'int',
'unsigned' => TRUE,
'not null' => FALSE,
),
),
'primary key' => array('id'),
'indexes' => array(
'CAMPAIGN_TEMPLATE' => array('campaign_template_id'),
'PRODUCT' => array('product_fk'),
),
);
// ---------------------------------------------------------------------------------
// PRODUCT
// ---------------------------------------------------------------------------------
$schema['myproject_entity_product'] = array(
'description' => 'The base table for myproject product instances',
'fields' => array(
'id' => array(
'description' => 'The primary identifier for a product instance',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'start' => array(
'description' => 'Time when the campaign started',
'type' => 'datetime',
'not null' => TRUE,
),
'current_campaign_fk' => array(
'description' => 'Foreign key of currently running campaign instance',
'type' => 'int',
'unsigned' => TRUE,
'not null' => FALSE,
),
'next_campaign_fk' => array(
'description' => 'Foreign key of campaign instance to run next',
'type' => 'int',
'unsigned' => TRUE,
'not null' => FALSE,
),
),
'primary key' => array('id'),
'indexes' => array(
'CURRENT' => array('current_campaign_fk'),
'NEXT' => array('next_campaign_fk'),
),
);
return $schema;
}
When i try to install the module and thus create the schema, I always get the following notice (which I dont think is the main reason for failing):
Notice: Undefined index: datetime:normal in DatabaseSchema_mysql->processField() (line 200 of /Users/xxx/Repos/myproject/includes/database/mysql/schema.inc).
And the following error:
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 'NOT NULL COMMENT 'When the message should arrive at the user', `campaign_fk` IN' at line 6: CREATE TABLE {myproject_entity_message} ( `id` INT unsigned NOT NULL auto_increment COMMENT 'The primary identifier for a message instance', `weekendday` TINYINT NOT NULL DEFAULT 0 COMMENT 'Whether this message gets send on a weekendday(1) or on a workday(0)', `day` INT NOT NULL COMMENT 'Numbered day of campaign schedule', `content` TEXT NOT NULL COMMENT 'Message content', `time_to_send` NOT NULL COMMENT 'When the message should arrive at the user', `campaign_fk` INT unsigned NULL DEFAULT NULL COMMENT 'the foreign key of the campaign this message belongs to', `user_id` INT unsigned NOT NULL COMMENT 'The user id this message is generated for', `pool_id` INT unsigned NOT NULL COMMENT 'The pool node id this message was generated from', `message_template_id` INT unsigned NOT NULL COMMENT 'The node id of the message template this message was generated from', PRIMARY KEY (`id`), INDEX `CAMPAIGN` (`campaign_fk`), INDEX `MESSAGE_TEMPLATE` (`message_template_id`), INDEX `POOL` (`pool_id`), INDEX `USER` (`user_id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 'The base table for myproject message instances'; Array ( ) in db_create_table() (line 2684 of /Users/xxx/Repos/myproject/includes/database/database.inc).
I searched for errors in the schema definition but could not find any. Also I don't see what exactly is wrong with the sql statement.
My server setup is:
Apache/2.2.20 (Unix) mod_ssl/2.2.20 OpenSSL/0.9.8r DAV/2 PHP/5.3.6 with Suhosin-Patch
MySQL client version: mysqlnd 5.0.8-dev - 20102224 - $Revision: 308673 $
Does anyone see whats wrong here?
I think you need to use datetime:normal as the key for your datetime column type.
'time_to_send' => array(
'description' => 'When the message should arrive at the user',
'type' => 'datetime:normal',
'not null' => TRUE,
),
Other than that you can try specifying the column type as a MySQL DATETIME explicitly:
'time_to_send' => array(
'description' => 'When the message should arrive at the user',
'mysql_type' => 'DATETIME',
'not null' => TRUE,
),
The problem seems to stem from whether or not DATETIME is actually allowed in Drupal 7; see this discussion for a lot more details than I can fit in here :)

Categories