Wie fragt man eine checkbox mit der drupal api ab?
am 02.12.2010 - 10:30 Uhr in
Es soll geprüft werden ob die checkbox aktiv ist oder nicht?
Gibt es da irgendwo Besipsiele?
<?php
$form['check'] = array(
'#type' => 'checkbox',
'#title' => t('abbestellen!'),
);
?>- Anmelden oder Registrieren um Kommentare zu schreiben

Core Bug, der noch aktiv ist:
am 02.12.2010 - 10:40 Uhr
Core Bug, der noch aktiv ist: http://drupal.org/node/259292
Warum zeigt <?php
am 02.12.2010 - 11:27 Uhr
Warum zeigt
<?phpprint_r($form['check']);
?>
?
Poste mal den ganzen
am 02.12.2010 - 11:15 Uhr
Poste mal den ganzen Quelltext, sonst kann Dir schlecht geholfen werden
<?php$send_form_to =
am 02.12.2010 - 11:50 Uhr
<?php
$send_form_to = 'test@xxx.com';
function my_form() {
$form['email'] = array(
'#type' => 'textfield',
'#title' => '',
'#size' => '20',
);
$form['check'] = array(
'#type' => 'checkbox',
'#title' => t('abbestellen'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Subscribe',
);
return $form;
}
/**
* Validate the form.
*/
function my_form_validate($form, &$form_state) {
$valid_email = $form_state['values']['email'];
if (!valid_email_address($valid_email)) {
form_set_error('email', 'Your email address -- ' . $valid_email . ' -- appears malformed');
}
}
/**
* Create the hook_mail function
* Required in Drupal 6
*/
function my_form_mail($key, &$message, $params) {
$headers = array(
'MIME-Version' => '1.0',
'Content-Type' => 'text/html; charset=UTF-8; format=flowed',
'Content-Transfer-Encoding' => '8Bit',
'X-Mailer' => 'Drupal'
);
foreach ($headers as $key => $value) {
$message['headers'][$key] = $value;
}
$message['subject'] = $params['subject'];
$message['body'] = $params['body'];
}
/**
* Create the form submit function
*/
function my_form_submit($form, &$form_state) {
$valid_email = $form_state['values']['email'];
$from = '';
$body = 'New Email Sent = ' . $valid_email;
$params = array(
'body' => $body,
'subject' => $form['check']['#return_value '],
);
if (drupal_mail('my_form', 'some_mail_key', $valid_email, language_default(), $params, $from, TRUE))
{
drupal_set_message('An email has been sent to ' . $valid_email);
} else {
drupal_set_message('There was an error sending your email');
}
}
/**
* Return the form.
*/
return drupal_get_form('my_form');
print_r($form['check']);
?>
also wenn überhaupt musst Du
am 02.12.2010 - 12:03 Uhr
also wenn überhaupt musst Du die Debug Ausgabe in die Funktion "my_form" packen
drupal_get_form liefert Dir das fertig gerenderte Formular und nicht das Array der Form
print_r($form['check']); in
am 02.12.2010 - 13:26 Uhr
print_r($form['check']); in my_form() klappt. Gibt aber nur die deklarieren variablen aus:
<?phpArray ( [#type] => checkbox [#title] => abbestellen )
?>
Wo ist nun abfragbar ob die checkbos aktiviert wurde oder nicht? Es soll ja ein #default_value geben laut api aber warum zeigt print_r($form['check']); das nicht?
Du solltest die Debugausgabe
am 02.12.2010 - 13:31 Uhr
Du solltest die Debugausgabe auf der "form_state" im "hook_submit" setzen, dann sollte dort auch alles drin stehen was das Formular abschickt.
Nimm Dir am besten das "Devel" Modul zu Hilfe und verwende anstatt "print_r" die Funktion "dpm" aus dem Devel Modul.
<?php function
am 02.12.2010 - 13:41 Uhr
<?php
function my_form_submit($form, &$form_state) {
$valid_email = $form_state['values']['email'];
$from = 'test@example.com';
$body = 'New Email Sent = ' . $valid_email;
$params = array(
'body' => $body,
'subject' => 'This is a subject',
print_r($form_state);
);
?>
print_r($form_state); zeigt nix.??? Müsste doch auch ohne devel modul gehen...
Im Grunde möchte ich das subject abhängig von der checkbox ändern.
Es kann sein dass print_r
am 02.12.2010 - 13:54 Uhr
Es kann sein dass print_r nicht ausgegeben wird, deshalb habe ich den Hinweis auf das Devel Modul mit zugepackt.
hebe das devel Modul nun
am 02.12.2010 - 14:06 Uhr
hebe das devel Modul nun aktiviert. Aber dpm($form_state); zeigt auch nix?
<?phpfunction
am 02.12.2010 - 14:15 Uhr
<?php
function my_form_submit($form, &$form_state) {
dpm($form_state);
$valid_email = $form_state['values']['email'];
$from = 'test@example.com';
$body = 'New Email Sent = ' . $valid_email;
$params = array(
'body' => $body,
'subject' => 'This is a subject',
);
?>
auch an der Stellen nix? :-(
am 02.12.2010 - 14:23 Uhr
auch an der Stellen nix?
:-(
Dann wird aber Dein
am 02.12.2010 - 14:28 Uhr
Dann wird aber Dein submit-Handler nicht ausgeführt!
Wenn ich auf submit klicke
am 02.12.2010 - 14:37 Uhr
Wenn ich auf submit klicke schon... :-)
Ich verstehe es nicht. Es sollte doch etwas ausgegeben werden...
Du kannst doch erst beim
am 02.12.2010 - 15:03 Uhr
Du kannst doch erst beim Validate / Submit prüfen ob der Checkbutton angehakt wurde!
Was willst Du denn mit einer Debugausgabe ohne dass das Formular versendet wurde?
Hier bekomme ich dpm
am 02.12.2010 - 17:22 Uhr
Hier bekomme ich dpm Ausgaben
<?php
function my_form_validate($form, &$form_state) {
dpm($form_state);
$valid_email = $form_state['values']['email'];
if (!valid_email_address($valid_email)) {
form_set_error('email', 'Die E-Mailadresse (' . $valid_email . ') scheint falsch zu sein.');
}
$checkbox = $form_state['values']['check'];
if ($checkbox != 1) {
$checkbox = 'a';
}else{
$checkbox = 'b';
}
print($checkbox);
}
?>
print($checkbox); gibt nix aus. Wie bekomme ich nun $checkbox in 'my_form_submit()'?
naja in der validate bringt
am 02.12.2010 - 17:28 Uhr
naja in der validate bringt Dir das relativ wenig, das muss schon im submit eingebunden werden.
Pack mal in den submit-Handler ein "die();", sollte man zwar nicht aber dann weisst Du zumindest ob er überhaupt aufgerufen wird.
Wenn die Seite dann angezeigt wird, wird der Handler nicht ausgeführt.
So sieht die Funktions
am 02.12.2010 - 17:47 Uhr
So sieht die Funktions aus
<?phpfunction my_form_submit($form, &$form_state) {
die();
$valid_email = $form_state['values']['email'];
$from = 'test@example.com';
$body = 'New Email Sent = ' . $valid_email;
print($checkbox);
$params = array(
'body' => $body,
'subject' => $checkbox,
);
?>
Ergebnis: weisse Seite.
ohne die(); gibt print($checkbox); einen Wert, aber 'subject' => $checkbox, nicht.
Warum?
Hm, dann sollte das
am 02.12.2010 - 17:48 Uhr
Hm,
dann sollte das dpm($form_state) aber auch einen Output liefern. Schick mir mal das ganze Modul an contact@sense-design.de
Dann guck ich da mal drüber warum das nicht rennt.
Danke für Dein Angebot aber
am 02.12.2010 - 18:00 Uhr
Danke für Dein Angebot aber das "modul" ist das folgende...
<?php
/**
* Create a form
*/
function my_form() {
$form['email'] = array(
'#type' => 'textfield',
'#title' => '',
'#size' => '20',
);
$form['check'] = array(
'#type' => 'checkbox',
'#title' => t('abbestellen'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Subscribe',
);
return $form;
}
/**
* Validate
*/
function my_form_validate($form, &$form_state) {
dpm($form_state);
$valid_email = $form_state['values']['email'];
if (!valid_email_address($valid_email)) {
form_set_error('email', 'Die E-Mailadresse (' . $valid_email . ') scheint falsch zu sein.');
}
$checkbox = $form_state['values']['check'];
if ($checkbox != 1) {
$checkbox = 'subscribe';
}else{
$checkbox = 'unsubscribe';
}
dpm($checkbox);
}
/**
* Create the hook_mail function
* Required in Drupal 6
*/
function my_form_mail($key, &$message, $params) {
$headers = array(
'MIME-Version' => '1.0',
'Content-Type' => 'text/html; charset=UTF-8; format=flowed',
'Content-Transfer-Encoding' => '8Bit',
'X-Mailer' => 'Drupal'
);
foreach ($headers as $key => $value) {
$message['headers'][$key] = $value;
}
$message['subject'] = $params['subject'];
$message['body'] = $params['body'];
}
/**
* Create the form submit function
*/
function my_form_submit($form, $form_state) {
#die();
$valid_email = $form_state['values']['email'];
$from = 'test@example.com';
$body = 'E-Mail verschickt = ' . $valid_email;
print($checkbox);
$params = array(
'body' => $body,
'subject' => $checkbox,
);
if (drupal_mail('my_form', 'some_mail_key', $valid_email, language_default(), $params, $from, TRUE))
{
drupal_set_message('An email has been sent to ' . $valid_email);
} else {
drupal_set_message('There was an error sending your email');
}
}
/**
* Return the form.
*/
return drupal_get_form('my_form');
?>
Zitat: 'subject' =>
am 02.12.2010 - 18:19 Uhr
'subject' => $checkbox,
Kann doch auch gar nicht funktionieren, weil du in der Submit-Funktion nirgendwo die Variable $checkbox belegst. Nur in der Validate-Funktion und dort bringt dir das nichts.
Ich verstehe echt das Problem nicht. Mach doch einfach in deine Submit-Funktion ein
<?php $wert = $form_state['values']['check']; ?>und fertig ist der Lack, oder? Dann hast du den Rückgabe-Wert der Checkbox in der Variable und kannst ihn in der Submit-Funktion verwenden, wo liegt denn da das Problem?Ja, die Abfrage klappt nun in
am 02.12.2010 - 18:28 Uhr
Ja, die Abfrage klappt nun in der submit Funktion. Weis auch nicht warum $form_state anfangs nich wollte... Super. Herzlichen Dank für Deine Mühe.
:-)
Doch noch was... <?php if
am 02.12.2010 - 19:43 Uhr
Doch noch was...
<?phpif (drupal_mail('my_form', 'some_mail_key', $valid_email, language_default(), $params, $from, TRUE))
{
?>
hat keinen Empfänger. Es fehlt $to. Trage ist das ein
<?phpif (drupal_mail('my_form', 'some_mail_key', $to, $valid_email, language_default(), $params, $from, TRUE))
{
?>
gibt es "Fatal error: Cannot use object of type stdClass as array"
Wo muss der Empfänger denn sonst rein?
Die erste Form ist die
am 02.12.2010 - 19:57 Uhr
Die erste Form ist die richtige (siehe Doku). $valid_email ist die E-Mail des Empfängers.
Beste Grüße
Werner
$valid_email ist klar. Nur wo
am 02.12.2010 - 20:41 Uhr
$valid_email ist klar.
die doku der api sagt
<?phpdrupal_mail($module, $key, $to, $language, $params = array(), $from = NULL, $send = TRUE)
?>
inkl. $to. Woher weiß die Funktion an wen die mail gehen soll, ohne $to, wenn die 1. Form richtig ist, aus meinem dem letzten post.
Eigentlich möchte ich nur wissen wo bzw. wie wird der Empfänger festgelegt wird?
In $to muss eine gültige
am 02.12.2010 - 20:49 Uhr
In $to muss eine gültige eMail-Adresse gespeichert sein, fertig.
Ob der Parmeter $to oder
am 02.12.2010 - 21:10 Uhr
Ob der Parmeter $to oder $valid_email heißt ist doch völlig egal. Es muß darin die Email des Empfängers angegeben werden und gut ist.
Beste Grüße
Werner