Page 1 sur 1

Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 23 mars 2017, 23:28
par ninouee
Bonjour à tous!

Je suis à le recherche d'information qui pourraient m'aider à comprendre et résoudre une erreur que j'ai fait.

Voila, j'ai un formulaire de saisie qui permet d'entrer des informations sur une personne tel que nom, date de naissance, nationalité, date de décès...

Le formulaire se comporte bien seulement quand les éléments dates, c'est à dire naissance son complétés.
Si je saisi un nom, un prénom, ça marche pas.
Si je saisi un nom et une date de naissance, ça marche pas.
Si je saisi tout ça marche et pareille avec seulement les dates.

Je travaille avec Mysql 5.7.9 et PHP 5.6.25.

Mes colonnes de dates ont été créées de cette manière:
Type : date
Valeur par défaut : null
Null : coché

Auriez-vous un tutoriel que je pourrais lire afin de comprendre mon problème?

Merci à vous.

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 24 mars 2017, 11:43
par Spols
Pourrais tu nous montrer ton code, sans cela nous ne pouvons pas facilement t'aider

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 24 mars 2017, 12:38
par moogli
salut,

j'ajouterais qu'a priori le problème se situe dans la partie php qui valide le formulaire.
Plus précisément dans la partie de validation des dates et peut être dans l'ordre des if / else.

Pour plus il faut le code (oui je répète Spols :))

@+

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 24 mars 2017, 21:41
par ninouee
Bonjour Spols et moogli

Je pensais que mon problème viendrait certainement d'une erreur de base de débutant dont je ne connais pas le nom lol

Voila les codes, ils sont divisés sur deux fichiers.

Index php

<form action="personnalite.php" method="post">
        <p>
       <label for="nom">Nom</label> : <input type="text" name="nom" id="nom" /><br />
        
       <label for="prenom">Prénom</label> :  <input type="text" name="prenom" id="prenom"/><br />
        
       <label for="prenom2">Prénom 2</label> :  <input type="text" name="prenom2" id="prenom2"/><br />
        
       <label for="surnom">Surnom</label> :  <input type="text" name="surnom" id="surnom"/><br />
        
       <label for="Vprenom1">Vraie prénom 1</label> :  <input type="text" name="Vprenom1" id="Vprenom1"/><br />
        
       <label for="Vprenom2">Vraie prénom 2</label> :  <input type="text" name="Vprenom2" id="Vprenom2"/><br />
        
       <label for="Vnom">Vraie nom</label> :  <input type="text" name="Vnom" id="Vnom"/><br />
       
       <label for="naissance">Date de naissance</label> :   <input type="text" name="naissance" id="naissance"/><br />
       
       <label for="mort">Date de décès</label> :   <input type="text" name="mort" id="mort"/><br />
       
 


<label for="sexe_id">Sexe H/F</label> <select name="sexe_id" id="sexe_id">
		
        
        <?php

include ('cnxBdd.php');


$sexe = $bdd -> query('select sexMin, sexe_id, snom
from sexe
order by snom ASC');

while ($donnees = $sexe->fetch()) {
    echo '<option value="',$donnees['sexe_id'],'"';
    if (!empty($_POST['sexe']) && $_POST['sexe'] == $donnees['sexe_id']) {
        echo ' selected="selected"';
    }
    echo '>', $donnees['snom'],'</option>';
}
		$sexe->closeCursor();
			
			?>
			</select>  <br />

       <label for="photo">Lien photo</label> :   <input type="text" name="photo" id="photo"/><br />
      
       <label for="PersonnaliteLien">Lien sujet</label> :  <input type="text" name="PersonnaliteLien" id="PersonnaliteLien"/><br />
        
       <label for="PersonnaliteAvatar">Avatar</label> :  <input type="text" name="PersonnaliteAvatar" id="PersonnaliteAvatar"/><br />
        

        <input type="submit" value="Envoyer" />
	</p>
    </form>

personnalite.php
<?php
// Connexion à la base de données
include ('cnxBdd.php');

// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('
INSERT INTO personnalite (
	nom, 
	prenom, 
	prenom2, 
	surnom, 
	Vprenom1, 
	Vprenom2, 
	Vnom, 
	naissance, 
	mort, 
	sexe_id,
	photo, 
	PersonnaliteLien, 
	PersonnaliteAvatar) 
	
VALUES(?, ?, ?, ?, ?, ?, ?, str_to_date(?, "%d/%m/%Y"), str_to_date(?, "%d/%m/%Y"), ?, ?, ?, ?)');


$req->execute(array(
	$_POST['nom'], 
	$_POST['prenom'], 
	$_POST['prenom2'], 
	$_POST['surnom'] , 
	$_POST['Vprenom1'], 
	$_POST['Vprenom2'], 
	$_POST['Vnom'], 
	$_POST['naissance'], 
	$_POST['mort'], 
	$_POST['sexe_id'], 
	$_POST['photo'], 
	$_POST['PersonnaliteLien'], 
	$_POST['PersonnaliteAvatar']));





// Redirection du visiteur vers la page 
header('Location: index.php');
?>
Vous pensez que ça pourrait être un problème de SQL genre le format des données vide envoyés feraient une erreur vers le serveur?

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 24 mars 2017, 23:28
par Spols
Il faut que tu controle les entrées, il est très imprudent de les insérer directement en bdd.

De plus le format de la date est complètement incertain.

la solution basique serait de remplacer
$_POST['naissance']
par
(empty($_POST['naissance']) ? NULL : $_POST['naissance'])

et pareil pour les autres dates mais je te conseillerai vraiment de faire un traitement complet des données recues avant enregistrement en bdd

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 24 mars 2017, 23:47
par ninouee
Merci Spols e effet ça corrige mon problème.

Toutefois ce que tu conseille m'intrigue. Contrôler les données, format de date incertain, traitement complet des données.

Je ne comprend pas.

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 25 mars 2017, 17:51
par Spols
Si quelqu'un rempli ton formulaire avec n'importe quelle donnée, il y aura un enregistrement dans ta bdd, en controlant le format de tes dates, le contenu des champs tu peux empecher les utilisations non-voulue de ton formulaire.

Je ne connais pas l'utilisation de ce formulaire ni sa portée pour être plus précis, mais en règle générale, ne jamais faire confiance aux données envoyées par l'utilisateur, toujours les controler avant de les utiliser.

Re: Formulaire avec date qui ne fonctionne pas quand le champ est vide

Posté : 27 mars 2017, 22:31
par ninouee
Je n'ai pas encore vu comment faire un module de connexion aux formulaires de saisie et j'avoue ne pas avoir réfléchie si je serais seul ou si nous serons plusieurs à avoir accès à la base.

Je vais rechercher ce que tu me conseille. Merci.