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

Langage PHP Discussion :

Comment empêcher qu'un formulaire php exécute une requête à l'ouverture ?


Sujet :

Langage PHP

  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 Comment empêcher qu'un formulaire php exécute une requête à l'ouverture ?
    Bonjour,

    Novice en php, je tente de créer un formulaire pour saisir des données envoyées par la suite dans une table d'une base postgres.
    Lors de l'ouverture initiale du formulaire de saisie, j'ai systématiquement un message d'erreur relatif à l’exécution d'une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: pg_query(): Query failed: ERREUR: syntaxe en entrée invalide pour l''entier :
     « » LINE 2: VALUES ('','', '', '', ^ in C:\ms4w\Apache\form_php\insert_inv_faits.php on line 103
    Pourquoi la requête s'execute-t-elle à l'ouverture du formulaire ? Comment "empêcher" cela ?
    Je comprends le message d'erreur car en executant la requête, le navigateur envoie une valeur null dans un champ d'une table qui doit être rempli (numpoly).

    le bout de html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ul>
    <form name="insert" action="insert_inv_faits.php" method="POST" >
     
    	<li>numéro de vestige :</li>
    	<input type="integer" name="numpoly" />
    	<span class="error">* <?php echo $numpolyErr;?></span>
    	<li>interprétation :</li>
    	<input type="text" name="interpretation" />
    	<li>ensemble technique :</li>
    	<input type="integer" name="ensTechn" />
    	<li><input type="submit" /></li>
    </form>
    </ul>

    le php :
    Code php : 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
    <?php
    $db = pg_connect("host=localhost port=5432 dbname=php user=xxxx password=xxxx");
    $numpolyErr = "" ;
    $numpoly = $interpretation = $ensTechn  ;
     
    //variable qui stocke la requête qui inserera les valeurs saisies, dans la bdd.
    if (empty($_POST[numpoly]))
    		{$numpolyErr = "numéro de vestige requis" ;
    		} else {
    		$numpoly = $_POST[numpoly] ;
    		}
     
    if (empty($_POST[interpretation]))
    		{$interpretation = "" ;
    		} 
     
    if (empty($_POST[ensTechn]))
    		{$ensTechn = "" ;
    		} 
    ...
    {
    $query = "INSERT INTO public.unobs(numpoly, interpretation, ensemble_technique) 
    VALUES ('$_POST[numpoly]','$_POST[interpretation]', '$_POST[ensTechn]')"
    ;
    }
    //variable qui execute la requete $query si non null
    if (isset($query))
    {
    $result = pg_query($query);
    }
    ?>

    Comment solutionner ce problème ?
    Merci

  2. #2
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Gérant - société de développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 417
    Points : 632
    Points
    632
    Par défaut
    Bonjour,

    Visiblement il essaye d'exécuter la requête dès l'ouverture de la page tu as quoi comme condition ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    {
    $query = "INSERT INTO public.unobs(numpoly, interpretation, ensemble_technique) 
    VALUES ('$_POST[numpoly]','$_POST[interpretation]', '$_POST[ensTechn]')"
    ;
    }
    Car c'est là qu'est le soucis.

    @+

  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
    La condition coté postgres est numpoly non null.

    coté php idem.

    La question est effectivement : quel paramètre qui fait executer la requête à l'ouverture ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La question était : à quoi correspondent les "..."
    Il faut une condition IF vérifiant si le formulaire a été soumis ou non.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    les "..." correspondent à du code que j'ai omis de copier pour alléger le fil.

    Il faut une condition IF vérifiant si le formulaire a été soumis ou non.
    L'erreur de requête ne se fait qu'une fois lors de l'ouverture initiale. Si on fait comme s'il n'y en avait pas et que l'on saisit des données, le message n’apparaît plus ensuite.
    Après si je puis avoir qques détails suite à cette proposition

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    oui justement, il ne faut faire la requête que si le formulaire a été soumis.
    si tu n'as pas mis cette condition, la requête se lance à chaque fois que tu arrives sur la page.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    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
    Je vais chercher du coté des champs cachés :https://www.developpez.net/forums/d6...el-formulaire/
    Ca parait etre le plus simple de mettre cela en oeuvre.
    Merci.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a pas besoin de champ caché, vérifie tes champs existant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if !empty($_POST['numpoly'])) {
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Comment empêcher que la fermeture de mon état IReport ferme aussi mon application
    Par NOEL POLA HABA dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 28/08/2015, 10h22
  2. Réponses: 1
    Dernier message: 31/01/2014, 18h44
  3. Formulaire php avec execution Perl
    Par acidozik dans le forum Langage
    Réponses: 5
    Dernier message: 12/05/2009, 15h08
  4. Réponses: 1
    Dernier message: 25/10/2006, 18h06
  5. Comment empêcher que les textout se chevauchent ?
    Par kidpaddle2 dans le forum Windows
    Réponses: 52
    Dernier message: 29/06/2006, 23h12

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