banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Mon 26 August 2013 16:27

Spring-Heeled Joss
Participant occasionnel
Date d'inscription: 22 May 2013
Messages: 11

Auto-incrementation

Bonjour,

Je dispose d'une table "thematique" dans une base postgreSQL ; un des attributs de cette table est "id" en clé primaire et de type SERIAL. Grace au script PHP ci-après, je souhaite insérer des données et qu'à chaque fois la colonne "id" s'auto-incrémente. Cela ne fonctionne pas, les données ne s'insèrent pas, il semblerait que le PHP attende qu'une valeur soit entrée pour l'id....
Comment faire pour parvenir à ce que l'auto incrementation fonctionne ?                                                     

<p>Bonjour !</p>

<p> le nom est <?php echo $_POST['nom']; ?> !</p>
<p> adresses est<?php echo $_POST['adresse']; ?> !</p>
<p>le code postal est <?php echo $_POST['code_postal']; ?> !</p>
<p>la commune est <?php echo $_POST['commune']; ?> !</p>
<p> le pays est<?php echo $_POST['pays']; ?> !</p>
<p> le responsable est<?php echo $_POST['responsable']; ?> !</p>
<p> la date est<?php echo $_POST['date']; ?> !</p>
<p> la nature est<?php echo $_POST['nature']; ?> !</p>
<p> la latitude est<?php echo $_POST['lat']; ?> !</p>
<p> la longitude est<?php echo $_POST['lon']; ?> !</p>


<p>Pour entrer des données, <a href="formulaire.php">cliquez ici</a> pour revenir à la page formulaire.php.</p>

<?php

