Besoin d aide pour sécuriser mon site [Résolu]

Signaler
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
-
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
-
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

Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
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.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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);
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
de toute évidence, tu n'as pas utilisé la technique de requête préparée.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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();
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138 >
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021

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
Messages postés
38629
Date d'inscription
mercredi 5 novembre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 817 >
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021

Salut,

Un topic passé en résolu n'est pas clôturé, on peut tout à fait continuer à poser des questions dessus.
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
c'est en effet un bon exemple d'utilisation de requête préparée.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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...
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
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"
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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 !
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
Non
Là ça n'a rien à voir avec les requête préparées....
Oubli ces deux lignes de code...
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
où est le prepare?
relis ma remarque en #3.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138 >
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021

merci yg_be

je l vais oublie celui la
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
merci jordane

donc pour le reste tout est bon dans mon code ?

sauf la détection des erreurs dans la requête
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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";
	}
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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...
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
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.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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";
 }
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
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.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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'];
}
?>
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
tu choisis tes exemples les yeux fermés?
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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'];
}
?>
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
il est préférable de choisir un exemple en adéquation avec la situation.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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);

Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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.
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
38629
Date d'inscription
mercredi 5 novembre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 817
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.
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
Est-ce qu'une requête insert retourne quelque chose... ?
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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);
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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);
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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 ?
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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
Messages postés
2905
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
12 juin 2021
138
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 ??
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021
3 557
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 )
Messages postés
15996
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867 >
Messages postés
32943
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juin 2021

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.