Add working availability form with PHP email sending
- send.php handles form submission and sends email via mail() - Honeypot field for bot protection - IP-based rate limiting (60s cooldown) - Query logging to data/kyselyt.log - Frontend JS with loading state and success/error feedback - data/ directory protected with .htaccess Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
46
index.html
46
index.html
@@ -198,6 +198,9 @@
|
||||
<p>Täytä lomake ja selvitämme valokuidun saatavuuden osoitteessasi. Vastaamme yleensä 1–2 arkipäivän kuluessa. Kysely ei velvoita mihinkään.</p>
|
||||
</div>
|
||||
<form class="form" id="availability-form">
|
||||
<div style="position:absolute;left:-9999px;top:-9999px;">
|
||||
<input type="text" name="website" tabindex="-1" autocomplete="off">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="company">Yrityksen nimi</label>
|
||||
<input type="text" id="company" name="company" required>
|
||||
@@ -259,5 +262,48 @@
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Mobiilinavigaatio
|
||||
document.querySelector('.nav-toggle')?.addEventListener('click', function() {
|
||||
document.querySelector('.nav')?.classList.toggle('open');
|
||||
});
|
||||
|
||||
// Saatavuuskysely-lomake
|
||||
document.getElementById('availability-form')?.addEventListener('submit', async function(e) {
|
||||
e.preventDefault();
|
||||
const btn = this.querySelector('button[type="submit"]');
|
||||
const originalText = btn.textContent;
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Lähetetään...';
|
||||
|
||||
try {
|
||||
const formData = new FormData(this);
|
||||
const response = await fetch('send.php', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
});
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success) {
|
||||
btn.textContent = 'Lähetetty!';
|
||||
btn.style.background = '#27ae60';
|
||||
this.reset();
|
||||
setTimeout(() => {
|
||||
btn.textContent = originalText;
|
||||
btn.style.background = '';
|
||||
btn.disabled = false;
|
||||
}, 4000);
|
||||
} else {
|
||||
alert(data.error || 'Jokin meni pieleen. Yritä uudelleen.');
|
||||
btn.textContent = originalText;
|
||||
btn.disabled = false;
|
||||
}
|
||||
} catch (err) {
|
||||
alert('Yhteysvirhe. Tarkista verkkoyhteytesi ja yritä uudelleen.');
|
||||
btn.textContent = originalText;
|
||||
btn.disabled = false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user