Besoin d aide pour sécuriser mon site

Résolu/Fermé
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 - Modifié le 18 mai 2021 à 08:07
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 - 19 mai 2021 à 20:07
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
A voir également:

23 réponses

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
18 mai 2021 à 08:19
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 08:56
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
18 mai 2021 à 09:09
de toute évidence, tu n'as pas utilisé la technique de requête préparée.
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 09:43
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 mai 2021 à 10:06
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
18 mai 2021 à 10:36
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
Pierrecastor Messages postés 41466 Date d'inscription mercredi 5 novembre 2003 Statut Modérateur Dernière intervention 5 avril 2024 4 131 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
18 mai 2021 à 17:22
Salut,

Un topic passé en résolu n'est pas clôturé, on peut tout à fait continuer à poser des questions dessus.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
18 mai 2021 à 10:07
c'est en effet un bon exemple d'utilisation de requête préparée.
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 18 mai 2021 à 10:32
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 mai 2021 à 10:45
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 11:52
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 mai 2021 à 12:26
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 16:19
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
18 mai 2021 à 16:31
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 mai 2021 à 16:31
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 17:10
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 mai 2021 à 17:13
Non
Là ça n'a rien à voir avec les requête préparées....
Oubli ces deux lignes de code...
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
18 mai 2021 à 18:19
où est le prepare?
relis ma remarque en #3.
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
18 mai 2021 à 19:58
merci yg_be

je l vais oublie celui la
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 17:30
merci jordane

donc pour le reste tout est bon dans mon code ?

sauf la détection des erreurs dans la requête
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
18 mai 2021 à 19:59
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
18 mai 2021 à 20:02
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
18 mai 2021 à 20:05
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 19 mai 2021 à 08:10
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
19 mai 2021 à 09:07
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 19 mai 2021 à 09:16
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
19 mai 2021 à 09:27
tu choisis tes exemples les yeux fermés?
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 09:28
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
19 mai 2021 à 10:11
il est préférable de choisir un exemple en adéquation avec la situation.
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 19 mai 2021 à 10:55
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 mai 2021 à 11:24
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 11:32
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
Pierrecastor Messages postés 41466 Date d'inscription mercredi 5 novembre 2003 Statut Modérateur Dernière intervention 5 avril 2024 4 131
19 mai 2021 à 11:41
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 mai 2021 à 11:41
Est-ce qu'une requête insert retourne quelque chose... ?
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 11:54
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 19 mai 2021 à 12:08
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 12:36
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 13:10
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 17:19
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 mai 2021 à 17:32
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 17:46
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 mai 2021 à 17:59
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
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
19 mai 2021 à 18:09
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
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
19 mai 2021 à 18:12
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
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
19 mai 2021 à 18:41
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