I'm trying to create a page that allows visitors to enter their email address to be added to a mailing list. I was going to just use the HTML <form>, but the 'mailto:' code keeps forcing email programs open, something that is messy and I don't want. Because of this I've elected to go with a PHP script instead.
Here is the code I have for the form itself:
PHP Code:
<?php
# This block must be placed at the very top of page.
# --------------------------------------------------
require_once( dirname(__FILE__).'/form.lib.php' );
phpfmg_display_form();
# --------------------------------------------------
function phpfmg_form( $sErr = false ){
$style=" class='form_text' ";
?>
<form name="frmFormMail" action='' method='post' enctype='multipart/form-data' onsubmit='return fmgHandler.onsubmit(this);'>
<input type='hidden' name='formmail_submit' value='Y'>
<div id='err_required' class="form_error" style='display:none;'>
<label class='form_error_title'>Please check the required fields</label>
</div>
<ol class='phpfmg_form' >
<li class='field_block' id='field_0_div'><div class='col_label'>
<label class='form_field'>Email</label> <label class='form_required' >*</label> </div>
<div class='col_field'>
<input type="text" name="field_0" id="field_0" value="<?php phpfmg_hsc("field_0", ""); ?>" class='text_box'>
<div id='field_0_tip' class='instruction'>Please enter your email address</div>
</div>
</li>
<li class='field_block' id='phpfmg_captcha_div'>
<div class='col_label'><label class='form_field'>Security Code:</label> <label class='form_required' >*</label> </div><div class='col_field'>
<?php phpfmg_show_captcha(); ?>
</div>
</li>
<li>
<div class='col_label'> </div>
<div class='form_submit_block col_field'>
<input type='submit' value='Submit' class='form_button'>
<span id='phpfmg_processing' style='display:none;'>
<img id='phpfmg_processing_gif' src='<?php echo PHPFMG_ADMIN_URL . '?mod=image&func=processing' ;?>' border=0 alt='Processing...'> <label id='phpfmg_processing_dots'></label>
</span>
</div>
</li>
</ol>
</form>
<?php
phpfmg_javascript($sErr);
}
# end of form
function phpfmg_form_css(){
?>
<style type='text/css'>
body{
margin-left: 18px;
margin-top: 18px;
}
body{
font-family : Verdana, Arial, Helvetica, sans-serif;
font-size : 13px;
color : #474747;
background-color: transparent;
}
select, option{
font-size:13px;
}
ol.phpfmg_form{
list-style-type:none;
padding:0px;
margin:0px;
}
ol.phpfmg_form li{
margin-bottom:5px;
clear:both;
display:block;
overflow:hidden;
width: 100%
}
.form_field, .form_required{
font-weight : bold;
}
.form_required{
color:red;
margin-right:8px;
}
.field_block_over{
}
.form_submit_block{
padding-top: 3px;
}
.text_box, .text_area, .text_select {
width:300px;
}
.text_area{
height:80px;
}
.form_error_title{
font-weight: bold;
color: red;
}
.form_error{
background-color: #F4F6E5;
border: 1px dashed #ff0000;
padding: 10px;
margin-bottom: 10px;
}
.form_error_highlight{
background-color: #F4F6E5;
border-bottom: 1px dashed #ff0000;
}
div.instruction_error{
color: red;
font-weight:bold;
}
hr.sectionbreak{
height:1px;
color: #ccc;
}
#one_entry_msg{
background-color: #F4F6E5;
border: 1px dashed #ff0000;
padding: 10px;
margin-bottom: 10px;
}
<?php phpfmg_text_align();?>
</style>
<?php
}
# end of css
# By: formmail-maker.com
?>
I've tried putting this in a PHP Direct Evaluation page as well as a Static Page, but I just get errors.
I've tried creating a vB page as documented
here but either the form php script is ignored or I get errors. Here is the vB page I created (called newslettersubscription.php):
PHP Code:
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'newslettersubscription');
define('CSRF_PROTECTION', true);
// change this depending on your filename
// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();
// get special data templates from the datastore
$specialtemplates = array();
// pre-cache templates used by all actions
$globaltemplates = array('newsletter_subscription',
);
// pre-cache templates used by specific actions
$actiontemplates = array();
// ######################### REQUIRE BACK-END ############################
// if your page is outside of your normal vb forums directory, you should change directories by uncommenting the next line
// chdir ('/path/to/your/forums');
require_once('./global.php');
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
$navbits = construct_navbits(array('' => 'Newsletter Subscription'));
$navbar = render_navbar_template($navbits);
// ###### YOUR CUSTOM CODE GOES HERE #####
$pagetitle = 'Newsletter Subscription';
// ###### NOW YOUR TEMPLATE IS BEING RENDERED ######
$templater = vB_Template::create('newsletter_subscription');
$templater->register_page_templates();
$templater->register('navbar', $navbar);
$templater->register('pagetitle', $pagetitle);
print_output($templater->render());
?>
The form code I list previously I put in this page under
YOUR CUSTOM CODE GOES HERE.
And with this file it calls a template, one I created called newsletter_subscription:
Code:
{vb:stylevar htmldoctype}
<html xmlns="http://www.w3.org/1999/xhtml" dir="{vb:stylevar textdirection}" lang="{vb:stylevar languagecode}" id="vbulletin_html">
<head>
<title>{vb:raw vboptions.bbtitle} - {vb:raw pagetitle}</title>
{vb:raw headinclude}
{vb:raw headinclude_bottom}
</head>
<body>
{vb:raw header}
{vb:raw navbar}
<div id="pagetitle">
<!-- <h1>{vb:raw pagetitle}</h1> -->
</div>
<center><h2 class="blockhead">Newsletter Subscription</h2></center>
<div class="blockbody">
<div class="blockrow">
</div>
</div>
{vb:raw footer}
</body>
</html>
So any ideas what's going on? Either it doesn't display the form at all, or I get an error message, usually stating that an unknown command < is on such-a-such line.
Any help would be greatly appreciated.