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

Code : Tout sélectionner

Erreur SQL : ERROR: invalid input syntax for type date: ""
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

Code : Tout sélectionner

INSERT INTO ........ (champ_date, ...) VALUES ('Null',...)
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:

Code : Tout sélectionner

INSERT INTO ........ (champ_date, ...) VALUES (Null,...)
À essayer en tous cas.

Posté : 09 août 2005, 14:01
par Maitrepylos

Code : Tout sélectionner

INSERT INTO ........ (champ_date, ...) VALUES (Null,...)
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.