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 :

Enregistrements saisies sur table aléatoires


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2020
    Messages : 30
    Par défaut Enregistrements saisies sur table aléatoires
    Bonjour,

    Je me permets de vous écrire car je rencontre un soucis avec mon formulaire PHP.

    J'ai créé un formulaire "classique" que j'envoie à des personnes.

    Ces personnes répondent et leurs saisies sont stockées dans ma base SQL.

    Cela fonctionne, mais pas pour tout le monde.

    Je m'explique, certaines personnes répondent au formulaire: une nouvelle entrée dans ma table SQL se créée avec leurs réponses et le numéro ID associé sont stockées dans ma base. Ici, tout fonctionne.

    D'autres personnes font la même chose est rien ne se créé. De leur côté, ils peuvent envoyer le questionnaire, tout se passe comme si cela avait correctement fonctionné.

    Je pensais que cela pouvait peut être provenir d'une "sécurité" ou "protection" de leur PC ou réseau qui au final n'envoie pas leurs saisies, mais je ne sais pas si cela est possible, ou si c'est autre problème.

    Est-ce que par hasard, vous auriez une piste que je pourrais creuser ?

    Merci beaucoup et à bientôt

    Bruno

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 588
    Par défaut
    Hello

    Ton problème est-il reproductible ?
    Quel est la correspondance entre les personnes ou le formulaire ne fonctionne pas ?
    - Navigateur
    - Extension
    - Authentification

    As tu des logs ?

    Si rien ne ce crée ca vient forcément de ta requête sql, par exemple un champ non nullable ou tu lui passes une valeur null. De plus si les erreurs sont désactivées avec pdo ou myslqli c'est invisible.

  3. #3
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2020
    Messages : 30
    Par défaut
    Super merci Kévin pour ta réponse.

    Alors, je te propose que je réponde à tes questions et je te donne les résultats que j'ai obtenu selon tes conseils.

    Tout d'abord, étant chez Hostinger, j'ai activé les log (logErrors et displayErrors)

    J'ai fait un test, j'ai rempli toutes les questions du formulaire et j'ai validé. Je n'ai pas eu de messages d'erreurs (log).


    Je te détaille comment fonctionne le formulaire. Pour simplifier, je mets des [...] pour raccourcir le code afin qu'il rentre dans le sujet de discussion. Je prends l'exemple de ma première question:


    Sur un fichier nommé formulaire.php (tout le formulaire est uniquement sur une seule page)
    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
     
    <form action="https:XXXXXXXXX/VDresultat.php" method="post" enctype="multipart/form-data" name="formSaisie1" target="_self" onSubmit="return soumissionOk(this)">
     
    [...]
     
    <table class="ma-table">
       <tr>
          <td colspan="8"><h1>1- Profil</h1></td>
       </tr>
       <tr>
          <td colspan="8"><h2>Pourriez-vous nous indiquer, </h2></td>
       </tr>
       <tr>
          <td>le nom de votre structure</td>
          <td colspan="7"><input type="text" name="1" id="1"></td>
       </tr>
     
    [...] 
     
    </table>
     
    [...]
     
    <center><input type="submit" style="width: 300px; height: 50px; font-size:30px;" name="Suivant" id="Suivant" value="Envoyer"></center>
     
    [...]
     
    </form>
    Sur un fichier VDresultat.php, je récupére les saisies et je les envoie sur ma base

    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
     
    <?php
    include ('../script/connection.inc.php');
    $s1=$_POST['1'];
     
    [...]
     
    $sql = "INSERT INTO `VDresultat` ( `id` 												
    ,`1`
    
    [...]
    
    ) VALUES ('',
    '".$s1."')";
    [...]
     
    if (mysqli_query($conn, $sql)) {
       echo "Nouveau enregistrement créé avec succès";
       } else {
       echo "Erreur : " . $sql . "<br>" . mysqli_error($conn);}
     
    mysqli_close($conn);
    header("Location: ../merci.php");
    Ma table de donnée nommée également VDresultat est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE IF NOT EXISTS `VDresultat` (
      `id` int(1) NOT NULL auto_increment,
      `1` varchar(300) collate latin1_general_ci NOT NULL default '',
     
    [...]
     
    PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
    Enfin, je renvoie vers un fichier merci.php

    Mon problème est le suivant:

    Certaines personnes saisissent leurs réponses sur le formulaire (j'ai fait aussi le test: répondre uniquement à quelques questions ou toutes questions, c'est le même résultat) et tout fonctionne normalement. Une ligne apparait dans ma table avec l'individu et ses réponses.

    D'autres personnes font la même chose et la ligne ne se créée pas.

    J'ai essayé avec les navigateurs: Brave, Chrome et Firefox, c'est le même résultat: parfois ça marche et d'autre non

    Je n'arrive pas à voir où cela peut poser problème et où j'ai fait une erreur.

    Est-ce que par hasard, tu aurais des pistes ?

    Encore merci

    Bruno

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Le problème c'est que vous donnez des extraits de code, de définition de table mais rien n'est complet, dès lors il est difficile d'analyser votre code plus en profondeur pour comprendre où ça coince, ou même de le tester de notre côté.

    Mais ce code me semble très ancien et peu robuste, quand je vois un truc comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ) VALUES ('',
    '".$s1."')";
    ça sent l'injection SQL à plein nez. Non seulement c'est une faille de sécurité énorme mais ça peut expliquer que certaines requêtes échouent. Par exemple, si on entre une valeur contenant une apostrophe (single quote), alors le code SQL sera tronqué. Faites le test !
    Il y a peut-être des warnings que vous ne voyez pas.

    Forcez les erreurs, s'il le faut tenter de mettre à jour un champ qui n'existe pas dans votre table. Le but étant de faire apparaître clairement les erreurs quand elles se produisent. Il est conseille de les écrire dans un log et ne pas les afficher directement à l'écran. Non seulement c'est peu professionnel mais révéler la structure de votre DB peut aider un hacker éventuel à affiner ses attaques.

    Le point que l'on puisse faire si on s'en tient à ce code "vieillot", c'est d'utiliser des requêtes paramétrées afin de résoudre ce problème d'injection SQL et de fiabiliser le traitement.

    Je passe sur les conventions de nommage, un champ qui s'appelle 1 c'est pas super-intuitif...

  5. #5
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2020
    Messages : 30
    Par défaut
    Déjà bonjour binarygirl

    Quel ton moralisateur et donneur de leçon. C'est un forum d'entraide pour tout public de tout niveau, l'agressivité est inutile, faites en l'expérience ça vous sera plus utile.

    Dans vos commentaires, je vais quand même essayer de trouver quelque chose de positif en essayant quelques pistes.

    Mais merci, c'était quand même agréable de discuter avec vous.

    A bientôt

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    Le problème c'est que vous nous demandez de jouer à la devinette, d'abord vous ne postez pas de code, ensuite vous fournissez quelque chose de très incomplet et ce n'est pas un MRE.

    Donc il faudrait du concret pour avancer et pour qu'on puisse vous aider efficacement.

    En relisant votre code je vois encore ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="https:XXXXXXXXX/VDresultat.php" method="post" enctype="multipart/form-data" name="formSaisie1" target="_self" onSubmit="return soumissionOk(this)">
    Il y a un bout de Javascript qui est exécuté lors de l'envoi du formulaire.
    Peut-être que le problème vient de cette fonction qui échoue et empêche l'envoi du formulaire.
    Mais on n'en sait rien puisqu'on n'a pas le code.

    Hypothèse du moment: le problème vient des données. Je pense que le single quote (et d'autres caractères aussi) peut faire crasher votre code, et c'est facile à vérifier de votre côté. Si vous confirmez cela, alors il n'y a plus qu'à corriger et ce sera un problème en moins.

    En 2023 les injections SQL ne devraient plus exister. Je pense que vous n'avez pas conscience des risques, n'importe qui peut exploiter une faille aussi basique avec des outils comme SQLmap. Non seulement votre site est hackable mais les données de votre DB peuvent se retrouver entre de mauvaises mains, ce qui ne fera pas plaisir à vos clients non plus. Il y va de votre responsabilité professionnelle.
    Donc je me permets d'insister sur ce point: ne négligez pas la sécurité sinon vous vous en mordrez les doigts. Vous pourriez même vous prendre des amendes de la CNIL pour négligence.

    Prenez cela comme une consultation gratuite chez le dentiste: il vous fait du mal pour que vous alliez mieux après.
    Mais si vous ne lui dites pas clairement quelle dent vous fait mal, alors il devra peut-être taper à gauche et à droite et vous faire encore plus de mal...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/05/2006, 11h00
  2. Débutant-Insertion dans table valeurs saisies sur formulaire
    Par Michel Hubert dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2006, 19h38
  3. débutant-Insertion dans table valeurs saisies sur formulaire
    Par Michel Hubert dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 09h07
  4. [WD9] Cliquer sur des enregistrements dans une table
    Par oz80 dans le forum WinDev
    Réponses: 2
    Dernier message: 15/12/2005, 20h11
  5. Sélection d'un enregistrement de la table sur modif TDBEdit
    Par lawale125 dans le forum Bases de données
    Réponses: 2
    Dernier message: 24/09/2004, 17h54

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