Fatal error: Uncaught mysqli_sql_exception: Incorrect date value: '0-08/0-/20'

Résolu/Fermé
SohaibAdj - 13 oct. 2020 à 18:09
 SohaibAdj - 14 oct. 2020 à 04:17
salut

j'ai un problème d'insertion à la base de données mysql avec php, le message javascript ( est ajouté avec succés! ) s'affiche normalement mais au niveau de la bbd je ne trouve rien !
après le débogage de ce script j'ai constaté que l'erreur vient de la ligne que tu a cité ( ligne 53 )
le message d'erreur est : Fatal error: Uncaught mysqli_sql_exception: Incorrect date value: '0-08/0-/20' for column 'date_debut_sem' at row 1 in C:\...\ajouter_semestre.php on line 52
voici mon code php :

<?php 
session_start();
// appelle au code de connexion à la BDD
require_once("bdd.php");
$data=mysqli_query($db,"SELECT * from semestre"); 
$data1=mysqli_query($db,"SELECT * from formation"); 
 ?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" media="screen" href="CSS/ajout_utilisateur.css">
<title>Ajouter semestre</title>
</head>
<body style="background-color:#07415f;">
<div class="container" style="width:400px">
<p style="font-family: monospace;  letter-spacing:0px; color:#FFF; text-transform:uppercase; font-size:20px">AJOUTER UN SEMESTRE</p>
  <form  name=formu action="ajouter_semestre.php"  method="POST">            
<input type="text"  placeholder=" Session " maxlength="30" name="session" required value="<?php if (isset($_POST['session'])){echo $_POST['session'];} ?>"><br>
<input type="text" placeholder=" libelle du semestre " maxlength="30" name="libelle_semestre" required value="<?php if (isset($_POST['libelle_semestre'])){echo $_POST['libelle_semestre'];} ?>"><br>
<input type="date" placeholder="date debut semestre" value="<?php if (isset($_POST['date_debut_sem'])){echo $_POST['date_debut_sem'];} ?>" maxlength="10" name="date_debut_sem" id="date_debut_sem" class="calendrier" required onClick="ds_sh(this);"><br>
<input type="date" placeholder="date  Fin du semestre" value="<?php if (isset($_POST['date_fin_sem'])){echo $_POST['date_fin_sem'];} ?>" maxlength="10" name="date_fin_sem" id="date_fin_sem" class="calendrier" onClick="ds_sh(this);" required><br>
 
<select name="id_formation" required>
<option selected disabled value="">formation</option>
 
<?php while($a=mysqli_fetch_array($data1)){
echo '<option value="'.$a['id_formation'].'">'.$a['nom_formation'].'</option>';
}?></select><br>
<hr width="100%" style="height:2px; color:rgba(255,255,255,.7);"/> 
<input type="submit" value="Ajouter" name="Ajouter" class="btn_mod" style="width:100px"  onclick="compar()">
<a href="gestion_des_semestres.php" style="text-decoration:none"><input type="button" value="Retour" class="btn_mod" style="width:100px; height:31px;"></a>
</form> 
 
<?php
if(isset($_POST['libelle_semestre'])){//s'il a cliquer sur ajouter la 2eme fois
$id_formation=$_POST['id_formation'];
$session=$_POST['session'];
$libelle_semestre=$_POST['libelle_semestre'];
$date_debut_sem=$_POST['date_debut_sem'];
$date_fin_sem=$_POST['date_fin_sem'];
$compte=mysqli_fetch_array(mysqli_query($db,"SELECT count(*) as nb from semestre where libelle_semestre='$libelle_semestre' and id_formation='$id_formation'"));
$date_debut_sem = substr($date_debut_sem,6,4).'/'.substr($date_debut_sem,3,2).'/'.substr($date_debut_sem,0,2);
$date_fin_sem = substr($date_fin_sem,6,4).'/'.substr($date_fin_sem,3,2).'/'.substr($date_fin_sem,0,2);
$bool=true;
if($compte['nb']>0){
$bool=false;
?> <SCRIPT LANGUAGE="Javascript">	alert("Erreur d\'insertion, le semestre <?php echo $libelle_semestre;  ?> existe déja!"); </SCRIPT> <?php
 
 }
if($bool==true){
mysqli_query($db,"INSERT into semestre(libelle_semestre,session,date_debut_sem,date_fin_sem,id_formation) values ('$libelle_semestre','$session','$date_debut_sem','$date_fin_sem','$id_formation')");
?> <SCRIPT LANGUAGE="Javascript">	alert(" le semestre <?php echo $libelle_semestre;  ?>  est ajouté avec succés!"); </SCRIPT> 
<?php
		echo "<meta http-equiv='refresh' content='0; gestion_des_semestres.php' />";
}
}
?>
</div>
</body>
</html>

