Never been to CodeSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

Enquiry Form

Controller
def online_enquiry
  set_site_settings(:online_enquiry)
  @mailer = MailerOnlineEnquiry.new(params[:mailer])
  if request.post? and @mailer.save and params[:enquiry_cap].blank?
    begin
      Mailer::deliver_online_enquiry(
        :to=>"#{@setting[:site].site_title} <#{MAILER_RECIPIENTS[:default]}>",
        :subject=>"Website Online Enquiry",
        :mailer=>@mailer
      )
      @mailer = MailerOnlineEnquiry.new
      #complete
      flash[:app_success] = "Your enquiry was successfully delivered"
      redirect_to mailer_complete_path(:mailer_reference=>"online-enquiry")
    rescue
      flash.now[:app_error] = "Oops... Something went wrong"
    end
  end
end


View
<% unless @mailer.errors.empty? %>
<p class="flash app_error"><%= pluralize @mailer.errors.count, "error" %>  prohibited your Enquiry from being submitted</p>
<% end %>
<% form_for :mailer, :url=>request.env["REQUEST_URI"], :html=>{:multipart=>true}, :builder=>NetAgeLabeledFormBuilder do |f| %>
<fieldset>
<div class="block">
	<dl>
        <%= f.text_field :name, :required=>true, :class=>"medium" %>
	</dl>
	<div class="cap-field">
		<%= text_field_tag :enquiry_cap, params[:enquiry_cap] %>
	</div>
	<div class="action">
		<%= content_tag :button, "Submit", {:name=>"commit", :type=>"submit", :class=>"button-submit"} %>
	</div>
</div>
</fieldset>
<% end %>


Models
tableless.rb
class Tableless < ActiveRecord::Base
  def self.columns() @columns ||= []; end

  def self.column(name, sql_type=nil, default=nil, null=true) 
    columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) 
  end

  def save(validate=true)
    validate ? valid? : true
  end
end


mailer_online_enquiry.rb
class MailerOnlineEnquiry < Tableless
  column :name, :string
  column :contact_number, :string
  column :email_address, :string
  column :comments, :string

  validates_presence_of :name, :contact_number
  validates_format_of :email_address, :with=>/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/
end

Quick Contact

Controller
def mailer_complete
  set_site_settings(:mailer_complete)
  if
    request.post? and
    !params[:qc_1].blank? and
    !params[:qc_2].blank? and
    !params[:qc_3].blank? and
    params[:callme_cap].blank? and
    params[:mailer_reference] == "quick-contact"
    begin
      Mailer::deliver_quick_contact(
        :to=>"#{@setting[:site].site_title} <#{MAILER_RECIPIENTS[:default]}>",
        :subject=>"Website Quick Contact",
        :mailer=>params
      )
      session[:site][:mailer_quick_contact] = "delivered"
    rescue
    end
  end
end


View
<% if session[:site][:mailer_quick_contact].blank? %>
<div id="quick-contact">
	<h2>Quick Contact</h2>
	<p>Fill in your details below and we will contact you</p>
	<% form_tag mailer_complete_path(:mailer_reference=>"quick-contact") do %>
	<fieldset>
		<dl>
			<dt><label for="qc_1">Name</label></dt>
			<dd><%= text_field_tag :qc_1, "", {:size=>20, :class=>"text-field"} %></dd>
			<dt><label for="qc_2">Telephone</label></dt>
			<dd><%= text_field_tag :qc_2, "", {:size=>20, :class=>"text-field"} %></dd>
			<dt><label for="qc_3">Email</label></dt>
			<dd><%= text_field_tag :qc_3, "", {:size=>20, :class=>"text-field"} %></dd>
		</dl>
		<div class="cap-field">
			<%= text_field_tag :callme_cap, params[:callme_cap] %>
		</div>
		<div class="action">
			<%= content_tag :button, "Submit", {:name=>"commit", :type=>"submit", :class=>"button-submit"} %>
		</div>
	</fieldset>
	<% end %>
</div>
<% end %>


Mailer
def quick_contact(options={})
  recipients    options[:to]
  from          options[:from] || options[:to]
  subject       options[:subject]
  body          :options=>options
end


Mail View
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%= render :file=>"mailer/mailer_css.html.erb" %>
</head>
<body>

