HTML Forms and Input 
                CMU422: Fundamentals of Web Design - Session 2 
                Birmingham Newman University 
                Lecturer: James Williams 
                Collecting and processing user data
                3-hour session • 28 slides • 2 interactive tasks 
                
                    Session Timeline: 
                    
                        10 min: Registration & waiting 
                        20 min: Opening slides 
                        45 min: Task 1 
                        15 min: Break/Catch up 
                        20 min: Secondary slides 
                        45 min: Task 2 
                        Remaining: Self-study 
                     
                 
             
            
            
                Learning Objectives 
                
                    Understand the purpose and structure of HTML forms 
                    Master different input types and their attributes 
                    Learn form validation techniques 
                    Create accessible and user-friendly forms 
                    Handle form submission and data processing 
                 
             
            
            
                What are HTML Forms? 
                
                    Forms  allow users to input data that can be sent to a server
                    for processing
                
                
                    Essential for user interaction on websites 
                    Used for login, registration, contact forms, surveys 
                    Can collect various types of data 
                    Provide validation and user feedback 
                 
                
                    <form action="/submit" method="post"> 
                      <input type="text" name="username"> 
                      <button type="submit">Submit</button> 
                    </form>
                
                
                
                    Watch: HTML Forms Tutorial 
                    
                        VIDEO 
                    
                    
                        Comprehensive guide to creating and styling HTML forms
                    
                 
             
            
            
                Basic Form Structure 
                
                    <form action="destination.php" method="post"> 
                      <!-- Form elements go here --> 
                      <input type="text" name="field_name"> 
                      <button type="submit">Submit Form</button> 
                    </form>
                
                
                    action: Where the form data is sent 
                    method: How the data is sent (GET or POST) 
                    name: Identifies the field for processing 
                 
             
            
            
                Form Methods: GET vs POST 
                
                    <!-- GET Method --> 
                    <form action="/search" method="get"> 
                      <input type="text" name="query"> 
                    </form> 
                    <!-- POST Method --> 
                    <form action="/register" method="post"> 
                      <input type="text" name="username"> 
                    </form>
                
                
                    GET:  Data visible in URL, limited size, for searches 
                    POST:  Data hidden, unlimited size, for sensitive data 
                 
             
            
            
            
            
                Common Input Attributes 
                
                    <input type="text" 
                      name="username" 
                      placeholder="Enter username" 
                      required 
                      maxlength="20" 
                      minlength="3" 
                      value="default_value" 
                      disabled 
                    >
                
                
                    required: Field must be filled 
                    placeholder: Hint text 
                    maxlength/minlength: Character limits 
                    value: Default value 
                 
             
            
            
                Textarea for Long Text 
                
                    <textarea name="message" rows="4" cols="50" placeholder="Enter your
                    message"></textarea>
                
                
                    
                
                
                    Used for longer text input 
                    rows and cols set dimensions 
                    Can be resized by users 
                 
             
            
            
                Select Dropdown 
                
                    <select name="country"> 
                      <option value="">Select a country</option> 
                      <option value="us">United States</option> 
                      <option value="uk">United Kingdom</option> 
                      <option value="ca">Canada</option> 
                    </select>
                
                
                    
                        Select a country 
                        United States 
                        United Kingdom 
                        Canada 
                     
                
             
            
            
                Radio Buttons 
                
                    <p>Select your gender:</p> 
                    <input type="radio" name="gender" value="male" id="male"> 
                    <label for="male">Male</label> 
                    <input type="radio" name="gender" value="female" id="female"> 
                    <label for="female">Female</label> 
                    <input type="radio" name="gender" value="other" id="other"> 
                    <label for="other">Other</label>
                
                
             
            
            
                Checkboxes 
                
                    <p>Select your interests:</p> 
                    <input type="checkbox" name="interests" value="sports" id="sports"> 
                    <label for="sports">Sports</label> 
                    <input type="checkbox" name="interests" value="music" id="music"> 
                    <label for="music">Music</label> 
                    <input type="checkbox" name="interests" value="reading" id="reading"> 
                    <label for="reading">Reading</label>
                
                
             
            
            
            
            
            
            
            
            
                Proper Label Usage 
                
                    <!-- Method 1: Label with for attribute --> 
                    <label for="username">Username:</label> 
                    <input type="text" id="username" name="username"> 
                    <!-- Method 2: Wrapping label --> 
                    <label> 
                      Email: <input type="email" name="email"> 
                    </label>
                
                
                    Labels improve accessibility 
                    Clicking label focuses the input 
                    Required for screen readers 
                 
             
            
            
                HTML5 Form Validation 
                
                    <input type="email" name="email" required> 
                    <input type="text" name="username" pattern="[A-Za-z]{3,}" title="3+ letters
                    only"> 
                    <input type="number" name="age" min="18" max="65"> 
                    <input type="url" name="website">
                
                
                    required: Field must be filled 
                    pattern: Custom validation with regex 
                    min/max: Numeric limits 
                    Browser provides automatic validation 
                 
                
                
                    Try It: Real-time Form Validation 
                    
                    
                        Try typing in the fields to see real-time validation in action!
                    
                 
             
            
            
                Fieldset and Legend 
                
                    <fieldset> 
                      <legend>Personal Information</legend> 
                      <label for="name">Name:</label> 
                      <input type="text" id="name" name="name"> 
                      <label for="email">Email:</label> 
                      <input type="email" id="email" name="email"> 
                    </fieldset>
                
                
                    Groups related form fields 
                    Improves form organization 
                    Better accessibility 
                 
             
            
            
                Form Buttons 
                
                    <button type="submit">Submit Form</button> 
                    <button type="reset">Clear Form</button> 
                    <button type="button">Custom Action</button> 
                    <input type="submit" value="Submit"> 
                    <input type="reset" value="Reset">
                
                
                    Submit
                        Form 
                    Clear Form 
                    Custom
                        Action 
                
             
            
            
                Task 1: Create a Contact Form 
                
                    Instructions: 
                    
                        Create a new HTML file called contact-form.html 
                        Build a contact form with the following fields: 
                        
                            Name (text, required) 
                            Email (email, required) 
                            Phone (tel) 
                            Subject (select dropdown with 3 options) 
                            Message (textarea, required) 
                            Newsletter subscription (checkbox) 
                         
                        Add proper labels and validation 
                        Include submit and reset buttons 
                        Use fieldset to group related fields 
                     
                    Time:  45 minutes
                    This task will help you understand form structure and input types 
                    
                 
             
            
            
                Break Time 
                
                    15 Minutes 
                    Take a break, ask questions, or catch up on the previous task.
                    Next: Secondary slides and Task 2 
                 
             
            
            
                Form Accessibility Best Practices 
                
                    Always use <label> elements 
                    Provide clear error messages 
                    Use semantic HTML elements 
                    Ensure keyboard navigation works 
                    Add ARIA attributes when needed 
                    Test with screen readers 
                 
                
                    Remember:  Accessible forms are better for all users, not just
                    those with disabilities.
                
             
            
            
                Form Styling Considerations 
                
                    Use consistent spacing and alignment 
                    Make inputs large enough to click/tap 
                    Provide visual feedback for focus states 
                    Use clear, readable fonts 
                    Ensure sufficient color contrast 
                    Make forms responsive for mobile devices 
                 
             
            
            
                Form Security Considerations 
                
                    Always validate on the server side 
                    Use HTTPS for sensitive data 
                    Implement CSRF protection 
                    Sanitize user input 
                    Use appropriate input types 
                    Consider rate limiting 
                 
                
                    Important:  Client-side validation is for user experience, not
                    security!
                
             
            
            
                Form Processing Options 
                
                    Server-side:  PHP, Python, Node.js, etc. 
                    Client-side:  JavaScript form handling 
                    Third-party services:  Formspree, Netlify Forms 
                    Email:  mailto: links for simple forms 
                 
                
                    <!-- Simple email form --> 
                    <form action="mailto:contact@example.com" method="post"
                    enctype="text/plain"> 
                      <input type="text" name="name"> 
                      <button type="submit">Send Email</button> 
                    </form>
                
             
            
            
                Common Form Patterns 
                
                    Login forms:  Username/email + password 
                    Registration forms:  Multiple fields with validation 
                    Contact forms:  Name, email, message 
                    Search forms:  Query input + filters 
                    Survey forms:  Multiple question types 
                    File upload forms:  File input + metadata 
                 
             
            
            
                Testing Your Forms 
                
                    Test all input types and validation 
                    Check form submission and data handling 
                    Test with different browsers and devices 
                    Verify accessibility with screen readers 
                    Test error handling and edge cases 
                    Check form performance and loading times 
                 
             
            
            
                Task 2: Advanced Registration Form 
                
                    Instructions: 
                    
                        Create a comprehensive registration form 
                        Include the following sections: 
                        
                            Personal Info:  Name, email, password, confirm
                                password 
                            Profile:  Age, gender, interests (checkboxes) 
                            Preferences:  Newsletter, notifications, theme color
                             
                            Security:  Profile picture upload, terms acceptance
                             
                         
                        Implement proper validation for all fields 
                        Add password strength requirements 
                        Create a responsive design 
                        Test form accessibility 
                     
                    Time:  45 minutes
                    This task will help you understand advanced form features and
                            validation 
                 
             
            
            
                Common Form Issues and Solutions 
                
                    Form not submitting:  Check action URL and method 
                    Validation not working:  Verify input types and attributes
                     
                    Styling issues:  Check CSS specificity and browser
                        compatibility 
                    Accessibility problems:  Ensure proper labels and ARIA
                        attributes 
                    Mobile issues:  Test touch targets and viewport settings
                     
                 
             
            
            
                Session Summary 
                
                    Forms are essential for user interaction 
                    Use appropriate input types for better UX 
                    Always implement proper validation 
                    Accessibility should be a priority 
                    Test thoroughly across different devices 
                 
                
                    Next Session: 
                    CSS Fundamentals - Styling your HTML content