[RESOLU] données ne remontent pas dans la BDD

Seatter
Invité n'ayant pas de compte PHPfrance

04 août 2022, 12:02

Bonjour à tous,

Je suis une grosse noob en php mes excuses par avance.
Je ne suis pas développeuse mais j'essaye de faire un petit site en ligne pour gérer les archives de mon entreprise.
Le problème c'est que le formulaire que j'ai créé n'envoi pas les données dans ma BDD (j'utilise PHP my admin)
pourtant le formulaire d'inscription, quant à lui, fonctionne.

J'ai cherché vraiment partout pendant longtemps mais je ne trouve rien..

Je vous mets ici le code de mes trois fichiers :

formulaire.php
formulaire_traitement.php
config.php

1/ formulaire.php

<?php
$title = "Gestion de l'archivage en ligne";

?>

<body>


<h2>
Référence : merci d'indiquer votre Direction, puis l'année, le mois le cas échéant, les trois premières lettres de chaque mot relatif au type de document ainsi que le lieu d'archivage
</h2>

<h3>
Exemple DG - 2002 - 01 - COM ACT SOC - VLP
</h3>
<h3>
A détruire le : "Se référer aux durées de
conservation définies au sein
de la procédure Durées de
conservation disponible sous
la GED "

</h3>

<style>

h2 {

font-size: 18px;
margin: 50px auto;
color: rgb(240, 130, 100);
text-align: center
}
h3 {
font-size: 18px;
margin: 100px auto;
color: rgb(95, 118, 148);
text-align: center
}
</style>


<form method="POST" action="formulaire_traitement.php">

<label for="annee">Sélectionnez l'année archivée</label>
<select name="annee" id="annee" required/>



<option value=" 1930 "> 1930 </option>
<option value=" 1931 "> 1931 </option>
<option value=" 1932 "> 1932 </option>
<option value=" 1933 "> 1933 </option>
<option value=" 1934 "> 1934 </option>
<option value=" 1935 "> 1935 </option>
<option value=" 1936 "> 1936 </option>
<option value=" 1937 "> 1937 </option>
<option value=" 1938 "> 1938 </option>
<option value=" 1939 "> 1939 </option>
<option value=" 1940 "> 1940 </option>
<option value=" 1941 "> 1941 </option>
<option value=" 1942 "> 1942 </option>
<option value=" 1943 "> 1943 </option>
<option value=" 1944 "> 1944 </option>
<option value=" 1945 "> 1945 </option>
<option value=" 1946 "> 1946 </option>
<option value=" 1947 "> 1947 </option>
<option value=" 1948 "> 1948 </option>
<option value=" 1949 "> 1949 </option>
<option value=" 1950 "> 1950 </option>
<option value=" 1951 "> 1951 </option>
<option value=" 1952 "> 1952 </option>
<option value=" 1953 "> 1953 </option>
<option value=" 1954 "> 1954 </option>
<option value=" 1955 "> 1955 </option>
<option value=" 1956 "> 1956 </option>
<option value=" 1957 "> 1957 </option>
<option value=" 1958 "> 1958 </option>
<option value=" 1959 "> 1959 </option>
<option value=" 1960 "> 1960 </option>
<option value=" 1961 "> 1961 </option>
<option value=" 1962 "> 1962 </option>
<option value=" 1963 "> 1963 </option>
<option value=" 1964 "> 1964 </option>
<option value=" 1965 "> 1965 </option>
<option value=" 1966 "> 1966 </option>
<option value=" 1967 "> 1967 </option>
<option value=" 1968 "> 1968 </option>
<option value=" 1969 "> 1969 </option>
<option value=" 1970 "> 1970 </option>
<option value=" 1971 "> 1971 </option>
<option value=" 1972 "> 1972 </option>
<option value=" 1973 "> 1973 </option>
<option value=" 1974 "> 1974 </option>
<option value=" 1975 "> 1975 </option>
<option value=" 1976 "> 1976 </option>
<option value=" 1977 "> 1977 </option>
<option value=" 1978 "> 1978 </option>
<option value=" 1979 "> 1979 </option>
<option value=" 1980 "> 1980 </option>
<option value=" 1981 "> 1981 </option>
<option value=" 1982 "> 1982 </option>
<option value=" 1983 "> 1983 </option>
<option value=" 1984 "> 1984 </option>
<option value=" 1985 "> 1985 </option>
<option value=" 1986 "> 1986 </option>
<option value=" 1987 "> 1987 </option>
<option value=" 1988 "> 1988 </option>
<option value=" 1989 "> 1989 </option>
<option value=" 1990 "> 1990 </option>
<option value=" 1991 "> 1991 </option>
<option value=" 1992 "> 1992 </option>
<option value=" 1993 "> 1993 </option>
<option value=" 1994 "> 1994 </option>
<option value=" 1995 "> 1995 </option>
<option value=" 1996 "> 1996 </option>
<option value=" 1997 "> 1997 </option>
<option value=" 1998 "> 1998 </option>
<option value=" 1999 "> 1999 </option>
<option value=" 2000 "> 2000 </option>
<option value=" 2001 "> 2001 </option>
<option value=" 2002 "> 2002 </option>
<option value=" 2003 "> 2003 </option>
<option value=" 2004 "> 2004 </option>
<option value=" 2005 "> 2005 </option>
<option value=" 2006 "> 2006 </option>
<option value=" 2007 "> 2007 </option>
<option value=" 2008 "> 2008 </option>
<option value=" 2009 "> 2009 </option>
<option value=" 2010 "> 2010 </option>
<option value=" 2011 "> 2011 </option>
<option value=" 2012 "> 2012 </option>
<option value=" 2013 "> 2013 </option>
<option value=" 2014 "> 2014 </option>
<option value=" 2015 "> 2015 </option>
<option value=" 2016 "> 2016 </option>
<option value=" 2017 "> 2017 </option>
<option value=" 2018 "> 2018 </option>
<option value=" 2019 "> 2019 </option>
<option value=" 2020 "> 2020 </option>
<option value=" 2021 "> 2021 </option>
<option value=" 2022 "> 2022 </option>


