erreur 500 dans un code PHP

  • Auteur de la discussion Auteur de la discussion ManuMaz
  • Date de début Date de début
Nouveau WRInaute
bonsoir,
j'ai un bout de code en PHP pour envoyer des données dans une base de données qui me retourne une erreur 500 et je n'arrive pas à voir où est l'erreur que j'aurais pu commettre, la partie connexion se passe très bien mais dès qu'il faut envoyer des données ça part en sucette.
Le script n'arrive même pas à aller jusqu' la validation "impossible de créer l'enregistrement.

// Set the variables for the person we want to add to the database
$nom = "Test";
$prenom = "Testing";
$email = "Testing@testing.com";
// Here we create a variable that calls the prepare() method of the database object
// The SQL query you want to run is entered as the parameter, and placeholders are written like this :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO contact ( nom, prenom, nomartiste, email, telephone, message, date) VALUES (:nom, :prenom, :nomartiste, :email, :telephone, :message, :date)");
// Now we tell the script which variable each placeholder actually refers to using the bindParam() method
// First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to
$my_Insert_Statement->bindParam(:nom, $nom);
$my_Insert_Statement->bindParam(:prenom, $prenom);
$my_Insert_Statement->bindParam(:nomartiste, $nomartiste);
$my_Insert_Statement->bindParam(:email, $email);
$my_Insert_Statement->bindParam(telephone, $telephone);
$my_Insert_Statement->bindParam(:message, $message);
$my_Insert_Statement->bindParam(:date, $date);
// Execute the query using the data we just defined
// The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here
if ($my_Insert_Statement->execute())
{
echo "Nouvel enregistrement créé avec succès";
}
else
{
echo "Impossible de créer l'enregistrement";
}
 
WRInaute accro
On a pas eu de feedback sur ton post précédent, ça ne motive guère à donner de l'aide sur celui-ci.
Allez je vais être sympa : activer le error reporting. :
PHP:
<?php
ini_set('display_errors', 1);
 
Nouveau WRInaute
On a pas eu de feedback sur ton post précédent, ça ne motive guère à donner de l'aide sur celui-ci.
Allez je vais être sympa : activer le error reporting. :
PHP:
<?php
ini_set('display_errors', 1);
Si je t'ai remercier sur l'autre post et en plus j'ai dis que tu avais raison sur ton post. c'était simplement que j'avais mis des majuscule alors qu'il fallait simplement les passer en minuscule et le tour était joué. Désolé si je n'ai pas été assez clair dans ma réponse, je tacherais de faire mieux dans celui là.
je vais tester ton nouveau bout de code et je reviens te dire ça dans la soirée.
 
Nouveau WRInaute
Non ta ligne de code ne fonctionne pas il persiste à mettre une vulgaire erreur 500 au lieu de mettre l'erreur :-(
 
WRInaute occasionnel
Il faut regarder dans les logs de PHP. Dans ce cas, c'est sûrement une erreur de syntaxe dans le code.
 
WRInaute passionné
essaie ça

Code:
$nom = "Test";
$prenom = "Testing";
$email = "Testing@testing.com";
$nomartiste = "";  // définir des valeurs, même vides
$telephone = "";
$message = "";
$date = date('Y-m-d H:i:s');  // exemple date courante

$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO contact (nom, prenom, nomartiste, email, telephone, message, date) VALUES (:nom, :prenom, :nomartiste, :email, :telephone, :message, :date)");

$my_Insert_Statement->bindParam(':nom', $nom);
$my_Insert_Statement->bindParam(':prenom', $prenom);
$my_Insert_Statement->bindParam(':nomartiste', $nomartiste);
$my_Insert_Statement->bindParam(':email', $email);
$my_Insert_Statement->bindParam(':telephone', $telephone);
$my_Insert_Statement->bindParam(':message', $message);
$my_Insert_Statement->bindParam(':date', $date);

if ($my_Insert_Statement->execute()) {
    echo "Nouvel enregistrement créé avec succès";
} else {
    echo "Impossible de créer l'enregistrement";
}
 
Nouveau WRInaute
essaie ça

Code:
$nom = "Test";
$prenom = "Testing";
$email = "Testing@testing.com";
$nomartiste = "";  // définir des valeurs, même vides
$telephone = "";
$message = "";
$date = date('Y-m-d H:i:s');  // exemple date courante