<h1><%= @options[:subject] %></h1>
<h2>Details</h2>
<div class="block">
	<dl>
		<dt>Name</dt>
		<dd><%= h @options[:mailer][:qc_1] %></dd>
		<dt>Telephone</dt>
		<dd><%= h @options[:mailer][:qc_2] %></dd>
		<dt>Email</dt>
		<dd><%= mail_to @options[:mailer][:qc_3] %></dd>
	</dl>
</div>
<p class="generated">Generated by <%= link_to ENV['HTTP_HOST'], "http://#{ENV['HTTP_HOST']}" %> at <em><%= Time.now.to_s %></em></p>
</body>
</html>
<!--[eofile:running on rails]-->


CSS
@import url("/libs/generic/css/form.css");
#quick-contact fieldset dt { display:block; float:none; padding:0 0 3px; text-align:left }
#quick-contact fieldset dd { float:none }
#quick-contact fieldset input { width:178px }
#quick-contact fieldset .action { border:none; text-align:left }

PHP will organize form values into arrays if you ask nicely

I took stole this example directly from php.net but it is worth the infraction. Name your form fields correctly and they are placed in arrays in the $_GET or $_POST arrays. This example would return something like this if you selected two of the "beer" elements.

Array
(
[personal] => Array
(
[name] => Fred Derf
[email] => fred@example.com
)

[beer] => Array
(
[0] => warthog
[1] => guinness
)

)

<?php
if ($_POST) {
    echo '<pre>';
    echo htmlspecialchars(print_r($_POST, true));
    echo '</pre>';
}
?>
<form action="" method="post">
    Name:  <input type="text" name="personal[name]" /><br />
    Email: <input type="text" name="personal[email]" /><br />
    Beer: <br />
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" value="submit me!" />
</form>

Country dropdown HTML

