Page 1 sur 2
Date par defaut sur postgresql
Posté : 09 août 2005, 11:15
par Maitrepylos
Bonjour, je voudrais mettre une valeur 'Null' dans un champ 'Date',
Tous ce que je trouve sur les forums, c'est qu'on dit de mettre "0000-01-01", par defaut, or si je dois faire des calculs sur des champs date, ce genre de defaut ne m'arrange guére.
Auriez-vous une idée?
Merci
Posté : 09 août 2005, 11:46
par Cyrano
Je n'ai jamais utilisé PostGreSQL, mais je serais surpris qu'on ne puisse pas mettre le champ à NULL par défaut, même pour un champ date. Ça te retroune une erreur ?
Posté : 09 août 2005, 12:06
par Maitrepylos
si je modifie ma table en Not Null avec default NULL cela passe, mais alors une variables passé avec Null en valeur donne ceci
Code : Tout sélectionner
Erreur SQL :
ERROR: invalid input syntax for type date: "NULL"
et une variable vide donne ceci
donc rien ne passe , ou alors je m'y prend mal
Posté : 09 août 2005, 12:13
par Cyrano
Est-ce que par hasard tu n'enverrais pas une insertion avec quelque chose du genre
Si c'est ça, le fait de mettre "null" entre apostrophe le fait traiter en chaine de caractère, ce qui n'est bien entendu pas un type DATE valide, donc il te jette. Il faudrait faire à la place:
À essayer en tous cas.
Posté : 09 août 2005, 14:01
par Maitrepylos
ok ça ça marche, parfait,
seulement voila, moi je rentre mes données via la variables $_session, comme ceci
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],".$_SESSION[DateSortie]."')";
et cette variable prends comme valeur ' "" ' quand elle est vide, je ne peut pas mettre 'Null', parceque dans mon code je vérifie si la date est entré dans le bon format par un ereg.
peut être que je devrais vérifier si ma variable est vide et lui donner la valeur 'null' avant de faire un sql.
Posté : 09 août 2005, 14:14
par Cyrano
$sortie = isset($_SESSION[DateSortie]) ? $_SESSION[DateSortie] : "NULL";
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],".$sortie .")";
Posté : 09 août 2005, 14:27
par Maitrepylos
désolé d'être contrariant mais
$sortie = isset($_SESSION[DateSortie]) ? $_SESSION[DateSortie] : "NULL";
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ('$id[0]','".$sortie.")";
if (pg_query($sqlessai)){echo 'Insertion essai OK'."<br>";}
donne
Code : Tout sélectionner
Warning: pg_query(): Query failed: ERROR: invalid input syntax for type date: "" in /var/www/Ekoke/Inc/NewInscription3Inc.php on line 617 et ce quelque soit la forme entre guillemet ou non
Posté : 09 août 2005, 15:02
par Cyrano
TU as refait exactement la même erreur qu'au début :
...('$id[0]','".$sortie.")
il y a une apostrophe surnuméraire après la virgule entre $id et $sortie
...(". $id[0] .",".$sortie.")
On peut même enlever les apostrophes autour de $id[0] si c'est un entier.
Posté : 09 août 2005, 15:11
par Maitrepylos
Si j'enlève les apostrophes et fais comme ceci
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],".$sortie.")";
je reçois ceci comme erreur
Code : Tout sélectionner
Warning: pg_query(): Query failed: ERROR: syntax error at or near ")" at character 59 in /var/www/Ekoke/Inc/NewInscription3Inc.php on line 617
sous postgres je pense que je suis obligé de mettre les apostrophe
sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],'".$sortie."')";
, mais alors là il ne reconnais pas le NULL mais " "
Posté : 09 août 2005, 15:20
par Cyrano
Tu mélanges tout: on est pas encore arrivé au SGBD, on est en PHP et on construit une requête: ajoutes une ligne echo($sql) en dessous, tu verras bien :
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES (". $id[0] .",".$sortie.")";
echo($sqlessai);
ce qui va arriver ensuite au SGBD sera :
Code : Tout sélectionner
INSERT INTO dossier (idparticipant, dossortie) VALUES (1234,12345)
Ou bien encore:
Code : Tout sélectionner
INSERT INTO dossier (idparticipant, dossortie) VALUES (1234,NULL)
Posté : 09 août 2005, 15:56
par Maitrepylos
en suivant tes conseils voila le echo
INSERT INTO dossier (idparticipant, dossortie) VALUES (59,)
donc il ne met rien il faudrait avoir NULL après la virgule
INSERT INTO dossier (idparticipant, dossortie) VALUES (59,NULL)
Posté : 09 août 2005, 16:05
par Cyrano
BOn, on va prendre le taureau par les cornes, sinon on va y passer la nuit:
<?php
$sortie = isset($_SESSION[DateSortie]) ? $_SESSION[DateSortie] : NULL;
if($sortie != null)
{
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES (". $id[0] .",". $sortie .")";
}
else
{
$sqlessai = "INSERT INTO dossier (idparticipant) VALUES (". $id[0] .")";
}
?>
Si ça marche pas avec ça, c'est que l'erreur est bien avant dans le code.
Posté : 09 août 2005, 16:22
par Maitrepylos
ben oui ça marche, mais bon j'ai 3 dates différentes dans ma tables, tu imagines le boulot, soit j'ai deux jours de repos là, je vais chercher et si j'ai un réponse je la poste vendredi.
Un grand merci pour ton aide et passe une bonne soirée.
MaitrePylos
Posté : 09 août 2005, 16:32
par Cyrano
Ceci dit, je viens de remonter dans le sujet et j,avis pas remarqué un détail: essaye avec ça :
<?php
$sortie = isset($_SESSION['DateSortie']) ? $_SESSION['DateSortie'] : "NULL";
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],".$sortie .")";
echo($sqlessai);
?>
J'ai rajouté des apostrophes oubliées sur les index de variable de session.
Posté : 09 août 2005, 16:36
par Maitrepylos
pas mieux désolé.
merci de ton aide
à bientôt.