Soucis de date en Php/Oracle

Fermé
MarineDbt Messages postés 4 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 7 mai 2014 - 30 avril 2014 à 17:11
MarineDbt Messages postés 4 Date d'inscription mercredi 30 avril 2014 Statut Membre Dernière intervention 7 mai 2014 - 1 mai 2014 à 00:17
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 vendredi 26 avril 2013 Statut Membre Dernière intervention 1 juillet 2014 84
30 avril 2014 à 17:22
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 mercredi 30 avril 2014 Statut Membre Dernière intervention 7 mai 2014
Modifié par MarineDbt le 30/04/2014 à 17:43
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 mercredi 30 avril 2014 Statut Membre Dernière intervention 7 mai 2014
1 mai 2014 à 00:17
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