$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO contact (nom, prenom, nomartiste, email, telephone, message, date) VALUES (:nom, :prenom, :nomartiste, :email, :telephone, :message, :date)");

$my_Insert_Statement->bindParam(':nom', $nom);
$my_Insert_Statement->bindParam(':prenom', $prenom);
$my_Insert_Statement->bindParam(':nomartiste', $nomartiste);
$my_Insert_Statement->bindParam(':email', $email);
$my_Insert_Statement->bindParam(':telephone', $telephone);
$my_Insert_Statement->bindParam(':message', $message);
$my_Insert_Statement->bindParam(':date', $date);

if ($my_Insert_Statement->execute()) {
    echo "Nouvel enregistrement créé avec succès";
} else {
    echo "Impossible de créer l'enregistrement";
}
bonjour,
votre code fonctionne bien pour allez à la validation mais n'enregistre rien de bon.
TestTestingnomartisteTesting@testing.comtelephonemessage
voilà se qu'il m'affiche dans la base de donnée, il n'y a que la date qui est enregistrée correctement.
 
Dernière édition:
WRInaute accro
Commence par bien déclarer toutes tes variables pour téléphone et message (vu que c'est du test) :
$nom = "Test";
$prenom = "Testing";
$email = "Testing@testing.com";
$nomartiste = "ArtisteTest";
$telephone = "0000000000";
$message = "Message test";
$date = date('Y-m-d H:i:s');

Et le retour est bon avec son code en fait !
 
Nouveau WRInaute
Commence par bien déclarer toutes tes variables pour téléphone et message (vu que c'est du test) :
$nom = "Test";
$prenom = "Testing";
$email = "Testing@testing.com";
$nomartiste = "ArtisteTest";
$telephone = "0000000000";
$message = "Message test";
$date = date('Y-m-d H:i:s');

Et le retour est bon avec son code en fait !
pareil ça me met littéralement ce qu'il y a entre guillemet.

Supprimer

TestTestingArtisteTestTesting@testing.com0000000000Message test2025-06-05 Supprimer
 
WRInaute accro
Oh putain, là c'est l'histoire du mec qui a une banane dans l'oreille (ref: Frédéric Dard).

Le retour dans ta table, c'est parce que tu initialises les variables avec des données de test. Donc cela fonctionne, plus qu'à mettre en prod en récupérant les bonnes données de ton formulaire et en filtrant/sécurisant bien entendu, car il n'y a pas pire qu'une injection SQL, à part 2 injections SQL.
 
WRInaute occasionnel
Il faudrait commencer par apprendre au moins les bases de la programmation, notamment en PHP. Balancer des bouts de code en PHP ici et là, sans vraiment comprendre comment cela fonctionne, n'est pas une bonne idée. Même si c'est une IA qui génère le code, il est important de le comprendre un minimum, sans compter les risques que cela représente.
 
Nouveau WRInaute
Oh putain, là c'est l'histoire du mec qui a une banane dans l'oreille (ref: Frédéric Dard).

Le retour dans ta table, c'est parce que tu initialises les variables avec des données de test. Donc cela fonctionne, plus qu'à mettre en prod en récupérant les bonnes données de ton formulaire et en filtrant/sécurisant bien entendu, car il n'y a pas pire qu'une injection SQL, à part 2 injections SQL.
Je dirais même un bananier sous le crane :)
il me faudrait un exemple si c pas trop demandé.
pour les injection SQL on verra après, il y a trop longtemps que j'ai quitter internet.
Désolé si je vous fait perdre votre temps.
 
WRInaute accro
Une petite demande au stagiaire devrait t'aider, mais si tu ne comprends rien à ce qu'il te dit, laisse tomber !
Exemple à l'arrache sans mettre en place les sécurités bien entendu avec une validation côté serveur dès le départ :

Code:
<?php
// Connexion à la base de données (adapter selon ton environnement)
$host = 'localhost';
$dbname = 'nom_de_ta_base';
$username = 'utilisateur';
$password = 'motdepasse';

try {
    $my_Db_Connection = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $my_Db_Connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $error) {
    echo "Erreur de connexion : " . $error->getMessage();
    die();
}

// Traitement du formulaire
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nom = $_POST['nom'] ?? '';
    $prenom = $_POST['prenom'] ?? '';
    $email = $_POST['email'] ?? '';
    $nomartiste = $_POST['nomartiste'] ?? '';
    $telephone = $_POST['telephone'] ?? '';
    $message = $_POST['message'] ?? '';
    $date = date('Y-m-d H:i:s');

    $my_Insert_Statement = $my_Db_Connection->prepare("
        INSERT INTO contact (nom, prenom, nomartiste, email, telephone, message, date)
        VALUES (:nom, :prenom, :nomartiste, :email, :telephone, :message, :date)
    ");

    $my_Insert_Statement->bindParam(':nom', $nom);
    $my_Insert_Statement->bindParam(':prenom', $prenom);
    $my_Insert_Statement->bindParam(':nomartiste', $nomartiste);
    $my_Insert_Statement->bindParam(':email', $email);
    $my_Insert_Statement->bindParam(':telephone', $telephone);
    $my_Insert_Statement->bindParam(':message', $message);
    $my_Insert_Statement->bindParam(':date', $date);

    if ($my_Insert_Statement->execute()) {
        echo "✅ Nouvel enregistrement créé avec succès.";
    } else {
        echo "❌ Impossible de créer l'enregistrement.";
    }
}
?>

<!-- Formulaire HTML -->
<form method="POST" action="">
    <label>Nom: <input type="text" name="nom" required></label><br>
    <label>Prénom: <input type="text" name="prenom" required></label><br>
    <label>Nom d'artiste: <input type="text" name="nomartiste" required></label><br>
    <label>Email: <input type="email" name="email" required></label><br>
    <label>Téléphone: <input type="text" name="telephone" required></label><br>
    <label>Message:<br><textarea name="message" rows="4" required></textarea></label><br>
    <button type="submit">Envoyer</button>
</form>
 
Nouveau WRInaute
Une petite demande au stagiaire devrait t'aider, mais si tu ne comprends rien à ce qu'il te dit, laisse tomber !
Exemple à l'arrache sans mettre en place les sécurités bien entendu avec une validation côté serveur dès le départ :

Code:
<?php
// Connexion à la base de données (adapter selon ton environnement)
$host = 'localhost';
$dbname = 'nom_de_ta_base';
$username = 'utilisateur';
$password = 'motdepasse';

try {
    $my_Db_Connection = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $my_Db_Connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $error) {
    echo "Erreur de connexion : " . $error->getMessage();
    die();
}

// Traitement du formulaire
if ($_SERVER["REQUEST_METHOD"] === "POST") {
    $nom = $_POST['nom'] ?? '';
    $prenom = $_POST['prenom'] ?? '';
    $email = $_POST['email'] ?? '';
    $nomartiste = $_POST['nomartiste'] ?? '';
    $telephone = $_POST['telephone'] ?? '';
    $message = $_POST['message'] ?? '';
    $date = date('Y-m-d H:i:s');

    $my_Insert_Statement = $my_Db_Connection->prepare("
        INSERT INTO contact (nom, prenom, nomartiste, email, telephone, message, date)
        VALUES (:nom, :prenom, :nomartiste, :email, :telephone, :message, :date)
    ");

    $my_Insert_Statement->bindParam(':nom', $nom);
    $my_Insert_Statement->bindParam(':prenom', $prenom);
    $my_Insert_Statement->bindParam(':nomartiste', $nomartiste);
    $my_Insert_Statement->bindParam(':email', $email);
    $my_Insert_Statement->bindParam(':telephone', $telephone);
    $my_Insert_Statement->bindParam(':message', $message);
    $my_Insert_Statement->bindParam(':date', $date);

    if ($my_Insert_Statement->execute()) {
        echo "✅ Nouvel enregistrement créé avec succès.";
    } else {
        echo "❌ Impossible de créer l'enregistrement.";
    }
}
?>

<!-- Formulaire HTML -->
<form method="POST" action="">
    <label>Nom: <input type="text" name="nom" required></label><br>
    <label>Prénom: <input type="text" name="prenom" required></label><br>
    <label>Nom d'artiste: <input type="text" name="nomartiste" required></label><br>
    <label>Email: <input type="email" name="email" required></label><br>
    <label>Téléphone: <input type="text" name="telephone" required></label><br>
    <label>Message:<br><textarea name="message" rows="4" required></textarea></label><br>
    <button type="submit">Envoyer</button>
</form>
Merci énormément car depuis ce matin je cherchais sur internet et je n'ai trouvé nul part les deux points ? et les ' '


pour le formulaire en HTML j'ai écris ça :
<label for="nom"> <input type="text" id="nom" name="nom" required ">
est ce bon ?
 
Nouveau WRInaute
Bonsoir,
j'ai remanié le code et ça donne ça, qu'en pensez vous ?
<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Lumière et Art - Formulaire de Contact</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>

<body class="imagedefond">
<div>
<h1 class="charactere">Contactez Lumière et Art</h1>

<?php
$erreurs = [];

function nettoyer_et_valider($data) {
return htmlspecialchars(trim($data), ENT_QUOTES, 'UTF-8');
}

if ($_SERVER["REQUEST_METHOD"] === "POST" &&
isset($_POST["nom"], $_POST["prenom"], $_POST["nomartiste"], $_POST["email"], $_POST["telephone"], $_POST["pays"], $_POST["message"])) {

// Vérification du token CSRF
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("<p style='color:red;'> Erreur,
<a href='formulaire-de-contact.php' class='charactere'>Revenir à la page de soumission</a>
</p>");
}

$nom = nettoyer_et_valider($_POST["nom"]);
$prenom = nettoyer_et_valider($_POST["prenom"]);
$nomartiste = nettoyer_et_valider($_POST["nomartiste"]);
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$telephone = nettoyer_et_valider($_POST["telephone"]);
$pays = nettoyer_et_valider($_POST["pays"]);
$message = nettoyer_et_valider($_POST["message"]);

// Vérification des champs
if (empty($nom) || empty($prenom) || empty($nomartiste) || empty($email) || empty($pays) || empty($message)) {
$erreurs[] = "Tous les champs obligatoires ne sont pas remplis.";
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$erreurs[] = "Adresse email invalide.";
}

if (!preg_match("/^[\+0-9\s\-\.\/]{0,20}$/", $telephone)) {
$erreurs[] = "Numéro de téléphone invalide.";
}

if (!empty($erreurs)) {
foreach ($erreurs as $e) {
echo "<p style='color:red;'>$e</p>";
}
exit;
}

// Affichage formaté
echo "<p class='charactere'><strong>Bonjour &nbsp;" .$prenom."&nbsp;" .$nom. "</strong></p>";
echo "<p class='charactere'>Nom d'artiste :&nbsp;" .$nomartiste. "</p>";
echo "<p class='charactere'>Email :&nbsp;" .$email. "</p>";
echo "<p class='charactere'>Téléphone :&nbsp;" .$telephone. "</p>";
echo "<p class='charactere'>Pays :&nbsp;" .$pays. "</p>";
echo "<p class='charactere'>Message : " . nl2br($message) . "</p>";

// Connexion PDO
$servername = "";
$database = "";
$username = "";
$password = "";

try {
$my_Db_Connection = new PDO("mysql:host=$servername;dbname=$database;", $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
} catch (PDOException $e) {
error_log($e->getMessage());
echo "<p style='color:red;'>Erreur de connexion à la base de données.</p>";
exit;
}

$stmt = $my_Db_Connection->prepare("INSERT INTO contact (nom, prenom, nomartiste, email, telephone, pays, message)
VALUES (:nom, :prenom, :nomartiste, :email, :telephone, :pays, :message)");

$stmt->bindParam(":nom", $nom);
$stmt->bindParam(":prenom", $prenom);
$stmt->bindParam(":nomartiste", $nomartiste);
$stmt->bindParam(":email", $email);
$stmt->bindParam(":telephone", $telephone);
$stmt->bindParam(":pays", $pays);
$stmt->bindParam(":message", $message);

if ($stmt->execute()) {
echo "<p class='charactere' style='color:green;'>Nous avons bien reçu votre message.</p>";
unset($_SESSION['csrf_token']);
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
} else {
echo "<p style='color:red;'>Une erreur est survenue lors de l'enregistrement.</p>";
}
}
?>
</div>

<br><br><br>

<footer>
<a href="index.php" class="charactere">Retour à l'accueil</a>
</footer>
</body>
</html>

Par contre il y a une ligne de code qui ne fonctionne pas, quand je rentre directement sur cette page il ne me met pas l'erreur :
// Vérification du token CSRF
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("<p style='color:red;'> Erreur,
<a href='formulaire-de-contact.php' class='charactere'>Revenir à la page de soumission</a>
</p>");
}
Pouvez vous m'aider ?
 
Dernière édition:

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut