Soucis de date en Php/Oracle

MarineDbt Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
MarineDbt Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, plutôt débutante en Php, je me trouve face à une problème, et j'avoue qu'après avoir tout fait pour essayer de le résoudre je commence à être à court d'idée.

Ce que j'essaye de faire, c'est un formulaire pour rajouter un enfant(caractérisé par son nom, son prénom, et entre autre son age) dans une base de donnée oracle.

Sauf qu'au niveau de l'age j'ai un soucis. La requête ne s'execute pas...

Le formulaire :

<form method="post" action="rajouenfscript.php" >  


<p>

<input type="text" name="nom" />Nom de l'enfant* </br> <!--nommer correctement vos balises avec name="nom de votre données"
cela nous permettra de savoir quelle information on veut récupérer -->

<input type="text" name="prenom" />Prénom de l'enfant*</br>
Date de naissance* :</br>
<input type="date" name="date_nai"></br>

Sexe* :</br>
<input type="radio" name="sexe" value="FEMININ">Fille<br>
<input type="radio" name="sexe" value="MASCULIN">Garçon</br>

</br>
* = champ obligatoire

</br>
</div>
<input type="submit" value="Valider" /> <!-- confirme que nous avons de finir de remplir le formulaire -->
</p>
</form>



Et le traitement du formulaire.

<?php




// connexion à oracle


try {
$db = new PDO('oci:dbname=v240.ig.polytech.univ-montp2.fr/ora10',
'marine.dubedat','oracle');
}

catch(PDOException $e) {
/* ce "catch" sert à rattraper les cas où la connexion échoue */
$db = null;
print("Connexion à la base de données impossible !");
exit(1);
}


$pseudo=$_COOKIE['nom'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$date_nai=$_POST['date_nai'];
$sexe=$_POST['sexe'];



if ((isset($_COOKIE['nom'])) && (isset($_POST['nom'])) && (isset($_POST['prenom'])) && (isset($_POST['date_nai']) ) && (isset($_POST['sexe']) )){

$req=$db->prepare("INSERT INTO ENFANT (nomenfant, prenomenfant, pseudoparent, date_nai_enf, sexe)
VALUES(:nom,:prenom,:pseudo,:date, :sexe)");


$req->bindValue(':nom', $nom,PDO::PARAM_STR);

$req->bindValue(':prenom', $prenom,PDO::PARAM_STR);

$req->bindValue(':pseudo', $pseudo,PDO::PARAM_STR);


$req->bindValue(':date', $date_nai,PDO::PARAM_STR);

$req->bindValue(':sexe', $sexe,PDO::PARAM_STR);
}


if($req->execute()){
echo "ok";
//header("Location: succesinscription.php",true);
exit;
}
else
{
print_r($req->errorInfo());
echo "KO";
//header("Location: erreurinscription.php",true);
}

$db = null; // on ferme la connection


?>



Je suis toujours renvoyée dans le "KO"... Si vous aviez la moindre solution vous me sauveriez la vie :)
A voir également:

3 réponses

bart8686 Messages postés 81 Date d'inscription   Statut Membre Dernière intervention   84
 
Bon je ne m'y connais pas trop mais je vais essayer d'aider :)

Dans ta base, la date_nai est de type date ?

Sinon essaies de passer par une variable pour changer ton type date en type string ?

Car je pense que le soucis vient du fais que tu es une date et tu fais PARAM_STR
0
MarineDbt Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Je pense m'y connaitre encore moins que toi !
Oui dans ma base c'est un type date.

Et j'ai des amis plus calés que moi qui se sont penchés la dessus, ils ont pensé à cette erreur et ont vérifié apparemment ça serait bien un PARAM_STR qu'il faudrait. Je viens également de regarder ici : https://stackoverflow.com/questions/2374631/pdoparam-for-dates
0
MarineDbt Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai tenté une autre méthode, toujours infructueuse :

<?php




// connexion à oracle


try {
$db = new PDO('oci:dbname=v240.ig.polytech.univ-montp2.fr/ora10',
'marine.dubedat','oracle');
}

catch(PDOException $e) {
/* ce "catch" sert à rattraper les cas où la connexion échoue */
$db = null;
print("Connexion à la base de données impossible !");
exit(1);
}


$pseudo=$_COOKIE['nom'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$date_nai=$_POST['date_nai'];

$sexe=$_POST['sexe'];

$TEMP=explode('-',$date_nai);
$datetest=$TEMP['2'].'/'.$TEMP['1'].'/'.$TEMP['0'];
//echo $datetest;

if ((isset($_COOKIE['nom'])) && (isset($_POST['nom'])) && (isset($_POST['prenom'])) && (isset($_POST['date_nai']) ) && (isset($_POST['sexe']) )){

$req=$db->prepare("INSERT INTO ENFANT (nomenfant, prenomenfant, pseudoparent, date_nai_enf, sexe)
VALUES(:nom,:prenom,:pseudo,TO_DATE(':date','dd/mm/yyyy'), :sexe)");


$req->bindValue(':nom', $nom,PDO::PARAM_STR);

$req->bindValue(':prenom', $prenom,PDO::PARAM_STR);

$req->bindValue(':pseudo', $pseudo,PDO::PARAM_STR);


$req->bindValue(':date', $datetest,PDO::PARAM_STR);

$req->bindValue(':sexe', $sexe,PDO::PARAM_STR);
}


if($req->execute()){
echo "ok";
//header("Location: succesinscription.php",true);
exit;
}
else
{
print_r($req->errorInfo());
echo "KO";
//header("Location: erreurinscription.php",true);
}

$db = null; // on ferme la connection


?>



Et voila l'erreur renvoyée :

Array ( [0] => HY000 [1] => 1858 [2] => OCIStmtExecute: ORA-01858: Caractère non numérique trouvé à la place d'un caractère numérique (ext\pdo_oci\oci_statement.c:148) ) KO
0