<select>
<option value="AF">Afghanistan</option>
<option value="AX">ÅLand Islands</option>
<option value="AL">Albania</option>
<option value="DZ">Algeria</option>
<option value="AS">American Samoa</option>
<option value="AD">Andorra</option>
<option value="AO">Angola</option>
<option value="AI">Anguilla</option>
<option value="AQ">Antarctica</option>
<option value="AG">Antigua And Barbuda</option>
<option value="AR">Argentina</option>
<option value="AM">Armenia</option>
<option value="AW">Aruba</option>
<option value="AU">Australia</option>
<option value="AT">Austria</option>
<option value="AZ">Azerbaijan</option>
<option value="BS">Bahamas</option>
<option value="BH">Bahrain</option>
<option value="BD">Bangladesh</option>
<option value="BB">Barbados</option>
<option value="BY">Belarus</option>
<option value="BE">Belgium</option>
<option value="BZ">Belize</option>
<option value="BJ">Benin</option>
<option value="BM">Bermuda</option>
<option value="BT">Bhutan</option>
<option value="BO">Bolivia</option>
<option value="BA">Bosnia And Herzegovina</option>
<option value="BW">Botswana</option>
<option value="BV">Bouvet Island</option>
<option value="BR">Brazil</option>
<option value="IO">British Indian Ocean Territory</option>
<option value="BN">Brunei Darussalam</option>
<option value="BG">Bulgaria</option>
<option value="BF">Burkina Faso</option>
<option value="BI">Burundi</option>
<option value="KH">Cambodia</option>
<option value="CM">Cameroon</option>
<option value="CA">Canada</option>
<option value="CV">Cape Verde</option>
<option value="KY">Cayman Islands</option>
<option value="CF">Central African Republic</option>
<option value="TD">Chad</option>
<option value="CL">Chile</option>
<option value="CN">China</option>
<option value="CX">Christmas Island</option>
<option value="CC">Cocos (Keeling) Islands</option>
<option value="CO">Colombia</option>
<option value="KM">Comoros</option>
<option value="CG">Congo</option>
<option value="CD">Congo, The Democratic Republic Of The</option>
<option value="CK">Cook Islands</option>
<option value="CR">Costa Rica</option>
<option value="CI">Cote D'Ivoire</option>
<option value="HR">Croatia</option>
<option value="CU">Cuba</option>
<option value="CY">Cyprus</option>
<option value="CZ">Czech Republic</option>
<option value="DK">Denmark</option>
<option value="DJ">Djibouti</option>
<option value="DM">Dominica</option>
<option value="DO">Dominican Republic</option>
<option value="EC">Ecuador</option>
<option value="EG">Egypt</option>
<option value="SV">El Salvador</option>
<option value="GQ">Equatorial Guinea</option>
<option value="ER">Eritrea</option>
<option value="EE">Estonia</option>
<option value="ET">Ethiopia</option>
<option value="FK">Falkland Islands (Malvinas)</option>
<option value="FO">Faroe Islands</option>
<option value="FJ">Fiji</option>
<option value="FI">Finland</option>
<option value="FR">France</option>
<option value="GF">French Guiana</option>
<option value="PF">French Polynesia</option>
<option value="TF">French Southern Territories</option>
<option value="GA">Gabon</option>
<option value="GM">Gambia</option>
<option value="GE">Georgia</option>
<option value="DE">Germany</option>
<option value="GH">Ghana</option>
<option value="GI">Gibraltar</option>
<option value="GR">Greece</option>
<option value="GL">Greenland</option>
<option value="GD">Grenada</option>
<option value="GP">Guadeloupe</option>
<option value="GU">Guam</option>
<option value="GT">Guatemala</option>
<option value=" Gg">Guernsey</option>
<option value="GN">Guinea</option>
<option value="GW">Guinea-Bissau</option>
<option value="GY">Guyana</option>
<option value="HT">Haiti</option>
<option value="HM">Heard Island And Mcdonald Islands</option>
<option value="VA">Holy See (Vatican City State)</option>
<option value="HN">Honduras</option>
<option value="HK">Hong Kong</option>
<option value="HU">Hungary</option>
<option value="IS">Iceland</option>
<option value="IN">India</option>
<option value="ID">Indonesia</option>
<option value="IR">Iran, Islamic Republic Of</option>
<option value="IQ">Iraq</option>
<option value="IE">Ireland</option>
<option value="IM">Isle Of Man</option>
<option value="IL">Israel</option>
<option value="IT">Italy</option>
<option value="JM">Jamaica</option>
<option value="JP">Japan</option>
<option value="JE">Jersey</option>
<option value="JO">Jordan</option>
<option value="KZ">Kazakhstan</option>
<option value="KE">Kenya</option>
<option value="KI">Kiribati</option>
<option value="KP">Korea, Democratic People'S Republic Of</option>
<option value="KR">Korea, Republic Of</option>
<option value="KW">Kuwait</option>
<option value="KG">Kyrgyzstan</option>
<option value="LA">Lao People'S Democratic Republic</option>
<option value="LV">Latvia</option>
<option value="LB">Lebanon</option>
<option value="LS">Lesotho</option>
<option value="LR">Liberia</option>
<option value="LY">Libyan Arab Jamahiriya</option>
<option value="LI">Liechtenstein</option>
<option value="LT">Lithuania</option>
<option value="LU">Luxembourg</option>
<option value="MO">Macao</option>
<option value="MK">Macedonia, The Former Yugoslav Republic Of</option>
<option value="MG">Madagascar</option>
<option value="MW">Malawi</option>
<option value="MY">Malaysia</option>
<option value="MV">Maldives</option>
<option value="ML">Mali</option>
<option value="MT">Malta</option>
<option value="MH">Marshall Islands</option>
<option value="MQ">Martinique</option>
<option value="MR">Mauritania</option>
<option value="MU">Mauritius</option>
<option value="YT">Mayotte</option>
<option value="MX">Mexico</option>
<option value="FM">Micronesia, Federated States Of</option>
<option value="MD">Moldova, Republic Of</option>
<option value="MC">Monaco</option>
<option value="MN">Mongolia</option>
<option value="MS">Montserrat</option>
<option value="MA">Morocco</option>
<option value="MZ">Mozambique</option>
<option value="MM">Myanmar</option>
<option value="NA">Namibia</option>
<option value="NR">Nauru</option>
<option value="NP">Nepal</option>
<option value="NL">Netherlands</option>
<option value="AN">Netherlands Antilles</option>
<option value="NC">New Caledonia</option>
<option value="NZ">New Zealand</option>
<option value="NI">Nicaragua</option>
<option value="NE">Niger</option>
<option value="NG">Nigeria</option>
<option value="NU">Niue</option>
<option value="NF">Norfolk Island</option>
<option value="MP">Northern Mariana Islands</option>
<option value="NO">Norway</option>
<option value="OM">Oman</option>
<option value="PK">Pakistan</option>
<option value="PW">Palau</option>
<option value="PS">Palestinian Territory, Occupied</option>
<option value="PA">Panama</option>
<option value="PG">Papua New Guinea</option>
<option value="PY">Paraguay</option>
<option value="PE">Peru</option>
<option value="PH">Philippines</option>
<option value="PN">Pitcairn</option>
<option value="PL">Poland</option>
<option value="PT">Portugal</option>
<option value="PR">Puerto Rico</option>
<option value="QA">Qatar</option>
<option value="RE">Reunion</option>
<option value="RO">Romania</option>
<option value="RU">Russian Federation</option>
<option value="RW">Rwanda</option>
<option value="SH">Saint Helena</option>
<option value="KN">Saint Kitts And Nevis</option>
<option value="LC">Saint Lucia</option>
<option value="PM">Saint Pierre And Miquelon</option>
<option value="VC">Saint Vincent And The Grenadines</option>
<option value="WS">Samoa</option>
<option value="SM">San Marino</option>
<option value="ST">Sao Tome And Principe</option>
<option value="SA">Saudi Arabia</option>
<option value="SN">Senegal</option>
<option value="CS">Serbia And Montenegro</option>
<option value="SC">Seychelles</option>
<option value="SL">Sierra Leone</option>
<option value="SG">Singapore</option>
<option value="SK">Slovakia</option>
<option value="SI">Slovenia</option>
<option value="SB">Solomon Islands</option>
<option value="SO">Somalia</option>
<option value="ZA">South Africa</option>
<option value="GS">South Georgia And The South Sandwich Islands</option>
<option value="ES">Spain</option>
<option value="LK">Sri Lanka</option>
<option value="SD">Sudan</option>
<option value="SR">Suriname</option>
<option value="SJ">Svalbard And Jan Mayen</option>
<option value="SZ">Swaziland</option>
<option value="SE">Sweden</option>
<option value="CH">Switzerland</option>
<option value="SY">Syrian Arab Republic</option>
<option value="TW">Taiwan, Province Of China</option>
<option value="TJ">Tajikistan</option>
<option value="TZ">Tanzania, United Republic Of</option>
<option value="TH">Thailand</option>
<option value="TL">Timor-Leste</option>
<option value="TG">Togo</option>
<option value="TK">Tokelau</option>
<option value="TO">Tonga</option>
<option value="TT">Trinidad And Tobago</option>
<option value="TN">Tunisia</option>
<option value="TR">Turkey</option>
<option value="TM">Turkmenistan</option>
<option value="TC">Turks And Caicos Islands</option>
<option value="TV">Tuvalu</option>
<option value="UG">Uganda</option>
<option value="UA">Ukraine</option>
<option value="AE">United Arab Emirates</option>
<option value="GB">United Kingdom</option>
<option value="US">United States</option>
<option value="UM">United States Minor Outlying Islands</option>
<option value="UY">Uruguay</option>
<option value="UZ">Uzbekistan</option>
<option value="VU">Vanuatu</option>
<option value="VE">Venezuela</option>
<option value="VN">Viet Nam</option>
<option value="VG">Virgin Islands, British</option>
<option value="VI">Virgin Islands, U.S.</option>
<option value="WF">Wallis And Futuna</option>
<option value="EH">Western Sahara</option>
<option value="YE">Yemen</option>
<option value="ZM">Zambia</option>
<option value="ZW">Zimbabwe</option>
</select>