</select>


<label for="mois">Sélectionnez le mois archivé</label>
<select name="mois" id="mois">
<option value="Janvier">Janvier</option>
<option value="Février">Fevrier</option>
<option value="Mars">Mars</option>
<option value="Avril">Avril</option>
<option value="Mai">Mai</option>
<option value="Juin">Juin</option>
<option value="Juillet">Juillet</option>
<option value="Août">Aout</option>
<option value="Septembre">Septembre</option>
<option value="Octobre">Octobre</option>
<option value="Novembre">Novembre</option>
<option value="Décembre">Decembre</option>
</select>


<label for="archivageDate">Date d'archivage</label>
<input type="date" name ="archivageDate" id="archivageDate" required />


<label for="archivageLieu">Lieu d'archivage</label>
<select name="archivageLieu" id="archivageLieu" required>
<option value="Vaux-le-Pénil">Vaux-le-Pénil</option>
<option value="Melun">Melun</option>
<option value="Paris">Paris</option>
<option value="Toulouse">Toulouse</option>
</select>

Type de document
<input type="text" name ="documentType" id="documentType" required>


A détruire le
<input type="date" name ="detruireLe" id="detruireLe" required>


<label for="destructionDate">Date réeelle de destruction </label>
<input type="date" name = "destructionDate" id="destructionDate" />


<label for="reference">Référence de la boîte, du carton ou du classeur</label>
<input type="text" name = "reference" id="reference" required />

<label for="descriptionDetail">Description plus détaillée au besoin</label>
<input type="textarea" name = "descriptionDetail" id="descriptionDetail" />

<input type="submit" name="valider" value="valider" onclick="self.location.href='resultat.php'" style="background-color:#3cb371" style="color:white; font-weight:bold"onclick>
</p>

<style>

form {
width: 100%;
padding: 20px;
border-radius: 6px;
background: #fff;
box-shadow: 0 0 20px 0 #095484;
}
body, div, form, input, select, p {
padding: 0;
margin: 0;
outline: none;
font-family: Roboto, Arial, sans-serif;
font-size: 14px;
color: #666;
line-height: 22px;
}
</style>
<p style="color: red;"><?php if(isset($error)){echo $error;}?></p>
</form>
</body>



2/ formulaire_traitement.php


<?php

//connexion à la base de donnée

require_once 'config.php';



// vérifier que les champs ne sont pas vides
if(!empty($_POST['annee']) && !empty($_POST['mois']) && !empty($_POST['archivageDate']) && !empty($_POST['archivageLieu']) && !empty($_POST['documentType']) && !empty($_POST['detruireLe'])
&& !empty($_POST['reference']))

$annee = htmlspecialchars($_POST['annee']);
$mois = htmlspecialchars($_POST['mois']);
$archivageDate = htmlspecialchars($_POST['archivageDate']);
$archivageLieu = htmlspecialchars($_POST['archivageLieu']);
$documentType = htmlspecialchars($_POST['documentType']);
$detruireLe = htmlspecialchars($_POST['detruireLe']);
$destructionDate = htmlspecialchars($_POST['destructionDate']);
$reference = htmlspecialchars($_POST['reference']);
$descriptionDetail = htmlspecialchars($_POST['descriptionDetail']);