$dbconn = pg_connect("host=localhost dbname=*** user=***
password=***");
$requete = "INSERT INTO thematique VALUES ('" . $_POST['nom'] . "','" . $_POST['adresse'] . "'," . $_POST['code_postal'] . ",'" . $_POST['commune'] . "','" . $_POST['pays'] . "','" . $_POST['responsable'] . "','" . $_POST['date'] . "','" . $_POST['nature'] . "', GeometryFromText ('POINT(" . $_POST['lat'] . " " . $_POST['lon'] . ")', 4326));";

$result = pg_query($dbconn,$requete);

echo $requete

?>



Merci par avance à quiconque pourra m'aider.

Hors ligne

 

#2 Mon 26 August 2013 16:33

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9864
Site web

Re: Auto-incrementation

Bonjour,

Il faut ajouter les noms des colonnes que tu insères sinon le serveur SQL prend toutes les colonnes :

Code:

$requete = "INSERT INTO thematique (nom,adresse,code_postal,commune,pays,responsable,date, nature,the_geom) VALUES ('" . $_POST['nom'] . "','" . $_POST['adresse'] . "'," . $_POST['code_postal'] . ",'" . $_POST['commune'] . "','" . $_POST['pays'] . "','" . $_POST['responsable'] . "','" . $_POST['date'] . "','" . $_POST['nature'] . "', GeometryFromText ('POINT(" . $_POST['lat'] . " " . $_POST['lon'] . ")', 4326));";

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Mon 26 August 2013 16:35

Spring-Heeled Joss
Participant occasionnel
Date d'inscription: 22 May 2013
Messages: 11

Re: Auto-incrementation

Et donc en aucun cas, il ne faut faire mention de la colonne id ?

J'ai essayé en ajoutant les colonnes comme indiqué, et cela ne fonctionne toujours pas ...

Dernière modification par Spring-Heeled Joss (Mon 26 August 2013 17:00)

Hors ligne

 

#4 Mon 26 August 2013 17:14

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9864
Site web

Re: Auto-incrementation

Bonjour,

Quel est le message d'erreur ? Les noms des colonnes sont elles correctement nommées ?

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Mon 26 August 2013 18:15

Spring-Heeled Joss
Participant occasionnel
Date d'inscription: 22 May 2013
Messages: 11

Re: Auto-incrementation

A priori, pas d'erreurs sur les noms de colonnes...
echo $requete me renvoie bien "INSERT INTO thematique ( ... ) VALUES ( ... ); ..... seulement, après vérification, les données ne sont pas insérées...

Le php fonctionne lorsque je rentre moi-même un "id" (et donc en rajoutant un $POST pour "id") ... seulement je recherche clairement à avoir une auto-incrementation ...

(je m'excuse si mes propos ne sont pas clairs, je suis novice dans le webmapping)

Hors ligne

 

#6 Tue 27 August 2013 08:55

mg
Juste Inscrit !
Lieu: Mâcon
Date d'inscription: 25 Jan 2007
Messages: 6

Re: Auto-incrementation

Bonjour,

La doc postgres indique que l'on peut indiquer le mot-clé DEFAULT comme valeur pour déclencher la fonction nextval du serial dans une requête INSERT.

http://docs.postgresql.fr/9.0/datatype. … ype-serial

Je n'ai pas testé, mais c'est une piste à suivre.

Cdt,

Hors ligne

 

#7 Tue 27 August 2013 15:23

Spring-Heeled Joss
Participant occasionnel
Date d'inscription: 22 May 2013
Messages: 11

Re: Auto-incrementation

Il semblerait que ça fonctionne !

L'utilisation de "DEFAULT" était visiblement la solution.

Merci à vous !

Hors ligne

 

#8 Thu 05 September 2013 13:55

Spring-Heeled Joss
Participant occasionnel
Date d'inscription: 22 May 2013
Messages: 11

Re: Auto-incrementation

Voilà que j'ai un autre problème.

L'auto-incrementation fonctionne pour l'ensemble de mes tables hormis une table ("thématique").

Voilà l'erreur qui m'est retourné via phppgadmin.


Erreur SQL :

ERROR:  duplicate key value violates unique constraint "thematique_pkey"
DETAIL:  Key (id)sad3) already exists.

Dans l'instruction :
INSERT INTO thematique ( id, nom, adresse, code_postal, commune, pays, responsable, date, nature, geom) VALUES ( DEFAULT,'Sante mentale','3 rue Hopital',48120,'SAINT-ALBAN','FRANCE','Herve CHAMBRIN','2013','Sante Mentale', GeometryFromText ('POINT(3.388281799999959 44.7813773)', 4326));

Lors de la création de la table, j'ai pourtant bien déclaré "id serial not null PRIMARY KEY ..."

Quelqu'un pourrait-il m'expliquer d'où provient le probleme ?

Hors ligne

 

#9 Thu 05 September 2013 14:04

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9864
Site web

Re: Auto-incrementation

Bonjour,

Ta séquence n'est peut être pas à jour : SELECT currval('nom de la séquence'); te renverra la valeur qui suit et qui sera utilisé. Puis lance SELECT mx(id) FROM thematique; et compare les deux valeurs.

Dans le cas où les 2 valeurs sont différentes avec celui de la séquence > à la valeur max() lance cette requête :

Code:

SELECT nextval('nom de la séquence');

La doc : http://docs.postgresqlfr.org/8.1/functi … uence.html

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#10 Thu 05 September 2013 14:27

Spring-Heeled Joss
Participant occasionnel
Date d'inscription: 22 May 2013
Messages: 11

Re: Auto-incrementation

Autant pour moi, l'erreur est réparée.

J'avais tout simplement "inséré le mauvais fichier SQL dans ma table". Les id étaient une série de nombre au lieu de "DEFAULT".
Désolé du dérangement et encore merci pour votre aide. smile

Dernière modification par Spring-Heeled Joss (Thu 05 September 2013 14:36)

Hors ligne

 

#11 Thu 05 September 2013 15:03

Margot_info
Participant occasionnel
Lieu: Chicoutimi
Date d'inscription: 27 Jan 2009
Messages: 11
Site web

Re: Auto-incrementation

Il semble que la prochaine valeur de ta séquence soit 3 mais que tu aies déjà une ligne ayant cette valeur comme id.
Tu peux vérifier la plus grande valeur présente dans ta table et modifier ta séquence  pour assigner ta plus grande valeur à last_value.
Ainsi, la prochaine sera obligatoirement absente et respectera ta contrainte.

Marc


Marc-André Goderre
Centre de Géomatique du Québec

Hors ligne

 

#12 Wed 22 January 2014 08:56

safari.mupe
Participant occasionnel
Date d'inscription: 25 Nov 2013
Messages: 13

Re: Auto-incrementation

De ma part, comment faire un champ dans un formulaire pour l'affichage d'un element rechercher sur la carte?

Hors ligne

 

Pied de page des forums

Powered by FluxBB