Je me suis lancé il y a quelques temps dans la conception d'un petit module de compta automatique pour mon asso.
J'ai aujourd'hui envie de l'améliorer en y apportant quelques modification :
- Un formulaire html demande à l'utilisateur d'entrée la dépense qu'il souhaite enregistrer (Date, Montant, Description, Payeur, Justificatif pdf ou jpeg)
Dans la partie "Payeur" l'utilisateur à le choix entre les possiblités suivantes :
- Payé avec la CB de l'asso
- Payé avec le Cash de l'asso
- Payé par un des deux membres de la direction
En gros initialement, toutes les données étaient stockées dans une même table nMySQL. Mais pour gagner en clarté et organisation j'ai choisi de maintenant séparer les différentes tables (CB,Cash,Membre de l'asso) en fonction des payeurs.
Voilà mon code complet, pour la partie vérification du formulaire et enregistrement dans la BDD (Le problème doit probalblement venir de là) : Lorsque je remplis le formulaire, la page par sur mon fichier "verification.php" et reste bloqué là sur une page blanche... Je pense que c'est un problème de syntaxe mais j'ai envie d'avoir vos avis.
Voilà mon code :
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=******************************************************); //ID + MDP Compte bdd
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
//Fin connexion bdd
// Verification de la validité des informations
$errors = array();
if(empty($_POST['date_enregistrement']) || !preg_match('/^[0-9-]+$/', $_POST['date_enregistrement'])){
$errors['date_enregistrement'] = "Erreur de date d'enregistrement. Contactez l'administrateur.";
}
if(empty($_POST['date_achat']) || !preg_match('/^[0-9-]+$/', $_POST['date_achat'])){
$errors['date_achat'] = "La date entrée est invalide : mm-dd-YYYY";
}
if(empty($_POST['description']) || !preg_match('/^[a-zA-Z0-9-._ ]+$/', $_POST['description'])){
$errors['description'] = "La description contient des caractères invalides (alphanumérique uniquement)";
}
if(empty($_POST['montant']) || !preg_match('/^[0-9.,]+$/', $_POST['montant'])){
$errors['montant'] = "Le montant entré doit être un nombre";
}
if(empty($_POST['choix']) || !preg_match('/^[a-zA-Z_]+$/', $_POST['choix'])){
$errors['choix'] = "Votre Prenom n'est pas valide (alphanumérique)";
}
if(empty($_FILES['monfichier']) ){
$errors['monfichier'] = "Fichier manquant";
}
if($_FILES['monfichier']['error'] > 0){
$errors['monfichier'] = "Fichier erreur";
}
if (($_FILES['monfichier']['size']) > 1048576)
{
$errors['taille'] = "Fichier trop volumineux (1Mo max)";
}
if ((isset($_FILES['monfichier'])) && ($_FILES['monfichier']['error'] == 0))
{
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'png', 'pdf');
if (in_array($extension_upload, $extensions_autorisees))
{
}
else
{
$errors['extension']="Extension de fichier non acceptée (jpg, jpeg, png, pdf)";
}
}
// Fin de verification de la validité des informations
// Changement de format de date à faire
// Fin de changement de format de date
// Envoi du fichier et enregistrement des informations dans la base de donnée
// Payeur -> Alex ou Pierre
if(empty($errors) && (($_POST['choix']=='Pierre_Bavoux') || ($_POST['choix']=='Alexandre_Pellet') )){
$req = $bdd->prepare('INSERT INTO releve SET Date_Enregistrement = ?, Date_achat=?, Description=?, Montant=?, Nom=?, Facture=? ');
$req->execute(array(
$_POST['date_enregistrement'],
$_POST['date_achat'],
$_POST['description'],
$_POST['montant'],
$_POST['choix'],
$_FILES['monfichier']['name']
));
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/'. basename($_FILES['monfichier']['name']));
header('Location: index.php');
exit();
}
// Payé en CB :
elseif(empty($errors) && ($_POST['choix']=='CB')){
$req = $bdd->query('SELECT Solde FROM CB WHERE ID=(SELECT MAX(ID) FROM CB) AS Derniersolde');
$donnees=$req->fetch();
$SOLDE = Derniersolde+$_POST['montant'];
$req = $bdd->prepare('INSERT INTO CB SET Date= ?,Description=?, Crédit=?, Débit=? ,Solde=? ');
$req->execute(array(
$_POST['date_enregistrement'],
$_POST['description'],
if $_POST['montant'] >=0{ // Cas Crédit
$_POST['montant'],
NULL,
}
else { // Cas Débit
NULL,
$_POST['montant'],
}
$SOLDE
));
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/'. basename($_FILES['monfichier']['name']));
header('Location: index.php');
exit();
}
//Payé en Cash
elseif($_POST['choix']=='Cash'){
$req = $bdd->query('SELECT Solde FROM Cash WHERE ID=(SELECT MAX(ID) FROM Cash) AS Derniersolde');
$donnees=$req->fetch();
$SOLDE = Derniersolde+$_POST['montant'];
$req = $bdd->prepare('INSERT INTO Cash SET Date= ?,Description=?, Crédit=?, Débit=? ,Solde=? ');
$req->execute(array(
$_POST['date_enregistrement'],
$_POST['description'],
if $_POST['montant'] >=0{ // Cas Crédit
$_POST['montant'],
NULL,
}
else { // Cas Débit
NULL,
$_POST['montant'],
}
$SOLDE
//SOLDE
));
header('Location: index.php');
exit();
}
else
// Erreurs
{
?>
<div class="alert alert-danger">
<p>Vous n'avez pas rempli le formulaire correctement</p>
<ul>
<?php foreach($errors as $error): ?>
<li><?= $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php
}
?>
Est-ce que quelqu'un voit une faute grossière qui peut être corrigée ?
Merci d'avance,
++
N'hésitez pas à visiter mon site en construction et à donner des avis :) Merci !! Lien : http://foxwork.esy.es/
Activer l'affichage des erreurs PHP (commencer par tester le code sur un environnement de développement ?) :
tes conditions tu ne peux ni les mettre comme ça dans un tableau et revoir la syntaxe d'un if, la condition s'entoure de parenthèses. Voir s'intéresser aux structures ternaires ici
$SOLDE = Derniersolde+$_POST['montant']; : Derniersolde est une constante que tu as défini ?
WHERE ID=(SELECT MAX(ID) FROM CB) en cas de concurrence, ça va mal finir ou alors la bdd est mal conçue
AS Derniersolde : un alias en clause WHERE ?!?
> Je pense que c'est un problème de syntaxe mais j'ai envie d'avoir vos avis.
Pourquoi nous demander nos avis quand PHP peut te les signaler directement ?
Non, franchement, commence par le début, apprends le langage et sur un environnement de développement, le but du forum ce n'est pas de jouer à chercher les 7 erreurs et de te les corriger.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli