Formulario de contacto PHP con almacenamiento de base de datos MariaDB

En esta publicación de blog le mostraré cómo crear un formulario de contacto PHP que envía los datos ingresados por correo electrónico y los almacena en una base de datos MariaDB. Lo guiaremos a través del proceso paso a paso y agregaremos ejemplos para ayudarlo a implementarlo.

Paso 1: Crear formulario HTML

Primero, crea un formulario HTML simple que recopile la información del usuario:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Kontaktformular</title>
</head>
<body>
<h1>Kontaktformular</h1>
<form action="kontaktformular.php" method="post">
<label for="name">Name:</label>
<input type="text" name="name" id="name" required><br>
<label for="email">E-Mail:</label>
<input type="email" name="email" id="email" required><br>
<label for="message">Nachricht:</label>
<textarea name="message" id="message" required></textarea><br>
<input type="submit" value="Senden">
</form>
</body>
</html>

Paso 2: Crear un script PHP

Crea un nuevo archivo llamado formulario de contacto.php. En este archivo se escribe el código PHP que procesa los datos del formulario y los inserta en la base de datos MariaDB.

Primero, establece una conexión a la base de datos:

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}

Reemplazar tu_nombre_de_usuario, tu_contraseña y tu_base_de_datos con sus propias credenciales de base de datos.

A continuación, procesa los datos del formulario y los inserta en la base de datos:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];

$sql = "INSERT INTO contact_form (name, email, message) VALUES (?, ?, ?)";

$stmt = $conn->prepare($sql);
$stmt->bind_param("sss", $name, $email, $message);

if ($stmt->execute()) {
echo "Nachricht erfolgreich gesendet und in der Datenbank gespeichert.";
} else {
echo "Fehler: " . $sql . "<br>" . $conn->error;
}

$stmt->close();
}

$conn->close();

Reemplazar formulario de contacto por el nombre de la tabla de su base de datos que almacenará los datos del formulario de contacto. Asegúrese de que la tabla tenga columnas para nombre, correo electrónico y mensaje tiene.

Paso 3: Enviar correo electrónico

Para enviar los datos ingresados por correo electrónico, agregue el siguiente código al script PHP antes de insertar los datos en la base de datos:

$to = "your_email@example.com";
$subject = "Neue Nachricht vom Kontaktformular";
$headers = "From: " . $email . "\r\n" .
"Reply-To: " . $email . "\r\n" .
"X-Mailer: PHP/" . phpversion();

if (mail($to, $subject, $message, $headers)) {
echo "E-Mail erfolgreich gesendet.";
} else {
echo "E-Mail konnte nicht gesendet werden.";
}

Reemplazar tu_correo_electronico@ejemplo.com con su propia dirección de correo electrónico a la que se deben enviar los mensajes.

Paso 4: Agrega Google reCAPTCHA v2

Para agregar Google reCAPTCHA v2 a su formulario de contacto, primero debe registrar su sitio web con Google reCAPTCHA para obtener una clave de sitio y una clave secreta[2]. Luego pegue el código reCAPTCHA en su formulario HTML:

<head>
<!-- Weitere Head-Elemente -->
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body>
<!-- Kontaktformular -->
<div class="g-recaptcha" data-sitekey="your_site_key"></div>
</body>

Reemplazar clave_de_tu_sitio con su propia clave de sitio.

Paso 5: validación de reCAPTCHA en el script PHP

Pegue el siguiente código en su formulario de contacto.phpscript para validar la respuesta reCAPTCHA antes de insertar los datos en la base de datos y enviar el correo electrónico:

if (isset($_POST['g-recaptcha-response'])) {
$captcha = $_POST['g-recaptcha-response'];
$secretKey = "your_secret_key";
$url = "https://www.google.com/recaptcha/api/siteverify?secret=" . urlencode($secretKey) . "&response=" . urlencode($captcha);
$response = file_get_contents($url);
$responseKeys = json_decode($response, true);

if (!$responseKeys["success"]) {
echo "reCAPTCHA-Validierung fehlgeschlagen.";
exit;
}
}

Reemplazar tu_clave_secreta con tu propia clave secreta.

Paso 6: Agregar campo honeypot

Un campo honeypot es un campo invisible que es completado por bots pero ignorado por los usuarios reales. Inserte el siguiente campo honeypot en su formulario HTML:

<input type="text" name="honeypot" id="honeypot" style="display:none;">

Luego pegue el siguiente código en su formulario de contacto.phpscript para comprobar si el campo honeypot se ha rellenado:

if (!empty($_POST["honeypot"])) {
// Honeypot-Feld wurde ausgefüllt, wahrscheinlich ein Bot
exit;
}

¡Completo!

Ahora tiene un formulario de contacto PHP funcional que envía por correo electrónico los datos ingresados, los almacena en una base de datos MariaDB y utiliza Google reCAPTCHA v2 y un campo honeypot para defensa contra spam y bots. Puede personalizar el formulario y el script PHP según sea necesario para agregar campos o funciones adicionales.