Date par defaut sur postgresql

Mammouth du PHP | 1029 Messages

09 août 2005, 11:15

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

Mammouth du PHP | 19672 Messages

09 août 2005, 11:46

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 12:06

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
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

09 août 2005, 12:13

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 14:01

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.
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

09 août 2005, 14:14

$sortie = isset($_SESSION[DateSortie]) ? $_SESSION[DateSortie] : "NULL";
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],".$sortie  .")";
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 14:27

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
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

09 août 2005, 15:02

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 15:11

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 " "
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

09 août 2005, 15:20

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)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 15:56

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)
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

09 août 2005, 16:05

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 16:22

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
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 19672 Messages

09 août 2005, 16:32

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1029 Messages

09 août 2005, 16:36

pas mieux désolé.

merci de ton aide

à bientôt.
L'expérience est la somme de toutes nos erreurs.