[support] loops?

MichelleX michelle at steelveils.com
Sat Dec 2 13:40:34 UTC 2006


Hi Larry - Thanks for the input. I think I got ya.
I'll certainly look into Webform - anything other than this method is 
more than welcome, as long as it can do file attachments to the email.

Thanks again!
Michelle



Larry Garfield wrote:
> First of all, the data structure for the select is not a simple array.  It's 
> an associative array.  The key is the value that gets submitted by the form 
> while the value for each key is the label to display.  The actual renderer 
> for the form does something like this:
>
> foreach ($options as $key => $value) {
>   print "<option value='$key'>$value</option>\m";
> }
>
> (That's NOT the actual Drupal code, but that's the sort of logic it does.)  
>
> So if you want to have a string value submitted, you'd need an option array 
> like this:
>
>  $experience = array(
> t('Amateur/ Hobbyist') => t('Amateur/ Hobbyist'),
> t('Experienced Hobbyist') => t('Experienced Hobbyist'),
> t('Semi Professional') => t('Semi Professional'),
> t('Professional') => t('Professional'),
> );
>
> Note that the "select one" option is not necessary; Drupal will add it for you 
> if appropriate.  
>
> Secondly, it looks like you're doing things the very hard way. :-)  Check out 
> the webforms module, or similar; it can probably build you a form that will 
> do what you need without you writing any actual code, and certainly not 
> messing around with mail headers.  Alternatively, you can have people submit 
> a CCK-created node with image fields and use the actions module to send you a 
> notice email to go view the node on the site.  That way you even get a nice 
> permanent record out of it.
>
> When in doubt, make Drupal do it for you. :-)  
>
> Cheers.
>
> On Friday 01 December 2006 18:59, MichelleX wrote:
>   
>> I apologize if this isn't the right place to post this.. but I was
>> hoping someone could help me out with a foreach loop.
>>
>> I'm using the code from here http://drupal.org/node/68265 for a custom
>> form in a page.
>> I've modified it to display select menus - and they work just great
>> except I can't get it to send anything other than a number. I've been
>> all through the api stuff and have tried various methods for writing a
>> foreach loop for the select menus, but everything seems to conflict with
>> common.inc.
>> Here's my modified code (hopefully this will display correctly):
>>
>> <?php
>>
>> $form['name'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('Username'),
>>     '#default_value' => $object['name'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#required' => TRUE,
>> );
>>
>> $form['eMail'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('E-mail Address'),
>>     '#default_value' => $object['eMail'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#required' => TRUE,
>> );
>>
>> //account option
>>  $account = array(
>> '--'.t('Select').'--',
>> t('Model'),
>> t('Photographer'),
>> t('Crew'),
>> );
>>
>> $form['assign'][$i] = array(
>>     '#type' => 'select',
>>     '#title' => t('Account purpose'),
>>     '#default_value' => $object['assign'][$i],
>>     '#options' => $account,
>>     '#required' => TRUE,
>>     '#description' => t('Choose which account your\'re applying for.'),
>> );
>>
>>
>> $form['location'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('Location'),
>>     '#default_value' => $object['location'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#required' => TRUE,
>> '#description' => t('Enter your city, state and country'),
>> );
>>
>> $form['age'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('Age'),
>>     '#default_value' => $object['age'],
>>     '#size' => 15,
>>     '#maxlength' => 128,
>>     '#required' => TRUE,
>> '#description' => t('Enter your age'),
>> );
>>
>> //experience options
>>  $experience = array(
>> '--'.t('Select').'--',
>> t('Amateur/ Hobbyist'),
>> t('Experienced Hobbyist'),
>> t('Semi Professional'),
>> t('Professional'),
>> );
>>
>> $form['exlevel'] = array(
>>     '#type' => 'select',
>>     '#title' => t('Experience Level'),
>>     '#default_value' => $object['exlevel'],
>>     '#options' => $experience,
>> '#required' => TRUE,
>> '#description' => t('Enter your experience level.'),
>> );
>>
>> //travel options
>>  $travel = array(
>> '--'.t('Select').'--',
>> t('Yes'),
>> t('w/ expenses paid'),
>> t('w/o expenses paid'),
>> t('Only in my state'),
>> t('Only in my city'),
>> t('Depends on assignment'),
>> t('No'),
>> );
>>
>> $form['willtravel'] = array(
>>     '#type' => 'select',
>>     '#title' => t('Will travel'),
>>     '#default_value' => $object['willtravel'],
>>     '#options' => $travel,
>> '#required' => TRUE,
>> '#description' => t('Are you willing to travel?'),
>> );
>>
>> $form['nudity'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('Nudity Level'),
>>     '#default_value' => $object['nudity'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#required' => TRUE,
>> '#description' => t('Enter your level of experience or willingness for
>> nude assignments.'),
>> );
>> $form['compensation'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('Compensation'),
>>     '#default_value' => $object['compensation'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#required' => TRUE,
>> '#description' => t('Example: DOA (Depends on Assignment), TFP, TFCD,
>> Paid only, etc.'),
>> );
>> $form['website'] = array(
>>     '#type' => 'textfield',
>>     '#title' => t('Web Site'),
>>     '#default_value' => $object['website'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#required' => FALSE,
>> '#description' => t('If you have a personal web site, enter it here.'),
>> );
>> $form['message'] = array(
>>     '#type' => 'textarea',
>>     '#title' => t('additional information'),
>>     '#default_value' => $object['message'],
>>     '#size' => 30,
>>     '#maxlength' => 128,
>>     '#rows'    => 7,
>>     '#required' => FALSE,
>> );
>>
>> $form['file1'] = array(
>>     '#type' => 'file',
>>       '#title' => t('Four images are required for review.'),
>> );
>> $form['file2'] = array(
>>     '#type' => 'file',
>> );
>> $form['file3'] = array(
>>     '#type' => 'file',
>> );
>> $form['file4'] = array(
>>     '#type' => 'file',
>> );
>>
>> $form['submit'] = array(
>>     '#type' => 'submit',
>>     '#value' => t('send email'),
>> );
>>
>> $form['#attributes']['enctype'] = 'multipart/form-data';
>>
>> $output = drupal_get_form('contactform', $form);
>> return $output;
>>
>> // validation function for the contact form
>> function contactform_validate($form_id, $form_values) {
>>     // first we validate if there is a email injection
>>     $finds = array("/bcc:/i",
>>             "/Content-Type:/i",
>>             "/Mime-Type:/i",
>>             "/MIME-Version:/i",
>>             "/multipart\/mixed/i",
>>             "/boundary=/i",
>>             "/subject:/i",
>>             "/cc:/i",
>>             "/to:/i");
>>     foreach($form_values as $value)
>>           foreach($finds as $find)
>>                 if(preg_match($find,$value))
>>                     form_set_error('', '<h2 class="red center">Stop
>> spamming</h2>');
>>
>>     // then we validate the email-adress
>>     if (!valid_email_address($form_values['eMail']) &&
>> !empty($form_values['eMail']))
>>         form_set_error('', t('Please check the spelling of your
>> email-adress.'));
>> }
>>
>>
>> // submit function for the contact form
>> function contactform_submit($form_id, $form_values) {
>>
>>     $from         = $form_values['name'].' <'.$form_values['eMail'].'>';
>>     $recipient    = 'MX <michelle at steelveils.com>';
>>     $subject    = 'Application';
>>     $account      = $form_values['assign'];
>>     $location      = $form_values['location'];
>>     $age      = $form_values['age'];
>>     $experience      = $form_values['exlevel'];
>>     $travel      = $form_values['willtravel'];
>>     $nudity      = $form_values['nudity'];
>>     $compensation      = $form_values['compensation'];
>>     $website      = $form_values['website'];
>>     $body         = wordwrap($form_values['message']);
>>     $reply        = 'Thank you for your application. Your application
>> for an account is currently pending approval. Once it has been granted,
>> you will receive further instructions in eMail.';
>>     $goto        = 'app-rec';
>>
>>     if (!flood_is_allowed('contact',
>> variable_get('contact_hourly_threshold', 8))) {
>>         $output = t("You cannot send more than %number messages per
>> hour. Please try again later.", array('%number' =>
>> variable_get('contact_hourly_threshold', 3)));
>>         drupal_set_message('<h3 class="red center">'.$output.'</h3>');
>>         drupal_goto($goto);
>>     }else{
>>         $attachment     = FALSE;
>>         $trenner     = md5(uniqid(time()));
>>         $headers    .= "MIME-Version: 1.0\n";
>>         $headers     .= "From: $from\nReply-to: $from\nReturn-path:
>> $from\nErrors-to: $from\nX-Mailer: Drupal\n";
>>         $headers     .= "Content-Type:
>> multipart/mixed;\n\tboundary=$trenner\n";
>>         $message     .= "\n--$trenner\n";
>>         $message     .= "Content-Type: text/plain;
>> charset=UTF-8;"."\n\n"; // sets the mime type
>>         $message     .= "Account type: " .$account. "\n";
>>         $message     .= "Location: " .$location."\n";
>>         $message     .= "Age: " .$age."\n";
>>         $message     .= "Experience Level: " .$experience."\n";
>>         $message     .= "Will Travel: " .$travel."\n";
>>         $message     .= "Nudity Level: " .$nudity."\n";
>>         $message     .= "Compensation: " .$compensation."\n";
>>         $message     .= "Web Site: " .$website."\n";
>>         $message     .= $body. "\n";
>>         $message     .= "\n\n";
>>
>>
>>              for($i=1;$i<=4;$i++){
>>             $file = file_check_upload('file'.$i);
>>             if($file->filename){
>>                 $file->filepath = str_replace("\\","\\\\",$file->filepath);
>>                 $message    .= "--$trenner"."\n";
>>                 $message    .=
>> "Content-Type:$file->filemime;\n\tname=$file->filename\n";
>>                 $message    .= "Content-Transfer-Encoding: base64\n";
>>                 $message    .= "Content-Disposition:
>> attachment;\n\tfilename=$file->filename\n\n";
>>                 $filedata    = fread(fopen($file->filepath, "rb"),
>> $file->filesize);
>>                 $message    .= chunk_split(base64_encode($filedata));
>>                 $message    .= "\n\n";
>>                 $attachment    = TRUE;
>>             }
>>         }
>>         $message .= "--$trenner--";
>>
>>         // send Mail
>>         if($attachment) // use the php mail function if we have attachments
>>             mail($recipient, $subject, $message, $headers);
>>         else
>>             user_mail($recipient, $subject, $account, $location, $age,
>> $experience, $travel, $nudity, $compensation, $website, $body, "From:
>> $from\nReply-to: $from\nX-Mailer: Drupal\nReturn-path: $from\nErrors-to:
>> $from");
>>
>>         // Reply
>>         user_mail($from, $subject, wordwrap($reply), "From:
>> $recipient\nReply-to: $recipient\nX-Mailer: Drupal\nReturn-path:
>> $recipient\nErrors-to: $recipient");
>>
>>         // Log the operation:
>>         flood_register_event('contact');
>>         watchdog('mail', t('%name-from use contact form',
>> array('%name-from' => theme('placeholder', $form_values['name'] ."
>> <$from>"),)));
>>
>>         drupal_set_message('Your message has been sent to us');
>>         drupal_goto($goto);
>>         }
>> }
>>
>> ?>
>>
>> Thanks!
>> Michelle
>>
>>
>>
>> --
>> Steel Veils
>> Photography. Digital Design. Custom Art.
>> ________________________________________________________
>>
>> www.SteelVeils.com | michelle at SteelVeils.com | 314.283.1081
>>     
>
>   

-- 
Steel Veils
Photography. Digital Design. Custom Art.
________________________________________________________

www.SteelVeils.com | michelle at SteelVeils.com | 314.283.1081


More information about the support mailing list