Add Dockerized LAMP stack and website skeleton for ALWISP
- Docker Compose orchestrating PHP 8.2/Apache web container and MySQL 8.0 - Dockerfile with GD, PDO, MySQLi extensions and security hardening - Apache vhost with mod_rewrite, deflate, expires, and security headers - PHP config with OPcache enabled and display_errors off - MySQL init schema (contacts, coverage_zones tables) - Front-controller PHP router (index.php → pages/) - Responsive homepage: hero, stats bar, services cards, why section, coverage CTA - Stub pages: services, coverage, about, contact (with working form skeleton), 404 - CSS design system using brand palette from logo (navy #0d1b3e → teal #00bcd4 + orange #f57c00 accents) - JS: nav scroll/mobile toggle, IntersectionObserver counter animation, scroll reveal https://claude.ai/code/session_015wpwmheufcxkBuXivrSHhd
This commit is contained in:
96
www/pages/contact.php
Normal file
96
www/pages/contact.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
$success = false;
|
||||
$errors = [];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$name = trim(htmlspecialchars($_POST['name'] ?? '', ENT_QUOTES));
|
||||
$email = trim(htmlspecialchars($_POST['email'] ?? '', ENT_QUOTES));
|
||||
$phone = trim(htmlspecialchars($_POST['phone'] ?? '', ENT_QUOTES));
|
||||
$subject = trim(htmlspecialchars($_POST['subject'] ?? '', ENT_QUOTES));
|
||||
$message = trim(htmlspecialchars($_POST['message'] ?? '', ENT_QUOTES));
|
||||
|
||||
if (!$name) $errors[] = 'Name is required.';
|
||||
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'A valid email is required.';
|
||||
if (!$message) $errors[] = 'Message is required.';
|
||||
|
||||
if (empty($errors)) {
|
||||
// TODO: swap for DB insert + email once credentials are configured
|
||||
$success = true;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<section class="section page-hero">
|
||||
<div class="container">
|
||||
<span class="section__eyebrow">Reach Out</span>
|
||||
<h1 class="section__heading">Contact Us</h1>
|
||||
<p class="section__sub">Questions about service, coverage, or your account? We're here to help.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="section">
|
||||
<div class="container contact__grid">
|
||||
|
||||
<div class="contact__info">
|
||||
<h2 class="contact__heading">Get In Touch</h2>
|
||||
<ul class="contact__details">
|
||||
<li>📞 <a href="tel:+10000000000">(000) 000-0000</a></li>
|
||||
<li>✉ <a href="mailto:info@alwisp.net">info@alwisp.net</a></li>
|
||||
<li>🕐 Mon–Fri 8am–6pm CST<br>Emergency support 24/7</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="contact__form-wrap">
|
||||
<?php if ($success): ?>
|
||||
<div class="alert alert--success" role="alert">
|
||||
Thanks! We'll be in touch within one business day.
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($errors)): ?>
|
||||
<div class="alert alert--error" role="alert">
|
||||
<ul><?php foreach ($errors as $e) echo "<li>" . $e . "</li>"; ?></ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form method="post" action="/contact" class="form" novalidate>
|
||||
<div class="form__row form__row--2">
|
||||
<div class="form__group">
|
||||
<label for="name" class="form__label">Name <span aria-hidden="true">*</span></label>
|
||||
<input type="text" id="name" name="name" class="form__input" required
|
||||
value="<?= htmlspecialchars($_POST['name'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<label for="email" class="form__label">Email <span aria-hidden="true">*</span></label>
|
||||
<input type="email" id="email" name="email" class="form__input" required
|
||||
value="<?= htmlspecialchars($_POST['email'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form__row form__row--2">
|
||||
<div class="form__group">
|
||||
<label for="phone" class="form__label">Phone</label>
|
||||
<input type="tel" id="phone" name="phone" class="form__input"
|
||||
value="<?= htmlspecialchars($_POST['phone'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<label for="subject" class="form__label">Subject</label>
|
||||
<select id="subject" name="subject" class="form__input">
|
||||
<option value="">Select a topic…</option>
|
||||
<option value="new-service">New Service Inquiry</option>
|
||||
<option value="support">Technical Support</option>
|
||||
<option value="billing">Billing Question</option>
|
||||
<option value="coverage">Coverage Question</option>
|
||||
<option value="other">Other</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form__group">
|
||||
<label for="message" class="form__label">Message <span aria-hidden="true">*</span></label>
|
||||
<textarea id="message" name="message" class="form__input form__textarea" rows="5" required><?= htmlspecialchars($_POST['message'] ?? '') ?></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn--primary">Send Message</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
Reference in New Issue
Block a user