Fatal error: Uncaught mysqli_sql_exception: Incorrect date value: '0-08/0-/20' [Résolu]

Signaler
-
 SohaibAdj -
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

Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701
bonjour, qui a écrit cela?
sais-tu ce que contient $date_debut_sem?
sais-tu en quoi tu veux le transformer?
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é
Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701 > SohaibAdj
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/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm
https://www.commentcamarche.net/faq/3158-php-methodes-de-debogage
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-
Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701
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.
Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701 >
Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020

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;
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 !!
Messages postés
12613
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
14 octobre 2020
701
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.
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