voici la ligne 52:
mysqli_query($db,"INSERT into semestre(libelle_semestre,session,date_debut_sem,date_fin_sem,id_formation) values ('$libelle_semestre','$session','$date_debut_sem','$date_fin_sem','$id_formation')");

personnellement je pense le probeme vient de la fonction substr() !! comment corrigé cela
et merci beaucoup si vous avez lu jusqu'à la .

4 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 oct. 2020 à 18:30
bonjour, qui a écrit cela?
sais-tu ce que contient $date_debut_sem?
sais-tu en quoi tu veux le transformer?
0
sur le formulaire contient mm/dd/yyyy ou mm-dd-yyyy je ne suis pas sur !!
je veut l'insérer une un champs de type date dans la bdd alors le rendre yyyy/mm/dd

j'ai entendu de la classe datetime mais je ne sais pas aussi comment l'utilité
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > SohaibAdj
13 oct. 2020 à 18:49
tu n'es pas sûr? qui a écrit le code du formulaire?
as-tu regardé la valeur de la date dans le message d'erreur, et, en analysant le code, as-tu reconstitué la valeur de départ?
tu peux aussi faire echo de la valeur d'une variable.
quelques conseils:
https://www.commentcamarche.net/infos/25899-forum-ccm-mode-d-emploi-demander-de-l-aide-pour-un-exercice/
https://www.commentcamarche.net/faq/3158-php-methodes-de-debogage
0
le message d'erreur c'est ça :
Fatal error: Uncaught mysqli_sql_exception: Incorrect date value: '0-08/0-/20' for column 'date_debut_sem' at row 1 in C:\...\ajouter_semestre.php on line 52
example :
j'ai insérer 01/02/3456
il m'affiche cette valeur 1-02/34/6-
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 oct. 2020 à 19:03
as-tu, avec la valeur de la date dans le message d'erreur, et, en analysant le code, reconstitué la valeur de départ?
tu peux aussi faire echo de la valeur d'une variable.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
13 oct. 2020 à 19:09
ceci peut t'aider à comprendre ce que fait le code que tu as écrit:
$avant="abcdefghijkl";
$apres=substr($avant,6,4).'/'.substr($avant,3,2).'/'.substr($avant,0,2);
echo $avant  . " => " .$apres;
0
example j'ai changé le type de input de "date " à "text" dans la ligne 21 et 22 ( voire le code )
et j'ai saisi manuellement 2019-09-13 dans le premier champ et 2020-01-18 dans le suivant
apres j'ai supprimé les deux ligne de la fonction
substr() 

et ça bien marché
alors !!
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 oct. 2020 à 19:23
très bien, tu progresses doucement.
ajoute
echo $_POST['date_debut_sem'];
, et observe ce qui se passe quand tu changes le type de l'input.
0
résolu - désolé pour l’embêtement
salut

ce code écrit depuis longtemps (php 5.x ) , j'ai voulu lui mette à jour , j'ai fais qlq changement concernant la classe mysql_ -> mysqli_
et vu que (php 7.x ) plus intelligent, il m'a gérer cette date sans aucune modification ( saisi à partir de mon formulaire <input type="date" ) vers la base de données (mysql-innobd-champs date NULL )
echo="$date_debut_sem,0,12"; 
-> m'a aidé de bien savoir ce que mon champs a mentionné .
alors j'ai supprimer les deux ligne 43 et 44
$date_debut_sem = substr($date_debut_sem,6,4).'/'.substr($date_debut_sem,3,2).'/'.substr($date_debut_sem,0,2);
$date_fin_sem = substr($date_fin_sem,6,4).'/'.substr($date_fin_sem,3,2).'/'.substr($date_fin_sem,0,2);

et hop ! ça marche très bien
merci yg_be
0