UPDATE ET SOLUTION :
Bonjour à tous,
Pour ceux que ça intéresse au cas où ! Script entièrement fonctionnel avec mise en forme Bootstrap...
Nouvelle arborescence et suppression des fichiers inutiles, donc optimisation du code :
includes/config.php
includes/footer.php
includes/header.php (Pas important, ne contient qu'une barre de navigation)
index.php
check_mail.php (ajout d'une fonctionnalité de vérification de l’existence d’e-mail dans la base de données) jquery
newsletter.php (supprimé)
newsletter.sql (Pour ceux qui veulent faire les tests en local)
config.php (Le code)
<?php
// DB credentials.
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASS','root');
define('DB_NAME','site');
// Establish database connection.
try
{
$dbco = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER, DB_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
exit("Error: " . $e->getMessage());
}
?>
footer.php (Le code)
<script>
function checkMail() {
$("#loaderIcon").show();
jQuery.ajax({
url: "check_mail.php",
data:'email='+$("#email").val(),
type: "POST",
success:function(data){
$("#email-status").html(data);
$("#loaderIcon").hide();
},
error:function (){}
});
}
</script>
<div class="col-xl-3 col-md-6 col-sm-6"><h6 class="mb-3">Inscription à la Newsletter</h6>
<form action="" method="post">
<span id="email-status" style="font-size:12px;"></span>
<input type="email" class="form-control mb-4 shadow" name="email" id="email" onBlur="checkMail()" placeholder="Votre adresse électronique" required/>
<button type="submit" name="submit1" class="btn btn-success mb-2 shadow">
S'abonner
</button>
<div class="text-small mt-2 pb-3">
Accepter notre <a class="link text-muted" href="#"> Politique de confidentialité</a><input class="form-check-input ms-2 mt-1" type="checkbox" value="Accepter" aria-label="Checkbox for following text input" required>
</div>
</form>
</div>
header.php (Le code)
<nav class="navbar navbar-expand-lg bg-light shadow">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>
index.php (Le code)
<?php
session_start();
error_reporting(0);
include('includes/config.php');
if(isset($_POST['submit1']))
{
$email=$_POST['email'];
$sql="INSERT INTO newsletter(email) VALUES(:email)";
$query = $dbco->prepare($sql);
$query->bindParam(':email',$email,PDO::PARAM_STR);
$query->execute();
$lastInsertId = $dbco->lastInsertId();
if($lastInsertId)
{
$msg="Votre abonnement à notre lettre d'information a bien été enregistré ! Merci et à bientôt...";
}
else
{
$error="Quelque chose s'est mal passé. Veuillez réessayer";
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Lettre d'information</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
<link rel="stylesheet" href="css/style.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<!-- Appelle du header -->
<header>
<?php require_once "includes/header.php"?>
</header>
<main class="mt-4">
<!-- Message d'échec -->
<?php if($error){?>
<div class="container-fluid shadow border-bottom alert rounded-0 alert-danger alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>ERREUR : </strong>
<?php echo htmlentities($error); ?>
</div>
<?php } // Message de réussite
else if($msg){?>
<div class="container-fluid shadow border-bottom alert rounded-0 alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>BRAVO : </strong>
<?php echo htmlentities($msg); ?>
</div>
<?php }?>
</main>
<!-- Appelle du footer -->
<footer class="container-fluid bg-light fixed-bottom border-top shadow-lg pt-3">
<div class="row justify-content-end card-header me-5">
<?php require_once "includes/footer.php"; ?>
</footer>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
</body>
</html>
check_mail.php (Le code)
<?php
require_once("includes/config.php");
// Vérification email
if(!empty($_POST["email"])) {
$email= $_POST["email"];
if (filter_var($email, FILTER_VALIDATE_EMAIL)===false) {
echo "<span style='color:orange'>Votre courriel n'est pas valide</span>";
}
else {
$sql ="SELECT email FROM newsletter WHERE email=:email";
$query= $dbco -> prepare($sql);
$query-> bindParam(':email', $email, PDO::PARAM_STR);
$query-> execute();
$results = $query -> fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query -> rowCount() > 0)
{
echo "<span style='color:red'>Cette adresse email existe déjà.</span>";
echo "<script>$('#submit').prop('disabled',true);</script>";
} else{
echo "<span style='color:green'>Votre email est valide. Vous pouvez vous abonner !</span>";
echo "<script>$('#submit').prop('disabled',false);</script>";
}
}
}
?>
newsletter.sql (Éventuellement pour tester le tout)
CREATE TABLE `newsletter` (
`id` int(100) NOT NULL,
`email` varchar(150) NOT NULL DEFAULT '',
`rgpd` tinyint(4) NOT NULL DEFAULT '1',
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Voili voilou, après plusieurs jours de réflexion, un paquet de clopes et une tonne de café, j'ai réussi à régler tous mes problèmes grâce à la piste que m'a donné or 1
Bonne journée à tous
[b][color=#FF0000]UPDATE ET SOLUTION :[/color][/b]
Bonjour à tous,
Pour ceux que ça intéresse au cas où ! Script entièrement fonctionnel avec mise en forme Bootstrap...
Nouvelle arborescence et suppression des fichiers inutiles, donc optimisation du code :
includes/config.php
includes/footer.php
includes/header.php (Pas important, ne contient qu'une barre de navigation)
index.php
[color=#0000FF]check_mail.php (ajout d'une fonctionnalité de vérification de l’existence d’e-mail dans la base de données) jquery[/color]
[color=#FF0000]newsletter.php (supprimé)[/color]
newsletter.sql (Pour ceux qui veulent faire les tests en local)
[b][u]config.php (Le code)[/u][/b]
[PHP]<?php
// DB credentials.
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASS','root');
define('DB_NAME','site');
// Establish database connection.
try
{
$dbco = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER, DB_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
exit("Error: " . $e->getMessage());
}
?>[/PHP]
[b][u]footer.php (Le code)[/u][/b]
[html]<script>
function checkMail() {
$("#loaderIcon").show();
jQuery.ajax({
url: "check_mail.php",
data:'email='+$("#email").val(),
type: "POST",
success:function(data){
$("#email-status").html(data);
$("#loaderIcon").hide();
},
error:function (){}
});
}
</script>
<div class="col-xl-3 col-md-6 col-sm-6"><h6 class="mb-3">Inscription à la Newsletter</h6>
<form action="" method="post">
<span id="email-status" style="font-size:12px;"></span>
<input type="email" class="form-control mb-4 shadow" name="email" id="email" onBlur="checkMail()" placeholder="Votre adresse électronique" required/>
<button type="submit" name="submit1" class="btn btn-success mb-2 shadow">
S'abonner
</button>
<div class="text-small mt-2 pb-3">
Accepter notre <a class="link text-muted" href="#"> Politique de confidentialité</a><input class="form-check-input ms-2 mt-1" type="checkbox" value="Accepter" aria-label="Checkbox for following text input" required>
</div>
</form>
</div>
[/html]
[b][u]header.php (Le code)[/u][/b]
[html]<nav class="navbar navbar-expand-lg bg-light shadow">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>
[/html]
[b][u]index.php (Le code)[/u][/b]
[PHP]<?php
session_start();
error_reporting(0);
include('includes/config.php');
if(isset($_POST['submit1']))
{
$email=$_POST['email'];
$sql="INSERT INTO newsletter(email) VALUES(:email)";
$query = $dbco->prepare($sql);
$query->bindParam(':email',$email,PDO::PARAM_STR);
$query->execute();
$lastInsertId = $dbco->lastInsertId();
if($lastInsertId)
{
$msg="Votre abonnement à notre lettre d'information a bien été enregistré ! Merci et à bientôt...";
}
else
{
$error="Quelque chose s'est mal passé. Veuillez réessayer";
}
}
?>
[/PHP]
[html]
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Lettre d'information</title>
<link href="https://cdn.jsdelivr.net/npm/
[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
<link rel="stylesheet" href="css/style.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
</head>
<body>
<!-- Appelle du header -->
<header>
[/html]
[PHP]
<?php require_once "includes/header.php"?>
[/PHP]
[html]
</header>
<main class="mt-4">
<!-- Message d'échec -->
[/html]
[PHP]
<?php if($error){?>
[/PHP]
[html]
<div class="container-fluid shadow border-bottom alert rounded-0 alert-danger alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>ERREUR : </strong>[/html][PHP]<?php echo htmlentities($error); ?>[/PHP]
[html]
</div>
[/html]
[PHP]
<?php } // Message de réussite
else if($msg){?>
[/PHP]
[html]
<div class="container-fluid shadow border-bottom alert rounded-0 alert-success alert-dismissible fade show" role="alert">
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
<strong>BRAVO : </strong>[/html][PHP]<?php echo htmlentities($msg); ?>[/PHP]
[html]</div>[/html]
[PHP]<?php }?>[/PHP]
[html]
</main>
<!-- Appelle du footer -->
<footer class="container-fluid bg-light fixed-bottom border-top shadow-lg pt-3">
<div class="row justify-content-end card-header me-5">
[/html]
[PHP]<?php require_once "includes/footer.php"; ?>[/PHP]
[html]
</footer>
<script src="https://cdn.jsdelivr.net/npm/
[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
</body>
</html>
[/html]
[b][u]check_mail.php (Le code)[/u][/b]
[PHP]<?php
require_once("includes/config.php");
// Vérification email
if(!empty($_POST["email"])) {
$email= $_POST["email"];
if (filter_var($email, FILTER_VALIDATE_EMAIL)===false) {
echo "<span style='color:orange'>Votre courriel n'est pas valide</span>";
}
else {
$sql ="SELECT email FROM newsletter WHERE email=:email";
$query= $dbco -> prepare($sql);
$query-> bindParam(':email', $email, PDO::PARAM_STR);
$query-> execute();
$results = $query -> fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query -> rowCount() > 0)
{
echo "<span style='color:red'>Cette adresse email existe déjà.</span>";
echo "<script>$('#submit').prop('disabled',true);</script>";
} else{
echo "<span style='color:green'>Votre email est valide. Vous pouvez vous abonner !</span>";
echo "<script>$('#submit').prop('disabled',false);</script>";
}
}
}
?>
[/PHP]
[b][u]newsletter.sql (Éventuellement pour tester le tout)[/u][/b]
[html]
CREATE TABLE `newsletter` (
`id` int(100) NOT NULL,
`email` varchar(150) NOT NULL DEFAULT '',
`rgpd` tinyint(4) NOT NULL DEFAULT '1',
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
[/html]
Voili voilou, après plusieurs jours de réflexion, un paquet de clopes et une tonne de café, j'ai réussi à régler tous mes problèmes grâce à la piste que m'a donné or 1
Bonne journée à tous