50 states dropdown HTML

<select name="state">
<option value="">Pick your state</option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="DC">District of Columbia</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="HI">Hawaii</option>
<option value="ID">Idaho</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="IA">Iowa</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="LA">Louisiana</option>
<option value="ME">Maine</option>
<option value="MD">Maryland</option>
<option value="MA">Massachusetts</option>
<option value="MI">Michigan</option>
<option value="MN">Minnesota</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="MT">Montana</option>
<option value="NE">Nebraska</option>
<option value="NV">Nevada</option>
<option value="NH">New Hampshire</option>
<option value="NJ">New Jersey</option>
<option value="NM">New Mexico</option>
<option value="NY">New York</option>
<option value="NC">North Carolina</option>
<option value="ND">North Dakota</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="OR">Oregon</option>
<option value="PA">Pennsylvania</option>
<option value="RI">Rhode Island</option>
<option value="SC">South Carolina</option>
<option value="SD">South Dakota</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="UT">Utah</option>
<option value="VT">Vermont</option>
<option value="VA">Virginia</option>
<option value="WA">Washington</option>
<option value="WV">West Virginia</option>
<option value="WI">Wisconsin</option>
<option value="WY">Wyoming</option>
</select>

Check / Uncheck all checkboxes in a pseudo group

This bit of javascript will check and uncheck all checkboxes in a group of checkboxes. The checkboxes are grouped by naming all the checkboxes by the same name.

