Date par defaut sur postgresql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Date par defaut sur postgresql

par Maitrepylos » 12 août 2005, 09:33

Bonjour,

Désolé d'avoir été grossier avec toi.
Pratique comme réponse pour trouver l'erreur...
Mais tu m'a pris de court et je n'ai pas voulu partir sans essayer ta derniére solution.

En ce qui concerne le problème en question dans PostgreSql, si je tiens compte de ta remarque suivante:
Tu mélanges tout: on est pas encore arrivé au SGBD, on est en PHP et on construit une requête:
,il m'est alors impossible de mettre une variable sans les apostrophes
'".$sortie."'
du coup impossible de mettre NULL sans qu'il soit considéré comme une chaine de caratére.

J'ai fais ceci mais c'est long et fastidieux mais cela fonctionne
					if ($_SESSION[DateEntree] && $_SESSION[DateSortie] && $_SESSION[DateF70bis]) 
				{
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]','$_SESSION[DateEntree]','$_SESSION[DateSortie]','$_SESSION[DateF70bis]' )";
				}
				
				elseif ($_SESSION[DateEntree] && $_SESSION[DateSortie] && $_SESSION[DateF70bis]=="") 
						{		
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]','$_SESSION[DateEntree]','$_SESSION[DateSortie]',NULL )";
						}
						
				elseif ($_SESSION[DateEntree] && $_SESSION[DateSortie]=="" && $_SESSION[DateF70bis]=="") 
						{		
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]','$_SESSION[DateEntree]',NULL,'NULL )";
						}
					
				elseif ($_SESSION[DateEntree]=="" && $_SESSION[DateSortie]=="" && $_SESSION[DateF70bis]=="") 
						{		
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]',NULL,NULL,NULL )";
						}
						
				elseif ($_SESSION[DateEntree]=="" && $_SESSION[DateSortie] && $_SESSION[DateF70bis]) 
						{
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]',NULL,'$_SESSION[DateSortie]','$_SESSION[DateF70bis]' )";
						}
						
								
				elseif ($_SESSION[DateEntree]=="" && $_SESSION[DateSortie]=="" && $_SESSION[DateF70bis]) 
						{
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]',NULL,NULL,'$_SESSION[DateF70bis]' )";
					}

					elseif ($_SESSION[DateEntree]=="" && $_SESSION[DateSortie]=="" && $_SESSION[DateF70bis]=="") 
						{
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]',NULL,NULL,NULL )";
					}	

					elseif ($_SESSION[DateEntree] && $_SESSION[DateSortie]=="" && $_SESSION[DateF70bis]) 
						{
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]','$_SESSION[DateEntree]',NULL,'$_SESSION[DateF70bis]' )";
						}
						
						elseif ($_SESSION[DateEntree]=="" && $_SESSION[DateSortie] && $_SESSION[DateF70bis]=="") 
						{
	
			$sql3 = "INSERT INTO dossier (idparticipant,  dosentree, dossortie, dosdatef70bis) VALUES ('$id[0]',NULL,'$_SESSION[DateSortie]',NULL )";
					}	
Voila ma solution.

Merci de ton aide et encore désolé de na pas t'avoir répondu correctement.

MaitrePylos

par Cyrano » 09 août 2005, 17:43

pas mieux désolé.
Pratique comme réponse pour trouver l'erreur... Mais ça fonctionne chez moi: si ça ne fonctionne pas de ton coté, c'est que l'erreur est en amont dans ton code. Enfin bon.....

par Maitrepylos » 09 août 2005, 16:36

pas mieux désolé.

merci de ton aide

à bientôt.

par Cyrano » 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.

par Maitrepylos » 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

par Cyrano » 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.

par Maitrepylos » 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)

par Cyrano » 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)

par Maitrepylos » 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 " "

par Cyrano » 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.

par Maitrepylos » 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

par Cyrano » 09 août 2005, 14:14

$sortie = isset($_SESSION[DateSortie]) ? $_SESSION[DateSortie] : "NULL";
$sqlessai = "INSERT INTO dossier (idparticipant, dossortie) VALUES ($id[0],".$sortie  .")";

par Maitrepylos » 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.

par Cyrano » 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.

par Maitrepylos » 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