Vous n'êtes pas identifié(e).
Pages : 1
Bonjour, j'ai un problème étrange.....
J'ai un script tout simple en php j'enregistre dans ma table parcelles des données via un formulaire. J'utilise exactement le même script pour toute mes pages je change juste le nom des tables et des variables.
J'arrive a écrire dans toutes mes tables sauf la table parcelles, je me demande si ca pourrait pas venir de postgresql, car en php aucune erreur et renvoyé, pour le script tout serait ok, sauf que l'entrée ne se créée pas dans ma table.
J'ai fait un petit truc sur cette table qui différencie des autres, j'ai supprimé 2 colonnes qui me servait plus, et j'ai pas oublié de cocher cascade, peut être cela a t'il un impact?
enfin j'ai supprimé cette table et je l'ai recréé, mais toujours impossible d'enregistrer via le script php, si je vais dans phppgadmin je peux sans souci insérer une entrée dans cette table, que j'arrive a afficher via mon script php.
Je vous mets mon script de mon formulaire :
<?php
include("connection_bdd.php");
//-------------------------
//est-ce qu'on est dans le cas d'une modification
//--------------------------
if (isset($_GET['modifier_parc'])) // Si on demande de modifier
{
// On récupère les infos
$req = $bdd->prepare('SELECT * FROM parcelles WHERE id_parc = ?') or die(print_r($bdd->errorInfo()));
$req->execute(array($_GET['modifier_parc']));
$donnees = $req->fetch(); // on récupere tout dans un tableau, puis on les tris
$id_parc = $donnees['id_parc'];
$id_lot_parc = $donnees['id_lot_parc'];
$nom = $donnees['nom_parc'];
$description = $donnees['description_parc'];
$proprietaire = $donnees['prop_parc'];
$surface = $donnees['surface'];
}
else // Sinon c'est qu'on rédige une nouvelle entrée
{
// Les variables sont alors vides
$id_parc = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
$id_lot_parc = $_GET['ajouter_parc'];
$nom = '';
$description = '';
$proprietaire = '';
$surface = '';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<link href="style/defaut.css" rel="stylesheet" type="text/css">
<title>renseigner une parcelle</title>
</head>
<body>
<?php
if(isset($_GET['modifier_parc']))
{
echo'<form action="administrer_parc.php?info_parc='.$donnees['id_parc'].'" method="post">';
}
else
{
echo'<form action="administrer_parc.php?suivi_parc=1" method="post">';
}
?>
<label>Nom : </label><input type="text" size="30" name="nom_parc" value="<?php echo $nom; ?>"/><br/>
<label>Description : </label><input type="text" size="30" name="description_parc" value="<?php echo $description; ?>"/><br/>
<label>Propriétaire : </label><input type="text" size="30" name="prop_parc" value="<?php echo $proprietaire; ?>"/><br/>
<label>Surface : </label><input type="text" size="50" name="surface" value="<?php echo $surface; ?>"/><br/>
<input type="hidden" name="id_lot_parc" value="<?php echo $id_lot_parc; ?>"/>
<input type="hidden" name="id_parc" value="<?php echo $id_parc; ?>"/>
<input type="submit" value="Envoyer" />
</form>
<a href="administrer_parc.php">retour à la fiche dde la parcelle</a>
</body>
</html>
et mon code pour insérer une nouvelle entrée :
include("connection_bdd.php");
//--------------------------------------------------------
// traitement parcelle
//--------------------------------------------------------
if (isset($_POST['nom_parc'])AND isset($_POST['description_parc'])) // on renseigne si les variables existent déjà isset permet de récupérer vrai ou faux si la variable existe
{
$id_parc = $_POST['id_parc'];
$id_lot_parc = $_POST['id_lot_parc'];
$nom = $_POST['nom_parc'];
$description = $_POST['description_parc'];
$proprietaire = $_POST['prop_parc'];
$surface = $_POST['surface'];
// On vérifie si c'est une modification
if ($_POST['id_parc'] == 0) // se traduit par si les variables existent et si la variable recupérée id est = 0
{
// alors ce n'est pas une modification, on crée une nouvelle entrée dans la table
$req = $bdd->prepare('INSERT INTO parcelles(id_parc, id_lot_parc, nom_parc, description_parc, prop_parc, surface) VALUES(, :id_lot_parc, :id_voirie, :id_reseau, :nom, :description, :proprio, :surf)') or die(print_r($bdd->errorInfo())); // on prepare la requete les : permettent de nommer une variable dans une requete sql
$req->execute(array(
'id_lot_parc' => $id_lot_parc,
'nom' => $nom,
'description' => $description,
'proprio' => $proprietaire,
'surf' => $surface,
)); // on défini un tableau contenant les variables, qui seront inserées dans la requete sql
}
else
{
// Sinon c'est une modification, on met à jour les champs
$req = $bdd->prepare('UPDATE parcelles SET id_lot_parc = :id_lot_parc, nom = :nom, description_parc= :description, prop_parc = :proprio, surface = :surf WHERE id_parc = :id_parc') or die(print_r($bdd->errorInfo())); //le where permet de reperer l'entrée modifiée on se fixe sur l'id
$req->execute(array(
'id_lot_parc' => $id_lot_parc,
'nom' => $nom,
'description' => $description,
'proprio' => $proprietaire,
'surf' => $surface,
'id_parc' => $id_parc,
));
}
$req->closeCursor(); // Termine le traitement de la requête
}
merci d'avance pour votre aide
Hors ligne
Quel est l'erreur au niveau PostgreSQL ? je veux dire, dans les logs de PostgreSQL.
Guillaume.
Hors ligne
désolé, mais ou voit-on le log? est il activé par défaut, faut-il modifier le fichier postgresql.conf?car a il y a plein de log
Dernière modification par mamatt (08/04/2010 21:26:27)
Hors ligne
Ça dépend beaucoup de la configuration de PostgreSQL. Par défaut, les erreurs SQL sont loggués. Où dépend de la configuration. Ça peut être syslog sous Unix, eventlog sous Windows voire même gérer par PostgreSQL... Bref, tout dépend de la configuration de PostgreSQL.
Guillaume.
Hors ligne
heu, la je suis dans un sujet que je maîtrise pas trop je vais essayer d'être le plus claire possible, j'ai installé Postgresql 8.3 tout par défaut, je suis en local je travail avec wampserver2 donc en localhost:5432 port par défaut il me semble, donc je ne sais pas du tout comment faire pour générer un log pour voir d'éventuels problèmes.....
Hors ligne
Quel système d'exploitation ?
Guillaume.
Hors ligne
windows vista familial pardon pour cet oubli
Hors ligne
Donc il y a des chances que ce soit dans le répertoire des données, dans le sous-répertoire pg_log.
Guillaume.
Hors ligne
ok je l'ai trouver un log d'aujourd'hui je suppose car mon problème est apparu aujourd'hui, je dois chercher quoi, car je vais pas poster tout le log sur le forum ?^^ ou en pièce jointe si je peux?
EDIT : désolé on est le soir et je suis un peu fatiguer, donc j'ai trouvé des erreurs qui me semble en relation avec mon problème :
2010-04-08 14:36:49 CEST ERROR: column "nom" of relation "parcelles" does not exist at character 40
2010-04-08 14:36:49 CEST STATEMENT: UPDATE parcelles SET id_lot_parc = $1, nom = $2, description_parc= $3, prop_parc = $4, surface = $5 WHERE id_parc = $6
et :
2010-04-08 14:39:44 CEST ERROR: INSERT has more expressions than target columns
2010-04-08 14:39:44 CEST STATEMENT: INSERT INTO parcelles(id_lot_parc, nom_parc, description_parc, prop_parc, surface) VALUES($1, $2, $3, $4, $5, $6, $7)
a mon avis le fait que je ne peux pas renseigner viendrait de là ??
EDIT 2 : le soir on devient faignant héhé, merci trop utile ce log ca va beaucoup me servir maintenant. voila mon erreur :
INSERT INTO parcelles(id_parc, id_lot_parc, nom_parc, description_parc, prop_parc, surface) VALUES(, :id_lot_parc, :id_voirie, :id_reseau, :nom, :description, :proprio, :surf)
même si j'avais supprimé toutes mes variables et mon form des 2 colonnes que j'avais effacé avec phppgadmin, j'essayais de renseigné des colonne avec le VALUE (id_voirie et id_reseau)
un grand merci Gleu, problème résolu.
Dernière modification par mamatt (09/04/2010 00:20:28)
Hors ligne
Pages : 1