IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requête avec variable qui ne s’exécute pas [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut requête avec variable qui ne s’exécute pas
    bonjour,

    A travers un formulaire php, je tente de récupérer une valeur de clef primaire pour pouvoir réaliser ensuite une mise à jour sur une table.

    le petit bout de html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p>
    	Saisissez le numéro sga de l''opération
    	</p>
    	numéro sga :<input type="text" name="num_sga"><br>
    	<input type="submit" name="submit" value="rechercher">
    et le bout de php où je définis la requête puis l'execute et stocke le résultat dans pg_fetch_result. C'est l'execution de la requete qui ne passe pas car quand je remplace $_POST[num_sga] par une vraie valeur, ca fonctionne. Quelque chose m'échappe...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //la définition de la requete de maj à compléter
    $sqlGid = "select gid from activite.emprise where numope = '$_POST[num_sga]'" ;
    //execution de la requete
    $requete_gid = pg_query($sqlGid) ;
    //recuperation du gid depuis le résultat donné par la requête ci-dessus.
    $gid = pg_fetch_result($requete_gid, 0, 0) ;
     
    $maj = "update public.metadonnees set (date_rapport, date_libe_terrain, généalogie) =
    		('$_POST[date_rapport_maj]', '$_POST[date_libe_terr_maj]', '$_POST[genealogie_maj]')
    		where gid = $gid " ;
    Merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    C'est probablement dû à un souci de concaténation. Tu pourrais essayer avec $sqlGid = "select gid from activite.emprise where numope = '".$_POST['num_sga']."'" ;MAIS c'est mal, car non-protégé contre les injections. Selon le principe de base "Never Trust User Input", il ne faut pas utiliser directement les données en provenance d'un formulaire. (sauf éventuellement si tu écris un petit script pour ton usage personnel, et encore, ça donne des mauvaises habitudes)
    En l'occurrence, tu peux utiliser pg_escape_string pour échapper la chaîne ou pg_query_params pour injecter les paramètres à part.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //la définition de la requete de maj à compléter
    $num_sga = pg_escape_string($_POST[num_sga]);
    $sqlGid = "select gid from activite.emprise where numope = '$num_sga'" ;
    //execution de la requete
    $requete_gid = pg_query($sqlGid) ;
    //recuperation du gid depuis le résultat donné par la requête ci-dessus.
    $gid = pg_fetch_result($requete_gid, 0, 0) ;
     
    $maj = 'update public.metadonnees set (date_rapport, date_libe_terrain, généalogie) =
    		($1, $2, $3)
    		where gid = $4' ;
    pg_query_params($maj, array($_POST[date_rapport_maj], $_POST[date_libe_terr_maj], $_POST[genealogie_maj], $gid));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    merci en effet, c'est plus carré !
    Sinon j'ai toujours l'erreur :
    pg_fetch_result(): Unable to jump to row 0 on PostgreSQL result index 4

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Normalement, cette erreur signifie qu'il n'y a pas de résultat. Question : ton champ numope est de quel type ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    numope type charvar(15)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    Dans ma lutte conter les forces du mal, je tente de résoudre toujours et encore l'erreur en question sans succès...pour le moment.

    Je testais chaque étape en regardant quelle valeur était retournée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete_gid = pg_query($sqlGid)
    me renvoie : Resource id #4

    est-ce normal ? de ne pas lire le résultat de la requête soit la valeur retournée par la requête.

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Oui, c'est normal. pg_query retourne une ressource de résultats, qui doit être exploitée par des fonctions comme pg_fetch_array() ou pg_num_rows().

    SI pg_fetch_result ne fonctionne pas, tu peux essayer de combiner pg_num_rows et pg_fetch_assoc par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $requete_gid = pg_query($sqlGid) ;
    if ($requete_gid === false) {
        die('Oups... La requête est plantée :(');
    }
    if (pg_num_rows($requete_gid) > 0) {
        $row = pg_fetch_assoc($requete_id);
        $gid = $row['gid'];
        echo 'GID : '.$gid;
        // on continue le traitement....
        // ...
    } else {
        echo "Aucun GID trouvé";
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    Effectivement, plus de message d'erreur et je récupere la bonne valeur de $gid ! le pg_fetch_assoc() fonctionne lui !
    Ca parait résolu...
    sauf que maintenant la mise à jour ne se fait pas ! en fait $gid ne passe pas dans la requete $requete. Pourquoi donc ?
    L'aventure continue !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    iif (pg_num_rows($requete_gid) > 0) {
    	$row = pg_fetch_assoc($requete_gid) ;
    	$gid = $row['gid'] ;
    	echo "gid = $gid" ;
     
    //clic sur le bouton mettre à jour, alors on insère
    	if (isset($_POST['new']))
    {
    		$maj = "update metadonnees set (date_rapport, date_libe_terrain, généalogie) = ($1, $2, $3) where gid = $4 " ;
     
    //l'execution de la requete de maj
    		$requete = pg_query_params($connect, $maj, array('$_POST[date_rapport_maj]', '$_POST[date_libe_terr_maj]','$_POST[genealogie_maj]', $gid)) ;
    		}
    }
    ELSE {
    		echo "pas gid trouvé !" ;
    	}

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    Le retour de la vengeance de la mort du php.
    Je ne m'en sors toujours pas. En espérant qu'un oeil neuf voit ce qui m'échappe depuis une semaine, je reposte mon code corrigé d’après les conseils avisés de Célira.
    Donc l'idée est de saisir un numéro dans le formulaire html,
    puis d'afficher certains champs correspondant dans le même formulaire,
    d'en remplir quelques-uns (cf. update dans php)
    puis de renvoyer les valeurs dans la bdd.
    J'ai tenté pas mal de combinaison et fonctions (cf. post precedents) pour adopter la dernière proposée par Célira un peu remaniée.
    A chaque fois je me heurte à "pas de gid trouve".
    Je ne sais plus quoi faire...
    Merci et une boite de chocolat à celui qui trouve ou du moins me mets sur une piste !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <body>
    <div class="doc" name="bloc_md">
    <form action="frm_metadonnees.php" method="POST" >
    	<h4>enregistrer les metadonnées</h4>
    	<p>
    	Saisissez le numéro sga de l'opération
    	</p>
    	numéro sga :<input type="text" name="num_sga"><br>
    	<input type="submit" name="submit" value="rechercher">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
     
    $sql = "SELECT ae.gid, ae.numope, ae.typope, ae.typemp, ae.nomope, am.date_integration, am.date_rapport,
    				am.date_libe_terrain, am.agent, am.généalogie
    			FROM activite.emprise ae LEFT JOIN activite.metadonnees am USING (gid)
    			where ae.numope = '$_POST[num_sga]'" ;
    //
    $requete = pg_query($connect, $sql) ;
     
    if (!isset($requete)) 
    	{
    		echo "pas de résultat" ;
    }
    ELSE
    	{$ligne = pg_fetch_assoc($requete) ;
    	}
     
    //affichage des champs qui rappellent l'opération et ceux des metadonnées
    if (isset($_POST['submit']))
    	echo "<div name='rappel'>
    	<ul>
    		<form name='frm_rappel' action='frm_metadonnees.php' method ='POST' >
    		<li>numéro sga</li>
    		<input type='text' name='numope_maj' value='$ligne[numope]' readonly >
    		<li>nom de l'opération</li>
    		<input type='text' name='nomope_maj' size='50' value='$ligne[nomope]' readonly >	
    		</form > 
    	</ul>
    	</div>" ;
     
    	echo "<div='metadonnees' >
    	<ul>
    		<form name='frm_metadonnees' action='frm_metadonnees.php' method='POST' >
    		<li>date d'intégration</li>
    		<input type='text' name='date' size='10' value='$ligne[date_integration]' readonly >
    		<li>agent intégrateur</li>
    		<input type='text' name='agent' value='$ligne[agent]' readonly >
    		<li>date du rapport</li>
    		<input type='text' name='date_rapport_maj' value='$ligne[date_rapport]' >
    		<li>date liberation de terrain</li>
    		<input type='text' name='date_libe_terr_maj' value='$ligne[date_libe_terrain]' >
    		<li>généalogie</li>
    		<textarea name='genealogie_maj' rows='4' cols='60' >$ligne[généalogie]</textarea> 	
    	</ul>
    	<br />
    		<input type='submit' name='new' value='mettre à jour' />
    	</div>" ;
     
    //clic sur le bouton mettre à jour, alors on insère
    if (isset($_POST['new']))
    		{
    	$maj = 'update public.metadonnees set (date_rapport, date_libe_terrain, généalogie) = ($1, $2, $3) where gid = $4' ;
    	$num_sga = pg_escape_string($_POST[numope_maj]) ;
    	$sqlGid = "select gid from activite.emprise where numope = '$num_sga'" ;
    	$requete_gid = pg_query($connect, $sqlGid) ;
    		if (pg_num_rows($requete_gid) > 0) {
    		$row = pg_fetch_assoc($requete_gid) ;
    		$gid = $row['gid'] ;
    	//l'execution de la requete de maj
    		$requete = pg_query_params($connect, $maj, array($_POST[date_rapport_maj], $_POST[date_libe_terr_maj],$_POST[genealogie_maj], $gid)) ;
    		// $requete = pg_query($maj) ;
    		}
     
    ELSE {
    		echo "pas de gid trouvé !" ;
    	}
    		}
     
    ?>

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    J'ai trouvé l'origine du mal : un var_dump des variables suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	echo var_dump($num_sga)."<br>" ;
    		echo var_dump($var_name)."<br>" ;
    		echo var_dump($row)."<br>" ;
    		var_dump($num_sga)
    me renvoie les valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string(0) "" 
    array(4) { [0]=> string(10) "2010-01-01" [1]=> string(10) "2010-01-01" [2]=> string(3) "fre" [3]=> NULL } 
    bool(false) 
    string(0) ""
    Donc à priori dès le départ, la variable $num_sga est vide, c'est à dire que la valeur du champ numope_maj n'est pas récupérée...
    Pourquoi ? Comment la récupérer ?
    Merci

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Essaye de faire un var_dump de $_POST pour voir ce qui arrive réellement.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    voilà ce que je récupère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     array(6) { ["date"]=> string(10) "2017-02-16" ["agent"]=> string(9) "davidduda" ["date_rapport_maj"]=> string(10) "2010-01-01" 
    ["date_libe_terr_maj"]=> string(10) "2010-01-01" ["genealogie_maj"]=> string(4) "pjù" ["new"]=> string(14) "mettre à jour" }
    et je ne vois pas la variable $num_sga qui devrait contenir $_POST[numope_maj]...Pourtant elle apparait bien dans le champ mais une fois que j'applique mettre à jour, elle ne suit pas alors que les autres variable oui, vu le dump...

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    J'ai trouvé ! Tu as deux formulaires et seuls les champs du formulaire qui contient le bouton submit sont envoyés.
    Réunis les deux en plaçant les balises <form></form> autour de tes div, et ça devrait mieux fonctionner
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut


    effectivement seules les données du second formulaire étaient envoyées
    Ca risquait pas de récupérer le $_POST[numope_maj] !
    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Requête avec date qui ne fonctionne pas
    Par legrandse dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/01/2017, 09h07
  2. [AC-2007] Requête avec critère qui ne marche pas suivant la version de RunTime
    Par pio_killer dans le forum Runtime
    Réponses: 1
    Dernier message: 19/11/2011, 14h09
  3. Requête avec jointure qui retourne null si pas de valeur
    Par jubourbon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2011, 11h10
  4. Réponses: 4
    Dernier message: 10/12/2010, 11h58
  5. requête avec paramètre qui marche pas
    Par funkyjul dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/04/2008, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo