Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/10/2006, 16h21   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 27
Points : 4
Points : 4
Par défaut [PostGreSQL] Requête d'insertion qui ajoute des champs vides

Bonjour,

J'ai deux petit souci que je n'arrive pas à résoudre.

Tout d'abord, J'ai un souci sur l'éxecution des requête Insert. En effet, si j'ai un champs non rempli, j'ai alors le message suivant " Warning: pg_query(): Query failed: ERROR: invalid input syntax for integer: "" ". A priori cela ne touche que les champs numérique.

Voici mon bout de code :

Partie fonction :

Code :
1
2
3
4
5
6
7
 
ConnectBD();
 $sql = "INSERT INTO schema_gestion_cimetco.$table ($champs) VALUES ($variable)";
 pg_query($sql);
 $id = pg_insert_id();
 DisconnectBD();
 return $id;
Partie appli
Code :
1
2
3
4
5
6
7
8
9
10
 
$table = "coordonne";
        $variable = "'".$_POST["adresse1"]."','".$_POST["adresse2"]."','".$_POST["code_postal"]."','"
                    .$_POST["ville"]."','".$_POST["tel1"]."','".$_POST["tel2"]."','".$_POST["tel3"]."','"
                    .$_POST["fax"]."','".$_POST["mail"]."','".$_POST["web"]."','1'";
        $champs ="adresse1_coordonne, adresse2_coordonne, codepostal_coordonne, ville_coordonne, 
                  tel1_coordonne, tel2_coordonne, tel3_coordonne, fax_coordonne, mail_coordonne, 
                  siteweb_coordonne, id_type_coordonne";
        echo $variable;
        $idCoordonne = ReqInsertion($table, $variable, $champs);
Mon deuxième problème concerne pg_insert_id(). Cela ne fonctionne pas. Seriez vous comment je dois l'utilisé ?

Merci et bonne journée.

Ludo
civodultrebor37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 23h43   #2
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Le warning apparait parceque tu tentes d'inserer la chaine vide dans une colone de type entier. Donc forcément, cela ne fonctionne pas.

Pour éviter ce genre de désagréments, il faut tester la valeur, si c'est un entier, tu le laisses tel quel sinon tu fais ce qui faut ( erreur utilisateur, insertion de la valeur null, valeur par défaut, ...)

Pour pg_insert_id(), je n'ai pas vu trace de cette fonction dans la doc. Donc cela semble normal que cela ne marche pas
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2006, 12h03   #3
Invité de passage
 
Inscription : septembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 27
Points : 4
Points : 4
Cela veut dire que je ne peu pas rentrer de valeur vide ?
civodultrebor37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2006, 13h40   #4
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Ce n'est pas un champ texte, donc la seule façon d'insérer une valeur 'vide' dans une colonne de type entier c'est de mettre un NULL dans cette colonne.

De toute façon il faut que tu testes les valeurs avant insertion pour éviter les soucis ( SQL injection ). A ce moment, si la valeur indiqué est la chaine vide alors que la base attends un entier, tu la change par la chaine 'NULL'
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2006, 14h03   #5
Invité de passage
 
Inscription : septembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 27
Points : 4
Points : 4
Alors j'ai mis en place le test suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
function TestValeur ($valeur)
{
 If ($valeur ="")
 {
   $valeur = NULL;
   return $valeur;
 } else 
 {
   return $valeur;
 }
}
Mais il me met :

Warning: pg_query(): Query failed: ERROR: invalid input syntax for integer: ""

Avec la rquête suivant :

INSERT INTO schema_gestion_cimetco.contact (num_client_contact, id_personne, id_type_contact, id_statut, date_statut_contact) VALUES ('iuiu-10-2006','49','','','')

Je comprend bien le message d'erreur, mais moi ce que je veux ces que ces champs soit des fois sans valeur.

Donc comment puis je faire ?

Merci
civodultrebor37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2006, 14h12   #6
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
If ($valeur ="") est une affectation

=> If ($valeur == "") est un test


tu pourrais monter comment tu as appelé la fonction que t'as écrite au moment de la construction de la requête ?

ex :
Code :
"INSERT INTO schema_gestion_cimetco.contact (num_client_contact, id_personne, id_type_contact, id_statut, date_statut_contact) VALUES ('iuiu-10-2006','49'," . TestValeur($truc) . "," . TestValeur($machin) . ",'')


si ça marche toujours pas, tu mets une valeur numérique spécifique dans ton champ si l'utilisateur a rien entré, une valeur qui ne peut pas être entrée par l'utiklisateur lui-même

exemple
entrez votre age :

si (age == '')
age = 9999

envoyer requête
__________________
Dia [ Page DVP ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2006, 14h16   #7
Invité de passage
 
Inscription : septembre 2006
Messages : 27
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 27
Points : 4
Points : 4
Honte à moi

Et dire que ca fais bien plus d'une heure que je suis dessu.

Merci mille fois
civodultrebor37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h12.


 
 
 
 
Partenaires

Hébergement Web