Besoin d aide pour sécuriser mon site

Résolu
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -
bonjour a tous

je souhaiterais pouvoir optimiser mon site et régler les soucis de sécurité
j aurais donc des questions
besoin de conseils , d astuce ect...
ma première question est la suivante

je suis hébergé chez hostinger avec une protection cloudfare
dois je m inquiéter des injections mysql

je pose ma question en php car je suppose que la plupart des moyens de protections seront base sur php

23 réponses

  • 1
  • 2
Résumé de la discussion

L'inquiétude porte sur les injections MySQL et la sécurité du site, malgré l'hébergement chez Hostinger et la protection Cloudflare, en s'appuyant sur PHP, et sur les pratiques à privilégier pour éviter les fuites de données. Des réponses utiles privilégient les requêtes préparées et le binding des paramètres pour toutes les opérations SQL, afin d'éviter l'injection et de sécuriser les requêtes issues de $_POST, $_GET ou $_SESSION. En cas d'usage, d'autres mesures comme l'usage d'un utilisateur MySQL avec des privilèges limités, l'activation de TLS et la validation côté serveur s'avèrent utiles pour renforcer la sécurité globale.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    tu dois en effet te protéger des injections en utilisant des requêtes préparées, sans jamais combiner autrement une syntaxe SQL et des données reçues.
    1
  2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci yg_be pour la reponse

    voici donc une première requête préparée pour une variable name

    	$connexion = mysqli_connect("localhost", "u43rle", "Ssa2", "u4346erle") ;
    if (!$connexion) {
        printf("Impossible de se connecter à localhost. Code d'erreur : %d\n", mysqli_connect_errno());
    	 exit();
    	}
    if(!empty($_POST["send"])) {
    	
    	mysqli_query($connexion, "CREATE TEMPORARY TABLE contact LIKE name");
    	
    	$name = $_POST["name"];
    	
    	
    /* Cette requête échoue car nous n'avons pas échappé $city */
    if (!mysqli_query($connexion, "INSERT into contact (Name) VALUES ('$name')")) {
        printf("Erreur : %s\n", mysqli_sqlstate($connexion));
    }
    
    $name = mysqli_real_escape_string($connexion, $name);
    
    /* Cette requête, par contre, réussira car nous avons échappé $city */
    if (mysqli_query($connexion, "INSERT into contact (Name) VALUES ('$name')")) {
        printf("%d ligne insérée.\n", mysqli_affected_rows($connexion));
    }
    
    mysqli_close($connexion);
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      de toute évidence, tu n'as pas utilisé la technique de requête préparée.
      0
  3. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci pour l aide

    je pense avoir compris la requête de préparation

    distric

    	$connexion = mysqli_connect("localhost", "u434perle", "S02", "u43erle") ;
    	
    	
    	if (!$connexion) {
        printf("Impossible de se connecter à localhost. Code d'erreur : %d\n", mysqli_connect_errno());
    	 exit();
    }
    	
    
    	
    	$name = $_POST["name"];
    	
    	/* Crée une requête préparée */
    if ($stmt = $mysqli->prepare("SELECT contact FROM name WHERE Name=?")) {
    
        /* Lecture des marqueurs */
        $stmt->bind_param("s", $name);
    
        /* Exécution de la requête */
        $stmt->execute();
    
        /* Lecture des variables résultantes */
        $stmt->bind_result($contact);
    
        /* Récupération des valeurs */
        $stmt->fetch();
    
        printf("%s est dans le contact de %s\n", $name, $contact);
    
        /* Fermeture du traitement */
        $stmt->close();
    }
    
    /* Fermeture de la connexion */
    $mysqli->close();
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      0
      1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        oui jordane
        mais le sujet a été clôturé
        donc je veux être sur avant d appliquer sur toutes mes pages
        merci de votre aide a vous deux
        0
      2. Pierrecastor Messages postés 10830 Date d'inscription   Statut Modérateur Dernière intervention   4 215 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         
        Salut,

        Un topic passé en résolu n'est pas clôturé, on peut tout à fait continuer à poser des questions dessus.
        0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      c'est en effet un bon exemple d'utilisation de requête préparée.
      0
  4. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    par contre il y a un paramètre que je pense que j ai pas bien compris et donc ma requête après lecture devrait être mauvaise

    ($stmt = $mysqli->prepare("SELECT contact FROM name WHERE Name=?")) 


    select je pense que cela doit être le nom de la base
    FROM doit etre le nom de la table
    et where le titre de la colonne dans la table

    personnellement
    j utilise toujours * entre SELECT et FROM
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Le fait d'utiliser les requêtes préparées .. ça ne change rien aux requêtes à proprement parler
      C'est juste au niveau des "variables" qui, au lieu de les mettre directement en PHP dans la requête .. sont remplacés par des "?"

      
      $sql = " SELECT cequetuveux FROM tatable WHERE  unchamp=? OR unautrechamp=? ";
      
      $sql = " UPDATE tatable SET  unchamp=? ,  unautrechamp=?   WHERE id= ? ";
      
      $sql = " INSERT INTO tatable ( unchamp, unautrechamp)  VALUES(?,?) ";
      
      


      et pour chaque "?", il faut faire un BIND de la variable correspondante
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    ah ok jordane
    merci pour l aide
    mais de toute façon l hiver prochain je compte m y mettre dans le php de façon plus approfondie
    car cela m intéresse

    j ai encore une question avec le select
    quand tu dis que je peux mettre ce que je veux
    je pourrais écrire "azerty "c est pas logique car je sélectionne quelque chose
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu mets soit le signe etoile ce qui signifie que tu veux tous les champs, soit tu désignes le ou les champs que tu veux remonter dans ta requête SELECT.
      C'est le b a-ba du langage SQL...
      0
  7. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci jordane
    bon je vais regarder a cela
    j ai toujours eu un peu dur avec cette fameuse Etoile

    si je reprends l exemple de php

    ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?"))


    je suis retourne voir sur classroom pour cet exemple de requête

    bon je peux comprendre celle ci

    SELECT * FROM jeux_video WHERE possesseur='Patrick'

    « Sélectionner tous les champs de la table jeux_video lorsque le champ Possesseur est égal à Patrick »

    de ce cote c est simple a comprendre

    mais alors cela je ne comprends pas

    SELECT  prossesseur  FROM jeux_video WHERE possesseur=?'


    ca veux quand même bien dire
    sélectionner le champ processeur de la table jeux vidéo et recherche ce qu il y a dans ce champ
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ton exemple PHP est incomplet.
      prends plutôt ceci comme exemple:
      $mysqli->prepare("SELECT contact FROM name WHERE Name=?")) {
      $stmt->bind_param("s", $name);
      $stmt->execute();  

      SELECT contact FROM name WHERE Name=?
      n'est pas la requête SQL utilisée
      la deuxième instruction lie la requête préparée avec le contenu de la variable $name, ce qui produit, si $name contient"NewYork", une requête SQL correcte:
      SELECT contact FROM name WHERE Name="NewYork"
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Je ne comprends pas ce qui te bloques...

      Déjà..
      SELECT  prossesseur  FROM jeux_video WHERE possesseur=?'
      

      Veut dire.. retourner la valeur du champ "prossesseur" lorsque le possesseur vaut une valeur...

      Je ne sais pas si tu as fais une faute de frappe et que dans les deux cas tu voulais utiliser le mot "processeur" .. ou si tu as bien deux noms de champs différents... "prossesseur" et "possesseur"

      Si c'est une faute de frappe et que c'est deux fois le même nom de champs.. c'est débile....
      ça revient à demander de quelle couleur est le cheval blanc d'henry IV ...

      Bref ... reprenons un exemple avec une table ayant 3 champs ; (champ1, champ2 , autrechamp )
      SELECT  champ1,champ2 
      FROM matable
      WHERE  autrechamp = ?
      


      Retourner les champs 1 et 2 de ma table 'matable'
      quand autrechamp = la valeur cherchée

      Par contre .. j'insiste ....
      Ca n'a rien à voir avec le langage PHP ..... là .. c'est une question concernant le fonctionnement du langage de requêtage SQL ...
      Il serait bien de ne pas mélanger tout et n'importe quoi dans tes questions sur le forum !
      0
  8. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci jordane

    et merci pour votre patience a tout les deux
    mais des fois a un certain âge cela a du mal a entrer

    merci aussi pour ces explications et l exemple a présent cela est un peu plus clair
    pour te répondre oui cela été une faute de frappe

    si je te dis que je cherche depuis midi pour comprendre une telle requête
    SELECT  prossesseur  FROM jeux_video WHERE prossesseur=?'


    cette fois ci je pense avoir compris ce genre de requête

    oui en effet tu as raison j ai mélange les deux choses
    mais des fois y a des exemples de php qui ne sont pas clair du tout

    voici donc la requête préparée
    j espère que cela est bon

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    if(!empty($_POST["send"])) {
    	
    		$connexion = mysqli_connect("localhost", "u4erle", "Ssa02", "u434rle") ;
    		
    	if (!$connexion) {
        printf("Impossible de se connecter à localhost. Code d'erreur : %d\n", mysqli_connect_errno());
    	 exit();
    }
    		
    	$name = $_POST["name"];
    	$email = $_POST["email"];
    	//$subject = $_POST["subject"];
    	$messager = $_POST["messager"];
    	$drone = $_POST["drone"];
    	$drone1 = $_POST["drone1"];
    	
    	$drone3 = $_POST["drone3"];
    	$drone4 = $_POST["drone4"];
    	$drone5 = $_POST["drone5"];
    	
    	$result = mysqli_query($connexion, "INSERT INTO contact (name, email,  message,Avez_vous_deja_perler,seriez_vous_pret_a_sauter_le_pas,Trouvez_vous_des_perles_facilement,Connaissez_vous_des_perleurs,Que_penses_tu_de_mon_blog) VALUES ('" . $name. "', '" . $email. "','" . $messager. "' ,'" . $drone. "'  ,'" . $drone1. "'  ,'" . $drone3. "' ,'" . $drone4. "' ,'" . $drone5. "'            )");{
    	
    	
    	$stmt->bind_param("s", $name);
    $stmt->execute();  
    
    	$stmt->bind_param("s", email);
    $stmt->execute();  
    	
    	$stmt->bind_param("s", $messager);
    $stmt->execute();
    
    	$stmt->bind_param("s", $drone);
    $stmt->execute();
    	
    	$stmt->bind_param("s", $drone1);
    $stmt->execute();
    
    $stmt->bind_param("s", $drone3);
    $stmt->execute();
    	
    	$stmt->bind_param("s", $drone4);
    $stmt->execute();
    	
    	$stmt->bind_param("s", $drone5);
    $stmt->execute();
    	 mysqli_stmt_close($stmt);
    	 }
    	 
    	if($result){
    		$db_msg = "Vos informations de contact sont enregistrées avec succés.";
    		$type_db_msg = "success";
    	}else{
    		$db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
    		$type_db_msg = "error";
    	}
    	
    }


    il y a encore cette ligne que je ne comprends pas

    /* Récupération des valeurs */
        mysqli_stmt_fetch($stmt);
    
        printf("%s est dans le district de %s\n", $city, $district);


    es ce que je dois remplacer les deux variables par toutes mes variables
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Non
      Là ça n'a rien à voir avec les requête préparées....
      Oubli ces deux lignes de code...
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      où est le prepare?
      relis ma remarque en #3.
      0
      1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        merci yg_be

        je l vais oublie celui la
        0
  9. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci jordane

    donc pour le reste tout est bon dans mon code ?

    sauf la détection des erreurs dans la requête
    0
  10. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    voila donc j ai tout refais avec les idées bien claires et après une bonne sieste

    		$mysqli= new mysqli("localhost", "u43rle", "Ss02", "u434rle") ;
    		
    	if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    }
    		
    	
    	
    	if ($stmt = $mysqli->prepare( "INSERT INTO contact (name, email,  message,Avez_vous_deja_perler,seriez_vous_pret_a_sauter_le_pas,Trouvez_vous_des_perles_facilement,Connaissez_vous_des_perleurs,Que_penses_tu_de_mon_blog) VALUES ('" . $name. "', '" . $email. "','" . $messager. "' ,'" . $drone. "'  ,'" . $drone1. "'  ,'" . $drone3. "' ,'" . $drone4. "' ,'" . $drone5. "'            )");{
    	
    	$name = $_POST["name"];
    	$email = $_POST["email"];
    	//$subject = $_POST["subject"];
    	$messager = $_POST["messager"];
    	$drone = $_POST["drone"];
    	$drone1 = $_POST["drone1"];
    	
    	$drone3 = $_POST["drone3"];
    	$drone4 = $_POST["drone4"];
    	$drone5 = $_POST["drone5"];
    	
    	$stmt->bind_param("s", $name);
    $stmt->execute();  
    
    	$stmt->bind_param("s", email);
    $stmt->execute();  
    	
    	$stmt->bind_param("s", $messager);
    $stmt->execute();
    
    	$stmt->bind_param("s", $drone);
    $stmt->execute();
    	
    	$stmt->bind_param("s", $drone1);
    $stmt->execute();
    
    $stmt->bind_param("s", $drone3);
    $stmt->execute();
    	
    	$stmt->bind_param("s", $drone4);
    $stmt->execute();
    	
    	$stmt->bind_param("s", $drone5);
    $stmt->execute();
    	 mysqli_stmt_close($stmt);
    	 }
    	 
    	if($result){
    		$db_msg = "Vos informations de contact sont enregistrées avec succés.";
    		$type_db_msg = "success";
    	}else{
    		$db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
    		$type_db_msg = "error";
    	}
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Ton prépare ne sert à rien si tu y mets directement les variable PHP...
      Il faut utiliser les points d'interrogation si tu veux ensuite faire du bind...
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je ne peux que tu suggérer de faire une plus longue sieste.
      prends le temps d'étudier, de comprendre, et de tester.
      je ne pense pas te rendre service en te permettant d'avancer sans comprendre.
      0
  11. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    bonjour a tous
    merci pour les réponses , la patience de jordane et yg_be

    hier soir j ai cherche après des tutos et j ai fini par en trouver un qui me semble bien expliquer
    cette requête

    voici le lien
    http://sdz.tdct.org/sdz/maitrisez-mysqli-sans-poo.html

    voici donc la mienne

    $name = $_POST["name"];
     $email = $_POST["email"];
     //$subject = $_POST["subject"];
     $messager = $_POST["messager"];
     $drone = $_POST["drone"];
     $drone1 = $_POST["drone1"];
     
     $drone3 = $_POST["drone3"];
     $drone4 = $_POST["drone4"];
     $drone5 = $_POST["drone5"];
     $bdd = mysqli_connect("localhost", "u4eperle", "S2202", "u434600rle");
    
    /* Vérification de la connexion */
    if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
     }
     
    
    $req_pre = mysqli_prepare($bdd, "INSERT INTO contact (name, email,  message,Avez_vous_deja_perler,seriez_vous_pret_a_sauter_le_pas,Trouvez_vous_des_perles_facilement,Connaissez_vous_des_perleurs,Que_penses_tu_de_mon_blog) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
    mysqli_stmt_bind_param($req_pre, "ssssssss", $name, $email, $messager, $drone, $drone1, $drone3, $drone4, $drone5 );
    mysqli_stmt_execute($req_pre);
    
    if($req_pre){
      $db_msg = "Vos informations de contact sont enregistrées avec succès.";
      $type_db_msg = "success";
     }else{
      $db_msg = "Erreur lors de la tentative d'enregistrement de contact.";
      $type_db_msg = "error";
     }
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu te rapproches.
      reste à modifier le code pour vérifier si la ligne 21 fait bien son boulot.
      idem pour la ligne 22.
      le test en ligne 24 n'a guère de sens.
      0
  12. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci pour la reponse yg_be

    je suppose en m inspirant ce ceci comme exemple

    <?php
    
    mysqli_stmt_bind_result($req_pre, $donnees['pseudo'], $donnees['age'], $donnees['email']);
    while(mysqli_stmt_fetch($req_pre))
    {
     echo $donnees['pseudo'] . ", " . $donnees['age'] . " ans, " . $donnees['email'];
    }
    ?>
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu choisis tes exemples les yeux fermés?
      0
  13. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    mais non j ai regarder sur le tuto

    <?php
    // include de la connexion SQL.
    
    $req_pre = mysqli_prepare($bdd, 'SELECT * FROM membres WHERE age = ? LIMIT 0, ?');
    mysqli_stmt_bind_param($req_pre, "ii", $age, $nombre_resultat);
    mysqli_stmt_execute($req_pre);
    mysqli_stmt_bind_result($req_pre, $donnees['pseudo'], $donnees['age'], $donnees['email']);
    while(mysqli_stmt_fetch($req_pre))
    {
    	echo $donnees['pseudo'] . ", " . $donnees['age'] . " ans, " . $donnees['email'];
    }
    ?>
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il est préférable de choisir un exemple en adéquation avec la situation.
      0
  14. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci pour l aide
    je pense avoir trouve

    $name = $_POST["name"];
     $email = $_POST["email"];
     //$subject = $_POST["subject"];
     $messager = $_POST["messager"];
     $drone = $_POST["drone"];
     $drone1 = $_POST["drone1"];
     
     $drone3 = $_POST["drone3"];
     $drone4 = $_POST["drone4"];
     $drone5 = $_POST["drone5"];
     
    $bdd = mysqli_connect("localhost", "u43le", "S02", "u4rle");
    
    /* Vérification de la connexion */
    if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
     }
     
    
    $req_pre = mysqli_prepare($bdd, "INSERT INTO contact (name, email,  message,Avez_vous_deja_perler,seriez_vous_pret_a_sauter_le_pas,Trouvez_vous_des_perles_facilement,Connaissez_vous_des_perleurs,Que_penses_tu_de_mon_blog) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
    mysqli_stmt_bind_param($req_pre, "ssssssss", $name, $email, $messager, $drone, $drone1, $drone3, $drone4, $drone5 );
    mysqli_stmt_execute($req_pre);
    
    
      //Binding values in result to variables
       mysqli_stmt_bind_result($stmt, $name, $email, $messager, $drone, $drone1, $drone3, $drone4, $drone5 );
    
       while (mysqli_stmt_fetch($stmt)) {
          print("Id: ".$name."\n");
          print("fname: ".$email."\n");
          print("lname: ".$messager."\n");
          print("pob: ".$drone."\n");
          print("country: ".$drone1."\n");
       print("country: ".$drone3."\n");
       print("country: ".$drone4."\n");
       print("country: ".$drone5."\n");
          print("\n");
    
       }
       //Closing the statement
       mysqli_stmt_close($stmt);
    
       //Closing the connection
       mysqli_close($bdd);
    
    
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Comprends tu à quoi servent ses lignes de code :
      
        //Binding values in result to variables
         mysqli_stmt_bind_result($stmt, $name, $email, $messager, $drone, $drone1, $drone3, $drone4, $drone5 );
      
         while (mysqli_stmt_fetch($stmt)) {
            print("Id: ".$name."\n");
            print("fname: ".$email."\n");
            print("lname: ".$messager."\n");
            print("pob: ".$drone."\n");
            print("country: ".$drone1."\n");
         print("country: ".$drone3."\n");
         print("country: ".$drone4."\n");
         print("country: ".$drone5."\n");
            print("\n");
      
         }
      


      ????

      Si la réponse est oui... alors pourquoi les mettre ici ???
      Si la réponse est non... ben essaies de comprendre.... et tu verras qu'elles n'ont pas leur place dans ce code.
      0
  15. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    bonjour Jordane

    merci pour la réponse

    ben je suppose que cela retourne un résultat et les affiches
    pourtant c est bien ce que l exemple dans php fait

     /* Récupération des valeurs */
        mysqli_stmt_fetch($stmt);
    
        printf("%s est dans le district de %s\n", $city, $district);


    si cela n est pas la manière de vérifier les lignes 21 et 22
    alors je ne sais pas

    c est que tous les exemples que je trouve sont mauvais
    0
    1. Pierrecastor Messages postés 10830 Date d'inscription   Statut Modérateur Dernière intervention   4 215
       
      Salut,

      Je me permet juste un avis perso. Apprendre à coder en collant des bouts de codes pris à droite et à gauche sans savoir de qu'on fait exactement n'est pas une bonne méthode. Mieux vaut prendre un tuto ou un cours ou l'on part de zéro et on tape sois même le code dans des exercices de plus en plus complexe.
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Est-ce qu'une requête insert retourne quelque chose... ?
      0
  16. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    non cela ne retourne rien puisque on entre les données dans la table
    mais une fois insérée elles existent
    tu vas me dire que pour les lires il faut faire une requête
    donc oui ces lignes ne servent a rien

    donc du coup comment vérifier que les lignes de contrôle ont bien fonctionner ??
    dans tous les tutos que je suis allé voir
    personne ne les vérifie
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu veux contrôler quoi ?
      Si ta requête insert ne retourne pas d'erreur c'est qu'elle a fonctionnée...
      Et pour savoir si ta requête a retourné une erreur ou non il faut regarder si il y a une erreur via
      mysqli_stmt_error($stmt); 

      Tu trouveras des exemples sur internet sans trop de difficultés.
      À toi de les lire et d'essayer de les comprendre avant de les utiliser
      0
  17. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci jordane pour la reponse

    je veux contrôler si tout c est bien passe avec la variable $stmt

    en effet une fois que l on a le code il est tres facile de trouver des exemples

    donc dans mon cas je ne dois juste faire qu une seule vérification que la variable n'a trouve aucune erreur lors de l insertion des données dans la table

    donc la logique devrait que je dois ajouter ceci après l execute

    de telle façon a afficher les erreurs si il y a une erreur

       printf("Erreur : %s.\n", mysqli_stmt_error($stmt));
    
        /* Ferme la commande */
        mysqli_stmt_close($stmt);
    }
    
    /* Ferme la connexion */
    mysqli_close($bdd);
    0
  18. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    voila j ai enfin réussi et j ai corriger des erreurs
    et tout ce passe bien

    tout est parti dans al base de donnee

    si c est cela
    c est vrai qu une fois que cela a été fais une fois
    que tout est compréhensible et que quand on relis la documentation de php
    tout es clair
    $name = $_POST["name"];
    	$email = $_POST["email"];
    	//$subject = $_POST["subject"];
    	$messager = $_POST["messager"];
    	$drone = $_POST["drone"];
    	$drone1 = $_POST["drone1"];
    $drone3 = $_POST["drone3"];
    	$drone4 = $_POST["drone4"];
    	$drone5 = $_POST["drone5"];
    $bdd = mysqli_connect("localhost", "u45_pecheperle", "Ssa02", "u434erle");
    /* Vérification de la connexion */
    if (mysqli_connect_errno()) {
        printf("Échec de la connexion : %s\n", mysqli_connect_error());
        exit();
    	}
    		
    $req_pre = mysqli_prepare($bdd, "INSERT INTO contact (name, email,  message,Avez_vous_deja_perler,seriez_vous_pret_a_sauter_le_pas,Trouvez_vous_des_perles_facilement,Connaissez_vous_des_perleurs,Que_penses_tu_de_mon_blog) VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
    mysqli_stmt_bind_param($req_pre, "ssssssss", $name, $email, $messager, $drone, $drone1, $drone3, $drone4, $drone5 );
    mysqli_stmt_execute($req_pre);
       printf("Erreur : %s.\n", mysqli_stmt_error($req_pre));
        /* Ferme la commande */
        mysqli_stmt_close($req_pre);
    /* Ferme la connexion */
    mysqli_close($bdd);
    0
  19. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    du coup j ai fait des tests et tout passe bien je n ai aucune erreur
    avant de pouvoir l appliquer sur ton mon site
    je souhaiterais savoir si cela est ok a present
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu as du code en double
          /* Ferme la commande */
          mysqli_stmt_close($req_pre);
      /* Ferme la connexion */
      mysqli_close($bdd);
      


      Dans l'idéal, il faut placer le code de connexion à la bdd ans un fichier à part et l'inclure dans les pages dans lesquelles tu en as besoin au lieu de recopier ces lignes de code à chaque fois.

      Et il serait bien de récupérer "proprement" les variables AVANT de les utiliser.
      Pour rappel :
      https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
      0
  20. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    merci jordane pour ce complément d information
    c'est vrai que la connexion devrait ne pas ce trouvez la

    je vais devenir un champion a la longe mdrrrr

    alors pour ce qui est du code en double
    voici un extrait de php

     
    
        /* Ferme la commande */
        mysqli_stmt_close($stmt);
    
    
    /* Ferme la connexion */
    mysqli_close($link);


    donc on fait comment ?
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      au temps pour moi;
      j'ai lu un peu vite.

      Il est vrai que je ne ferme jamais la connexion à la bdd ( en même temps je n'utilise pas mysqli mais PDO )
      Donc, oui, tu peux laisser
      0
  21. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     
    parfait merci jordane

    tu vois que j apprends
    très doucement mais ...
    je suppose que l on blind que les champs ou l utilisateur sait entrer des données
    pour des boutons radios , des checbox pas de blinder ?

    faut il faire autre chose pour sécuriser sa connexion , sa base de donnée ?
    son site en général ??
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Il faut binder à chaque fois que les données proviennent de $_POST, $_GET, $_SESSION
      que ça soit pour des requête de type INSERT, UPDATE, DELETE ou SELECT (dans le where )
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Il me semble prudent de binder toutes les variables, même celles qui semblent protégées de toute influence malveillante.
        Le programme peut évoluer, ou ne pas toujours se comporter comme le programmeur l'imagine.

        Autres précautions:
        - ne pas afficher les messages d'erreurs techniques, de PHP ou autres: cela peut donner des indices aux pirates: n'afficher que des messages neutres. Cela inclut donc de ne pas afficher, en dehors des tests, les erreurs de syntaxe PHP que Jordane te recommandait d'afficher quand tu testais.
        - en cas de vérification de mot de passe, ne jamais préciser si l'erreur vient du nom d'utilisateur ou du mot de passe, cela aide à deviner une combinaison correcte.
        - utiliser les variables de session pour mémoriser des informations sensibles entre les pages, jamais un formulaire, un lien ou un cookie, tout cela étant facile à pirater.
        0
  • 1
  • 2