if ( isset( $_POST['submit'] ) ) {

$annee = $_POST['annee'];
$mois = $_POST['mois'];
$archivageDate = $_POST['archivageDate'];
$archivageLieu = $_POST['archivageLieu'];
$documentType = $_POST['documentType'];
$detruireLe = $_POST['detruireLe'];
$destructionDate= $_POST['destructionDate'];
$reference= $_POST['reference'];
$destructionDetail= $_POST['descriptionDetail'];


//J insère dans la base de données
$insert = $bdd->prepare('INSERT INTO formulaire (annee, mois, archivageDate, archivageLieu, docucmentType, detruireLe, destructionDate, reference, descriptionDetail)
VALUES(:annee, :mois, :archivageDate, :archivageLieu, :documentType, :detruireLe, :destructionDate, :reference, :descriptionDetail, :id)');
$insert->execute(array(

'annee' => $annee,
'mois' => $mois,
'archivageDate' => $archivageDate,
'archivageLieu' => $archivageLieu,
'documentType' => $documentType,
'detruireLe' => $detruireLe,
'destructionDate' => $destructionDate,
'reference' => $reference,
'destructionDetail' => $destructionDetail,

));

// je redirige avec le message de succès
header('Location:resultat.php?reg_err=success');
die();

}else {
$error = "Veuillez remplir tous les champs obligatoires";
}


?>


3/config.php

<?php

try
{
$bdd = new PDO("mysql:host=localhost;dbname=monsite;charset=utf8", "root", "");
}
catch(PDOException $e)
{
die('Erreur : '.$e->getMessage());
}

?>


Merci beaucoup pour votre aide je suis tellement fatiguée et perdue là :(

ynx
Eléphant du PHP | 494 Messages

04 août 2022, 12:40

Bonjour,

Quel est le résultat obtenu à la soumission du formulaire ? Une erreur php/sql ou une page blanche ? Une redirection ?

Pourquoi avoir ajouté un attribut onclick avec une redirection sur le bouton submit du formulaire ? Le bouton devrait simplement soumettre le formulaire sans attribut onclick, essaye de supprimer cet attribut (la redirection vers resultat.php est faite à la fin du traitement du formulaire).

Pour voir les éventuelles erreurs sql, modifie ton fichier config.php pour activer le rapport d'erreur de PDO en mode WARNING ou EXCEPTION comme sur l'exemple de cette page : https://www.php.net/manual/fr/pdo.error-handling.php

Si ce n'est pas déjà le cas, regarde dans le fichier log et/ou active l'affichage des erreurs PHP en développement pour voir les éventuelles erreurs PHP : tutoriels/page-blanche-script-php-comme ... 73178.html

Seaotter
Invité n'ayant pas de compte PHPfrance

04 août 2022, 15:11

Merci beaucoup pour ce retour rapide !

Pour répondre aux questions: il y a encore deux j'avais bien une redirection vers la page de résultat.. mais maintenant j'ai juste une page blanche.
Oui c'est une erreur pour le onclick, merci je l'ai enlevé.
J'ai modifié le fichier config.php mais j'ai dû me tromper car toujours aucune erreur, voici ce que j'ai indiqué :


<?php

$dsn = 'mysql:dbname=monsite;host=localhost';
$user = 'root';
$password = '';

try {
$bdd = new PDO($dsn, $user, $password);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Échec lors de la connexion : ' . $e->getMessage();
}


?>


J'ai ajouté le code pour les erreurs php et ai vérifié mon fichier INI qui était bon et j'ai regardé aussi les logs php mais je n'ai rien à part quelques petits loupés que j'ai corrigé 'erreurs d'inattention)
le dernier en date c'est parce que j'avais laissé dbh comme dans l'exemple au lieu de mettre bdd :

thrown in C:\Users\loutre\Documents\monsite\landing.php on line 11
[04-Aug-2022 12:46:12 UTC] PHP Notice: Undefined variable: bdd in C:\Users\mauffrais\Documents\monsite\connexion.php on line 15
[04-Aug-2022 12:46:12 UTC] PHP Stack trace:
[04-Aug-2022 12:46:12 UTC] PHP 1. {main}() C:\Users\mauffrais\Documents\monsite\connexion.php:0
[04-Aug-2022 12:46:12 UTC] PHP Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\Users\loutre\Documents\monsite\connexion.php:15
Stack trace:
#0 {main}
thrown in C:\Users\mauffrais\Documents\monsite\connexion.php on line 15

c'est tout :/ ...

Mammouth du PHP | 1870 Messages

04 août 2022, 15:21

A vue de nez je pencherais sur une paire d'accolade manquante

ton if (!empty... n'a pas d'accolade, du coup si un champs est vide il n'arrète pas l'execution et ta requète préparé va échouer.

retire le header pour le debug, et mets ton niveau d'erreur PHP à E_ALL
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

ynx
Eléphant du PHP | 494 Messages

04 août 2022, 15:27

Ton fichier config.php semble correct.
Il manque effectivement les accolades du bloc if comme indiqué par Spols. Ces vérifications devraient d'ailleurs plutôt se situer dans le bloc if (isset( $_POST['submit'])) { ... }
La condition if (isset( $_POST['submit'])) ne sera jamais validée car ton input possède un attribut name="valider", il faut donc corriger la condition php en if (isset( $_POST['valider']))

seaotter
Invité n'ayant pas de compte PHPfrance

04 août 2022, 15:51

Merci à vous deux !
j'ai ajouté les accolades par contre et j'ai bien mis if empty après if isset
Pour le bouton valider oui c'est vrai merci je l'avais modifié après en "valider et j'ai oublié de changer dans le formulaire)
J'ai aussi trouvé une erreur de mon côté, j'ai une mauvaise vue de base et donc dans ma bdd j'ai noté "destructionDetail" or c'était "descriptionDetail" et j'avais fait des erreurs aussi dans formulaire_traitement.



UN TRES GRAND MERCI A VOUS pour votre aide et votre rapidité à m'avoir répondu en plus :)