Base de données sql et problème de dates

Résolu/Fermé
remib74 Messages postés 15 Date d'inscription dimanche 25 novembre 2012 Statut Membre Dernière intervention 20 octobre 2015 - 28 nov. 2012 à 10:22
remib74 Messages postés 15 Date d'inscription dimanche 25 novembre 2012 Statut Membre Dernière intervention 20 octobre 2015 - 29 nov. 2012 à 00:37
Bonjour la communauté,
j'ai un petit problème avec ma base de données et une colonne date qui a changé de format.
En effet le format normal est par exemple 2012-08-27 et il se trouve que celui ci a été réécrit en 2027-08-12 vous remarquerez donc que le jour remplace le 12 de l'année et que le 12 de l'année remplace le jour.
Je teste en local un script destiné a réécrire mes dates dans le bon format tout en sachant que parmis mes quelques 600 dates une 30 aines sont restées valides.
malheureusement mon script ne fonctionne pas et soit les dates changent pour une valeur NULL soit elles prennent le format 000-00-00.

Je vous poste ici mon script, merci à ceux qui pourront m'apporter une réponse.
Bonne journée...

<?php
$bdd = mysql_connect('localhost', 'root', '');
mysql_select_db('solid_pro',$bdd);
mysql_query("SET NAMES 'utf8'");
$sql = 'SELECT * FROM sale ';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);



$i=0;
while($data= mysql_fetch_array($req) ){

$rest1 = substr($data["date_vente"], 0,2); // retourne 20
$rest2 = substr($data["date_vente"], 8,2); // retourne 12
$rest3 = substr($data["date_vente"], 5,2); // retourne -08-
$rest = substr($data["date_vente"], 2,2); // retourne 31

$datetoday=$data["date_vente"];
$datealso=date('2012-m-d');

if($datetoday!=$datealso){

//$neudate=$data["date_vente"];
$neudatea='2012-'.$rest3.'-'.$rest.'';
echo date($neudatea).'<br>';
$neudate=date($neudatea);
mysql_query('UPDATE sale SET date_vente='.$neudate.'');

}
else{
echo 'none';

}

}
?>


5 réponses

Utilisateur anonyme
28 nov. 2012 à 11:24
Bonjour
Il te manque des quotes autour de la date dans ta requête :
mysql_query('UPDATE sale SET date_vente="'.$neudate.'"'); 
1
De plus, ta ligne $neudate=date($neudatea); me semble complètement inutile, de même que le fait d'ajouter une chaîne vide à la fin d'une chaîne :
$neudatea='2012-'.$rest3.'-'.$rest.''; 

Et surtout, il te manque un WHERE dans ton update, sinon tu vas mettre la même date dans toute ta table !
0
Utilisateur anonyme
28 nov. 2012 à 13:41
Remets des - à la place des , dans les dates. Je me demande bien où tu es allé cherccher ces virgules...
par contre toutes les entrées date_vente de la table 'sale' passent en 2012-11-12 je me demande pourquoi mais cela a surement a voir avec le format de la colonne date
Si tu as partout la même date, c'est qu'il n'y a pas de WHERE dans ton UPDATE, donc l'update est appliqué à toute la table. La date que tu vois est la dernière traitée.
J'espère que tes lignes ont un "id" pour que tu puisses faire ' WHERE id='. $data[id]
1
remib74 Messages postés 15 Date d'inscription dimanche 25 novembre 2012 Statut Membre Dernière intervention 20 octobre 2015
Modifié par remib74 le 28/11/2012 à 11:40
Merci le père,
effectivement cela marche mieux.
mais j'obtiens un résultat étrange, a savoir que la fonction echo renvoit :
2012,08,31
2012,05,31
2012,05,31
2012,05,31
2012,04,30
donc les dates sont bien ordonnées
par contre toutes les entrées date_vente de la table 'sale' passent en 2012-11-12 je me demande pourquoi mais cela a surement a voir avec le format de la colonne date et l'entrée que j'essaye d'inserer en update. J'ai vue que certains convertissaient les chaine de caractères a l'aide de la fonction (strtotime).

J'ai un deuxième code ici qui donne le même résultat (2012-11-12)

<?php
$bdd = mysql_connect('localhost', 'root', '');
mysql_select_db('solid_pro',$bdd);
mysql_query("SET NAMES 'utf8'");
$sql = 'SELECT * FROM sale ';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);



$i=0;
while($data= mysql_fetch_array($req) ){

$rest1 = substr($data["date_vente"], 0,2); // retourne 20
$rest2 = substr($data["date_vente"], 8,2); // retourne 12
$rest3 = substr($data["date_vente"], 5,2); // retourne -08-
$rest = substr($data["date_vente"], 2,2); // retourne 31

$datetoday=$data["date_vente"];
$datealso=date('2012-m-d');

if($datetoday!=$datealso){

//$neudate=$data["date_vente"];
$neudatea='2012,'.$rest3.','.$rest.'';
echo date($neudatea).'<br>';
//$neudate=date($neudatea);
mysql_query('UPDATE sale SET date_vente="'.$neudatea.'"');
$i++;
}


}
?>

merci pour votre aide en tout cas
0
remib74 Messages postés 15 Date d'inscription dimanche 25 novembre 2012 Statut Membre Dernière intervention 20 octobre 2015
Modifié par remib74 le 28/11/2012 à 12:17
merci beaucoup pour ta réponse le père, je vais essayer de simplifier le code en retirant le superflue et l'inutile.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
remib74 Messages postés 15 Date d'inscription dimanche 25 novembre 2012 Statut Membre Dernière intervention 20 octobre 2015
28 nov. 2012 à 18:11
Merci le père pour tes infos, j'ai donc utiliser l'id comme repère et le script que je poste fonctionne bien qu'il provoque de nombreuses erreurs de type :
Notice: Use of undefined constant id - assumed 'id' in C:\wamp\www\new3.php on line 28, ce qui est surement du a ma syntaxe laborieuse en php (en fait je suis intégrateur).
merci encore et voila donc le script final.
A bientot

<?php 
$bdd = mysql_connect('localhost', 'root', ''); 
mysql_select_db('solid_pro',$bdd); 
mysql_query("SET NAMES 'utf8'"); 
$sql = 'SELECT * FROM sale '; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
$data = mysql_fetch_array($req); 



$i=0; 
while($data= mysql_fetch_array($req) ){ 

$rest1 = substr($data["date_vente"], 0,2); // retourne 20 
$rest2 = substr($data["date_vente"], 8,2); // retourne 12 
$rest3 = substr($data["date_vente"], 5,2); // retourne -08- 
$rest = substr($data["date_vente"], 2,2); // retourne 31 

$datetoday=$data["date_vente"]; 
$datealso=date('2012-m-d'); 

if($datetoday!=$datealso){ 

//$neudate=$data["date_vente"]; 
$neudatea='2012-'.$rest3.'-'.$rest; 
echo date($neudatea).'<br>'; 
//$neudate=date($neudatea); 
mysql_query('UPDATE sale SET date_vente="'.$neudatea.'" WHERE id="'.$data[id].'"'); 

} 


} 
?> 
0
Utilisateur anonyme
28 nov. 2012 à 19:21
C'est ma faute, je t'avais écrit $data[id] alors que c'est $data['id'].
0
remib74 Messages postés 15 Date d'inscription dimanche 25 novembre 2012 Statut Membre Dernière intervention 20 octobre 2015
29 nov. 2012 à 00:37
pas de problème d'ailleurs j'aurai du trouver ça tout seul, le fait est que ton aide m'a été véritablement précieuse alors merci encore et bonne soirée
0