Page 1 sur 1

Problème avec l'insertion de la date dans ma BDD

Posté : 19 mai 2009, 10:03
par Ariochs
Bonjour. Alors voila apres l'upload d'un fichier, j'aimerai quand la BDD la date de l'upload du document soit ajouté. Petit problème, dans ma BDD j'ai toujours : 0000-00-00

Voici le code :
//On teste si le formulaire est validé
			if(isset($_POST['ok'])){
				
				if(!empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['mail'])){

				// Teste si le fichier a bien été envoyé et s'il n'y a pas d'erreur
				if (isset($_FILES['cv']) AND $_FILES['cv']['error'] == 0)
				{
						// Teste si le fichier n'est pas trop gros
						if ($_FILES['cv']['size'] <= 5242880)
						{
								// Teste si l'extension est autorisée
								$infosfichier = pathinfo($_FILES['cv']['name']);
								$extension_upload = $infosfichier['extension'];
								$extensions_autorisees = array('txt', 'doc', 'xls', 'xlsx', 'docx');
								if (in_array($extension_upload, $extensions_autorisees))
								{		
										$nom = $_POST['nom'];
										
										$cv = "../cv/$nom"."_".$_FILES['cv']['name'];
										
										// replace les caractères accentués 
										$accents = '/&([A-Za-z]{1,2})(grave|acute|circ|cedil|uml|lig);/';
										//permet entre autre d'éviter quelques injections de code
										$cv_encoded = htmlentities($cv,ENT_NOQUOTES,'UTF-8');
										$cv = preg_replace($accents,'$1',$cv_encoded); 
										
										// On peut valider le fichier et le stocker définitivement
										move_uploaded_file($_FILES['cv']['tmp_name'], $cv);
										//echo "L'envoi a bien été effectué !";
										
										$prenom = $_POST['prenom'];
										$mail = $_POST['mail'];
										$contenu = $_POST['contenu'];
										$date = date("d-m-Y");
													
										//Mise à jour de l'image
										$sql = "INSERT INTO recrutement (nom,prenom,mail,cv,contenu,date) VALUES ('$nom' , '$prenom' , '$mail' , '$cv' , '$contenu' , '$date')";
										mysql_query($sql) or die(mysql_error());	
								}
Pourtant quand je fais un echo la date s'affiche bien.. Ai je mal configuré ma table ? (vu que je l'ai jamais fait c'est possible. Dans type j'ai bien mis DATE, mais aucune valeur)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 19 mai 2009, 10:12
par stopher
Slt ,

Par defaut , la date est sous le format suivant :

AAAA-MM-DD

donc :
date("Y-m-d");
Ça devrai passer ..


Note: ton script tel qu'il est présenté là , est sujet aux failles d'injections SQL , n'hésites pas à utiliser au minimum la fonction mysql_real_escape_string()


Ch.

Posté : 19 mai 2009, 10:44
par Ariochs
Sa me dit toujours pas pourquoi j'ai 0000-00-00 qui s'affiche en date dans la BDD ^^

Sinon je suis pas trop sur d'avoir compris la fonction mysql_real_escape_string() .. Elle parait utile, mais une petite explication claire serait la bienvenue.

Je dois tranformer mon INSERT en :
$sql = "INSERT INTO recrutement (nom,prenom,mail,cv,contenu,date) VALUES ('mysql_real_escape_string($nom)' , 'mysql_real_escape_string($prenom)' , 'mysql_real_escape_string($mail)' , 'mysql_real_escape_string($cv)' , 'mysql_real_escape_string($contenu)' , 'mysql_real_escape_string($date)')";
??

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 19 mai 2009, 10:50
par stopher
Sa me dit toujours pas pourquoi j'ai 0000-00-00 qui s'affiche en date dans la BDD ^^
Simplement que mysql veut absolument son format défini AAAA-MM-DD , si c'est un autre format , il met des 0 .

Ce format doit être modifiable , voir doc mysql.
Sinon je suis pas trop sur d'avoir compris la fonction mysql_real_escape_string() .. Elle parait utile, mais une petite explication claire serait la bienvenue.

Je dois tranformer mon INSERT en :
$sql = "INSERT INTO recrutement (nom,prenom,mail,cv,contenu,date) VALUES ('mysql_real_escape_string($nom)' , 'mysql_real_escape_string($prenom)' , 'mysql_real_escape_string($mail)' , 'mysql_real_escape_string($cv)' , 'mysql_real_escape_string($contenu)' , 'mysql_real_escape_string($date)')";
??
Celà te permet de rendre les injections de code SQL , inefficaces , principalement en ajoutant des "" devant certains caractères qui auraient tendance à modifier ta requête .. (injection sql)

Posté : 19 mai 2009, 10:57
par geoffroy
Pour la date,
tu peux soit la récupérer depuis php comme dit stopher,
soit la récupérer depuis MySQL en utilisant la fonction CURRENT_DATE().
$sql = "INSERT INTO recrutement (nom, prenom ,mail, cv, contenu,date) VALUES ('mysql_real_escape_string($nom)' , 'mysql_real_escape_string($prenom)' , 'mysql_real_escape_string($mail)' , 'mysql_real_escape_string($cv)' , 'mysql_real_escape_string($contenu)' , CURRENT_DATE())";

Posté : 19 mai 2009, 11:23
par Ariochs
Pour la date,
tu peux soit la récupérer depuis php comme dit stopher,
soit la récupérer depuis MySQL en utilisant la fonction CURRENT_DATE().
Mici avec la fonction CURRENT_DATE() ça fonctionne ^^

Sinon dans mon exemple jai bien utilisé mysql_real_escape_string ? Est ce réellement utile pour l'envoi d'un formulaire qui n'est pas une inscription et ou il n'y a pas d'inscription sur le site (je n'ai pas d'user) ?

En tout cas, merci pour votre aide.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 19 mai 2009, 11:41
par stopher
Pour la date,
tu peux soit la récupérer depuis php comme dit stopher,
soit la récupérer depuis MySQL en utilisant la fonction CURRENT_DATE().
Mici avec la fonction CURRENT_DATE() ça fonctionne ^^

Sinon dans mon exemple jai bien utilisé mysql_real_escape_string ? Est ce réellement utile pour l'envoi d'un formulaire qui n'est pas une inscription et ou il n'y a pas d'inscription sur le site (je n'ai pas d'user) ?

En tout cas, merci pour votre aide.
Même si ce sont toujours des gens de confiance qui entres les données du formulaire , il faut toujours sécuriser un minimum ce qui provient des formulaires ... et même ce qui provient du code lui même ...

Ne jamais faire confiance à un user ou un bout de code , t'évitera certainement des surprises dans le futur ..

C'est une bonne habitude à prendre ..

Si tu ne veux pas toujours avoir besoin d'utiliser mysql_real_escape_string , tu peux utiliser les requetes préparées via PDO , qui sécurise pour toi les données entrantes automatiquement .

En espérant avoir répondu à ta question ,

Ch.