Javascript Code:
function checkUncheckAll(checkAllState, cbGroup)
{
	// Check that the group has more than one element
	if(cbGroup.length > 0)
	{
		// Loop through the array
		for (i = 0; i < cbGroup.length; i++)
		{
			cbGroup[i].checked = checkAllState.checked;
		}
	}
	else
	{
		// Single element so not an array
		cbGroup.checked = checkAllState.checked;
	}
}


HTML Code:
<input type=checkbox name=checkall onclick="checkUncheckAll(this, grp1);">
<input type=checkbox name=grp1 id=bx1>
<input type=checkbox name=grp1 id=bx2>
<input type=checkbox name=grp1 id=bx3>
<input type=checkbox name=grp1 id=bx4>

appendInputTypeClasses() - IE attribute selectors for form inputs

(Stolen from Jeremy Keith and Dustin Diaz: http://domscripting.com/blog/display/38).

Unobtrusive script takes a form inputs type attribute and copies it to that input's class. So, you go from...

<input type="text" />


...to...

<input type="text" class="text" />


Basically allows attribute selectors for form until IE catches up.

/*
	form.js
	AUTH: Austin Govella (austin.govella@gmail.com)
	DATE: 2006-07-01
	DESC: Includes form specific javascripts.
	NOTE: Stolen from Jeremy Keith and Dustin Diaz: http://domscripting.com/blog/display/38
	REVS:  
*/



function appendInputTypeClasses()
{	/* adds input type as the inputs class */
	if ( !document.getElementsByTagName ) return;

	var inputs = document.getElementsByTagName('input');
	var inputLen = inputs.length;
	for ( i=0; i < inputLen; i++ )
	{
		if ( inputs[i].getAttribute('type') )
		{
			inputs[i].className += ' '+inputs[i].getAttribute('type');
		}
	}
}

Javascript clear and recall default form value

// Swap out default text in a form field on click, and recall if field is empty

<script type="text/javascript">
function clickclear(thisfield, defaulttext, color) {
	if (thisfield.value == defaulttext) {
		thisfield.value = "";
		if (!color) {
			color = "000000";
		}
		thisfield.style.color = "#" + color;
	}
}
function clickrecall(thisfield, defaulttext, color) {
	if (thisfield.value == "") {
		thisfield.value = defaulttext;
		if (!color) {
			color = "cccccc";
		}
		thisfield.style.color = "#" + color;
	}
}
</script>

Javascript clear and recall default form value

// Swap out default text in a form field on click, and recall if field is empty
// Example: <input type="text" value="Enter text" onclick="clickclear(this, 'Enter text')" onblur="clickrecall(this,'Enter text')" />

<script type="text/javascript">
function clickclear(thisfield, defaulttext, color) {
	if (thisfield.value == defaulttext) {
		thisfield.value = "";
		if (!color) {
			color = "000000";
		}
		thisfield.style.color = "#" + color;
	}
}
function clickrecall(thisfield, defaulttext, color) {
	if (thisfield.value == "") {
		thisfield.value = defaulttext;
		if (!color) {
			color = "cccccc";
		}
		thisfield.style.color = "#" + color;
	}
}
</script>

Javascript clear and recall default form value

// Swap out default text in a form field on click, and recall if field is empty
// Example: <input type="text" value="Enter text" onclick="clickclear(this, 'Enter text')" onblur="clickrecall(this,'Enter text')" />

<script type="text/javascript">
function clickclear(thisfield, defaulttext, color) {
	if (thisfield.value == defaulttext) {
		thisfield.value = "";
		if (!color) {
			color = "000000";
		}
		thisfield.style.color = "#" + color;
	}
}
function clickrecall(thisfield, defaulttext, color) {
	if (thisfield.value == "") {
		thisfield.value = defaulttext;
		if